Annotation of XNU/bsd/netinet/in_proto.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (c) 1982, 1986, 1993
                     24:  *     The Regents of the University of California.  All rights reserved.
                     25:  *
                     26:  * Redistribution and use in source and binary forms, with or without
                     27:  * modification, are permitted provided that the following conditions
                     28:  * are met:
                     29:  * 1. Redistributions of source code must retain the above copyright
                     30:  *    notice, this list of conditions and the following disclaimer.
                     31:  * 2. Redistributions in binary form must reproduce the above copyright
                     32:  *    notice, this list of conditions and the following disclaimer in the
                     33:  *    documentation and/or other materials provided with the distribution.
                     34:  * 3. All advertising materials mentioning features or use of this software
                     35:  *    must display the following acknowledgement:
                     36:  *     This product includes software developed by the University of
                     37:  *     California, Berkeley and its contributors.
                     38:  * 4. Neither the name of the University nor the names of its contributors
                     39:  *    may be used to endorse or promote products derived from this software
                     40:  *    without specific prior written permission.
                     41:  *
                     42:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     43:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     44:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     45:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     46:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     47:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     48:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     49:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     50:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     51:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     52:  * SUCH DAMAGE.
                     53:  *
                     54:  *     @(#)in_proto.c  8.2 (Berkeley) 2/9/95
                     55:  */
                     56: 
                     57: #if ISFB31
                     58: #include "opt_ipdivert.h"
                     59: #include "opt_ipx.h"
                     60: #endif
                     61: 
                     62: #include <sys/param.h>
                     63: #include <sys/kernel.h>
                     64: #include <sys/socket.h>
                     65: #include <sys/domain.h>
                     66: #include <sys/protosw.h>
                     67: 
                     68: 
                     69: #include <sys/sysctl.h>
                     70: 
                     71: 
                     72: #include <net/if.h>
                     73: #include <net/route.h>
                     74: 
                     75: #include <netinet/in.h>
                     76: #include <netinet/in_systm.h>
                     77: #include <netinet/ip.h>
                     78: #include <netinet/ip_var.h>
                     79: #include <netinet/ip_icmp.h>
                     80: #include <netinet/igmp_var.h>
                     81: #include <netinet/tcp.h>
                     82: #include <netinet/tcp_timer.h>
                     83: #include <netinet/tcp_var.h>
                     84: #include <netinet/tcpip.h>
                     85: #include <netinet/udp.h>
                     86: #include <netinet/udp_var.h>
                     87: /*
                     88:  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
                     89:  */
                     90: 
                     91: #if IPXIP
                     92: #include <netipx/ipx_ip.h>
                     93: #endif
                     94: 
                     95: #if NSIP
                     96: #include <netns/ns.h>
                     97: #include <netns/ns_if.h>
                     98: #endif
                     99: 
                    100: extern struct domain inetdomain;
                    101: static struct pr_usrreqs nousrreqs;
                    102: 
                    103: struct protosw inetsw[] = {
                    104: { 0,           &inetdomain,    0,              0,
                    105:   0,           0,              0,              0,
                    106:   0,
                    107:   ip_init,     0,              ip_slowtimo,    ip_drain,
                    108:   0,           &nousrreqs      
                    109: },
                    110: { SOCK_DGRAM,  &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR,
                    111:   udp_input,   0,              udp_ctlinput,   ip_ctloutput,
                    112:   0,
                    113:   udp_init,    0,              0,              0,
                    114:   0, &udp_usrreqs
                    115: },
                    116: { SOCK_STREAM, &inetdomain,    IPPROTO_TCP,
                    117:        PR_CONNREQUIRED|PR_IMPLOPCL|PR_WANTRCVD,
                    118:   tcp_input,   0,              tcp_ctlinput,   tcp_ctloutput,
                    119:   0,
                    120:   tcp_init,    tcp_fasttimo,   tcp_slowtimo,   tcp_drain,
                    121:   0, &tcp_usrreqs
                    122: },
                    123: { SOCK_RAW,    &inetdomain,    IPPROTO_RAW,    PR_ATOMIC|PR_ADDR,
                    124:   rip_input,   0,              rip_ctlinput,   rip_ctloutput,
                    125:   0,
                    126:   0,           0,              0,              0,
                    127:   0, &rip_usrreqs
                    128: },
                    129: { SOCK_RAW,    &inetdomain,    IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR,
                    130:   icmp_input,  0,              0,              rip_ctloutput,
                    131:   0,
                    132:   0,           0,              0,              0,
                    133:   0, &rip_usrreqs
                    134: },
                    135: { SOCK_RAW,    &inetdomain,    IPPROTO_IGMP,   PR_ATOMIC|PR_ADDR,
                    136:   igmp_input,  0,              0,              rip_ctloutput,
                    137:   0,
                    138:   igmp_init,   igmp_fasttimo,  igmp_slowtimo,  0,
                    139:   0, &rip_usrreqs
                    140: },
                    141: { SOCK_RAW,    &inetdomain,    IPPROTO_RSVP,   PR_ATOMIC|PR_ADDR,
                    142:   rsvp_input,  0,              0,              rip_ctloutput,
                    143:   0,
                    144:   0,           0,              0,              0,
                    145:   0, &rip_usrreqs
                    146: },
                    147: { SOCK_RAW,    &inetdomain,    IPPROTO_IPIP,   PR_ATOMIC|PR_ADDR,
                    148:   ipip_input,  0,              0,              rip_ctloutput,
                    149:   0,
                    150:   0,           0,              0,              0,
                    151:   0, &rip_usrreqs
                    152: },
                    153: #if IPDIVERT
                    154: { SOCK_RAW,    &inetdomain,    IPPROTO_DIVERT, PR_ATOMIC|PR_ADDR,
                    155:   div_input,   0,              0,              ip_ctloutput,
                    156:   0,
                    157:   div_init,    0,              0,              0,
                    158:   0, &div_usrreqs,
                    159: },
                    160: #endif
                    161: #if TPIP
                    162: { SOCK_SEQPACKET,&inetdomain,  IPPROTO_TP,     PR_CONNREQUIRED|PR_WANTRCVD,
                    163:   tpip_input,  0,              tpip_ctlinput,  tp_ctloutput,
                    164:   0, tp_usrreq,
                    165:   tp_init,     0,              tp_slowtimo,    tp_drain,
                    166: },
                    167: #endif
                    168: /* EON (ISO CLNL over IP) */
                    169: #if EON
                    170: { SOCK_RAW,    &inetdomain,    IPPROTO_EON,    0,
                    171:   eoninput,    0,              eonctlinput,            0,
                    172:   0,
                    173:   eonprotoinit,        0,              0,              0,
                    174: },
                    175: #endif
                    176: #if IPXIP
                    177: { SOCK_RAW,    &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR,
                    178:   ipxip_input, 0,              ipxip_ctlinput, 0,
                    179:   0,
                    180:   0,           0,              0,              0,
                    181:   0, &rip_usrreqs
                    182: },
                    183: #endif
                    184: #if NSIP
                    185: { SOCK_RAW,    &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR,
                    186:   idpip_input, 0,              nsip_ctlinput,  0,
                    187:   0,
                    188:   0,           0,              0,              0,
                    189:   0, &rip_usrreqs
                    190: },
                    191: #endif
                    192:        /* raw wildcard */
                    193: { SOCK_RAW,    &inetdomain,    0,              PR_ATOMIC|PR_ADDR,
                    194:   rip_input,   0,              0,              rip_ctloutput,
                    195:   0,
                    196:   rip_init,    0,              0,              0,
                    197:   0, &rip_usrreqs
                    198: },
                    199: };
                    200: 
                    201: extern int in_inithead __P((void **, int));
                    202: 
                    203: int in_proto_count = (sizeof (inetsw) / sizeof (struct protosw));
                    204: 
                    205: extern void in_dinit(void);
                    206: /* A routing init function, and a header size */
                    207: struct domain inetdomain =
                    208:     { AF_INET, "internet", in_dinit, 0, 0, 
                    209:       inetsw, 0,
                    210:       in_inithead, 32, sizeof(struct sockaddr_in),
                    211:       sizeof(struct tcpiphdr), 0
                    212:     };
                    213: 
                    214: DOMAIN_SET(inet);
                    215: 
                    216: 
                    217: SYSCTL_NODE(_net,      PF_INET,                inet,   CTLFLAG_RW, 0,
                    218:        "Internet Family");
                    219: 
                    220: SYSCTL_NODE(_net_inet, IPPROTO_IP,     ip,     CTLFLAG_RW, 0,  "IP");
                    221: SYSCTL_NODE(_net_inet, IPPROTO_ICMP,   icmp,   CTLFLAG_RW, 0,  "ICMP");
                    222: SYSCTL_NODE(_net_inet, IPPROTO_UDP,    udp,    CTLFLAG_RW, 0,  "UDP");
                    223: SYSCTL_NODE(_net_inet, IPPROTO_TCP,    tcp,    CTLFLAG_RW, 0,  "TCP");
                    224: SYSCTL_NODE(_net_inet, IPPROTO_IGMP,   igmp,   CTLFLAG_RW, 0,  "IGMP");
                    225: SYSCTL_NODE(_net_inet, IPPROTO_RAW,    raw,    CTLFLAG_RW, 0,  "RAW");
                    226: #if IPDIVERT
                    227: SYSCTL_NODE(_net_inet, IPPROTO_DIVERT, div,    CTLFLAG_RW, 0,  "DIVERT");
                    228: #endif
                    229: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.