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