1c398230bSWarner Losh /*- 2df8bae1dSRodney W. Grimes * Copyright (c) 1982, 1986, 1993 3df8bae1dSRodney W. Grimes * The Regents of the University of California. All rights reserved. 4df8bae1dSRodney W. Grimes * 5df8bae1dSRodney W. Grimes * Redistribution and use in source and binary forms, with or without 6df8bae1dSRodney W. Grimes * modification, are permitted provided that the following conditions 7df8bae1dSRodney W. Grimes * are met: 8df8bae1dSRodney W. Grimes * 1. Redistributions of source code must retain the above copyright 9df8bae1dSRodney W. Grimes * notice, this list of conditions and the following disclaimer. 10df8bae1dSRodney W. Grimes * 2. Redistributions in binary form must reproduce the above copyright 11df8bae1dSRodney W. Grimes * notice, this list of conditions and the following disclaimer in the 12df8bae1dSRodney W. Grimes * documentation and/or other materials provided with the distribution. 13df8bae1dSRodney W. Grimes * 4. Neither the name of the University nor the names of its contributors 14df8bae1dSRodney W. Grimes * may be used to endorse or promote products derived from this software 15df8bae1dSRodney W. Grimes * without specific prior written permission. 16df8bae1dSRodney W. Grimes * 17df8bae1dSRodney W. Grimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18df8bae1dSRodney W. Grimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19df8bae1dSRodney W. Grimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20df8bae1dSRodney W. Grimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21df8bae1dSRodney W. Grimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22df8bae1dSRodney W. Grimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23df8bae1dSRodney W. Grimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24df8bae1dSRodney W. Grimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25df8bae1dSRodney W. Grimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26df8bae1dSRodney W. Grimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27df8bae1dSRodney W. Grimes * SUCH DAMAGE. 28df8bae1dSRodney W. Grimes * 29425f123eSGarrett Wollman * @(#)in_proto.c 8.2 (Berkeley) 2/9/95 30df8bae1dSRodney W. Grimes */ 31df8bae1dSRodney W. Grimes 324b421e2dSMike Silbersack #include <sys/cdefs.h> 334b421e2dSMike Silbersack __FBSDID("$FreeBSD$"); 344b421e2dSMike Silbersack 35430df5f4SEivind Eklund #include "opt_ipx.h" 361e78ac21SJeffrey Hsu #include "opt_mrouting.h" 376a800098SYoshinobu Inoue #include "opt_ipsec.h" 386a800098SYoshinobu Inoue #include "opt_inet6.h" 3933553d6eSBjoern A. Zeeb #include "opt_route.h" 407c1fe953SMax Laier #include "opt_pf.h" 41a9771948SGleb Smirnoff #include "opt_carp.h" 42f8829a4aSRandall Stewart #include "opt_sctp.h" 43e440aed9SQing Li #include "opt_mpath.h" 44fbd1372aSJoerg Wunsch 45df8bae1dSRodney W. Grimes #include <sys/param.h> 46340c35deSJonathan Lemon #include <sys/systm.h> 47748e0b0aSGarrett Wollman #include <sys/kernel.h> 48df8bae1dSRodney W. Grimes #include <sys/socket.h> 49df8bae1dSRodney W. Grimes #include <sys/domain.h> 50385195c0SMarko Zec #include <sys/proc.h> 51dcc3cb75SPoul-Henning Kamp #include <sys/protosw.h> 52ce02431fSDoug Rabson #include <sys/queue.h> 5398163b98SPoul-Henning Kamp #include <sys/sysctl.h> 54df8bae1dSRodney W. Grimes 55df8bae1dSRodney W. Grimes #include <net/if.h> 56df8bae1dSRodney W. Grimes #include <net/route.h> 57e440aed9SQing Li #ifdef RADIX_MPATH 58e440aed9SQing Li #include <net/radix_mpath.h> 59e440aed9SQing Li #endif 60df8bae1dSRodney W. Grimes 61df8bae1dSRodney W. Grimes #include <netinet/in.h> 62df8bae1dSRodney W. Grimes #include <netinet/in_systm.h> 636e6b3f7cSQing Li #include <netinet/in_var.h> 64df8bae1dSRodney W. Grimes #include <netinet/ip.h> 65df8bae1dSRodney W. Grimes #include <netinet/ip_var.h> 66df8bae1dSRodney W. Grimes #include <netinet/ip_icmp.h> 67df8bae1dSRodney W. Grimes #include <netinet/igmp_var.h> 68df8bae1dSRodney W. Grimes #include <netinet/tcp.h> 69df8bae1dSRodney W. Grimes #include <netinet/tcp_timer.h> 70df8bae1dSRodney W. Grimes #include <netinet/tcp_var.h> 71df8bae1dSRodney W. Grimes #include <netinet/udp.h> 72df8bae1dSRodney W. Grimes #include <netinet/udp_var.h> 73686cdd19SJun-ichiro itojun Hagino #include <netinet/ip_encap.h> 746a800098SYoshinobu Inoue 75df8bae1dSRodney W. Grimes /* 76df8bae1dSRodney W. Grimes * TCP/IP protocol family: IP, ICMP, UDP, TCP. 77df8bae1dSRodney W. Grimes */ 78df8bae1dSRodney W. Grimes 7931793d59SDavid E. O'Brien static struct pr_usrreqs nousrreqs; 8031793d59SDavid E. O'Brien 81b2630c29SGeorge V. Neville-Neil #ifdef IPSEC 82b9234fafSSam Leffler #include <netipsec/ipsec.h> 83b2630c29SGeorge V. Neville-Neil #endif /* IPSEC */ 84b9234fafSSam Leffler 85f8829a4aSRandall Stewart #ifdef SCTP 86f8829a4aSRandall Stewart #include <netinet/in_pcb.h> 87f8829a4aSRandall Stewart #include <netinet/sctp_pcb.h> 88f8829a4aSRandall Stewart #include <netinet/sctp.h> 89f8829a4aSRandall Stewart #include <netinet/sctp_var.h> 90f8829a4aSRandall Stewart #endif /* SCTP */ 91f8829a4aSRandall Stewart 927c1fe953SMax Laier #ifdef DEV_PFSYNC 937c1fe953SMax Laier #include <net/pfvar.h> 947c1fe953SMax Laier #include <net/if_pfsync.h> 957c1fe953SMax Laier #endif 967c1fe953SMax Laier 97a9771948SGleb Smirnoff #ifdef DEV_CARP 98a9771948SGleb Smirnoff #include <netinet/ip_carp.h> 99a9771948SGleb Smirnoff #endif 100a9771948SGleb Smirnoff 101df8bae1dSRodney W. Grimes extern struct domain inetdomain; 102dff3237eSAndre Oppermann 103dff3237eSAndre Oppermann /* Spacer for loadable protocols. */ 104dff3237eSAndre Oppermann #define IPPROTOSPACER \ 105303989a2SRuslan Ermilov { \ 106303989a2SRuslan Ermilov .pr_domain = &inetdomain, \ 107303989a2SRuslan Ermilov .pr_protocol = PROTO_SPACER, \ 108303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs \ 109dff3237eSAndre Oppermann } 110df8bae1dSRodney W. Grimes 111f0ffb944SJulian Elischer struct protosw inetsw[] = { 112303989a2SRuslan Ermilov { 113303989a2SRuslan Ermilov .pr_type = 0, 114303989a2SRuslan Ermilov .pr_domain = &inetdomain, 115303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IP, 116303989a2SRuslan Ermilov .pr_init = ip_init, 117303989a2SRuslan Ermilov .pr_slowtimo = ip_slowtimo, 118303989a2SRuslan Ermilov .pr_drain = ip_drain, 119303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 120df8bae1dSRodney W. Grimes }, 121303989a2SRuslan Ermilov { 122303989a2SRuslan Ermilov .pr_type = SOCK_DGRAM, 123303989a2SRuslan Ermilov .pr_domain = &inetdomain, 124303989a2SRuslan Ermilov .pr_protocol = IPPROTO_UDP, 125303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 126303989a2SRuslan Ermilov .pr_input = udp_input, 127303989a2SRuslan Ermilov .pr_ctlinput = udp_ctlinput, 128303989a2SRuslan Ermilov .pr_ctloutput = ip_ctloutput, 129303989a2SRuslan Ermilov .pr_init = udp_init, 130bc29160dSMarko Zec #ifdef VIMAGE 131bc29160dSMarko Zec .pr_destroy = udp_destroy, 132bc29160dSMarko Zec #endif 133303989a2SRuslan Ermilov .pr_usrreqs = &udp_usrreqs 134df8bae1dSRodney W. Grimes }, 135303989a2SRuslan Ermilov { 136303989a2SRuslan Ermilov .pr_type = SOCK_STREAM, 137303989a2SRuslan Ermilov .pr_domain = &inetdomain, 138303989a2SRuslan Ermilov .pr_protocol = IPPROTO_TCP, 139303989a2SRuslan Ermilov .pr_flags = PR_CONNREQUIRED|PR_IMPLOPCL|PR_WANTRCVD, 140303989a2SRuslan Ermilov .pr_input = tcp_input, 141303989a2SRuslan Ermilov .pr_ctlinput = tcp_ctlinput, 142303989a2SRuslan Ermilov .pr_ctloutput = tcp_ctloutput, 143303989a2SRuslan Ermilov .pr_init = tcp_init, 144bc29160dSMarko Zec #ifdef VIMAGE 145bc29160dSMarko Zec .pr_destroy = tcp_destroy, 146bc29160dSMarko Zec #endif 147303989a2SRuslan Ermilov .pr_slowtimo = tcp_slowtimo, 148303989a2SRuslan Ermilov .pr_drain = tcp_drain, 149303989a2SRuslan Ermilov .pr_usrreqs = &tcp_usrreqs 150df8bae1dSRodney W. Grimes }, 151f8829a4aSRandall Stewart #ifdef SCTP 152f8829a4aSRandall Stewart { 153f8829a4aSRandall Stewart .pr_type = SOCK_DGRAM, 154f8829a4aSRandall Stewart .pr_domain = &inetdomain, 155f8829a4aSRandall Stewart .pr_protocol = IPPROTO_SCTP, 156f8829a4aSRandall Stewart .pr_flags = PR_WANTRCVD, 157f8829a4aSRandall Stewart .pr_input = sctp_input, 158f8829a4aSRandall Stewart .pr_ctlinput = sctp_ctlinput, 159f8829a4aSRandall Stewart .pr_ctloutput = sctp_ctloutput, 160f8829a4aSRandall Stewart .pr_init = sctp_init, 161f8829a4aSRandall Stewart .pr_drain = sctp_drain, 162f8829a4aSRandall Stewart .pr_usrreqs = &sctp_usrreqs 163f8829a4aSRandall Stewart }, 164f8829a4aSRandall Stewart { 165f8829a4aSRandall Stewart .pr_type = SOCK_SEQPACKET, 166f8829a4aSRandall Stewart .pr_domain = &inetdomain, 167f8829a4aSRandall Stewart .pr_protocol = IPPROTO_SCTP, 168f8829a4aSRandall Stewart .pr_flags = PR_WANTRCVD, 169f8829a4aSRandall Stewart .pr_input = sctp_input, 170f8829a4aSRandall Stewart .pr_ctlinput = sctp_ctlinput, 171f8829a4aSRandall Stewart .pr_ctloutput = sctp_ctloutput, 172f8829a4aSRandall Stewart .pr_drain = sctp_drain, 173f8829a4aSRandall Stewart .pr_usrreqs = &sctp_usrreqs 174f8829a4aSRandall Stewart }, 175f8829a4aSRandall Stewart 176f8829a4aSRandall Stewart { 177f8829a4aSRandall Stewart .pr_type = SOCK_STREAM, 178f8829a4aSRandall Stewart .pr_domain = &inetdomain, 179f8829a4aSRandall Stewart .pr_protocol = IPPROTO_SCTP, 180f8829a4aSRandall Stewart .pr_flags = PR_WANTRCVD, 181f8829a4aSRandall Stewart .pr_input = sctp_input, 182f8829a4aSRandall Stewart .pr_ctlinput = sctp_ctlinput, 183f8829a4aSRandall Stewart .pr_ctloutput = sctp_ctloutput, 184f8829a4aSRandall Stewart .pr_drain = sctp_drain, 185f8829a4aSRandall Stewart .pr_usrreqs = &sctp_usrreqs 186f8829a4aSRandall Stewart }, 187f8829a4aSRandall Stewart #endif /* SCTP */ 188303989a2SRuslan Ermilov { 189303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 190303989a2SRuslan Ermilov .pr_domain = &inetdomain, 191303989a2SRuslan Ermilov .pr_protocol = IPPROTO_RAW, 192303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 193303989a2SRuslan Ermilov .pr_input = rip_input, 194303989a2SRuslan Ermilov .pr_ctlinput = rip_ctlinput, 195303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 196303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 197df8bae1dSRodney W. Grimes }, 198303989a2SRuslan Ermilov { 199303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 200303989a2SRuslan Ermilov .pr_domain = &inetdomain, 201303989a2SRuslan Ermilov .pr_protocol = IPPROTO_ICMP, 202303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 203303989a2SRuslan Ermilov .pr_input = icmp_input, 204303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 20544e33a07SMarko Zec .pr_init = icmp_init, 206303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 207df8bae1dSRodney W. Grimes }, 208303989a2SRuslan Ermilov { 209303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 210303989a2SRuslan Ermilov .pr_domain = &inetdomain, 211303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IGMP, 212303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 213303989a2SRuslan Ermilov .pr_input = igmp_input, 214303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 215303989a2SRuslan Ermilov .pr_fasttimo = igmp_fasttimo, 216303989a2SRuslan Ermilov .pr_slowtimo = igmp_slowtimo, 217303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 218df8bae1dSRodney W. Grimes }, 219303989a2SRuslan Ermilov { 220303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 221303989a2SRuslan Ermilov .pr_domain = &inetdomain, 222303989a2SRuslan Ermilov .pr_protocol = IPPROTO_RSVP, 223303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 224303989a2SRuslan Ermilov .pr_input = rsvp_input, 225303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 226303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 227f0068c4aSGarrett Wollman }, 228b2630c29SGeorge V. Neville-Neil #ifdef IPSEC 229303989a2SRuslan Ermilov { 230303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 231303989a2SRuslan Ermilov .pr_domain = &inetdomain, 232303989a2SRuslan Ermilov .pr_protocol = IPPROTO_AH, 233303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 234303989a2SRuslan Ermilov .pr_input = ah4_input, 235303989a2SRuslan Ermilov .pr_ctlinput = ah4_ctlinput, 236303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 237e8539d32SSam Leffler }, 238303989a2SRuslan Ermilov { 239303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 240303989a2SRuslan Ermilov .pr_domain = &inetdomain, 241303989a2SRuslan Ermilov .pr_protocol = IPPROTO_ESP, 242303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 243303989a2SRuslan Ermilov .pr_input = esp4_input, 244303989a2SRuslan Ermilov .pr_ctlinput = esp4_ctlinput, 245303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 246e8539d32SSam Leffler }, 247303989a2SRuslan Ermilov { 248303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 249303989a2SRuslan Ermilov .pr_domain = &inetdomain, 250303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPCOMP, 251303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 252303989a2SRuslan Ermilov .pr_input = ipcomp4_input, 253303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 254e8539d32SSam Leffler }, 255b2630c29SGeorge V. Neville-Neil #endif /* IPSEC */ 256303989a2SRuslan Ermilov { 257303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 258303989a2SRuslan Ermilov .pr_domain = &inetdomain, 259303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPV4, 260303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 261303989a2SRuslan Ermilov .pr_input = encap4_input, 262303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 263303989a2SRuslan Ermilov .pr_init = encap_init, 264303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 26533841545SHajimu UMEMOTO }, 266303989a2SRuslan Ermilov { 267303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 268303989a2SRuslan Ermilov .pr_domain = &inetdomain, 269303989a2SRuslan Ermilov .pr_protocol = IPPROTO_MOBILE, 270303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 271303989a2SRuslan Ermilov .pr_input = encap4_input, 272303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 273303989a2SRuslan Ermilov .pr_init = encap_init, 274303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 2758e96e13eSMaxim Sobolev }, 276303989a2SRuslan Ermilov { 277303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 278303989a2SRuslan Ermilov .pr_domain = &inetdomain, 27973ff045cSAndrew Thompson .pr_protocol = IPPROTO_ETHERIP, 28073ff045cSAndrew Thompson .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 28173ff045cSAndrew Thompson .pr_input = encap4_input, 28273ff045cSAndrew Thompson .pr_ctloutput = rip_ctloutput, 28373ff045cSAndrew Thompson .pr_init = encap_init, 28473ff045cSAndrew Thompson .pr_usrreqs = &rip_usrreqs 28573ff045cSAndrew Thompson }, 28673ff045cSAndrew Thompson { 28773ff045cSAndrew Thompson .pr_type = SOCK_RAW, 28873ff045cSAndrew Thompson .pr_domain = &inetdomain, 289303989a2SRuslan Ermilov .pr_protocol = IPPROTO_GRE, 290303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 291303989a2SRuslan Ermilov .pr_input = encap4_input, 292303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 293303989a2SRuslan Ermilov .pr_init = encap_init, 294303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 2958e96e13eSMaxim Sobolev }, 29633841545SHajimu UMEMOTO # ifdef INET6 297303989a2SRuslan Ermilov { 298303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 299303989a2SRuslan Ermilov .pr_domain = &inetdomain, 300303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPV6, 301303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 302303989a2SRuslan Ermilov .pr_input = encap4_input, 303303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 304303989a2SRuslan Ermilov .pr_init = encap_init, 305303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 30633841545SHajimu UMEMOTO }, 307cfa1ca9dSYoshinobu Inoue #endif 308303989a2SRuslan Ermilov { 309303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 310303989a2SRuslan Ermilov .pr_domain = &inetdomain, 311303989a2SRuslan Ermilov .pr_protocol = IPPROTO_PIM, 312303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 3130948f0a2SBruce M Simpson .pr_input = encap4_input, 314303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 315303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 3161e78ac21SJeffrey Hsu }, 3177c1fe953SMax Laier #ifdef DEV_PFSYNC 318303989a2SRuslan Ermilov { 319303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 320303989a2SRuslan Ermilov .pr_domain = &inetdomain, 321303989a2SRuslan Ermilov .pr_protocol = IPPROTO_PFSYNC, 322303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 323303989a2SRuslan Ermilov .pr_input = pfsync_input, 324303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 325303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 3267c1fe953SMax Laier }, 3277c1fe953SMax Laier #endif /* DEV_PFSYNC */ 328a9771948SGleb Smirnoff #ifdef DEV_CARP 329303989a2SRuslan Ermilov { 330303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 331303989a2SRuslan Ermilov .pr_domain = &inetdomain, 332303989a2SRuslan Ermilov .pr_protocol = IPPROTO_CARP, 333303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 334303989a2SRuslan Ermilov .pr_input = carp_input, 335303989a2SRuslan Ermilov .pr_output = (pr_output_t*)rip_output, 336303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 337303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 338a9771948SGleb Smirnoff }, 339a9771948SGleb Smirnoff #endif /* DEV_CARP */ 340dff3237eSAndre Oppermann /* Spacer n-times for loadable protocols. */ 341dff3237eSAndre Oppermann IPPROTOSPACER, 342dff3237eSAndre Oppermann IPPROTOSPACER, 343dff3237eSAndre Oppermann IPPROTOSPACER, 344dff3237eSAndre Oppermann IPPROTOSPACER, 345dff3237eSAndre Oppermann IPPROTOSPACER, 346dff3237eSAndre Oppermann IPPROTOSPACER, 347dff3237eSAndre Oppermann IPPROTOSPACER, 348dff3237eSAndre Oppermann IPPROTOSPACER, 349df8bae1dSRodney W. Grimes /* raw wildcard */ 350303989a2SRuslan Ermilov { 351303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 352303989a2SRuslan Ermilov .pr_domain = &inetdomain, 353303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 354303989a2SRuslan Ermilov .pr_input = rip_input, 355303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 356303989a2SRuslan Ermilov .pr_init = rip_init, 357bc29160dSMarko Zec #ifdef VIMAGE 358bc29160dSMarko Zec .pr_destroy = rip_destroy, 359bc29160dSMarko Zec #endif 360303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 361df8bae1dSRodney W. Grimes }, 362df8bae1dSRodney W. Grimes }; 363df8bae1dSRodney W. Grimes 3644d77a549SAlfred Perlstein extern int in_inithead(void **, int); 365bc29160dSMarko Zec extern int in_detachhead(void **, int); 3665c2dae8eSGarrett Wollman 367303989a2SRuslan Ermilov struct domain inetdomain = { 368303989a2SRuslan Ermilov .dom_family = AF_INET, 369303989a2SRuslan Ermilov .dom_name = "internet", 370303989a2SRuslan Ermilov .dom_protosw = inetsw, 371303989a2SRuslan Ermilov .dom_protoswNPROTOSW = &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 372e440aed9SQing Li #ifdef RADIX_MPATH 373e440aed9SQing Li .dom_rtattach = rn4_mpath_inithead, 374e440aed9SQing Li #else 375303989a2SRuslan Ermilov .dom_rtattach = in_inithead, 376e440aed9SQing Li #endif 377bc29160dSMarko Zec #ifdef VIMAGE 378bc29160dSMarko Zec .dom_rtdetach = in_detachhead, 379bc29160dSMarko Zec #endif 380303989a2SRuslan Ermilov .dom_rtoffset = 32, 3816e6b3f7cSQing Li .dom_maxrtkey = sizeof(struct sockaddr_in), 3826e6b3f7cSQing Li .dom_ifattach = in_domifattach, 3836e6b3f7cSQing Li .dom_ifdetach = in_domifdetach 3845c2dae8eSGarrett Wollman }; 385df8bae1dSRodney W. Grimes 386748e0b0aSGarrett Wollman DOMAIN_SET(inet); 387748e0b0aSGarrett Wollman 388602d513cSGarrett Wollman SYSCTL_NODE(_net, PF_INET, inet, CTLFLAG_RW, 0, 389602d513cSGarrett Wollman "Internet Family"); 39098163b98SPoul-Henning Kamp 39198163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_IP, ip, CTLFLAG_RW, 0, "IP"); 39298163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_ICMP, icmp, CTLFLAG_RW, 0, "ICMP"); 39398163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_UDP, udp, CTLFLAG_RW, 0, "UDP"); 39498163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_TCP, tcp, CTLFLAG_RW, 0, "TCP"); 395f8829a4aSRandall Stewart #ifdef SCTP 396f8829a4aSRandall Stewart SYSCTL_NODE(_net_inet, IPPROTO_SCTP, sctp, CTLFLAG_RW, 0, "SCTP"); 397f8829a4aSRandall Stewart #endif 39898163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_IGMP, igmp, CTLFLAG_RW, 0, "IGMP"); 399b2630c29SGeorge V. Neville-Neil #ifdef IPSEC 400b9234fafSSam Leffler /* XXX no protocol # to use, pick something "reserved" */ 401b9234fafSSam Leffler SYSCTL_NODE(_net_inet, 253, ipsec, CTLFLAG_RW, 0, "IPSEC"); 402b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_AH, ah, CTLFLAG_RW, 0, "AH"); 403b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_ESP, esp, CTLFLAG_RW, 0, "ESP"); 404b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_IPCOMP, ipcomp, CTLFLAG_RW, 0, "IPCOMP"); 405b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_IPIP, ipip, CTLFLAG_RW, 0, "IPIP"); 406b2630c29SGeorge V. Neville-Neil #endif /* IPSEC */ 407117bcae7SGarrett Wollman SYSCTL_NODE(_net_inet, IPPROTO_RAW, raw, CTLFLAG_RW, 0, "RAW"); 4086de8d9dcSMax Laier #ifdef DEV_PFSYNC 4096de8d9dcSMax Laier SYSCTL_NODE(_net_inet, IPPROTO_PFSYNC, pfsync, CTLFLAG_RW, 0, "PFSYNC"); 4106de8d9dcSMax Laier #endif 411a9771948SGleb Smirnoff #ifdef DEV_CARP 412a9771948SGleb Smirnoff SYSCTL_NODE(_net_inet, IPPROTO_CARP, carp, CTLFLAG_RW, 0, "CARP"); 413a9771948SGleb Smirnoff #endif 414