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 351e78ac21SJeffrey Hsu #include "opt_mrouting.h" 366a800098SYoshinobu Inoue #include "opt_ipsec.h" 37336d023bSBjoern A. Zeeb #include "opt_inet.h" 386a800098SYoshinobu Inoue #include "opt_inet6.h" 39f8829a4aSRandall Stewart #include "opt_sctp.h" 40e440aed9SQing Li #include "opt_mpath.h" 41fbd1372aSJoerg Wunsch 42df8bae1dSRodney W. Grimes #include <sys/param.h> 43340c35deSJonathan Lemon #include <sys/systm.h> 44748e0b0aSGarrett Wollman #include <sys/kernel.h> 45df8bae1dSRodney W. Grimes #include <sys/socket.h> 46df8bae1dSRodney W. Grimes #include <sys/domain.h> 47385195c0SMarko Zec #include <sys/proc.h> 48dcc3cb75SPoul-Henning Kamp #include <sys/protosw.h> 49ce02431fSDoug Rabson #include <sys/queue.h> 5098163b98SPoul-Henning Kamp #include <sys/sysctl.h> 51df8bae1dSRodney W. Grimes 52336d023bSBjoern A. Zeeb /* 53336d023bSBjoern A. Zeeb * While this file provides the domain and protocol switch tables for IPv4, it 54336d023bSBjoern A. Zeeb * also provides the sysctl node declarations for net.inet.* often shared with 55336d023bSBjoern A. Zeeb * IPv6 for common features or by upper layer protocols. In case of no IPv4 56336d023bSBjoern A. Zeeb * support compile out everything but these sysctl nodes. 57336d023bSBjoern A. Zeeb */ 58336d023bSBjoern A. Zeeb #ifdef INET 59df8bae1dSRodney W. Grimes #include <net/if.h> 6076039bc8SGleb Smirnoff #include <net/if_var.h> 61df8bae1dSRodney W. Grimes #include <net/route.h> 62e440aed9SQing Li #ifdef RADIX_MPATH 63e440aed9SQing Li #include <net/radix_mpath.h> 64e440aed9SQing Li #endif 65530c0060SRobert Watson #include <net/vnet.h> 66acaeca65SBjoern A. Zeeb #endif /* INET */ 67df8bae1dSRodney W. Grimes 68acaeca65SBjoern A. Zeeb #if defined(INET) || defined(INET6) 69df8bae1dSRodney W. Grimes #include <netinet/in.h> 70acaeca65SBjoern A. Zeeb #endif 71acaeca65SBjoern A. Zeeb 72acaeca65SBjoern A. Zeeb #ifdef INET 73df8bae1dSRodney W. Grimes #include <netinet/in_systm.h> 746e6b3f7cSQing Li #include <netinet/in_var.h> 75df8bae1dSRodney W. Grimes #include <netinet/ip.h> 76df8bae1dSRodney W. Grimes #include <netinet/ip_var.h> 77df8bae1dSRodney W. Grimes #include <netinet/ip_icmp.h> 78df8bae1dSRodney W. Grimes #include <netinet/igmp_var.h> 79df8bae1dSRodney W. Grimes #include <netinet/tcp.h> 80df8bae1dSRodney W. Grimes #include <netinet/tcp_timer.h> 81df8bae1dSRodney W. Grimes #include <netinet/tcp_var.h> 82df8bae1dSRodney W. Grimes #include <netinet/udp.h> 83df8bae1dSRodney W. Grimes #include <netinet/udp_var.h> 84686cdd19SJun-ichiro itojun Hagino #include <netinet/ip_encap.h> 856a800098SYoshinobu Inoue 86df8bae1dSRodney W. Grimes /* 87df8bae1dSRodney W. Grimes * TCP/IP protocol family: IP, ICMP, UDP, TCP. 88df8bae1dSRodney W. Grimes */ 89df8bae1dSRodney W. Grimes 9031793d59SDavid E. O'Brien static struct pr_usrreqs nousrreqs; 9131793d59SDavid E. O'Brien 92b2630c29SGeorge V. Neville-Neil #ifdef IPSEC 93b9234fafSSam Leffler #include <netipsec/ipsec.h> 94b2630c29SGeorge V. Neville-Neil #endif /* IPSEC */ 95b9234fafSSam Leffler 96f8829a4aSRandall Stewart #ifdef SCTP 97f8829a4aSRandall Stewart #include <netinet/in_pcb.h> 98f8829a4aSRandall Stewart #include <netinet/sctp_pcb.h> 99f8829a4aSRandall Stewart #include <netinet/sctp.h> 100f8829a4aSRandall Stewart #include <netinet/sctp_var.h> 101f8829a4aSRandall Stewart #endif /* SCTP */ 102f8829a4aSRandall Stewart 1038d5a3ca7SBjoern A. Zeeb FEATURE(inet, "Internet Protocol version 4"); 1048d5a3ca7SBjoern A. Zeeb 105df8bae1dSRodney W. Grimes extern struct domain inetdomain; 106dff3237eSAndre Oppermann 107dff3237eSAndre Oppermann /* Spacer for loadable protocols. */ 108dff3237eSAndre Oppermann #define IPPROTOSPACER \ 109303989a2SRuslan Ermilov { \ 110303989a2SRuslan Ermilov .pr_domain = &inetdomain, \ 111303989a2SRuslan Ermilov .pr_protocol = PROTO_SPACER, \ 112303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs \ 113dff3237eSAndre Oppermann } 114df8bae1dSRodney W. Grimes 115f0ffb944SJulian Elischer struct protosw inetsw[] = { 116303989a2SRuslan Ermilov { 117303989a2SRuslan Ermilov .pr_type = 0, 118303989a2SRuslan Ermilov .pr_domain = &inetdomain, 119303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IP, 120303989a2SRuslan Ermilov .pr_init = ip_init, 1219802380eSBjoern A. Zeeb #ifdef VIMAGE 1229802380eSBjoern A. Zeeb .pr_destroy = ip_destroy, 1239802380eSBjoern A. Zeeb #endif 124303989a2SRuslan Ermilov .pr_slowtimo = ip_slowtimo, 125303989a2SRuslan Ermilov .pr_drain = ip_drain, 126303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 127df8bae1dSRodney W. Grimes }, 128303989a2SRuslan Ermilov { 129303989a2SRuslan Ermilov .pr_type = SOCK_DGRAM, 130303989a2SRuslan Ermilov .pr_domain = &inetdomain, 131303989a2SRuslan Ermilov .pr_protocol = IPPROTO_UDP, 132303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 133303989a2SRuslan Ermilov .pr_input = udp_input, 134303989a2SRuslan Ermilov .pr_ctlinput = udp_ctlinput, 1357b495c44SVANHULLEBUS Yvan .pr_ctloutput = udp_ctloutput, 136303989a2SRuslan Ermilov .pr_init = udp_init, 137bc29160dSMarko Zec #ifdef VIMAGE 138bc29160dSMarko Zec .pr_destroy = udp_destroy, 139bc29160dSMarko Zec #endif 140303989a2SRuslan Ermilov .pr_usrreqs = &udp_usrreqs 141df8bae1dSRodney W. Grimes }, 142303989a2SRuslan Ermilov { 143303989a2SRuslan Ermilov .pr_type = SOCK_STREAM, 144303989a2SRuslan Ermilov .pr_domain = &inetdomain, 145303989a2SRuslan Ermilov .pr_protocol = IPPROTO_TCP, 146303989a2SRuslan Ermilov .pr_flags = PR_CONNREQUIRED|PR_IMPLOPCL|PR_WANTRCVD, 147303989a2SRuslan Ermilov .pr_input = tcp_input, 148303989a2SRuslan Ermilov .pr_ctlinput = tcp_ctlinput, 149303989a2SRuslan Ermilov .pr_ctloutput = tcp_ctloutput, 150303989a2SRuslan Ermilov .pr_init = tcp_init, 151bc29160dSMarko Zec #ifdef VIMAGE 152bc29160dSMarko Zec .pr_destroy = tcp_destroy, 153bc29160dSMarko Zec #endif 154303989a2SRuslan Ermilov .pr_slowtimo = tcp_slowtimo, 155303989a2SRuslan Ermilov .pr_drain = tcp_drain, 156303989a2SRuslan Ermilov .pr_usrreqs = &tcp_usrreqs 157df8bae1dSRodney W. Grimes }, 158f8829a4aSRandall Stewart #ifdef SCTP 159f8829a4aSRandall Stewart { 16078d9a31dSMichael Tuexen .pr_type = SOCK_SEQPACKET, 161f8829a4aSRandall Stewart .pr_domain = &inetdomain, 162f8829a4aSRandall Stewart .pr_protocol = IPPROTO_SCTP, 163f8829a4aSRandall Stewart .pr_flags = PR_WANTRCVD, 164f8829a4aSRandall Stewart .pr_input = sctp_input, 165f8829a4aSRandall Stewart .pr_ctlinput = sctp_ctlinput, 166f8829a4aSRandall Stewart .pr_ctloutput = sctp_ctloutput, 167f8829a4aSRandall Stewart .pr_init = sctp_init, 1688518270eSMichael Tuexen #ifdef VIMAGE 1698518270eSMichael Tuexen .pr_destroy = sctp_finish, 1708518270eSMichael Tuexen #endif 171f8829a4aSRandall Stewart .pr_drain = sctp_drain, 172f8829a4aSRandall Stewart .pr_usrreqs = &sctp_usrreqs 173f8829a4aSRandall Stewart }, 174f8829a4aSRandall Stewart { 175f8829a4aSRandall Stewart .pr_type = SOCK_STREAM, 176f8829a4aSRandall Stewart .pr_domain = &inetdomain, 177f8829a4aSRandall Stewart .pr_protocol = IPPROTO_SCTP, 178f8829a4aSRandall Stewart .pr_flags = PR_WANTRCVD, 179f8829a4aSRandall Stewart .pr_input = sctp_input, 180f8829a4aSRandall Stewart .pr_ctlinput = sctp_ctlinput, 181f8829a4aSRandall Stewart .pr_ctloutput = sctp_ctloutput, 182f8829a4aSRandall Stewart .pr_drain = sctp_drain, 183f8829a4aSRandall Stewart .pr_usrreqs = &sctp_usrreqs 184f8829a4aSRandall Stewart }, 185f8829a4aSRandall Stewart #endif /* SCTP */ 186303989a2SRuslan Ermilov { 187e06e816fSKevin Lo .pr_type = SOCK_DGRAM, 188e06e816fSKevin Lo .pr_domain = &inetdomain, 189e06e816fSKevin Lo .pr_protocol = IPPROTO_UDPLITE, 190e06e816fSKevin Lo .pr_flags = PR_ATOMIC|PR_ADDR, 191e06e816fSKevin Lo .pr_input = udp_input, 192e06e816fSKevin Lo .pr_ctlinput = udplite_ctlinput, 193e06e816fSKevin Lo .pr_ctloutput = udp_ctloutput, 194e06e816fSKevin Lo .pr_init = udplite_init, 195e06e816fSKevin Lo #ifdef VIMAGE 196e06e816fSKevin Lo .pr_destroy = udplite_destroy, 197e06e816fSKevin Lo #endif 198e06e816fSKevin Lo .pr_usrreqs = &udp_usrreqs 199e06e816fSKevin Lo }, 200e06e816fSKevin Lo { 201303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 202303989a2SRuslan Ermilov .pr_domain = &inetdomain, 203303989a2SRuslan Ermilov .pr_protocol = IPPROTO_RAW, 204303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 205303989a2SRuslan Ermilov .pr_input = rip_input, 206303989a2SRuslan Ermilov .pr_ctlinput = rip_ctlinput, 207303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 208303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 209df8bae1dSRodney W. Grimes }, 210303989a2SRuslan Ermilov { 211303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 212303989a2SRuslan Ermilov .pr_domain = &inetdomain, 213303989a2SRuslan Ermilov .pr_protocol = IPPROTO_ICMP, 214303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 215303989a2SRuslan Ermilov .pr_input = icmp_input, 216303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 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_IGMP, 223303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 224303989a2SRuslan Ermilov .pr_input = igmp_input, 225303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 226303989a2SRuslan Ermilov .pr_fasttimo = igmp_fasttimo, 227303989a2SRuslan Ermilov .pr_slowtimo = igmp_slowtimo, 228303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 229df8bae1dSRodney W. Grimes }, 230303989a2SRuslan Ermilov { 231303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 232303989a2SRuslan Ermilov .pr_domain = &inetdomain, 233303989a2SRuslan Ermilov .pr_protocol = IPPROTO_RSVP, 234303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 235303989a2SRuslan Ermilov .pr_input = rsvp_input, 236303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 237303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 238f0068c4aSGarrett Wollman }, 239b2630c29SGeorge V. Neville-Neil #ifdef IPSEC 240303989a2SRuslan Ermilov { 241303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 242303989a2SRuslan Ermilov .pr_domain = &inetdomain, 243303989a2SRuslan Ermilov .pr_protocol = IPPROTO_AH, 244303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 245303989a2SRuslan Ermilov .pr_input = ah4_input, 246303989a2SRuslan Ermilov .pr_ctlinput = ah4_ctlinput, 247303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 248e8539d32SSam Leffler }, 249303989a2SRuslan Ermilov { 250303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 251303989a2SRuslan Ermilov .pr_domain = &inetdomain, 252303989a2SRuslan Ermilov .pr_protocol = IPPROTO_ESP, 253303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 254303989a2SRuslan Ermilov .pr_input = esp4_input, 255303989a2SRuslan Ermilov .pr_ctlinput = esp4_ctlinput, 256303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 257e8539d32SSam Leffler }, 258303989a2SRuslan Ermilov { 259303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 260303989a2SRuslan Ermilov .pr_domain = &inetdomain, 261303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPCOMP, 262303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 263303989a2SRuslan Ermilov .pr_input = ipcomp4_input, 264303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 265e8539d32SSam Leffler }, 266b2630c29SGeorge V. Neville-Neil #endif /* IPSEC */ 267303989a2SRuslan Ermilov { 268303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 269303989a2SRuslan Ermilov .pr_domain = &inetdomain, 270303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPV4, 271303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 272303989a2SRuslan Ermilov .pr_input = encap4_input, 273303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 274303989a2SRuslan Ermilov .pr_init = encap_init, 275303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 27633841545SHajimu UMEMOTO }, 277303989a2SRuslan Ermilov { 278303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 279303989a2SRuslan Ermilov .pr_domain = &inetdomain, 280303989a2SRuslan Ermilov .pr_protocol = IPPROTO_MOBILE, 281303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 282303989a2SRuslan Ermilov .pr_input = encap4_input, 283303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 284303989a2SRuslan Ermilov .pr_init = encap_init, 285303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 2868e96e13eSMaxim Sobolev }, 287303989a2SRuslan Ermilov { 288303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 289303989a2SRuslan Ermilov .pr_domain = &inetdomain, 29073ff045cSAndrew Thompson .pr_protocol = IPPROTO_ETHERIP, 29173ff045cSAndrew Thompson .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 29273ff045cSAndrew Thompson .pr_input = encap4_input, 29373ff045cSAndrew Thompson .pr_ctloutput = rip_ctloutput, 29473ff045cSAndrew Thompson .pr_init = encap_init, 29573ff045cSAndrew Thompson .pr_usrreqs = &rip_usrreqs 29673ff045cSAndrew Thompson }, 29773ff045cSAndrew Thompson { 29873ff045cSAndrew Thompson .pr_type = SOCK_RAW, 29973ff045cSAndrew Thompson .pr_domain = &inetdomain, 300303989a2SRuslan Ermilov .pr_protocol = IPPROTO_GRE, 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 3068e96e13eSMaxim Sobolev }, 30733841545SHajimu UMEMOTO # ifdef INET6 308303989a2SRuslan Ermilov { 309303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 310303989a2SRuslan Ermilov .pr_domain = &inetdomain, 311303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPV6, 312303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 313303989a2SRuslan Ermilov .pr_input = encap4_input, 314303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 315303989a2SRuslan Ermilov .pr_init = encap_init, 316303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 31733841545SHajimu UMEMOTO }, 318cfa1ca9dSYoshinobu Inoue #endif 319303989a2SRuslan Ermilov { 320303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 321303989a2SRuslan Ermilov .pr_domain = &inetdomain, 322303989a2SRuslan Ermilov .pr_protocol = IPPROTO_PIM, 323303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 3240948f0a2SBruce M Simpson .pr_input = encap4_input, 325303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 326303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 3271e78ac21SJeffrey Hsu }, 328dff3237eSAndre Oppermann /* Spacer n-times for loadable protocols. */ 329dff3237eSAndre Oppermann IPPROTOSPACER, 330dff3237eSAndre Oppermann IPPROTOSPACER, 331dff3237eSAndre Oppermann IPPROTOSPACER, 332dff3237eSAndre Oppermann IPPROTOSPACER, 333dff3237eSAndre Oppermann IPPROTOSPACER, 334dff3237eSAndre Oppermann IPPROTOSPACER, 335dff3237eSAndre Oppermann IPPROTOSPACER, 336dff3237eSAndre Oppermann IPPROTOSPACER, 337df8bae1dSRodney W. Grimes /* raw wildcard */ 338303989a2SRuslan Ermilov { 339303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 340303989a2SRuslan Ermilov .pr_domain = &inetdomain, 341303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 342303989a2SRuslan Ermilov .pr_input = rip_input, 343303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 344303989a2SRuslan Ermilov .pr_init = rip_init, 345bc29160dSMarko Zec #ifdef VIMAGE 346bc29160dSMarko Zec .pr_destroy = rip_destroy, 347bc29160dSMarko Zec #endif 348303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 349df8bae1dSRodney W. Grimes }, 350df8bae1dSRodney W. Grimes }; 351df8bae1dSRodney W. Grimes 3524d77a549SAlfred Perlstein extern int in_inithead(void **, int); 353bc29160dSMarko Zec extern int in_detachhead(void **, int); 3545c2dae8eSGarrett Wollman 355303989a2SRuslan Ermilov struct domain inetdomain = { 356303989a2SRuslan Ermilov .dom_family = AF_INET, 357303989a2SRuslan Ermilov .dom_name = "internet", 358303989a2SRuslan Ermilov .dom_protosw = inetsw, 359303989a2SRuslan Ermilov .dom_protoswNPROTOSW = &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 360e440aed9SQing Li #ifdef RADIX_MPATH 361e440aed9SQing Li .dom_rtattach = rn4_mpath_inithead, 362e440aed9SQing Li #else 363303989a2SRuslan Ermilov .dom_rtattach = in_inithead, 364e440aed9SQing Li #endif 365bc29160dSMarko Zec #ifdef VIMAGE 366bc29160dSMarko Zec .dom_rtdetach = in_detachhead, 367bc29160dSMarko Zec #endif 368303989a2SRuslan Ermilov .dom_rtoffset = 32, 3696e6b3f7cSQing Li .dom_maxrtkey = sizeof(struct sockaddr_in), 3706e6b3f7cSQing Li .dom_ifattach = in_domifattach, 3716e6b3f7cSQing Li .dom_ifdetach = in_domifdetach 3725c2dae8eSGarrett Wollman }; 373df8bae1dSRodney W. Grimes 374d0728d71SRobert Watson VNET_DOMAIN_SET(inet); 375336d023bSBjoern A. Zeeb #endif /* INET */ 376748e0b0aSGarrett Wollman 377602d513cSGarrett Wollman SYSCTL_NODE(_net, PF_INET, inet, CTLFLAG_RW, 0, 378602d513cSGarrett Wollman "Internet Family"); 37998163b98SPoul-Henning Kamp 38098163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_IP, ip, CTLFLAG_RW, 0, "IP"); 38198163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_ICMP, icmp, CTLFLAG_RW, 0, "ICMP"); 38298163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_UDP, udp, CTLFLAG_RW, 0, "UDP"); 38398163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_TCP, tcp, CTLFLAG_RW, 0, "TCP"); 384f8829a4aSRandall Stewart #ifdef SCTP 385f8829a4aSRandall Stewart SYSCTL_NODE(_net_inet, IPPROTO_SCTP, sctp, CTLFLAG_RW, 0, "SCTP"); 386f8829a4aSRandall Stewart #endif 38798163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_IGMP, igmp, CTLFLAG_RW, 0, "IGMP"); 388b2630c29SGeorge V. Neville-Neil #ifdef IPSEC 389b9234fafSSam Leffler /* XXX no protocol # to use, pick something "reserved" */ 390b9234fafSSam Leffler SYSCTL_NODE(_net_inet, 253, ipsec, CTLFLAG_RW, 0, "IPSEC"); 391b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_AH, ah, CTLFLAG_RW, 0, "AH"); 392b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_ESP, esp, CTLFLAG_RW, 0, "ESP"); 393b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_IPCOMP, ipcomp, CTLFLAG_RW, 0, "IPCOMP"); 394b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_IPIP, ipip, CTLFLAG_RW, 0, "IPIP"); 395b2630c29SGeorge V. Neville-Neil #endif /* IPSEC */ 396117bcae7SGarrett Wollman SYSCTL_NODE(_net_inet, IPPROTO_RAW, raw, CTLFLAG_RW, 0, "RAW"); 397*1e0a021eSMarcel Moolenaar SYSCTL_NODE(_net_inet, OID_AUTO, accf, CTLFLAG_RW, 0, 398*1e0a021eSMarcel Moolenaar "Accept filters"); 399