[BACK]Return to in_proto.c CVS log [TXT][DIR] Up to [local] / sys / netinet

Annotation of sys/netinet/in_proto.c, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: in_proto.c,v 1.46 2007/06/06 09:58:12 henning Exp $   */
                      2: /*     $NetBSD: in_proto.c,v 1.14 1996/02/18 18:58:32 christos Exp $   */
                      3:
                      4: /*
                      5:  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. Neither the name of the project nor the names of its contributors
                     17:  *    may be used to endorse or promote products derived from this software
                     18:  *    without specific prior written permission.
                     19:  *
                     20:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
                     21:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     22:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     23:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
                     24:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     25:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     26:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     27:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     28:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     29:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     30:  * SUCH DAMAGE.
                     31:  */
                     32:
                     33: /*
                     34:  * Copyright (c) 1982, 1986, 1993
                     35:  *     The Regents of the University of California.  All rights reserved.
                     36:  *
                     37:  * Redistribution and use in source and binary forms, with or without
                     38:  * modification, are permitted provided that the following conditions
                     39:  * are met:
                     40:  * 1. Redistributions of source code must retain the above copyright
                     41:  *    notice, this list of conditions and the following disclaimer.
                     42:  * 2. Redistributions in binary form must reproduce the above copyright
                     43:  *    notice, this list of conditions and the following disclaimer in the
                     44:  *    documentation and/or other materials provided with the distribution.
                     45:  * 3. Neither the name of the University nor the names of its contributors
                     46:  *    may be used to endorse or promote products derived from this software
                     47:  *    without specific prior written permission.
                     48:  *
                     49:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     50:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     51:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     52:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     53:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     54:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     55:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     56:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     57:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     58:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     59:  * SUCH DAMAGE.
                     60:  *
                     61:  *     @(#)COPYRIGHT   1.1 (NRL) 17 January 1995
                     62:  *
                     63:  * NRL grants permission for redistribution and use in source and binary
                     64:  * forms, with or without modification, of the software and documentation
                     65:  * created at NRL provided that the following conditions are met:
                     66:  *
                     67:  * 1. Redistributions of source code must retain the above copyright
                     68:  *    notice, this list of conditions and the following disclaimer.
                     69:  * 2. Redistributions in binary form must reproduce the above copyright
                     70:  *    notice, this list of conditions and the following disclaimer in the
                     71:  *    documentation and/or other materials provided with the distribution.
                     72:  * 3. All advertising materials mentioning features or use of this software
                     73:  *    must display the following acknowledgements:
                     74:  *     This product includes software developed by the University of
                     75:  *     California, Berkeley and its contributors.
                     76:  *     This product includes software developed at the Information
                     77:  *     Technology Division, US Naval Research Laboratory.
                     78:  * 4. Neither the name of the NRL nor the names of its contributors
                     79:  *    may be used to endorse or promote products derived from this software
                     80:  *    without specific prior written permission.
                     81:  *
                     82:  * THE SOFTWARE PROVIDED BY NRL IS PROVIDED BY NRL AND CONTRIBUTORS ``AS
                     83:  * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     84:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
                     85:  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL NRL OR
                     86:  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
                     87:  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
                     88:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
                     89:  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
                     90:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
                     91:  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
                     92:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     93:  *
                     94:  * The views and conclusions contained in the software and documentation
                     95:  * are those of the authors and should not be interpreted as representing
                     96:  * official policies, either expressed or implied, of the US Naval
                     97:  * Research Laboratory (NRL).
                     98:  */
                     99:
                    100: #include <sys/param.h>
                    101: #include <sys/socket.h>
                    102: #include <sys/protosw.h>
                    103: #include <sys/domain.h>
                    104: #include <sys/mbuf.h>
                    105:
                    106: #include <net/if.h>
                    107: #include <net/route.h>
                    108: #include <net/radix.h>
                    109: #ifndef SMALL_KERNEL
                    110: #include <net/radix_mpath.h>
                    111: #endif
                    112:
                    113: #include <netinet/in.h>
                    114: #include <netinet/in_systm.h>
                    115: #include <netinet/ip.h>
                    116: #include <netinet/ip_var.h>
                    117: #include <netinet/ip_icmp.h>
                    118: #include <netinet/in_pcb.h>
                    119:
                    120: #ifdef INET6
                    121: #ifndef INET
                    122: #include <netinet/in.h>
                    123: #endif
                    124: #include <netinet/ip6.h>
                    125: #endif
                    126:
                    127: #include <netinet/igmp_var.h>
                    128: #ifdef PIM
                    129: #include <netinet/pim_var.h>
                    130: #endif
                    131: #include <netinet/tcp.h>
                    132: #include <netinet/tcp_timer.h>
                    133: #include <netinet/tcp_var.h>
                    134: #include <netinet/udp.h>
                    135: #include <netinet/udp_var.h>
                    136:
                    137: /*
                    138:  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
                    139:  */
                    140:
                    141: #include "gif.h"
                    142: #if NGIF > 0
                    143: #include <netinet/in_gif.h>
                    144: #endif
                    145:
                    146: #ifdef INET6
                    147: #include <netinet6/ip6_var.h>
                    148: #endif /* INET6 */
                    149:
                    150: #ifdef IPSEC
                    151: #include <netinet/ip_ipsp.h>
                    152: #include <netinet/ip_ether.h>
                    153: #endif
                    154:
                    155: #include <netinet/ip_ipip.h>
                    156:
                    157: #include "gre.h"
                    158: #if NGRE > 0
                    159: #include <netinet/ip_gre.h>
                    160: #include <net/if_gre.h>
                    161: #endif
                    162:
                    163: #include "carp.h"
                    164: #if NCARP > 0
                    165: #include <netinet/ip_carp.h>
                    166: #endif
                    167:
                    168: #include "pfsync.h"
                    169: #if NPFSYNC > 0
                    170: #include <net/pfvar.h>
                    171: #include <net/if_pfsync.h>
                    172: #endif
                    173:
                    174: extern struct domain inetdomain;
                    175:
                    176: struct protosw inetsw[] = {
                    177: { 0,           &inetdomain,    0,              0,
                    178:   0,           ip_output,      0,              0,
                    179:   0,
                    180:   ip_init,     0,              ip_slowtimo,    ip_drain,       ip_sysctl
                    181: },
                    182: { SOCK_DGRAM,  &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR,
                    183:   udp_input,   0,              udp_ctlinput,   ip_ctloutput,
                    184:   udp_usrreq,
                    185:   udp_init,    0,              0,              0,              udp_sysctl
                    186: },
                    187: { SOCK_STREAM, &inetdomain,    IPPROTO_TCP,    PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS,
                    188:   tcp_input,   0,              tcp_ctlinput,   tcp_ctloutput,
                    189:   tcp_usrreq,
                    190:   tcp_init,    0,              tcp_slowtimo,   tcp_drain,      tcp_sysctl
                    191: },
                    192: { SOCK_RAW,    &inetdomain,    IPPROTO_RAW,    PR_ATOMIC|PR_ADDR,
                    193:   rip_input,   rip_output,     0,              rip_ctloutput,
                    194:   rip_usrreq,
                    195:   0,           0,              0,              0,
                    196: },
                    197: { SOCK_RAW,    &inetdomain,    IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR,
                    198:   icmp_input,  rip_output,     0,              rip_ctloutput,
                    199:   rip_usrreq,
                    200:   icmp_init,   0,              0,              0,              icmp_sysctl
                    201: },
                    202: #if NGIF > 0
                    203: { SOCK_RAW,    &inetdomain,    IPPROTO_IPV4,   PR_ATOMIC|PR_ADDR,
                    204:   in_gif_input,        rip_output,     0,              rip_ctloutput,
                    205:   rip_usrreq,
                    206:   0,           0,              0,              0,              ipip_sysctl
                    207: },
                    208: #ifdef INET6
                    209: { SOCK_RAW,    &inetdomain,    IPPROTO_IPV6,   PR_ATOMIC|PR_ADDR,
                    210:   in_gif_input,        rip_output,      0,             0,
                    211:   rip_usrreq,  /*XXX*/
                    212:   0,           0,              0,              0,
                    213: },
                    214: #endif /* INET6 */
                    215: #else /* NGIF */
                    216: { SOCK_RAW,    &inetdomain,    IPPROTO_IPIP,   PR_ATOMIC|PR_ADDR,
                    217:   ip4_input,   rip_output,     0,              rip_ctloutput,
                    218:   rip_usrreq,
                    219:   0,           0,              0,              0,              ipip_sysctl
                    220: },
                    221: #ifdef INET6
                    222: { SOCK_RAW,    &inetdomain,    IPPROTO_IPV6,   PR_ATOMIC|PR_ADDR,
                    223:   ip4_input,   rip_output,     0,              rip_ctloutput,
                    224:   rip_usrreq,  /*XXX*/
                    225:   0,           0,              0,              0,
                    226: },
                    227: #endif /* INET6 */
                    228: #endif /*NGIF*/
                    229: { SOCK_RAW,    &inetdomain,    IPPROTO_IGMP,   PR_ATOMIC|PR_ADDR,
                    230:   igmp_input,  rip_output,     0,              rip_ctloutput,
                    231:   rip_usrreq,
                    232:   igmp_init,   igmp_fasttimo,  igmp_slowtimo,  0,
                    233: },
                    234: #ifdef PIM
                    235: { SOCK_RAW,    &inetdomain,    IPPROTO_PIM,    PR_ATOMIC|PR_ADDR,
                    236:   pim_input,   rip_output,     0,              rip_ctloutput,
                    237:   rip_usrreq,
                    238:   0,           0,              0,              0,
                    239: },
                    240: #endif /* PIM */
                    241: #ifdef IPSEC
                    242: { SOCK_RAW,   &inetdomain,    IPPROTO_AH,     PR_ATOMIC|PR_ADDR,
                    243:   ah4_input,   rip_output,    ah4_ctlinput,   rip_ctloutput,
                    244:   rip_usrreq,
                    245:   0,          0,              0,              0,               ah_sysctl
                    246: },
                    247: { SOCK_RAW,   &inetdomain,    IPPROTO_ESP,    PR_ATOMIC|PR_ADDR,
                    248:   esp4_input,  rip_output,    esp4_ctlinput,  rip_ctloutput,
                    249:   rip_usrreq,
                    250:   0,          0,              0,              0,               esp_sysctl
                    251: },
                    252: { SOCK_RAW,   &inetdomain,    IPPROTO_ETHERIP, PR_ATOMIC|PR_ADDR,
                    253:   etherip_input,  rip_output, 0,              rip_ctloutput,
                    254:   rip_usrreq,
                    255:   0,          0,              0,              0,               etherip_sysctl
                    256: },
                    257: { SOCK_RAW,   &inetdomain,    IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR,
                    258:   ipcomp4_input,  rip_output, 0,              rip_ctloutput,
                    259:   rip_usrreq,
                    260:   0,          0,              0,              0,                ipcomp_sysctl
                    261: },
                    262: #endif /* IPSEC */
                    263: #if NGRE > 0
                    264: { SOCK_RAW,     &inetdomain,    IPPROTO_GRE,    PR_ATOMIC|PR_ADDR,
                    265:   gre_input,    rip_output,     0,              rip_ctloutput,
                    266:   rip_usrreq,
                    267:   0,            0,              0,             0,              gre_sysctl
                    268: },
                    269: { SOCK_RAW,     &inetdomain,    IPPROTO_MOBILE, PR_ATOMIC|PR_ADDR,
                    270:   gre_mobile_input,     rip_output,     0,              rip_ctloutput,
                    271:   rip_usrreq,
                    272:   0,            0,              0,              0,             ipmobile_sysctl
                    273: },
                    274: #endif /* NGRE > 0 */
                    275: #if NCARP > 0
                    276: { SOCK_RAW,    &inetdomain,    IPPROTO_CARP,   PR_ATOMIC|PR_ADDR,
                    277:   carp_proto_input,    rip_output,     0,              rip_ctloutput,
                    278:   rip_usrreq,
                    279:   0,           0,              0,              0,              carp_sysctl
                    280: },
                    281: #endif /* NCARP > 0 */
                    282: #if NPFSYNC > 0
                    283: { SOCK_RAW,    &inetdomain,    IPPROTO_PFSYNC, PR_ATOMIC|PR_ADDR,
                    284:   pfsync_input,        rip_output,     0,              rip_ctloutput,
                    285:   rip_usrreq,
                    286:   0,           0,              0,              0,
                    287: },
                    288: #endif /* NPFSYNC > 0 */
                    289: /* raw wildcard */
                    290: { SOCK_RAW,    &inetdomain,    0,              PR_ATOMIC|PR_ADDR,
                    291:   rip_input,   rip_output,     0,              rip_ctloutput,
                    292:   rip_usrreq,
                    293:   rip_init,    0,              0,              0,
                    294: },
                    295: };
                    296:
                    297: struct domain inetdomain =
                    298:     { AF_INET, "internet", 0, 0, 0,
                    299:       inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 0,
                    300: #ifndef SMALL_KERNEL
                    301:       rn_mpath_inithead,
                    302: #else
                    303:       rn_inithead,
                    304: #endif
                    305:       32, sizeof(struct sockaddr_in) };
                    306:
                    307: #ifdef notyet /* XXXX */
                    308: #include "hy.h"
                    309: #if NHY > 0
                    310: /*
                    311:  * HYPERchannel protocol family: raw interface.
                    312:  */
                    313: int    rhy_output();
                    314: extern struct domain hydomain;
                    315:
                    316: struct protosw hysw[] = {
                    317: { SOCK_RAW,    &hydomain,      0,              PR_ATOMIC|PR_ADDR,
                    318:   0,           rhy_output,     0,              0,
                    319:   rip_usrreq,
                    320:   0,           0,              0,              0,
                    321: },
                    322: };
                    323:
                    324: struct domain hydomain =
                    325:     { AF_HYLINK, "hy", 0, 0, 0, hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] };
                    326: #endif
                    327: #endif

CVSweb