xref: /csrg-svn/sys/net/if_loop.c (revision 5122)
1*5122Swnj /*	if_loop.c	4.1	81/11/29	*/
2*5122Swnj 
3*5122Swnj /*
4*5122Swnj  * Loopback interface driver for protocol testing and timing.
5*5122Swnj  */
6*5122Swnj 
7*5122Swnj #include "../h/param.h"
8*5122Swnj #include "../h/systm.h"
9*5122Swnj #include "../h/mbuf.h"
10*5122Swnj #include "../h/socket.h"
11*5122Swnj #include "../net/in.h"
12*5122Swnj #include "../net/in_systm.h"
13*5122Swnj #include "../net/if.h"
14*5122Swnj #include "../net/ip.h"
15*5122Swnj #include "../net/ip_var.h"
16*5122Swnj #include "../h/mtpr.h"
17*5122Swnj 
18*5122Swnj #define	LONET	254
19*5122Swnj #define	LOMTU	1024
20*5122Swnj 
21*5122Swnj struct	ifnet loif;
22*5122Swnj int	looutput();
23*5122Swnj 
24*5122Swnj loattach()
25*5122Swnj {
26*5122Swnj 	register struct ifnet *ifp = &loif;
27*5122Swnj 
28*5122Swnj 	ifp->if_mtu = LOMTU;
29*5122Swnj 	ifp->if_net = LONET;
30*5122Swnj 	ifp->if_output = looutput;
31*5122Swnj 	ifp->if_next = ifnet;
32*5122Swnj 	ifnet = ifp;
33*5122Swnj }
34*5122Swnj 
35*5122Swnj looutput(ifp, m0, pf)
36*5122Swnj 	struct ifnet *ifp;
37*5122Swnj 	struct mbuf *m0;
38*5122Swnj 	int pf;
39*5122Swnj {
40*5122Swnj 	int s = splimp();
41*5122Swnj 
42*5122Swnj 	switch (pf) {
43*5122Swnj 
44*5122Swnj #ifdef INET
45*5122Swnj 	case PF_INET:
46*5122Swnj 		IF_ENQUEUE(&ipintrq, m0);
47*5122Swnj 		setipintr();
48*5122Swnj 		break;
49*5122Swnj #endif
50*5122Swnj 
51*5122Swnj 	default:
52*5122Swnj 		splx(s);
53*5122Swnj 		printf("lo%d: can't encapsulate pf%d\n", ifp->if_unit, pf);
54*5122Swnj 		m_freem(m0);
55*5122Swnj 		return (0);
56*5122Swnj 	}
57*5122Swnj 	splx(s);
58*5122Swnj 	return (1);
59*5122Swnj }
60