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 30c3aac50fSPeter Wemm * $FreeBSD$ 31df8bae1dSRodney W. Grimes */ 32df8bae1dSRodney W. Grimes 33430df5f4SEivind Eklund #include "opt_ipx.h" 341e78ac21SJeffrey Hsu #include "opt_mrouting.h" 356a800098SYoshinobu Inoue #include "opt_ipsec.h" 366a800098SYoshinobu Inoue #include "opt_inet6.h" 377c1fe953SMax Laier #include "opt_pf.h" 38a9771948SGleb Smirnoff #include "opt_carp.h" 39fbd1372aSJoerg Wunsch 40df8bae1dSRodney W. Grimes #include <sys/param.h> 41340c35deSJonathan Lemon #include <sys/systm.h> 42748e0b0aSGarrett Wollman #include <sys/kernel.h> 43df8bae1dSRodney W. Grimes #include <sys/socket.h> 44df8bae1dSRodney W. Grimes #include <sys/domain.h> 45dcc3cb75SPoul-Henning Kamp #include <sys/protosw.h> 46ce02431fSDoug Rabson #include <sys/queue.h> 4798163b98SPoul-Henning Kamp #include <sys/sysctl.h> 48df8bae1dSRodney W. Grimes 49df8bae1dSRodney W. Grimes #include <net/if.h> 50df8bae1dSRodney W. Grimes #include <net/route.h> 51df8bae1dSRodney W. Grimes 52df8bae1dSRodney W. Grimes #include <netinet/in.h> 53df8bae1dSRodney W. Grimes #include <netinet/in_systm.h> 54df8bae1dSRodney W. Grimes #include <netinet/ip.h> 55df8bae1dSRodney W. Grimes #include <netinet/ip_var.h> 56df8bae1dSRodney W. Grimes #include <netinet/ip_icmp.h> 57df8bae1dSRodney W. Grimes #include <netinet/igmp_var.h> 581e78ac21SJeffrey Hsu #ifdef PIM 591e78ac21SJeffrey Hsu #include <netinet/pim_var.h> 601e78ac21SJeffrey Hsu #endif 61df8bae1dSRodney W. Grimes #include <netinet/tcp.h> 62df8bae1dSRodney W. Grimes #include <netinet/tcp_timer.h> 63df8bae1dSRodney W. Grimes #include <netinet/tcp_var.h> 64df8bae1dSRodney W. Grimes #include <netinet/udp.h> 65df8bae1dSRodney W. Grimes #include <netinet/udp_var.h> 66686cdd19SJun-ichiro itojun Hagino #include <netinet/ip_encap.h> 676a800098SYoshinobu Inoue 68df8bae1dSRodney W. Grimes /* 69df8bae1dSRodney W. Grimes * TCP/IP protocol family: IP, ICMP, UDP, TCP. 70df8bae1dSRodney W. Grimes */ 71df8bae1dSRodney W. Grimes 7231793d59SDavid E. O'Brien static struct pr_usrreqs nousrreqs; 7331793d59SDavid E. O'Brien 746a800098SYoshinobu Inoue #ifdef IPSEC 756a800098SYoshinobu Inoue #include <netinet6/ipsec.h> 766a800098SYoshinobu Inoue #include <netinet6/ah.h> 776a800098SYoshinobu Inoue #ifdef IPSEC_ESP 786a800098SYoshinobu Inoue #include <netinet6/esp.h> 796a800098SYoshinobu Inoue #endif 8033841545SHajimu UMEMOTO #include <netinet6/ipcomp.h> 816a800098SYoshinobu Inoue #endif /* IPSEC */ 826a800098SYoshinobu Inoue 83e8539d32SSam Leffler #ifdef FAST_IPSEC 84b9234fafSSam Leffler #include <netipsec/ipsec.h> 85b9234fafSSam Leffler #endif /* FAST_IPSEC */ 86b9234fafSSam Leffler 87cc6a66f2SJulian Elischer #ifdef IPXIP 88ce7609a4SBruce Evans #include <netipx/ipx_ip.h> 89cc6a66f2SJulian Elischer #endif 90cc6a66f2SJulian Elischer 917c1fe953SMax Laier #ifdef DEV_PFSYNC 927c1fe953SMax Laier #include <net/pfvar.h> 937c1fe953SMax Laier #include <net/if_pfsync.h> 947c1fe953SMax Laier #endif 957c1fe953SMax Laier 96a9771948SGleb Smirnoff #ifdef DEV_CARP 97a9771948SGleb Smirnoff #include <netinet/ip_carp.h> 98a9771948SGleb Smirnoff #endif 99a9771948SGleb Smirnoff 100df8bae1dSRodney W. Grimes extern struct domain inetdomain; 101dff3237eSAndre Oppermann 102dff3237eSAndre Oppermann /* Spacer for loadable protocols. */ 103dff3237eSAndre Oppermann #define IPPROTOSPACER \ 104303989a2SRuslan Ermilov { \ 105303989a2SRuslan Ermilov .pr_domain = &inetdomain, \ 106303989a2SRuslan Ermilov .pr_protocol = PROTO_SPACER, \ 107303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs \ 108dff3237eSAndre Oppermann } 109df8bae1dSRodney W. Grimes 110f0ffb944SJulian Elischer struct protosw inetsw[] = { 111303989a2SRuslan Ermilov { 112303989a2SRuslan Ermilov .pr_type = 0, 113303989a2SRuslan Ermilov .pr_domain = &inetdomain, 114303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IP, 115303989a2SRuslan Ermilov .pr_init = ip_init, 116303989a2SRuslan Ermilov .pr_slowtimo = ip_slowtimo, 117303989a2SRuslan Ermilov .pr_drain = ip_drain, 118303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 119df8bae1dSRodney W. Grimes }, 120303989a2SRuslan Ermilov { 121303989a2SRuslan Ermilov .pr_type = SOCK_DGRAM, 122303989a2SRuslan Ermilov .pr_domain = &inetdomain, 123303989a2SRuslan Ermilov .pr_protocol = IPPROTO_UDP, 124303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 125303989a2SRuslan Ermilov .pr_input = udp_input, 126303989a2SRuslan Ermilov .pr_ctlinput = udp_ctlinput, 127303989a2SRuslan Ermilov .pr_ctloutput = ip_ctloutput, 128303989a2SRuslan Ermilov .pr_init = udp_init, 129303989a2SRuslan Ermilov .pr_usrreqs = &udp_usrreqs 130df8bae1dSRodney W. Grimes }, 131303989a2SRuslan Ermilov { 132303989a2SRuslan Ermilov .pr_type = SOCK_STREAM, 133303989a2SRuslan Ermilov .pr_domain = &inetdomain, 134303989a2SRuslan Ermilov .pr_protocol = IPPROTO_TCP, 135303989a2SRuslan Ermilov .pr_flags = PR_CONNREQUIRED|PR_IMPLOPCL|PR_WANTRCVD, 136303989a2SRuslan Ermilov .pr_input = tcp_input, 137303989a2SRuslan Ermilov .pr_ctlinput = tcp_ctlinput, 138303989a2SRuslan Ermilov .pr_ctloutput = tcp_ctloutput, 139303989a2SRuslan Ermilov .pr_init = tcp_init, 140303989a2SRuslan Ermilov .pr_slowtimo = tcp_slowtimo, 141303989a2SRuslan Ermilov .pr_drain = tcp_drain, 142303989a2SRuslan Ermilov .pr_usrreqs = &tcp_usrreqs 143df8bae1dSRodney W. Grimes }, 144303989a2SRuslan Ermilov { 145303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 146303989a2SRuslan Ermilov .pr_domain = &inetdomain, 147303989a2SRuslan Ermilov .pr_protocol = IPPROTO_RAW, 148303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 149303989a2SRuslan Ermilov .pr_input = rip_input, 150303989a2SRuslan Ermilov .pr_ctlinput = rip_ctlinput, 151303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 152303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 153df8bae1dSRodney W. Grimes }, 154303989a2SRuslan Ermilov { 155303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 156303989a2SRuslan Ermilov .pr_domain = &inetdomain, 157303989a2SRuslan Ermilov .pr_protocol = IPPROTO_ICMP, 158303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 159303989a2SRuslan Ermilov .pr_input = icmp_input, 160303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 161303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 162df8bae1dSRodney W. Grimes }, 163303989a2SRuslan Ermilov { 164303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 165303989a2SRuslan Ermilov .pr_domain = &inetdomain, 166303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IGMP, 167303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 168303989a2SRuslan Ermilov .pr_input = igmp_input, 169303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 170303989a2SRuslan Ermilov .pr_init = igmp_init, 171303989a2SRuslan Ermilov .pr_fasttimo = igmp_fasttimo, 172303989a2SRuslan Ermilov .pr_slowtimo = igmp_slowtimo, 173303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 174df8bae1dSRodney W. Grimes }, 175303989a2SRuslan Ermilov { 176303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 177303989a2SRuslan Ermilov .pr_domain = &inetdomain, 178303989a2SRuslan Ermilov .pr_protocol = IPPROTO_RSVP, 179303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 180303989a2SRuslan Ermilov .pr_input = rsvp_input, 181303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 182303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 183f0068c4aSGarrett Wollman }, 1846a800098SYoshinobu Inoue #ifdef IPSEC 185303989a2SRuslan Ermilov { 186303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 187303989a2SRuslan Ermilov .pr_domain = &inetdomain, 188303989a2SRuslan Ermilov .pr_protocol = IPPROTO_AH, 189303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 190303989a2SRuslan Ermilov .pr_input = ah4_input, 191303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 1926a800098SYoshinobu Inoue }, 1936a800098SYoshinobu Inoue #ifdef IPSEC_ESP 194303989a2SRuslan Ermilov { 195303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 196303989a2SRuslan Ermilov .pr_domain = &inetdomain, 197303989a2SRuslan Ermilov .pr_protocol = IPPROTO_ESP, 198303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 199303989a2SRuslan Ermilov .pr_input = esp4_input, 200303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 2016a800098SYoshinobu Inoue }, 2026a800098SYoshinobu Inoue #endif 203303989a2SRuslan Ermilov { 204303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 205303989a2SRuslan Ermilov .pr_domain = &inetdomain, 206303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPCOMP, 207303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 208303989a2SRuslan Ermilov .pr_input = ipcomp4_input, 209303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 210cfa1ca9dSYoshinobu Inoue }, 21133841545SHajimu UMEMOTO #endif /* IPSEC */ 212e8539d32SSam Leffler #ifdef FAST_IPSEC 213303989a2SRuslan Ermilov { 214303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 215303989a2SRuslan Ermilov .pr_domain = &inetdomain, 216303989a2SRuslan Ermilov .pr_protocol = IPPROTO_AH, 217303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 218303989a2SRuslan Ermilov .pr_input = ah4_input, 219303989a2SRuslan Ermilov .pr_ctlinput = ah4_ctlinput, 220303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 221e8539d32SSam Leffler }, 222303989a2SRuslan Ermilov { 223303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 224303989a2SRuslan Ermilov .pr_domain = &inetdomain, 225303989a2SRuslan Ermilov .pr_protocol = IPPROTO_ESP, 226303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 227303989a2SRuslan Ermilov .pr_input = esp4_input, 228303989a2SRuslan Ermilov .pr_ctlinput = esp4_ctlinput, 229303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 230e8539d32SSam Leffler }, 231303989a2SRuslan Ermilov { 232303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 233303989a2SRuslan Ermilov .pr_domain = &inetdomain, 234303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPCOMP, 235303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 236303989a2SRuslan Ermilov .pr_input = ipcomp4_input, 237303989a2SRuslan Ermilov .pr_usrreqs = &nousrreqs 238e8539d32SSam Leffler }, 239e8539d32SSam Leffler #endif /* FAST_IPSEC */ 240303989a2SRuslan Ermilov { 241303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 242303989a2SRuslan Ermilov .pr_domain = &inetdomain, 243303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPV4, 244303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 245303989a2SRuslan Ermilov .pr_input = encap4_input, 246303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 247303989a2SRuslan Ermilov .pr_init = encap_init, 248303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 24933841545SHajimu UMEMOTO }, 250303989a2SRuslan Ermilov { 251303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 252303989a2SRuslan Ermilov .pr_domain = &inetdomain, 253303989a2SRuslan Ermilov .pr_protocol = IPPROTO_MOBILE, 254303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 255303989a2SRuslan Ermilov .pr_input = encap4_input, 256303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 257303989a2SRuslan Ermilov .pr_init = encap_init, 258303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 2598e96e13eSMaxim Sobolev }, 260303989a2SRuslan Ermilov { 261303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 262303989a2SRuslan Ermilov .pr_domain = &inetdomain, 263303989a2SRuslan Ermilov .pr_protocol = IPPROTO_GRE, 264303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 265303989a2SRuslan Ermilov .pr_input = encap4_input, 266303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 267303989a2SRuslan Ermilov .pr_init = encap_init, 268303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 2698e96e13eSMaxim Sobolev }, 27033841545SHajimu UMEMOTO # ifdef INET6 271303989a2SRuslan Ermilov { 272303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 273303989a2SRuslan Ermilov .pr_domain = &inetdomain, 274303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IPV6, 275303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 276303989a2SRuslan Ermilov .pr_input = encap4_input, 277303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 278303989a2SRuslan Ermilov .pr_init = encap_init, 279303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 28033841545SHajimu UMEMOTO }, 281cfa1ca9dSYoshinobu Inoue #endif 282cc6a66f2SJulian Elischer #ifdef IPXIP 283303989a2SRuslan Ermilov { 284303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 285303989a2SRuslan Ermilov .pr_domain = &inetdomain, 286303989a2SRuslan Ermilov .pr_protocol = IPPROTO_IDP, 287303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 288303989a2SRuslan Ermilov .pr_input = ipxip_input, 289303989a2SRuslan Ermilov .pr_ctlinput = ipxip_ctlinput, 290303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 291cc6a66f2SJulian Elischer }, 292cc6a66f2SJulian Elischer #endif 2931e78ac21SJeffrey Hsu #ifdef PIM 294303989a2SRuslan Ermilov { 295303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 296303989a2SRuslan Ermilov .pr_domain = &inetdomain, 297303989a2SRuslan Ermilov .pr_protocol = IPPROTO_PIM, 298303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, 299303989a2SRuslan Ermilov .pr_input = pim_input, 300303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 301303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 3021e78ac21SJeffrey Hsu }, 3031e78ac21SJeffrey Hsu #endif /* PIM */ 3047c1fe953SMax Laier #ifdef DEV_PFSYNC 305303989a2SRuslan Ermilov { 306303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 307303989a2SRuslan Ermilov .pr_domain = &inetdomain, 308303989a2SRuslan Ermilov .pr_protocol = IPPROTO_PFSYNC, 309303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 310303989a2SRuslan Ermilov .pr_input = pfsync_input, 311303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 312303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 3137c1fe953SMax Laier }, 3147c1fe953SMax Laier #endif /* DEV_PFSYNC */ 315a9771948SGleb Smirnoff #ifdef DEV_CARP 316303989a2SRuslan Ermilov { 317303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 318303989a2SRuslan Ermilov .pr_domain = &inetdomain, 319303989a2SRuslan Ermilov .pr_protocol = IPPROTO_CARP, 320303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 321303989a2SRuslan Ermilov .pr_input = carp_input, 322303989a2SRuslan Ermilov .pr_output = (pr_output_t*)rip_output, 323303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 324303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 325a9771948SGleb Smirnoff }, 326a9771948SGleb Smirnoff #endif /* DEV_CARP */ 327dff3237eSAndre Oppermann /* Spacer n-times for loadable protocols. */ 328dff3237eSAndre Oppermann IPPROTOSPACER, 329dff3237eSAndre Oppermann IPPROTOSPACER, 330dff3237eSAndre Oppermann IPPROTOSPACER, 331dff3237eSAndre Oppermann IPPROTOSPACER, 332dff3237eSAndre Oppermann IPPROTOSPACER, 333dff3237eSAndre Oppermann IPPROTOSPACER, 334dff3237eSAndre Oppermann IPPROTOSPACER, 335dff3237eSAndre Oppermann IPPROTOSPACER, 336df8bae1dSRodney W. Grimes /* raw wildcard */ 337303989a2SRuslan Ermilov { 338303989a2SRuslan Ermilov .pr_type = SOCK_RAW, 339303989a2SRuslan Ermilov .pr_domain = &inetdomain, 340303989a2SRuslan Ermilov .pr_flags = PR_ATOMIC|PR_ADDR, 341303989a2SRuslan Ermilov .pr_input = rip_input, 342303989a2SRuslan Ermilov .pr_ctloutput = rip_ctloutput, 343303989a2SRuslan Ermilov .pr_init = rip_init, 344303989a2SRuslan Ermilov .pr_usrreqs = &rip_usrreqs 345df8bae1dSRodney W. Grimes }, 346df8bae1dSRodney W. Grimes }; 347df8bae1dSRodney W. Grimes 3484d77a549SAlfred Perlstein extern int in_inithead(void **, int); 3495c2dae8eSGarrett Wollman 350303989a2SRuslan Ermilov struct domain inetdomain = { 351303989a2SRuslan Ermilov .dom_family = AF_INET, 352303989a2SRuslan Ermilov .dom_name = "internet", 353303989a2SRuslan Ermilov .dom_protosw = inetsw, 354303989a2SRuslan Ermilov .dom_protoswNPROTOSW = &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 355303989a2SRuslan Ermilov .dom_rtattach = in_inithead, 356303989a2SRuslan Ermilov .dom_rtoffset = 32, 357303989a2SRuslan Ermilov .dom_maxrtkey = sizeof(struct sockaddr_in) 3585c2dae8eSGarrett Wollman }; 359df8bae1dSRodney W. Grimes 360748e0b0aSGarrett Wollman DOMAIN_SET(inet); 361748e0b0aSGarrett Wollman 362602d513cSGarrett Wollman SYSCTL_NODE(_net, PF_INET, inet, CTLFLAG_RW, 0, 363602d513cSGarrett Wollman "Internet Family"); 36498163b98SPoul-Henning Kamp 36598163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_IP, ip, CTLFLAG_RW, 0, "IP"); 36698163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_ICMP, icmp, CTLFLAG_RW, 0, "ICMP"); 36798163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_UDP, udp, CTLFLAG_RW, 0, "UDP"); 36898163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_TCP, tcp, CTLFLAG_RW, 0, "TCP"); 36998163b98SPoul-Henning Kamp SYSCTL_NODE(_net_inet, IPPROTO_IGMP, igmp, CTLFLAG_RW, 0, "IGMP"); 370b9234fafSSam Leffler #ifdef FAST_IPSEC 371b9234fafSSam Leffler /* XXX no protocol # to use, pick something "reserved" */ 372b9234fafSSam Leffler SYSCTL_NODE(_net_inet, 253, ipsec, CTLFLAG_RW, 0, "IPSEC"); 373b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_AH, ah, CTLFLAG_RW, 0, "AH"); 374b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_ESP, esp, CTLFLAG_RW, 0, "ESP"); 375b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_IPCOMP, ipcomp, CTLFLAG_RW, 0, "IPCOMP"); 376b9234fafSSam Leffler SYSCTL_NODE(_net_inet, IPPROTO_IPIP, ipip, CTLFLAG_RW, 0, "IPIP"); 377b9234fafSSam Leffler #else 3786a800098SYoshinobu Inoue #ifdef IPSEC 3796a800098SYoshinobu Inoue SYSCTL_NODE(_net_inet, IPPROTO_AH, ipsec, CTLFLAG_RW, 0, "IPSEC"); 3806a800098SYoshinobu Inoue #endif /* IPSEC */ 381b9234fafSSam Leffler #endif /* !FAST_IPSEC */ 382117bcae7SGarrett Wollman SYSCTL_NODE(_net_inet, IPPROTO_RAW, raw, CTLFLAG_RW, 0, "RAW"); 3831e78ac21SJeffrey Hsu #ifdef PIM 3841e78ac21SJeffrey Hsu SYSCTL_NODE(_net_inet, IPPROTO_PIM, pim, CTLFLAG_RW, 0, "PIM"); 3851e78ac21SJeffrey Hsu #endif 3866de8d9dcSMax Laier #ifdef DEV_PFSYNC 3876de8d9dcSMax Laier SYSCTL_NODE(_net_inet, IPPROTO_PFSYNC, pfsync, CTLFLAG_RW, 0, "PFSYNC"); 3886de8d9dcSMax Laier #endif 389a9771948SGleb Smirnoff #ifdef DEV_CARP 390a9771948SGleb Smirnoff SYSCTL_NODE(_net_inet, IPPROTO_CARP, carp, CTLFLAG_RW, 0, "CARP"); 391a9771948SGleb Smirnoff #endif 392