The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/netinet/in_proto.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: in_proto.c,v 1.68.4.1 2005/08/15 19:05:04 tron Exp $   */
    2 
    3 /*
    4  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. Neither the name of the project nor the names of its contributors
   16  *    may be used to endorse or promote products derived from this software
   17  *    without specific prior written permission.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
   20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
   23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   29  * SUCH DAMAGE.
   30  */
   31 
   32 /*
   33  * Copyright (c) 1982, 1986, 1993
   34  *      The Regents of the University of California.  All rights reserved.
   35  *
   36  * Redistribution and use in source and binary forms, with or without
   37  * modification, are permitted provided that the following conditions
   38  * are met:
   39  * 1. Redistributions of source code must retain the above copyright
   40  *    notice, this list of conditions and the following disclaimer.
   41  * 2. Redistributions in binary form must reproduce the above copyright
   42  *    notice, this list of conditions and the following disclaimer in the
   43  *    documentation and/or other materials provided with the distribution.
   44  * 3. Neither the name of the University nor the names of its contributors
   45  *    may be used to endorse or promote products derived from this software
   46  *    without specific prior written permission.
   47  *
   48  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   49  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   50  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   51  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   52  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   53  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   54  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   55  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   56  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   57  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   58  * SUCH DAMAGE.
   59  *
   60  *      @(#)in_proto.c  8.2 (Berkeley) 2/9/95
   61  */
   62 
   63 #include <sys/cdefs.h>
   64 __KERNEL_RCSID(0, "$NetBSD: in_proto.c,v 1.68.4.1 2005/08/15 19:05:04 tron Exp $");
   65 
   66 #include "opt_mrouting.h"
   67 #include "opt_eon.h"                    /* ISO CLNL over IP */
   68 #include "opt_iso.h"                    /* ISO TP tunneled over IP */
   69 #include "opt_ns.h"                     /* NSIP: XNS tunneled over IP */
   70 #include "opt_inet.h"
   71 #include "opt_ipsec.h"
   72 #include "opt_pim.h"
   73 
   74 #include <sys/param.h>
   75 #include <sys/socket.h>
   76 #include <sys/protosw.h>
   77 #include <sys/domain.h>
   78 #include <sys/mbuf.h>
   79 
   80 #include <net/if.h>
   81 #include <net/radix.h>
   82 #include <net/route.h>
   83 
   84 #include <netinet/in.h>
   85 #include <netinet/in_systm.h>
   86 #include <netinet/ip.h>
   87 #include <netinet/ip_var.h>
   88 #include <netinet/ip_icmp.h>
   89 #include <netinet/in_pcb.h>
   90 
   91 #ifdef INET6
   92 #ifndef INET
   93 #include <netinet/in.h>
   94 #endif
   95 #include <netinet/ip6.h>
   96 #endif
   97 
   98 #include <netinet/igmp_var.h>
   99 #ifdef PIM
  100 #include <netinet/pim_var.h>
  101 #endif
  102 #include <netinet/tcp.h>
  103 #include <netinet/tcp_fsm.h>
  104 #include <netinet/tcp_seq.h>
  105 #include <netinet/tcp_timer.h>
  106 #include <netinet/tcp_var.h>
  107 #include <netinet/tcpip.h>
  108 #include <netinet/tcp_debug.h>
  109 #include <netinet/udp.h>
  110 #include <netinet/udp_var.h>
  111 #include <netinet/ip_encap.h>
  112 /*
  113  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
  114  */
  115 
  116 #ifdef IPSEC
  117 #include <netinet6/ipsec.h>
  118 #include <netinet6/ah.h>
  119 #ifdef IPSEC_ESP
  120 #include <netinet6/esp.h>
  121 #endif
  122 #include <netinet6/ipcomp.h>
  123 #endif /* IPSEC */
  124 
  125 #ifdef FAST_IPSEC
  126 #include <netipsec/ipsec.h>
  127 #include <netipsec/key.h>
  128 #endif  /* FAST_IPSEC */
  129 
  130 #ifdef NSIP
  131 #include <netns/ns_var.h>
  132 #include <netns/idp_var.h>
  133 #endif /* NSIP */
  134 
  135 #ifdef TPIP
  136 #include <netiso/tp_param.h>
  137 #include <netiso/tp_var.h>
  138 #endif /* TPIP */
  139 
  140 #ifdef EON
  141 #include <netiso/eonvar.h>
  142 #endif /* EON */
  143 
  144 #include "gre.h"
  145 #if NGRE > 0
  146 #include <netinet/ip_gre.h>
  147 #endif
  148 
  149 #include "bridge.h"
  150 
  151 DOMAIN_DEFINE(inetdomain);      /* forward declare and add to link set */
  152 
  153 const struct protosw inetsw[] = {
  154 { 0,            &inetdomain,    0,              0,
  155   0,            ip_output,      0,              0,
  156   0,
  157   ip_init,      0,              ip_slowtimo,    ip_drain,       NULL
  158 },
  159 { SOCK_DGRAM,   &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR|PR_PURGEIF,
  160   udp_input,    0,              udp_ctlinput,   udp_ctloutput,
  161   udp_usrreq,
  162   udp_init,     0,              0,              0,              NULL
  163 },
  164 { SOCK_STREAM,  &inetdomain,    IPPROTO_TCP,    PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN|PR_ABRTACPTDIS|PR_PURGEIF,
  165   tcp_input,    0,              tcp_ctlinput,   tcp_ctloutput,
  166   tcp_usrreq,
  167   tcp_init,     0,              tcp_slowtimo,   tcp_drain,      NULL
  168 },
  169 { SOCK_RAW,     &inetdomain,    IPPROTO_RAW,    PR_ATOMIC|PR_ADDR|PR_PURGEIF,
  170   rip_input,    rip_output,     rip_ctlinput,   rip_ctloutput,
  171   rip_usrreq,
  172   0,            0,              0,              0,
  173 },
  174 { SOCK_RAW,     &inetdomain,    IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  175   icmp_input,   rip_output,     rip_ctlinput,   rip_ctloutput,
  176   rip_usrreq,
  177   icmp_init,    0,              0,              0,              NULL
  178 },
  179 #ifdef IPSEC
  180 { SOCK_RAW,     &inetdomain,    IPPROTO_AH,     PR_ATOMIC|PR_ADDR,
  181   ah4_input,    0,              ah4_ctlinput,   0,
  182   0,
  183   0,            0,              0,              0,              NULL
  184 },
  185 #ifdef IPSEC_ESP
  186 { SOCK_RAW,     &inetdomain,    IPPROTO_ESP,    PR_ATOMIC|PR_ADDR,
  187   esp4_input,
  188         0,              esp4_ctlinput,  0,
  189   0,
  190   0,            0,              0,              0,              NULL
  191 },
  192 #endif
  193 { SOCK_RAW,     &inetdomain,    IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR,
  194   ipcomp4_input,
  195  0,             0,              0,
  196   0,
  197   0,            0,              0,              0,              NULL
  198 },
  199 #endif /* IPSEC */
  200 #ifdef FAST_IPSEC
  201 { SOCK_RAW,     &inetdomain,    IPPROTO_AH,     PR_ATOMIC|PR_ADDR,
  202   ipsec4_common_input,  0,              ah4_ctlinput,   0,
  203   0,
  204   0,            0,              0,              0,              NULL
  205 },
  206 { SOCK_RAW,     &inetdomain,    IPPROTO_ESP,    PR_ATOMIC|PR_ADDR,
  207   ipsec4_common_input,    0,            esp4_ctlinput,  0,
  208   0,
  209   0,            0,              0,              0,              NULL
  210 },
  211 { SOCK_RAW,     &inetdomain,    IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR,
  212   ipsec4_common_input,    0,            0,              0,
  213   0,
  214   0,            0,              0,              0,              NULL
  215 },
  216 #endif /* FAST_IPSEC */
  217 { SOCK_RAW,     &inetdomain,    IPPROTO_IPV4,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  218   encap4_input, rip_output,     rip_ctlinput,   rip_ctloutput,
  219   rip_usrreq,   /*XXX*/
  220   encap_init,   0,              0,              0,
  221 },
  222 #ifdef INET6
  223 { SOCK_RAW,     &inetdomain,    IPPROTO_IPV6,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  224   encap4_input, rip_output,     rip_ctlinput,   rip_ctloutput,
  225   rip_usrreq,   /*XXX*/
  226   encap_init,   0,              0,              0,
  227 },
  228 #endif /* INET6 */
  229 #if NBRIDGE > 0
  230 { SOCK_RAW,     &inetdomain,    IPPROTO_ETHERIP,        PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  231   encap4_input, rip_output,     rip_ctlinput,   rip_ctloutput,
  232   rip_usrreq,
  233   encap_init,           0,              0,              0,
  234 },
  235 #endif
  236 #if NGRE > 0
  237 { SOCK_RAW,     &inetdomain,    IPPROTO_GRE,    PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  238   gre_input,    rip_output,     rip_ctlinput,   rip_ctloutput,
  239   rip_usrreq,
  240   0,            0,              0,              0,
  241 },
  242 { SOCK_RAW,     &inetdomain,    IPPROTO_MOBILE, PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  243   gre_mobile_input,     rip_output,     rip_ctlinput,   rip_ctloutput,
  244   rip_usrreq,
  245   0,            0,              0,              0,
  246 },
  247 #endif /* NGRE > 0 */
  248 { SOCK_RAW,     &inetdomain,    IPPROTO_IGMP,   PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  249   igmp_input,   rip_output,     rip_ctlinput,   rip_ctloutput,
  250   rip_usrreq,
  251   NULL,         igmp_fasttimo,  igmp_slowtimo,  0,
  252 },
  253 #ifdef PIM
  254 { SOCK_RAW,     &inetdomain,    IPPROTO_PIM,    PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  255   pim_input,    rip_output,     rip_ctlinput,   rip_ctloutput,
  256   rip_usrreq,
  257   NULL,         0,              0,              0,
  258 },
  259 #endif /* PIM */
  260 #ifdef TPIP
  261 { SOCK_SEQPACKET,&inetdomain,   IPPROTO_TP,     PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN|PR_LASTHDR|PR_ABRTACPTDIS,
  262   tpip_input,   0,              tpip_ctlinput,  tp_ctloutput,
  263   tp_usrreq,
  264   tp_init,      0,              tp_slowtimo,    tp_drain,
  265 },
  266 #endif /* TPIP */
  267 #ifdef ISO
  268 /* EON (ISO CLNL over IP) */
  269 #ifdef EON
  270 { SOCK_RAW,     &inetdomain,    IPPROTO_EON,    PR_LASTHDR,
  271   eoninput,     0,              eonctlinput,    0,
  272   0,
  273   eonprotoinit, 0,              0,              0,
  274 },
  275 #else
  276 { SOCK_RAW,     &inetdomain,    IPPROTO_EON,    PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  277   encap4_input, rip_output,     rip_ctlinput,   rip_ctloutput,
  278   rip_usrreq,   /*XXX*/
  279   encap_init,   0,              0,              0,
  280 },
  281 #endif /* EON */
  282 #endif /* ISO */
  283 #ifdef NSIP
  284 { SOCK_RAW,     &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  285   idpip_input,  NULL,           nsip_ctlinput,  0,
  286   rip_usrreq,
  287   0,            0,              0,              0,
  288 },
  289 #endif /* NSIP */
  290 /* raw wildcard */
  291 { SOCK_RAW,     &inetdomain,    0,              PR_ATOMIC|PR_ADDR|PR_LASTHDR,
  292   rip_input,    rip_output,     rip_ctlinput,   rip_ctloutput,
  293   rip_usrreq,
  294   rip_init,     0,              0,              0,
  295 },
  296 };
  297 
  298 struct domain inetdomain =
  299     { PF_INET, "internet", 0, 0, 0,
  300       inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])],
  301       rn_inithead, 32, sizeof(struct sockaddr_in) };
  302 
  303 u_char  ip_protox[IPPROTO_MAX];
  304 
  305 int icmperrppslim = 100;                        /* 100pps */

Cache object: 863e10d4bc299d6eb0429a7c45a1b7f1


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.