123179Smckusick /* 263218Sbostic * Copyright (c) 1982, 1986, 1993 363218Sbostic * The Regents of the University of California. All rights reserved. 423179Smckusick * 544476Sbostic * %sccs.include.redist.c% 632787Sbostic * 7*68256Scgd * @(#)in_proto.c 8.2 (Berkeley) 02/09/95 823179Smckusick */ 97618Sroot 1056531Sbostic #include <sys/param.h> 1156531Sbostic #include <sys/socket.h> 1256531Sbostic #include <sys/protosw.h> 1356531Sbostic #include <sys/domain.h> 1456531Sbostic #include <sys/mbuf.h> 157618Sroot 1661335Sbostic #include <net/if.h> 1761335Sbostic #include <net/radix.h> 1861335Sbostic #include <net/route.h> 1961335Sbostic 2056531Sbostic #include <netinet/in.h> 2156531Sbostic #include <netinet/in_systm.h> 2261335Sbostic #include <netinet/ip.h> 2361335Sbostic #include <netinet/ip_var.h> 2461335Sbostic #include <netinet/ip_icmp.h> 2561335Sbostic #include <netinet/in_pcb.h> 2661335Sbostic #include <netinet/igmp_var.h> 2761335Sbostic #include <netinet/tcp.h> 2861335Sbostic #include <netinet/tcp_fsm.h> 2961335Sbostic #include <netinet/tcp_seq.h> 3061335Sbostic #include <netinet/tcp_timer.h> 3161335Sbostic #include <netinet/tcp_var.h> 3261335Sbostic #include <netinet/tcpip.h> 3361335Sbostic #include <netinet/tcp_debug.h> 3461335Sbostic #include <netinet/udp.h> 3561335Sbostic #include <netinet/udp_var.h> 367618Sroot /* 377618Sroot * TCP/IP protocol family: IP, ICMP, UDP, TCP. 387618Sroot */ 397618Sroot 4021771Skarels #ifdef NSIP 4161335Sbostic void idpip_input(), nsip_ctlinput(); 4221771Skarels #endif 4321771Skarels 4437471Ssklower #ifdef TPIP 45*68256Scgd void tpip_input(), tpip_ctlinput(), tp_init(), tp_slowtimo(), tp_drain(); 46*68256Scgd int tp_ctloutput(), tp_usrreq(); 4737471Ssklower #endif 4837471Ssklower 4937471Ssklower #ifdef EON 5061335Sbostic void eoninput(), eonctlinput(), eonprotoinit(); 5157433Sandrew #endif /* EON */ 5237471Ssklower 5316990Skarels extern struct domain inetdomain; 5416990Skarels 557618Sroot struct protosw inetsw[] = { 5616990Skarels { 0, &inetdomain, 0, 0, 577618Sroot 0, ip_output, 0, 0, 587618Sroot 0, 5959134Smckusick ip_init, 0, ip_slowtimo, ip_drain, ip_sysctl 607618Sroot }, 6116990Skarels { SOCK_DGRAM, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR, 6224809Skarels udp_input, 0, udp_ctlinput, ip_ctloutput, 637618Sroot udp_usrreq, 6459309Smckusick udp_init, 0, 0, 0, udp_sysctl 657618Sroot }, 6616990Skarels { SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD, 6724809Skarels tcp_input, 0, tcp_ctlinput, tcp_ctloutput, 687618Sroot tcp_usrreq, 697618Sroot tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain, 707618Sroot }, 7116990Skarels { SOCK_RAW, &inetdomain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR, 7226026Skarels rip_input, rip_output, 0, rip_ctloutput, 7337471Ssklower rip_usrreq, 747618Sroot 0, 0, 0, 0, 757618Sroot }, 7621771Skarels { SOCK_RAW, &inetdomain, IPPROTO_ICMP, PR_ATOMIC|PR_ADDR, 7726026Skarels icmp_input, rip_output, 0, rip_ctloutput, 7837471Ssklower rip_usrreq, 7959134Smckusick 0, 0, 0, 0, icmp_sysctl 8016797Skarels }, 8157433Sandrew { SOCK_RAW, &inetdomain, IPPROTO_IGMP, PR_ATOMIC|PR_ADDR, 8257433Sandrew igmp_input, rip_output, 0, rip_ctloutput, 8357433Sandrew rip_usrreq, 8457433Sandrew igmp_init, igmp_fasttimo, 0, 0, 8557433Sandrew }, 8637471Ssklower #ifdef TPIP 8737471Ssklower { SOCK_SEQPACKET,&inetdomain, IPPROTO_TP, PR_CONNREQUIRED|PR_WANTRCVD, 8854716Ssklower tpip_input, 0, tpip_ctlinput, tp_ctloutput, 8937471Ssklower tp_usrreq, 9037471Ssklower tp_init, 0, tp_slowtimo, tp_drain, 9137471Ssklower }, 9237471Ssklower #endif 9337471Ssklower /* EON (ISO CLNL over IP) */ 9437471Ssklower #ifdef EON 9537471Ssklower { SOCK_RAW, &inetdomain, IPPROTO_EON, 0, 9637471Ssklower eoninput, 0, eonctlinput, 0, 9737471Ssklower 0, 9837471Ssklower eonprotoinit, 0, 0, 0, 9937471Ssklower }, 10037471Ssklower #endif 10121771Skarels #ifdef NSIP 10224231Skarels { SOCK_RAW, &inetdomain, IPPROTO_IDP, PR_ATOMIC|PR_ADDR, 10325056Ssklower idpip_input, rip_output, nsip_ctlinput, 0, 10437471Ssklower rip_usrreq, 10516052Skarels 0, 0, 0, 0, 10616052Skarels }, 10721771Skarels #endif 10821771Skarels /* raw wildcard */ 10921771Skarels { SOCK_RAW, &inetdomain, 0, PR_ATOMIC|PR_ADDR, 11026026Skarels rip_input, rip_output, 0, rip_ctloutput, 11137471Ssklower rip_usrreq, 11254716Ssklower rip_init, 0, 0, 0, 11321771Skarels }, 1147620Sroot }; 1157620Sroot 1167620Sroot struct domain inetdomain = 11716990Skarels { AF_INET, "internet", 0, 0, 0, 11854825Ssklower inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 0, 11954825Ssklower rn_inithead, 32, sizeof(struct sockaddr_in) }; 1207620Sroot 12161335Sbostic #include "imp.h" 1227618Sroot #if NIMP > 0 12316990Skarels extern struct domain impdomain; 12461335Sbostic int rimp_output(), hostslowtimo(); 12516990Skarels 1267620Sroot struct protosw impsw[] = { 12716990Skarels { SOCK_RAW, &impdomain, 0, PR_ATOMIC|PR_ADDR, 1287618Sroot 0, rimp_output, 0, 0, 12937471Ssklower rip_usrreq, 1307618Sroot 0, 0, hostslowtimo, 0, 1317620Sroot }, 1327618Sroot }; 1337618Sroot 1347620Sroot struct domain impdomain = 13516990Skarels { AF_IMPLINK, "imp", 0, 0, 0, 13616990Skarels impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] }; 1377620Sroot #endif 13823744Skarels 13923744Skarels #include "hy.h" 14023744Skarels #if NHY > 0 14123744Skarels /* 14223744Skarels * HYPERchannel protocol family: raw interface. 14323744Skarels */ 14423744Skarels int rhy_output(); 14524809Skarels extern struct domain hydomain; 14623744Skarels 14723744Skarels struct protosw hysw[] = { 14824809Skarels { SOCK_RAW, &hydomain, 0, PR_ATOMIC|PR_ADDR, 14923744Skarels 0, rhy_output, 0, 0, 15037471Ssklower rip_usrreq, 15123744Skarels 0, 0, 0, 0, 15223744Skarels }, 15323744Skarels }; 15423744Skarels 15523744Skarels struct domain hydomain = 15626246Skarels { AF_HYLINK, "hy", 0, 0, 0, hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] }; 15723744Skarels #endif 158