[BACK]Return to in.h CVS log [TXT][DIR] Up to [local] / sys / netinet

Annotation of sys/netinet/in.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: in.h,v 1.73 2006/10/11 09:34:51 henning Exp $ */
        !             2: /*     $NetBSD: in.h,v 1.20 1996/02/13 23:41:47 christos Exp $ */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1982, 1986, 1990, 1993
        !             6:  *     The Regents of the University of California.  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 University 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 REGENTS 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 REGENTS 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:  *     @(#)in.h        8.3 (Berkeley) 1/3/94
        !            33:  */
        !            34:
        !            35: /*
        !            36:  * Constants and structures defined by the internet system,
        !            37:  * Per RFC 790, September 1981, and numerous additions.
        !            38:  */
        !            39:
        !            40: #ifndef _NETINET_IN_H_
        !            41: #define        _NETINET_IN_H_
        !            42:
        !            43: /*
        !            44:  * Protocols
        !            45:  */
        !            46: #define        IPPROTO_IP              0               /* dummy for IP */
        !            47: #define IPPROTO_HOPOPTS                IPPROTO_IP      /* Hop-by-hop option header */
        !            48: #define        IPPROTO_ICMP            1               /* control message protocol */
        !            49: #define        IPPROTO_IGMP            2               /* group mgmt protocol */
        !            50: #define        IPPROTO_GGP             3               /* gateway^2 (deprecated) */
        !            51: #define        IPPROTO_IPIP            4               /* IP inside IP */
        !            52: #define        IPPROTO_IPV4            IPPROTO_IPIP    /* IP inside IP */
        !            53: #define        IPPROTO_TCP             6               /* tcp */
        !            54: #define        IPPROTO_EGP             8               /* exterior gateway protocol */
        !            55: #define        IPPROTO_PUP             12              /* pup */
        !            56: #define        IPPROTO_UDP             17              /* user datagram protocol */
        !            57: #define        IPPROTO_IDP             22              /* xns idp */
        !            58: #define        IPPROTO_TP              29              /* tp-4 w/ class negotiation */
        !            59: #define IPPROTO_IPV6           41              /* IPv6 in IPv6 */
        !            60: #define IPPROTO_ROUTING                43              /* Routing header */
        !            61: #define IPPROTO_FRAGMENT       44              /* Fragmentation/reassembly header */
        !            62: #define IPPROTO_RSVP           46              /* resource reservation */
        !            63: #define        IPPROTO_GRE             47              /* GRE encap, RFCs 1701/1702 */
        !            64: #define        IPPROTO_ESP             50              /* Encap. Security Payload */
        !            65: #define        IPPROTO_AH              51              /* Authentication header */
        !            66: #define        IPPROTO_MOBILE          55              /* IP Mobility, RFC 2004 */
        !            67: #define IPPROTO_ICMPV6         58              /* ICMP for IPv6 */
        !            68: #define IPPROTO_NONE           59              /* No next header */
        !            69: #define IPPROTO_DSTOPTS                60              /* Destination options header */
        !            70: #define        IPPROTO_EON             80              /* ISO cnlp */
        !            71: #define IPPROTO_ETHERIP                97              /* Ethernet in IPv4 */
        !            72: #define        IPPROTO_ENCAP           98              /* encapsulation header */
        !            73: #define IPPROTO_PIM            103             /* Protocol indep. multicast */
        !            74: #define IPPROTO_IPCOMP         108             /* IP Payload Comp. Protocol */
        !            75: #define        IPPROTO_CARP            112             /* CARP */
        !            76: #define        IPPROTO_PFSYNC          240             /* PFSYNC */
        !            77: #define        IPPROTO_RAW             255             /* raw IP packet */
        !            78:
        !            79: #define        IPPROTO_MAX             256
        !            80:
        !            81: /*
        !            82:  * From FreeBSD:
        !            83:  *
        !            84:  * Local port number conventions:
        !            85:  *
        !            86:  * When a user does a bind(2) or connect(2) with a port number of zero,
        !            87:  * a non-conflicting local port address is chosen.
        !            88:  * The default range is IPPORT_RESERVED through
        !            89:  * IPPORT_USERRESERVED, although that is settable by sysctl.
        !            90:  *
        !            91:  * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
        !            92:  * default assignment range.
        !            93:  *
        !            94:  * The value IP_PORTRANGE_DEFAULT causes the default behavior.
        !            95:  *
        !            96:  * The value IP_PORTRANGE_HIGH changes the range of candidate port numbers
        !            97:  * into the "high" range.  These are reserved for client outbound connections
        !            98:  * which do not want to be filtered by any firewalls.
        !            99:  *
        !           100:  * The value IP_PORTRANGE_LOW changes the range to the "low" are
        !           101:  * that is (by convention) restricted to privileged processes.  This
        !           102:  * convention is based on "vouchsafe" principles only.  It is only secure
        !           103:  * if you trust the remote host to restrict these ports.
        !           104:  *
        !           105:  * The default range of ports and the high range can be changed by
        !           106:  * sysctl(3).  (net.inet.ip.port{hi}{first,last})
        !           107:  *
        !           108:  * Changing those values has bad security implications if you are
        !           109:  * using a a stateless firewall that is allowing packets outside of that
        !           110:  * range in order to allow transparent outgoing connections.
        !           111:  *
        !           112:  * Such a firewall configuration will generally depend on the use of these
        !           113:  * default values.  If you change them, you may find your Security
        !           114:  * Administrator looking for you with a heavy object.
        !           115:  */
        !           116:
        !           117: /*
        !           118:  * Ports < IPPORT_RESERVED are reserved for
        !           119:  * privileged processes (e.g. root).
        !           120:  * Ports > IPPORT_USERRESERVED are reserved
        !           121:  * for servers, not necessarily privileged.
        !           122:  */
        !           123: #define        IPPORT_RESERVED         1024
        !           124: #define        IPPORT_USERRESERVED     49151
        !           125:
        !           126: /*
        !           127:  * Default local port range to use by setting IP_PORTRANGE_HIGH
        !           128:  */
        !           129: #define IPPORT_HIFIRSTAUTO     49152
        !           130: #define IPPORT_HILASTAUTO      65535
        !           131:
        !           132: /*
        !           133:  * IP Version 4 Internet address (a structure for historical reasons)
        !           134:  */
        !           135: struct in_addr {
        !           136:        in_addr_t s_addr;
        !           137: };
        !           138:
        !           139: /* last return value of *_input(), meaning "all job for this pkt is done".  */
        !           140: #define        IPPROTO_DONE            257
        !           141:
        !           142: /*
        !           143:  * Definitions of bits in internet address integers.
        !           144:  * On subnets, the decomposition of addresses to host and net parts
        !           145:  * is done according to subnet mask, not the masks here.
        !           146:  *
        !           147:  * By byte-swapping the constants, we avoid ever having to byte-swap IP
        !           148:  * addresses inside the kernel.  Unfortunately, user-level programs rely
        !           149:  * on these macros not doing byte-swapping.
        !           150:  */
        !           151: #ifdef _KERNEL
        !           152: #define        __IPADDR(x)     ((u_int32_t) htonl((u_int32_t)(x)))
        !           153: #else
        !           154: #define        __IPADDR(x)     ((u_int32_t)(x))
        !           155: #endif
        !           156:
        !           157: #define        IN_CLASSA(i)            (((u_int32_t)(i) & __IPADDR(0x80000000)) == \
        !           158:                                 __IPADDR(0x00000000))
        !           159: #define        IN_CLASSA_NET           __IPADDR(0xff000000)
        !           160: #define        IN_CLASSA_NSHIFT        24
        !           161: #define        IN_CLASSA_HOST          __IPADDR(0x00ffffff)
        !           162: #define        IN_CLASSA_MAX           128
        !           163:
        !           164: #define        IN_CLASSB(i)            (((u_int32_t)(i) & __IPADDR(0xc0000000)) == \
        !           165:                                 __IPADDR(0x80000000))
        !           166: #define        IN_CLASSB_NET           __IPADDR(0xffff0000)
        !           167: #define        IN_CLASSB_NSHIFT        16
        !           168: #define        IN_CLASSB_HOST          __IPADDR(0x0000ffff)
        !           169: #define        IN_CLASSB_MAX           65536
        !           170:
        !           171: #define        IN_CLASSC(i)            (((u_int32_t)(i) & __IPADDR(0xe0000000)) == \
        !           172:                                 __IPADDR(0xc0000000))
        !           173: #define        IN_CLASSC_NET           __IPADDR(0xffffff00)
        !           174: #define        IN_CLASSC_NSHIFT        8
        !           175: #define        IN_CLASSC_HOST          __IPADDR(0x000000ff)
        !           176:
        !           177: #define        IN_CLASSD(i)            (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
        !           178:                                 __IPADDR(0xe0000000))
        !           179: /* These ones aren't really net and host fields, but routing needn't know. */
        !           180: #define        IN_CLASSD_NET           __IPADDR(0xf0000000)
        !           181: #define        IN_CLASSD_NSHIFT        28
        !           182: #define        IN_CLASSD_HOST          __IPADDR(0x0fffffff)
        !           183: #define        IN_MULTICAST(i)         IN_CLASSD(i)
        !           184:
        !           185: #define        IN_EXPERIMENTAL(i)      (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
        !           186:                                 __IPADDR(0xf0000000))
        !           187: #define        IN_BADCLASS(i)          (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
        !           188:                                 __IPADDR(0xf0000000))
        !           189:
        !           190: #define        IN_LOCAL_GROUP(i)       (((u_int32_t)(i) & __IPADDR(0xffffff00)) == \
        !           191:                                 __IPADDR(0xe0000000))
        !           192:
        !           193: #define        INADDR_ANY              __IPADDR(0x00000000)
        !           194: #define        INADDR_LOOPBACK         __IPADDR(0x7f000001)
        !           195: #define        INADDR_BROADCAST        __IPADDR(0xffffffff)    /* must be masked */
        !           196: #ifndef _KERNEL
        !           197: #define        INADDR_NONE             __IPADDR(0xffffffff)    /* -1 return */
        !           198: #endif
        !           199:
        !           200: #define        INADDR_UNSPEC_GROUP     __IPADDR(0xe0000000)    /* 224.0.0.0 */
        !           201: #define        INADDR_ALLHOSTS_GROUP   __IPADDR(0xe0000001)    /* 224.0.0.1 */
        !           202: #define        INADDR_ALLROUTERS_GROUP __IPADDR(0xe0000002)    /* 224.0.0.2 */
        !           203: #define        INADDR_CARP_GROUP       __IPADDR(0xe0000012)    /* 224.0.0.18 */
        !           204: #define        INADDR_PFSYNC_GROUP     __IPADDR(0xe00000f0)    /* 224.0.0.240 */
        !           205: #define INADDR_MAX_LOCAL_GROUP __IPADDR(0xe00000ff)    /* 224.0.0.255 */
        !           206:
        !           207: #define        IN_LOOPBACKNET          127                     /* official! */
        !           208:
        !           209: /*
        !           210:  * IP Version 4 socket address.
        !           211:  */
        !           212: struct sockaddr_in {
        !           213:        u_int8_t    sin_len;
        !           214:        sa_family_t sin_family;
        !           215:        in_port_t   sin_port;
        !           216:        struct      in_addr sin_addr;
        !           217:        int8_t      sin_zero[8];
        !           218: };
        !           219:
        !           220: /*
        !           221:  * Structure used to describe IP options.
        !           222:  * Used to store options internally, to pass them to a process,
        !           223:  * or to restore options retrieved earlier.
        !           224:  * The ip_dst is used for the first-hop gateway when using a source route
        !           225:  * (this gets put into the header proper).
        !           226:  */
        !           227: struct ip_opts {
        !           228:        struct in_addr  ip_dst;         /* first hop, 0 w/o src rt */
        !           229: #if defined(__cplusplus)
        !           230:        int8_t          Ip_opts[40];    /* cannot have same name as class */
        !           231: #else
        !           232:        int8_t          ip_opts[40];    /* actually variable in size */
        !           233: #endif
        !           234: };
        !           235:
        !           236: /*
        !           237:  * Options for use with [gs]etsockopt at the IP level.
        !           238:  * First word of comment is data type; bool is stored in int.
        !           239:  */
        !           240: #define        IP_OPTIONS              1    /* buf/ip_opts; set/get IP options */
        !           241: #define        IP_HDRINCL              2    /* int; header is included with data */
        !           242: #define        IP_TOS                  3    /* int; IP type of service and preced. */
        !           243: #define        IP_TTL                  4    /* int; IP time to live */
        !           244: #define        IP_RECVOPTS             5    /* bool; receive all IP opts w/dgram */
        !           245: #define        IP_RECVRETOPTS          6    /* bool; receive IP opts for response */
        !           246: #define        IP_RECVDSTADDR          7    /* bool; receive IP dst addr w/dgram */
        !           247: #define        IP_RETOPTS              8    /* ip_opts; set/get IP options */
        !           248: #define        IP_MULTICAST_IF         9    /* in_addr; set/get IP multicast i/f  */
        !           249: #define        IP_MULTICAST_TTL        10   /* u_char; set/get IP multicast ttl */
        !           250: #define        IP_MULTICAST_LOOP       11   /* u_char; set/get IP multicast loopback */
        !           251: #define        IP_ADD_MEMBERSHIP       12   /* ip_mreq; add an IP group membership */
        !           252: #define        IP_DROP_MEMBERSHIP      13   /* ip_mreq; drop an IP group membership */
        !           253:
        !           254: /* 14-17 left empty for future compatibility with FreeBSD */
        !           255:
        !           256: #define IP_PORTRANGE           19   /* int; range to choose for unspec port */
        !           257: #define IP_AUTH_LEVEL          20   /* int; authentication used */
        !           258: #define IP_ESP_TRANS_LEVEL     21   /* int; transport encryption */
        !           259: #define IP_ESP_NETWORK_LEVEL   22   /* int; full-packet encryption */
        !           260: #define IP_IPSEC_LOCAL_ID      23   /* buf; IPsec local ID */
        !           261: #define IP_IPSEC_REMOTE_ID     24   /* buf; IPsec remote ID */
        !           262: #define IP_IPSEC_LOCAL_CRED    25   /* buf; IPsec local credentials */
        !           263: #define IP_IPSEC_REMOTE_CRED   26   /* buf; IPsec remote credentials */
        !           264: #define IP_IPSEC_LOCAL_AUTH    27   /* buf; IPsec local auth material */
        !           265: #define IP_IPSEC_REMOTE_AUTH   28   /* buf; IPsec remote auth material */
        !           266: #define IP_IPCOMP_LEVEL                29   /* int; compression used */
        !           267: #define IP_RECVIF              30   /* bool; receive reception if w/dgram */
        !           268: #define IP_RECVTTL             31   /* bool; receive IP TTL w/dgram */
        !           269: #define IP_MINTTL              32   /* minimum TTL for packet or drop */
        !           270:
        !           271: /*
        !           272:  * Security levels - IPsec, not IPSO
        !           273:  */
        !           274:
        !           275: #define IPSEC_LEVEL_BYPASS      0x00    /* Bypass policy altogether */
        !           276: #define IPSEC_LEVEL_NONE        0x00    /* Send clear, accept any */
        !           277: #define IPSEC_LEVEL_AVAIL       0x01    /* Send secure if SA available */
        !           278: #define IPSEC_LEVEL_USE         0x02    /* Send secure, accept any */
        !           279: #define IPSEC_LEVEL_REQUIRE     0x03    /* Require secure inbound, also use */
        !           280: #define IPSEC_LEVEL_UNIQUE      0x04    /* Use outbound SA that is unique */
        !           281: #define IPSEC_LEVEL_DEFAULT     IPSEC_LEVEL_AVAIL
        !           282:
        !           283: #define IPSEC_AUTH_LEVEL_DEFAULT IPSEC_LEVEL_DEFAULT
        !           284: #define IPSEC_ESP_TRANS_LEVEL_DEFAULT IPSEC_LEVEL_DEFAULT
        !           285: #define IPSEC_ESP_NETWORK_LEVEL_DEFAULT IPSEC_LEVEL_DEFAULT
        !           286: #define IPSEC_IPCOMP_LEVEL_DEFAULT IPSEC_LEVEL_DEFAULT
        !           287:
        !           288: /*
        !           289:  * Defaults and limits for options
        !           290:  */
        !           291: #define        IP_DEFAULT_MULTICAST_TTL  1     /* normally limit m'casts to 1 hop  */
        !           292: #define        IP_DEFAULT_MULTICAST_LOOP 1     /* normally hear sends if a member  */
        !           293: #define        IP_MAX_MEMBERSHIPS      20      /* per socket; must fit in one mbuf */
        !           294:
        !           295: /*
        !           296:  * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
        !           297:  */
        !           298: struct ip_mreq {
        !           299:        struct  in_addr imr_multiaddr;  /* IP multicast address of group */
        !           300:        struct  in_addr imr_interface;  /* local IP address of interface */
        !           301: };
        !           302:
        !           303: /*
        !           304:  * Argument for IP_PORTRANGE:
        !           305:  * - which range to search when port is unspecified at bind() or connect()
        !           306:  */
        !           307: #define IP_PORTRANGE_DEFAULT   0       /* default range */
        !           308: #define IP_PORTRANGE_HIGH      1       /* "high" - request firewall bypass */
        !           309: #define IP_PORTRANGE_LOW       2       /* "low" - vouchsafe security */
        !           310:
        !           311: /*
        !           312:  * Buffer lengths for strings containing printable IP addresses
        !           313:  */
        !           314: #define INET_ADDRSTRLEN                16
        !           315:
        !           316: /*
        !           317:  * Definitions for inet sysctl operations.
        !           318:  *
        !           319:  * Third level is protocol number.
        !           320:  * Fourth level is desired variable within that protocol.
        !           321:  */
        !           322: #define        IPPROTO_MAXID   (IPPROTO_CARP + 1)      /* don't list to IPPROTO_MAX */
        !           323:
        !           324: #define        CTL_IPPROTO_NAMES { \
        !           325:        { "ip", CTLTYPE_NODE }, \
        !           326:        { "icmp", CTLTYPE_NODE }, \
        !           327:        { "igmp", CTLTYPE_NODE }, \
        !           328:        { "ggp", CTLTYPE_NODE }, \
        !           329:        { "ipip", CTLTYPE_NODE }, \
        !           330:        { 0, 0 }, \
        !           331:        { "tcp", CTLTYPE_NODE }, \
        !           332:        { 0, 0 }, \
        !           333:        { "egp", CTLTYPE_NODE }, \
        !           334:        { 0, 0 }, \
        !           335:        { 0, 0 }, \
        !           336:        { 0, 0 }, \
        !           337:        { "pup", CTLTYPE_NODE }, \
        !           338:        { 0, 0 }, \
        !           339:        { 0, 0 }, \
        !           340:        { 0, 0 }, \
        !           341:        { 0, 0 }, \
        !           342:        { "udp", CTLTYPE_NODE }, \
        !           343:        { 0, 0 }, \
        !           344:        { 0, 0 }, \
        !           345:        { 0, 0 }, \
        !           346:        { 0, 0 }, \
        !           347:        { 0, 0 }, \
        !           348:        { 0, 0 }, \
        !           349:        { 0, 0 }, \
        !           350:        { 0, 0 }, \
        !           351:        { 0, 0 }, \
        !           352:        { 0, 0 }, \
        !           353:        { 0, 0 }, \
        !           354:        { 0, 0 }, \
        !           355:        { 0, 0 }, \
        !           356:        { 0, 0 }, \
        !           357:        { 0, 0 }, \
        !           358:        { 0, 0 }, \
        !           359:        { 0, 0 }, \
        !           360:        { 0, 0 }, \
        !           361:        { 0, 0 }, \
        !           362:        { 0, 0 }, \
        !           363:        { 0, 0 }, \
        !           364:        { 0, 0 }, \
        !           365:        { 0, 0 }, \
        !           366:        { 0, 0 }, \
        !           367:        { 0, 0 }, \
        !           368:        { 0, 0 }, \
        !           369:        { 0, 0 }, \
        !           370:        { 0, 0 }, \
        !           371:        { 0, 0 }, \
        !           372:        { "gre", CTLTYPE_NODE }, \
        !           373:        { 0, 0 }, \
        !           374:        { 0, 0 }, \
        !           375:        { "esp", CTLTYPE_NODE }, \
        !           376:        { "ah", CTLTYPE_NODE }, \
        !           377:        { 0, 0 }, \
        !           378:        { 0, 0 }, \
        !           379:        { 0, 0 }, \
        !           380:        { "mobileip", CTLTYPE_NODE }, \
        !           381:        { 0, 0 }, \
        !           382:        { 0, 0 }, \
        !           383:        { 0, 0 }, \
        !           384:        { 0, 0 }, \
        !           385:        { 0, 0 }, \
        !           386:        { 0, 0 }, \
        !           387:        { 0, 0 }, \
        !           388:        { 0, 0 }, \
        !           389:        { 0, 0 }, \
        !           390:        { 0, 0 }, \
        !           391:        { 0, 0 }, \
        !           392:        { 0, 0 }, \
        !           393:        { 0, 0 }, \
        !           394:        { 0, 0 }, \
        !           395:        { 0, 0 }, \
        !           396:        { 0, 0 }, \
        !           397:        { 0, 0 }, \
        !           398:        { 0, 0 }, \
        !           399:        { 0, 0 }, \
        !           400:        { 0, 0 }, \
        !           401:        { 0, 0 }, \
        !           402:        { 0, 0 }, \
        !           403:        { 0, 0 }, \
        !           404:        { 0, 0 }, \
        !           405:        { 0, 0 }, \
        !           406:        { 0, 0 }, \
        !           407:        { 0, 0 }, \
        !           408:        { 0, 0 }, \
        !           409:        { 0, 0 }, \
        !           410:        { 0, 0 }, \
        !           411:        { 0, 0 }, \
        !           412:        { 0, 0 }, \
        !           413:        { 0, 0 }, \
        !           414:        { 0, 0 }, \
        !           415:        { 0, 0 }, \
        !           416:        { 0, 0 }, \
        !           417:        { 0, 0 }, \
        !           418:        { 0, 0 }, \
        !           419:        { 0, 0 }, \
        !           420:        { 0, 0 }, \
        !           421:        { 0, 0 }, \
        !           422:        { "etherip", CTLTYPE_NODE }, \
        !           423:        { 0, 0 }, \
        !           424:        { 0, 0 }, \
        !           425:        { 0, 0 }, \
        !           426:        { 0, 0 }, \
        !           427:        { 0, 0 }, \
        !           428:        { "pim", CTLTYPE_NODE }, \
        !           429:        { 0, 0 }, \
        !           430:        { 0, 0 }, \
        !           431:        { 0, 0 }, \
        !           432:        { 0, 0 }, \
        !           433:        { "ipcomp", CTLTYPE_NODE }, \
        !           434:        { 0, 0 }, \
        !           435:        { 0, 0 }, \
        !           436:        { 0, 0 }, \
        !           437:        { "carp", CTLTYPE_NODE }, \
        !           438: }
        !           439:
        !           440: /*
        !           441:  * Names for IP sysctl objects
        !           442:  */
        !           443: #define        IPCTL_FORWARDING        1       /* act as router */
        !           444: #define        IPCTL_SENDREDIRECTS     2       /* may send redirects when forwarding */
        !           445: #define        IPCTL_DEFTTL            3       /* default TTL */
        !           446: #ifdef notyet
        !           447: #define        IPCTL_DEFMTU            4       /* default MTU */
        !           448: #endif
        !           449: #define        IPCTL_SOURCEROUTE       5       /* may perform source routes */
        !           450: #define        IPCTL_DIRECTEDBCAST     6       /* default broadcast behavior */
        !           451: #define IPCTL_IPPORT_FIRSTAUTO 7
        !           452: #define IPCTL_IPPORT_LASTAUTO  8
        !           453: #define IPCTL_IPPORT_HIFIRSTAUTO 9
        !           454: #define IPCTL_IPPORT_HILASTAUTO        10
        !           455: #define        IPCTL_IPPORT_MAXQUEUE   11
        !           456: #define        IPCTL_ENCDEBUG          12
        !           457: #ifdef notdef  /*obsolete*/
        !           458: #define IPCTL_GIF_TTL          13      /* default TTL for gif encap packet */
        !           459: #endif
        !           460: #define IPCTL_IPSEC_EXPIRE_ACQUIRE 14   /* How long to wait for key mgmt. */
        !           461: #define IPCTL_IPSEC_EMBRYONIC_SA_TIMEOUT       15 /* new SA lifetime */
        !           462: #define IPCTL_IPSEC_REQUIRE_PFS 16
        !           463: #define IPCTL_IPSEC_SOFT_ALLOCATIONS            17
        !           464: #define IPCTL_IPSEC_ALLOCATIONS 18
        !           465: #define IPCTL_IPSEC_SOFT_BYTES  19
        !           466: #define IPCTL_IPSEC_BYTES       20
        !           467: #define IPCTL_IPSEC_TIMEOUT     21
        !           468: #define IPCTL_IPSEC_SOFT_TIMEOUT 22
        !           469: #define IPCTL_IPSEC_SOFT_FIRSTUSE 23
        !           470: #define IPCTL_IPSEC_FIRSTUSE    24
        !           471: #define IPCTL_IPSEC_ENC_ALGORITHM 25
        !           472: #define IPCTL_IPSEC_AUTH_ALGORITHM 26
        !           473: #define        IPCTL_MTUDISC           27      /* allow path MTU discovery */
        !           474: #define        IPCTL_MTUDISCTIMEOUT    28      /* allow path MTU discovery */
        !           475: #define        IPCTL_IPSEC_IPCOMP_ALGORITHM    29
        !           476: #define        IPCTL_IFQUEUE           30
        !           477: #define        IPCTL_MFORWARDING       31
        !           478: #define        IPCTL_MULTIPATH         32
        !           479: #define        IPCTL_MAXID             33
        !           480:
        !           481: #define        IPCTL_NAMES { \
        !           482:        { 0, 0 }, \
        !           483:        { "forwarding", CTLTYPE_INT }, \
        !           484:        { "redirect", CTLTYPE_INT }, \
        !           485:        { "ttl", CTLTYPE_INT }, \
        !           486:        /* { "mtu", CTLTYPE_INT }, */ { 0, 0 }, \
        !           487:        { "sourceroute", CTLTYPE_INT }, \
        !           488:        { "directed-broadcast", CTLTYPE_INT }, \
        !           489:        { "portfirst", CTLTYPE_INT }, \
        !           490:        { "portlast", CTLTYPE_INT }, \
        !           491:        { "porthifirst", CTLTYPE_INT }, \
        !           492:        { "porthilast", CTLTYPE_INT }, \
        !           493:        { "maxqueue", CTLTYPE_INT }, \
        !           494:        { "encdebug", CTLTYPE_INT }, \
        !           495:        { 0, 0 }, \
        !           496:        { "ipsec-expire-acquire", CTLTYPE_INT }, \
        !           497:        { "ipsec-invalid-life", CTLTYPE_INT }, \
        !           498:        { "ipsec-pfs", CTLTYPE_INT }, \
        !           499:        { "ipsec-soft-allocs", CTLTYPE_INT }, \
        !           500:        { "ipsec-allocs", CTLTYPE_INT }, \
        !           501:        { "ipsec-soft-bytes", CTLTYPE_INT }, \
        !           502:        { "ipsec-bytes", CTLTYPE_INT }, \
        !           503:        { "ipsec-timeout", CTLTYPE_INT }, \
        !           504:        { "ipsec-soft-timeout", CTLTYPE_INT }, \
        !           505:        { "ipsec-soft-firstuse", CTLTYPE_INT }, \
        !           506:        { "ipsec-firstuse", CTLTYPE_INT }, \
        !           507:        { "ipsec-enc-alg", CTLTYPE_STRING }, \
        !           508:        { "ipsec-auth-alg", CTLTYPE_STRING }, \
        !           509:        { "mtudisc", CTLTYPE_INT }, \
        !           510:        { "mtudisctimeout", CTLTYPE_INT }, \
        !           511:        { "ipsec-comp-alg", CTLTYPE_STRING }, \
        !           512:        { "ifq", CTLTYPE_NODE }, \
        !           513:        { "mforwarding", CTLTYPE_INT }, \
        !           514:        { "multipath", CTLTYPE_INT } \
        !           515: }
        !           516: #define        IPCTL_VARS { \
        !           517:        NULL, \
        !           518:        &ipforwarding, \
        !           519:        &ipsendredirects, \
        !           520:        &ip_defttl, \
        !           521:        NULL, \
        !           522:        NULL, \
        !           523:        &ip_directedbcast, \
        !           524:        &ipport_firstauto, \
        !           525:        &ipport_lastauto, \
        !           526:        &ipport_hifirstauto, \
        !           527:        &ipport_hilastauto, \
        !           528:        &ip_maxqueue, \
        !           529:        &encdebug, \
        !           530:        NULL, \
        !           531:        &ipsec_expire_acquire, \
        !           532:        &ipsec_keep_invalid, \
        !           533:        &ipsec_require_pfs, \
        !           534:        &ipsec_soft_allocations, \
        !           535:        &ipsec_exp_allocations, \
        !           536:        &ipsec_soft_bytes, \
        !           537:        &ipsec_exp_bytes, \
        !           538:        &ipsec_exp_timeout, \
        !           539:        &ipsec_soft_timeout, \
        !           540:        &ipsec_soft_first_use, \
        !           541:        &ipsec_exp_first_use, \
        !           542:        NULL, \
        !           543:        NULL, \
        !           544:        NULL, \
        !           545:        NULL, \
        !           546:        NULL, \
        !           547:        NULL, \
        !           548:        &ipmforwarding, \
        !           549:        &ipmultipath \
        !           550: }
        !           551:
        !           552: /* INET6 stuff */
        !           553: #define __KAME_NETINET_IN_H_INCLUDED_
        !           554: #include <netinet6/in6.h>
        !           555: #undef __KAME_NETINET_IN_H_INCLUDED_
        !           556:
        !           557: #ifndef _KERNEL
        !           558:
        !           559: #include <sys/cdefs.h>
        !           560:
        !           561: __BEGIN_DECLS
        !           562: int       bindresvport(int, struct sockaddr_in *);
        !           563: struct sockaddr;
        !           564: int       bindresvport_sa(int, struct sockaddr *);
        !           565: __END_DECLS
        !           566:
        !           567: #else
        !           568: /*
        !           569:  * in_cksum_phdr:
        !           570:  *
        !           571:  *     Compute significant parts of the IPv4 checksum pseudo-header
        !           572:  *     for use in a delayed TCP/UDP checksum calculation.
        !           573:  *
        !           574:  *     Args:
        !           575:  *
        !           576:  *             src             Source IP address
        !           577:  *             dst             Destination IP address
        !           578:  *             lenproto        htons(proto-hdr-len + proto-number)
        !           579:  */
        !           580: static __inline u_int16_t __attribute__((__unused__))
        !           581: in_cksum_phdr(u_int32_t src, u_int32_t dst, u_int32_t lenproto)
        !           582: {
        !           583:        u_int32_t sum;
        !           584:
        !           585:        sum = lenproto +
        !           586:              (u_int16_t)(src >> 16) +
        !           587:              (u_int16_t)(src /*& 0xffff*/) +
        !           588:              (u_int16_t)(dst >> 16) +
        !           589:              (u_int16_t)(dst /*& 0xffff*/);
        !           590:
        !           591:        sum = (u_int16_t)(sum >> 16) + (u_int16_t)(sum /*& 0xffff*/);
        !           592:
        !           593:        if (sum > 0xffff)
        !           594:                sum -= 0xffff;
        !           595:
        !           596:        return (sum);
        !           597: }
        !           598:
        !           599: /*
        !           600:  * in_cksum_addword:
        !           601:  *
        !           602:  *     Add the two 16-bit network-order values, carry, and return.
        !           603:  */
        !           604: static __inline u_int16_t __attribute__((__unused__))
        !           605: in_cksum_addword(u_int16_t a, u_int16_t b)
        !           606: {
        !           607:        u_int32_t sum = a + b;
        !           608:
        !           609:        if (sum > 0xffff)
        !           610:                sum -= 0xffff;
        !           611:
        !           612:        return (sum);
        !           613: }
        !           614:
        !           615: extern    struct in_addr zeroin_addr;
        !           616:
        !           617: int       in_broadcast(struct in_addr, struct ifnet *);
        !           618: int       in_canforward(struct in_addr);
        !           619: int       in_cksum(struct mbuf *, int);
        !           620: int       in4_cksum(struct mbuf *, u_int8_t, int, int);
        !           621: void      in_delayed_cksum(struct mbuf *);
        !           622: int       in_localaddr(struct in_addr);
        !           623: void      in_socktrim(struct sockaddr_in *);
        !           624: char     *inet_ntoa(struct in_addr);
        !           625:
        !           626: #define        in_hosteq(s,t)  ((s).s_addr == (t).s_addr)
        !           627: #define        in_nullhost(x)  ((x).s_addr == INADDR_ANY)
        !           628:
        !           629: #define        satosin(sa)     ((struct sockaddr_in *)(sa))
        !           630: #define        sintosa(sin)    ((struct sockaddr *)(sin))
        !           631: #define        ifatoia(ifa)    ((struct in_ifaddr *)(ifa))
        !           632: #endif /* _KERNEL */
        !           633: #endif /* _NETINET_IN_H_ */

CVSweb