1*5161Swnj /* if_loop.c 4.2 81/12/02 */ 25122Swnj 35122Swnj /* 45122Swnj * Loopback interface driver for protocol testing and timing. 55122Swnj */ 65122Swnj 75122Swnj #include "../h/param.h" 85122Swnj #include "../h/systm.h" 95122Swnj #include "../h/mbuf.h" 105122Swnj #include "../h/socket.h" 115122Swnj #include "../net/in.h" 125122Swnj #include "../net/in_systm.h" 135122Swnj #include "../net/if.h" 145122Swnj #include "../net/ip.h" 155122Swnj #include "../net/ip_var.h" 165122Swnj #include "../h/mtpr.h" 175122Swnj 185122Swnj #define LONET 254 195122Swnj #define LOMTU 1024 205122Swnj 215122Swnj struct ifnet loif; 225122Swnj int looutput(); 235122Swnj 245122Swnj loattach() 255122Swnj { 265122Swnj register struct ifnet *ifp = &loif; 275122Swnj 285122Swnj ifp->if_mtu = LOMTU; 295122Swnj ifp->if_net = LONET; 305122Swnj ifp->if_output = looutput; 315122Swnj ifp->if_next = ifnet; 32*5161Swnj if_attach(ifp); 335122Swnj } 345122Swnj 355122Swnj looutput(ifp, m0, pf) 365122Swnj struct ifnet *ifp; 375122Swnj struct mbuf *m0; 385122Swnj int pf; 395122Swnj { 405122Swnj int s = splimp(); 415122Swnj 425122Swnj switch (pf) { 435122Swnj 445122Swnj #ifdef INET 455122Swnj case PF_INET: 465122Swnj IF_ENQUEUE(&ipintrq, m0); 475122Swnj setipintr(); 485122Swnj break; 495122Swnj #endif 505122Swnj 515122Swnj default: 525122Swnj splx(s); 535122Swnj printf("lo%d: can't encapsulate pf%d\n", ifp->if_unit, pf); 545122Swnj m_freem(m0); 555122Swnj return (0); 565122Swnj } 575122Swnj splx(s); 585122Swnj return (1); 595122Swnj } 60