123179Smckusick /* 223179Smckusick * Copyright (c) 1982 Regents of the University of California. 323179Smckusick * All rights reserved. The Berkeley software License Agreement 423179Smckusick * specifies the terms and conditions for redistribution. 523179Smckusick * 6*23744Skarels * @(#)in_proto.c 6.9 (Berkeley) 06/24/85 723179Smckusick */ 87618Sroot 917059Sbloom #include "param.h" 1017059Sbloom #include "socket.h" 1117059Sbloom #include "protosw.h" 1217059Sbloom #include "domain.h" 1317059Sbloom #include "mbuf.h" 147618Sroot 1517059Sbloom #include "in.h" 1617059Sbloom #include "in_systm.h" 179030Sroot 187618Sroot /* 197618Sroot * TCP/IP protocol family: IP, ICMP, UDP, TCP. 207618Sroot */ 217618Sroot int ip_output(); 227618Sroot int ip_init(),ip_slowtimo(),ip_drain(); 237618Sroot int icmp_input(); 247618Sroot int udp_input(),udp_ctlinput(); 257618Sroot int udp_usrreq(); 267618Sroot int udp_init(); 277618Sroot int tcp_input(),tcp_ctlinput(); 287618Sroot int tcp_usrreq(); 297618Sroot int tcp_init(),tcp_fasttimo(),tcp_slowtimo(),tcp_drain(); 307618Sroot int rip_input(),rip_output(); 317620Sroot extern int raw_usrreq(); 327618Sroot /* 337618Sroot * IMP protocol family: raw interface. 347618Sroot * Using the raw interface entry to get the timer routine 357618Sroot * in is a kludge. 367618Sroot */ 377618Sroot #include "imp.h" 387618Sroot #if NIMP > 0 397618Sroot int rimp_output(), hostslowtimo(); 407618Sroot #endif 417618Sroot 4221771Skarels #ifdef NSIP 4321771Skarels int idpip_input(); 4421771Skarels #endif 4521771Skarels 4616990Skarels extern struct domain inetdomain; 4716990Skarels 487618Sroot struct protosw inetsw[] = { 4916990Skarels { 0, &inetdomain, 0, 0, 507618Sroot 0, ip_output, 0, 0, 517618Sroot 0, 527618Sroot ip_init, 0, ip_slowtimo, ip_drain, 537618Sroot }, 5416990Skarels { SOCK_DGRAM, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR, 557618Sroot udp_input, 0, udp_ctlinput, 0, 567618Sroot udp_usrreq, 577618Sroot udp_init, 0, 0, 0, 587618Sroot }, 5916990Skarels { SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD, 607618Sroot tcp_input, 0, tcp_ctlinput, 0, 617618Sroot tcp_usrreq, 627618Sroot tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain, 637618Sroot }, 6416990Skarels { SOCK_RAW, &inetdomain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR, 657618Sroot rip_input, rip_output, 0, 0, 667618Sroot raw_usrreq, 677618Sroot 0, 0, 0, 0, 687618Sroot }, 6921771Skarels { SOCK_RAW, &inetdomain, IPPROTO_ICMP, PR_ATOMIC|PR_ADDR, 7021771Skarels icmp_input, rip_output, 0, 0, 7116797Skarels raw_usrreq, 7216797Skarels 0, 0, 0, 0, 7316797Skarels }, 7421771Skarels #ifdef NSIP 7521771Skarels { SOCK_RAW, &inetdomain, IPPROTO_PUP, PR_ATOMIC|PR_ADDR, 7621771Skarels idpip_input, rip_output, 0, 0, 7716052Skarels raw_usrreq, 7816052Skarels 0, 0, 0, 0, 7916052Skarels }, 8021771Skarels #endif 8121771Skarels /* raw wildcard */ 8221771Skarels { SOCK_RAW, &inetdomain, 0, PR_ATOMIC|PR_ADDR, 8321771Skarels rip_input, rip_output, 0, 0, 8421771Skarels raw_usrreq, 8521771Skarels 0, 0, 0, 0, 8621771Skarels }, 877620Sroot }; 887620Sroot 897620Sroot struct domain inetdomain = 9016990Skarels { AF_INET, "internet", 0, 0, 0, 9116990Skarels inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])] }; 927620Sroot 937618Sroot #if NIMP > 0 9416990Skarels extern struct domain impdomain; 9516990Skarels 967620Sroot struct protosw impsw[] = { 9716990Skarels { SOCK_RAW, &impdomain, 0, PR_ATOMIC|PR_ADDR, 987618Sroot 0, rimp_output, 0, 0, 997618Sroot raw_usrreq, 1007618Sroot 0, 0, hostslowtimo, 0, 1017620Sroot }, 1027618Sroot }; 1037618Sroot 1047620Sroot struct domain impdomain = 10516990Skarels { AF_IMPLINK, "imp", 0, 0, 0, 10616990Skarels impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] }; 1077620Sroot #endif 108*23744Skarels 109*23744Skarels #include "hy.h" 110*23744Skarels #if NHY > 0 111*23744Skarels /* 112*23744Skarels * HYPERchannel protocol family: raw interface. 113*23744Skarels */ 114*23744Skarels int rhy_output(); 115*23744Skarels 116*23744Skarels struct protosw hysw[] = { 117*23744Skarels { SOCK_RAW, PF_HYLINK, 0, PR_ATOMIC|PR_ADDR, 118*23744Skarels 0, rhy_output, 0, 0, 119*23744Skarels raw_usrreq, 120*23744Skarels 0, 0, 0, 0, 121*23744Skarels }, 122*23744Skarels }; 123*23744Skarels 124*23744Skarels struct domain hydomain = 125*23744Skarels { AF_HYLINK, "hy", hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] }; 126*23744Skarels #endif 127