1*25202Skarels 2*25202Skarels #include "../h/param.h" 3*25202Skarels #include "../h/socket.h" 4*25202Skarels #include "../h/protosw.h" 5*25202Skarels #include "../h/domain.h" 6*25202Skarels #include "../h/mbuf.h" 7*25202Skarels 8*25202Skarels #include "../net/route.h" 9*25202Skarels #include "../net/raw_cb.h" 10*25202Skarels 11*25202Skarels #include "../bbnnet/in.h" 12*25202Skarels #include "../bbnnet/in_pcb.h" 13*25202Skarels 14*25202Skarels /* 15*25202Skarels * Internet protocols 16*25202Skarels */ 17*25202Skarels 18*25202Skarels int raw_init(), raw_usrreq(); 19*25202Skarels 20*25202Skarels /* IP */ 21*25202Skarels int ip_init(),ip_timeo(),ip_drain(); 22*25202Skarels int ip_send(), ip_ctloutput(); 23*25202Skarels int raw_ip_input(), raw_ip_output(); 24*25202Skarels 25*25202Skarels /* ICMP */ 26*25202Skarels int icmp(), ic_timeo(); 27*25202Skarels int raw_icmp_output(); 28*25202Skarels 29*25202Skarels /* UDP */ 30*25202Skarels int udp_input(); 31*25202Skarels int udp_usrreq(), udp_init(), udp_ctlinput(); 32*25202Skarels int raw_udp_output(); 33*25202Skarels 34*25202Skarels /* TCP */ 35*25202Skarels int tcp_input(); 36*25202Skarels int tcp_usrreq(), tcp_ctlinput(), tcp_ctloutput(); 37*25202Skarels int tcp_init(), tcp_timeo(), tcp_drain(); 38*25202Skarels int raw_tcp_output(); 39*25202Skarels 40*25202Skarels /* RDP */ 41*25202Skarels #ifdef RDP 42*25202Skarels int rdp_input(), rdp_init(), rdp_timeo(), rdp_usrreq(); 43*25202Skarels int rdp_ctlinput(), rdp_ctloutput(); 44*25202Skarels int raw_rdp_output(); 45*25202Skarels #endif 46*25202Skarels 47*25202Skarels /* HMP */ 48*25202Skarels #ifdef HMP 49*25202Skarels int hmp_input(), hmp_init(), hmp_usrreq(); 50*25202Skarels int hmp_ctlinput(), hmp_ctloutput(); 51*25202Skarels int raw_hmp_output(); 52*25202Skarels #endif 53*25202Skarels 54*25202Skarels /* 55*25202Skarels * IMP protocol family: raw interface. 56*25202Skarels * Using the raw interface entry to get the timer routine 57*25202Skarels * in is a kludge. 58*25202Skarels */ 59*25202Skarels #include "imp.h" 60*25202Skarels #if NIMP > 0 61*25202Skarels int rimp_output(), hostslowtimo(); 62*25202Skarels #endif 63*25202Skarels 64*25202Skarels #ifdef NSIP 65*25202Skarels int idpip_input(), rip_output(); 66*25202Skarels #endif 67*25202Skarels 68*25202Skarels extern struct domain inetdomain; 69*25202Skarels 70*25202Skarels struct protosw inetsw[] = { 71*25202Skarels { 0, &inetdomain, 0, 0, 72*25202Skarels 0, ip_send, 0, ip_ctloutput, 73*25202Skarels 0, 74*25202Skarels ip_init, 0, ip_timeo, ip_drain 75*25202Skarels }, 76*25202Skarels 77*25202Skarels /* 78*25202Skarels * put frequently used protocols early. Table is beginning to get large.. 79*25202Skarels */ 80*25202Skarels 81*25202Skarels /* UDP */ 82*25202Skarels { SOCK_DGRAM, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR, 83*25202Skarels udp_input, 0, udp_ctlinput, ip_ctloutput, 84*25202Skarels udp_usrreq, 85*25202Skarels udp_init, 0, 0, 0 86*25202Skarels }, 87*25202Skarels 88*25202Skarels /* TCP */ 89*25202Skarels { SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD, 90*25202Skarels tcp_input, 0, tcp_ctlinput, tcp_ctloutput, 91*25202Skarels tcp_usrreq, 92*25202Skarels tcp_init, 0, tcp_timeo, tcp_drain 93*25202Skarels }, 94*25202Skarels 95*25202Skarels /* RDP */ 96*25202Skarels #ifdef RDP 97*25202Skarels { SOCK_SEQPACKET, &inetdomain, IPPROTO_RDP, PR_CONNREQUIRED|PR_WANTRCVD, 98*25202Skarels rdp_input, 0, rdp_ctlinput, rdp_ctloutput, 99*25202Skarels rdp_usrreq, 100*25202Skarels rdp_init, 0, rdp_timeo, 0 101*25202Skarels }, 102*25202Skarels #endif 103*25202Skarels 104*25202Skarels /* HMP */ 105*25202Skarels #ifdef HMP 106*25202Skarels { SOCK_DGRAM, &inetdomain, IPPROTO_HMP, PR_ATOMIC|PR_ADDR, 107*25202Skarels hmp_input, 0, hmp_ctlinput, hmp_ctloutput, 108*25202Skarels hmp_usrreq, 109*25202Skarels hmp_init, 0, 0, 0 110*25202Skarels }, 111*25202Skarels #endif 112*25202Skarels 113*25202Skarels #ifdef NSIP 114*25202Skarels { SOCK_RAW, &inetdomain, IPPROTO_IDP, PR_ATOMIC|PR_ADDR, 115*25202Skarels idpip_input, rip_output, 0, 0, 116*25202Skarels raw_usrreq, 117*25202Skarels 0, 0, 0, 0 118*25202Skarels }, 119*25202Skarels #endif 120*25202Skarels 121*25202Skarels /* 122*25202Skarels * to get all incoming IP packets: 123*25202Skarels * socket(AF_INET,SOCK_RAW,0) 124*25202Skarels */ 125*25202Skarels { SOCK_RAW, &inetdomain, 0, PR_ATOMIC|PR_ADDR, 126*25202Skarels raw_ip_input, raw_ip_output, 0, 0, 127*25202Skarels raw_usrreq, 128*25202Skarels raw_init, 0, 0, 0 129*25202Skarels }, 130*25202Skarels 131*25202Skarels /* 132*25202Skarels * to get all incoming ICMP packets: 133*25202Skarels * socket(AF_INET,SOCK_RAW, IPPROTO_ICMP) 134*25202Skarels */ 135*25202Skarels { SOCK_RAW, &inetdomain, IPPROTO_ICMP, PR_ATOMIC|PR_ADDR, 136*25202Skarels raw_ip_input, raw_icmp_output,0, 0, 137*25202Skarels raw_usrreq, 138*25202Skarels 0, 0, ic_timeo, 0 139*25202Skarels }, 140*25202Skarels 141*25202Skarels #ifdef RDP 142*25202Skarels /* 143*25202Skarels * to get all incoming RDP packets: 144*25202Skarels * socket(AF_INET,SOCK_RAW, IPPROTO_RDP) 145*25202Skarels */ 146*25202Skarels { SOCK_RAW, &inetdomain, IPPROTO_RDP, PR_ATOMIC|PR_ADDR, 147*25202Skarels raw_ip_input, raw_rdp_output, 0, 0, 148*25202Skarels raw_usrreq, 149*25202Skarels 0, 0, 0, 0 150*25202Skarels }, 151*25202Skarels #endif 152*25202Skarels 153*25202Skarels /* 154*25202Skarels * to get all incoming UDP packets: 155*25202Skarels * socket(AF_INET, SOCK_RAW, IPPROTO_UDP); 156*25202Skarels */ 157*25202Skarels { SOCK_RAW, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR, 158*25202Skarels raw_ip_input, raw_udp_output, 0, 0, 159*25202Skarels raw_usrreq, 160*25202Skarels 0, 0, 0, 0 161*25202Skarels }, 162*25202Skarels 163*25202Skarels #ifdef HMP 164*25202Skarels /* 165*25202Skarels * to get all incoming HMP packets: 166*25202Skarels * socket(AF_INET,SOCK_RAW, IPPROTO_HMP); 167*25202Skarels */ 168*25202Skarels { SOCK_RAW, &inetdomain, IPPROTO_HMP, PR_ATOMIC|PR_ADDR, 169*25202Skarels raw_ip_input, raw_hmp_output, 0, 0, 170*25202Skarels raw_usrreq, 171*25202Skarels 0, 0, 0, 0 172*25202Skarels }, 173*25202Skarels #endif 174*25202Skarels 175*25202Skarels /* 176*25202Skarels * to get all TCP packets: 177*25202Skarels * socket(AF_INET, SOCK_RAW, IPPROTO_TCP); 178*25202Skarels */ 179*25202Skarels { SOCK_RAW, &inetdomain, IPPROTO_TCP, PR_ATOMIC|PR_ADDR, 180*25202Skarels raw_ip_input, raw_tcp_output, 0, 0, 181*25202Skarels raw_usrreq, 182*25202Skarels 0, 0, 0, 0 183*25202Skarels }, 184*25202Skarels }; 185*25202Skarels 186*25202Skarels struct domain inetdomain = 187*25202Skarels { AF_INET, "internet", 0, 0, 0, 188*25202Skarels inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])] }; 189*25202Skarels 190*25202Skarels #if NIMP > 0 191*25202Skarels extern struct domain impdomain; 192*25202Skarels 193*25202Skarels struct protosw impsw[] = { 194*25202Skarels { SOCK_RAW, &impdomain, 0, PR_ATOMIC|PR_ADDR, 195*25202Skarels 0, rimp_output, 0, 0, 196*25202Skarels raw_usrreq, 197*25202Skarels 0, 0, hostslowtimo, 0 198*25202Skarels }, 199*25202Skarels }; 200*25202Skarels 201*25202Skarels struct domain impdomain = 202*25202Skarels { AF_IMPLINK, "imp", 0, 0, 0, 203*25202Skarels impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] }; 204*25202Skarels #endif 205*25202Skarels 206*25202Skarels #include "hy.h" 207*25202Skarels #if NHY > 0 208*25202Skarels /* 209*25202Skarels * HYPERchannel protocol family: raw interface. 210*25202Skarels */ 211*25202Skarels int rhy_output(); 212*25202Skarels 213*25202Skarels struct protosw hysw[] = { 214*25202Skarels { SOCK_RAW, PF_HYLINK, 0, PR_ATOMIC|PR_ADDR, 215*25202Skarels 0, rhy_output, 0, 0, 216*25202Skarels raw_usrreq, 217*25202Skarels 0, 0, 0, 0 218*25202Skarels }, 219*25202Skarels }; 220*25202Skarels 221*25202Skarels struct domain hydomain = 222*25202Skarels { AF_HYLINK, "hy", hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] }; 223*25202Skarels #endif 224*25202Skarels 225*25202Skarels #define N_ELEMENTS(x) (sizeof(x)/sizeof((x)[0])) 226*25202Skarels 227*25202Skarels #ifdef AF_RDPDEBUG 228*25202Skarels struct protosw rdpdebugsw[] = { 229*25202Skarels { SOCK_RAW, PF_RDPDEBUG, 0, PR_ATOMIC|PR_ADDR, 230*25202Skarels 0,0,0,0, 231*25202Skarels raw_usrreq, 232*25202Skarels 0,0,0,0} 233*25202Skarels }; 234*25202Skarels struct domain rdpdebugdomain = 235*25202Skarels { AF_RDPDEBUG, "rdpdebug", rdpdebugsw, &rdpdebugsw[N_ELEMENTS(rdpdebugsw)] }; 236*25202Skarels #endif 237*25202Skarels 238*25202Skarels #ifdef AF_TCPDEBUG 239*25202Skarels struct protosw tcpdebugsw[] = { 240*25202Skarels { SOCK_RAW, PF_TCPDEBUG, 0, PR_ATOMIC|PR_ADDR, 241*25202Skarels 0,0,0,0, 242*25202Skarels raw_usrreq, 243*25202Skarels 0,0,0,0} 244*25202Skarels }; 245*25202Skarels struct domain tcpdebugdomain = 246*25202Skarels { AF_TCPDEBUG, "tcpdebug", tcpdebugsw, &tcpdebugsw[N_ELEMENTS(tcpdebugsw)] }; 247*25202Skarels #endif 248