Annotation of embedaddon/pimd/include/netbsd/netinet/in.h, revision 1.1.1.1

1.1       misho       1: /*     $NetBSD: in.h,v 1.86 2009/09/14 10:36:50 degroote Exp $ */
                      2: 
                      3: /*
                      4:  * Copyright (c) 1982, 1986, 1990, 1993
                      5:  *     The Regents of the University of California.  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 University 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 REGENTS 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 REGENTS 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:  *     @(#)in.h        8.3 (Berkeley) 1/3/94
                     32:  */
                     33: 
                     34: /*
                     35:  * Constants and structures defined by the internet system,
                     36:  * Per RFC 790, September 1981, and numerous additions.
                     37:  */
                     38: 
                     39: #ifndef _NETINET_IN_H_
                     40: #define        _NETINET_IN_H_
                     41: 
                     42: #include <machine/int_types.h>
                     43: 
                     44: #ifndef uint8_t
                     45: typedef __uint8_t      uint8_t;
                     46: #define        uint8_t         __uint8_t
                     47: #endif
                     48: 
                     49: #ifndef uint32_t
                     50: typedef __uint32_t     uint32_t;
                     51: #define        uint32_t        __uint32_t
                     52: #endif
                     53: 
                     54: #include <sys/ansi.h>
                     55: 
                     56: #ifndef in_addr_t
                     57: typedef __in_addr_t    in_addr_t;
                     58: #define        in_addr_t       __in_addr_t
                     59: #endif
                     60: 
                     61: #ifndef in_port_t
                     62: typedef __in_port_t    in_port_t;
                     63: #define        in_port_t       __in_port_t
                     64: #endif
                     65: 
                     66: #ifndef sa_family_t
                     67: typedef __sa_family_t  sa_family_t;
                     68: #define        sa_family_t     __sa_family_t
                     69: #endif
                     70: 
                     71: /*
                     72:  * Protocols
                     73:  */
                     74: #define        IPPROTO_IP              0               /* dummy for IP */
                     75: #define        IPPROTO_HOPOPTS         0               /* IP6 hop-by-hop options */
                     76: #define        IPPROTO_ICMP            1               /* control message protocol */
                     77: #define        IPPROTO_IGMP            2               /* group mgmt protocol */
                     78: #define        IPPROTO_GGP             3               /* gateway^2 (deprecated) */
                     79: #define        IPPROTO_IPV4            4               /* IP header */
                     80: #define        IPPROTO_IPIP            4               /* IP inside IP */
                     81: #define        IPPROTO_TCP             6               /* tcp */
                     82: #define        IPPROTO_EGP             8               /* exterior gateway protocol */
                     83: #define        IPPROTO_PUP             12              /* pup */
                     84: #define        IPPROTO_UDP             17              /* user datagram protocol */
                     85: #define        IPPROTO_IDP             22              /* xns idp */
                     86: #define        IPPROTO_TP              29              /* tp-4 w/ class negotiation */
                     87: #define        IPPROTO_IPV6            41              /* IP6 header */
                     88: #define        IPPROTO_ROUTING         43              /* IP6 routing header */
                     89: #define        IPPROTO_FRAGMENT        44              /* IP6 fragmentation header */
                     90: #define        IPPROTO_RSVP            46              /* resource reservation */
                     91: #define        IPPROTO_GRE             47              /* GRE encaps RFC 1701 */
                     92: #define        IPPROTO_ESP             50              /* encap. security payload */
                     93: #define        IPPROTO_AH              51              /* authentication header */
                     94: #define        IPPROTO_MOBILE          55              /* IP Mobility RFC 2004 */
                     95: #define        IPPROTO_IPV6_ICMP       58              /* IPv6 ICMP */
                     96: #define        IPPROTO_ICMPV6          58              /* ICMP6 */
                     97: #define        IPPROTO_NONE            59              /* IP6 no next header */
                     98: #define        IPPROTO_DSTOPTS         60              /* IP6 destination option */
                     99: #define        IPPROTO_EON             80              /* ISO cnlp */
                    100: #define        IPPROTO_ETHERIP         97              /* Ethernet-in-IP */
                    101: #define        IPPROTO_ENCAP           98              /* encapsulation header */
                    102: #define        IPPROTO_PIM             103             /* Protocol indep. multicast */
                    103: #define        IPPROTO_IPCOMP          108             /* IP Payload Comp. Protocol */
                    104: #define        IPPROTO_VRRP            112             /* VRRP RFC 2338 */
                    105: #define        IPPROTO_CARP            112             /* Common Address Resolution Protocol */
                    106: #define IPPROTO_PFSYNC      240     /* PFSYNC */
                    107: #define        IPPROTO_RAW             255             /* raw IP packet */
                    108: #define        IPPROTO_MAX             256
                    109: 
                    110: /* last return value of *_input(), meaning "all job for this pkt is done".  */
                    111: #define        IPPROTO_DONE            257
                    112: 
                    113: /* sysctl placeholder for (FAST_)IPSEC */
                    114: #define CTL_IPPROTO_IPSEC      258
                    115: 
                    116: 
                    117: /*
                    118:  * Local port number conventions:
                    119:  *
                    120:  * Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root),
                    121:  * unless a kernel is compiled with IPNOPRIVPORTS defined.
                    122:  *
                    123:  * When a user does a bind(2) or connect(2) with a port number of zero,
                    124:  * a non-conflicting local port address is chosen.
                    125:  *
                    126:  * The default range is IPPORT_ANONMIN to IPPORT_ANONMAX, although
                    127:  * that is settable by sysctl(3); net.inet.ip.anonportmin and
                    128:  * net.inet.ip.anonportmax respectively.
                    129:  *
                    130:  * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
                    131:  * default assignment range.
                    132:  *
                    133:  * The value IP_PORTRANGE_DEFAULT causes the default behavior.
                    134:  *
                    135:  * The value IP_PORTRANGE_HIGH is the same as IP_PORTRANGE_DEFAULT,
                    136:  * and exists only for FreeBSD compatibility purposes.
                    137:  *
                    138:  * The value IP_PORTRANGE_LOW changes the range to the "low" are
                    139:  * that is (by convention) restricted to privileged processes.
                    140:  * This convention is based on "vouchsafe" principles only.
                    141:  * It is only secure if you trust the remote host to restrict these ports.
                    142:  * The range is IPPORT_RESERVEDMIN to IPPORT_RESERVEDMAX.
                    143:  */
                    144: 
                    145: #define        IPPORT_RESERVED         1024
                    146: #define        IPPORT_ANONMIN          49152
                    147: #define        IPPORT_ANONMAX          65535
                    148: #define        IPPORT_RESERVEDMIN      600
                    149: #define        IPPORT_RESERVEDMAX      (IPPORT_RESERVED-1)
                    150: 
                    151: /*
                    152:  * Internet address (a structure for historical reasons)
                    153:  */
                    154: struct in_addr {
                    155:        in_addr_t s_addr;
                    156: } __packed;
                    157: 
                    158: /*
                    159:  * Definitions of bits in internet address integers.
                    160:  * On subnets, the decomposition of addresses to host and net parts
                    161:  * is done according to subnet mask, not the masks here.
                    162:  *
                    163:  * By byte-swapping the constants, we avoid ever having to byte-swap IP
                    164:  * addresses inside the kernel.  Unfortunately, user-level programs rely
                    165:  * on these macros not doing byte-swapping.
                    166:  */
                    167: #ifdef _KERNEL
                    168: #define        __IPADDR(x)     ((uint32_t) htonl((uint32_t)(x)))
                    169: #else
                    170: #define        __IPADDR(x)     ((uint32_t)(x))
                    171: #endif
                    172: 
                    173: #define        IN_CLASSA(i)            (((uint32_t)(i) & __IPADDR(0x80000000)) == \
                    174:                                 __IPADDR(0x00000000))
                    175: #define        IN_CLASSA_NET           __IPADDR(0xff000000)
                    176: #define        IN_CLASSA_NSHIFT        24
                    177: #define        IN_CLASSA_HOST          __IPADDR(0x00ffffff)
                    178: #define        IN_CLASSA_MAX           128
                    179: 
                    180: #define        IN_CLASSB(i)            (((uint32_t)(i) & __IPADDR(0xc0000000)) == \
                    181:                                 __IPADDR(0x80000000))
                    182: #define        IN_CLASSB_NET           __IPADDR(0xffff0000)
                    183: #define        IN_CLASSB_NSHIFT        16
                    184: #define        IN_CLASSB_HOST          __IPADDR(0x0000ffff)
                    185: #define        IN_CLASSB_MAX           65536
                    186: 
                    187: #define        IN_CLASSC(i)            (((uint32_t)(i) & __IPADDR(0xe0000000)) == \
                    188:                                 __IPADDR(0xc0000000))
                    189: #define        IN_CLASSC_NET           __IPADDR(0xffffff00)
                    190: #define        IN_CLASSC_NSHIFT        8
                    191: #define        IN_CLASSC_HOST          __IPADDR(0x000000ff)
                    192: 
                    193: #define        IN_CLASSD(i)            (((uint32_t)(i) & __IPADDR(0xf0000000)) == \
                    194:                                 __IPADDR(0xe0000000))
                    195: /* These ones aren't really net and host fields, but routing needn't know. */
                    196: #define        IN_CLASSD_NET           __IPADDR(0xf0000000)
                    197: #define        IN_CLASSD_NSHIFT        28
                    198: #define        IN_CLASSD_HOST          __IPADDR(0x0fffffff)
                    199: #define        IN_MULTICAST(i)         IN_CLASSD(i)
                    200: 
                    201: #define        IN_EXPERIMENTAL(i)      (((uint32_t)(i) & __IPADDR(0xf0000000)) == \
                    202:                                 __IPADDR(0xf0000000))
                    203: #define        IN_BADCLASS(i)          (((uint32_t)(i) & __IPADDR(0xf0000000)) == \
                    204:                                 __IPADDR(0xf0000000))
                    205: 
                    206: #define IN_LINKLOCAL(i)        (((uint32_t)(i) & __IPADDR(0xffff0000)) == \
                    207:                         __IPADDR(0xa9fe0000))
                    208: 
                    209: #define        IN_PRIVATE(i)   ((((uint32_t)(i) & __IPADDR(0xff000000)) ==     \
                    210:                          __IPADDR(0x0a000000)) ||                      \
                    211:                         (((uint32_t)(i) & __IPADDR(0xfff00000)) ==     \
                    212:                          __IPADDR(0xac100000)) ||                      \
                    213:                         (((uint32_t)(i) & __IPADDR(0xffff0000)) ==     \
                    214:                          __IPADDR(0xc0a80000)))
                    215: 
                    216: #define        IN_LOCAL_GROUP(i)       (((uint32_t)(i) & __IPADDR(0xffffff00)) == \
                    217:                                 __IPADDR(0xe0000000))
                    218: 
                    219: #define        IN_ANY_LOCAL(i)         (IN_LINKLOCAL(i) || IN_LOCAL_GROUP(i))
                    220: 
                    221: #define        INADDR_ANY              __IPADDR(0x00000000)
                    222: #define        INADDR_LOOPBACK         __IPADDR(0x7f000001)
                    223: #define        INADDR_BROADCAST        __IPADDR(0xffffffff)    /* must be masked */
                    224: #define        INADDR_NONE             __IPADDR(0xffffffff)    /* -1 return */
                    225: 
                    226: #define        INADDR_UNSPEC_GROUP     __IPADDR(0xe0000000)    /* 224.0.0.0 */
                    227: #define        INADDR_ALLHOSTS_GROUP   __IPADDR(0xe0000001)    /* 224.0.0.1 */
                    228: #define        INADDR_ALLRTRS_GROUP    __IPADDR(0xe0000002)    /* 224.0.0.2 */
                    229: #define        INADDR_CARP_GROUP       __IPADDR(0xe0000012)    /* 224.0.0.18 */
                    230: #define        INADDR_MAX_LOCAL_GROUP  __IPADDR(0xe00000ff)    /* 224.0.0.255 */
                    231: 
                    232: #define        IN_LOOPBACKNET          127                     /* official! */
                    233: 
                    234: /*
                    235:  * Socket address, internet style.
                    236:  */
                    237: struct sockaddr_in {
                    238:        uint8_t         sin_len;
                    239:        sa_family_t     sin_family;
                    240:        in_port_t       sin_port;
                    241:        struct in_addr  sin_addr;
                    242:        __int8_t        sin_zero[8];
                    243: };
                    244: 
                    245: #define        INET_ADDRSTRLEN                 16
                    246: 
                    247: /*
                    248:  * Structure used to describe IP options.
                    249:  * Used to store options internally, to pass them to a process,
                    250:  * or to restore options retrieved earlier.
                    251:  * The ip_dst is used for the first-hop gateway when using a source route
                    252:  * (this gets put into the header proper).
                    253:  */
                    254: struct ip_opts {
                    255:        struct in_addr  ip_dst;         /* first hop, 0 w/o src rt */
                    256: #if defined(__cplusplus)
                    257:        __int8_t        Ip_opts[40];    /* actually variable in size */
                    258: #else
                    259:        __int8_t        ip_opts[40];    /* actually variable in size */
                    260: #endif
                    261: };
                    262: 
                    263: /*
                    264:  * Options for use with [gs]etsockopt at the IP level.
                    265:  * First word of comment is data type; bool is stored in int.
                    266:  */
                    267: #define        IP_OPTIONS              1    /* buf/ip_opts; set/get IP options */
                    268: #define        IP_HDRINCL              2    /* int; header is included with data */
                    269: #define        IP_TOS                  3    /* int; IP type of service and preced. */
                    270: #define        IP_TTL                  4    /* int; IP time to live */
                    271: #define        IP_RECVOPTS             5    /* bool; receive all IP opts w/dgram */
                    272: #define        IP_RECVRETOPTS          6    /* bool; receive IP opts for response */
                    273: #define        IP_RECVDSTADDR          7    /* bool; receive IP dst addr w/dgram */
                    274: #define        IP_RETOPTS              8    /* ip_opts; set/get IP options */
                    275: #define        IP_MULTICAST_IF         9    /* in_addr; set/get IP multicast i/f  */
                    276: #define        IP_MULTICAST_TTL        10   /* u_char; set/get IP multicast ttl */
                    277: #define        IP_MULTICAST_LOOP       11   /* u_char; set/get IP multicast loopback */
                    278: #define        IP_ADD_MEMBERSHIP       12   /* ip_mreq; add an IP group membership */
                    279: #define        IP_DROP_MEMBERSHIP      13   /* ip_mreq; drop an IP group membership */
                    280: #define        IP_PORTRANGE            19   /* int; range to use for ephemeral port */
                    281: #define        IP_RECVIF               20   /* bool; receive reception if w/dgram */
                    282: #define        IP_ERRORMTU             21   /* int; get MTU of last xmit = EMSGSIZE */
                    283: #if 1 /*IPSEC*/
                    284: #define        IP_IPSEC_POLICY         22 /* struct; get/set security policy */
                    285: #endif
                    286: #define        IP_RECVTTL              23   /* bool; receive IP TTL w/dgram */
                    287: #define        IP_MINTTL               24   /* minimum TTL for packet or drop */
                    288: 
                    289: /*
                    290:  * Defaults and limits for options
                    291:  */
                    292: #define        IP_DEFAULT_MULTICAST_TTL  1     /* normally limit m'casts to 1 hop  */
                    293: #define        IP_DEFAULT_MULTICAST_LOOP 1     /* normally hear sends if a member  */
                    294: #define        IP_MAX_MEMBERSHIPS      20      /* per socket; must fit in one mbuf */
                    295: 
                    296: /*
                    297:  * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
                    298:  */
                    299: struct ip_mreq {
                    300:        struct  in_addr imr_multiaddr;  /* IP multicast address of group */
                    301:        struct  in_addr imr_interface;  /* local IP address of interface */
                    302: };
                    303: 
                    304: /*
                    305:  * Argument for IP_PORTRANGE:
                    306:  * - which range to search when port is unspecified at bind() or connect()
                    307:  */
                    308: #define        IP_PORTRANGE_DEFAULT    0       /* default range */
                    309: #define        IP_PORTRANGE_HIGH       1       /* same as DEFAULT (FreeBSD compat) */
                    310: #define        IP_PORTRANGE_LOW        2       /* use privileged range */
                    311: 
                    312: #if defined(_NETBSD_SOURCE)
                    313: /*
                    314:  * Definitions for inet sysctl operations.
                    315:  *
                    316:  * Third level is protocol number.
                    317:  * Fourth level is desired variable within that protocol.
                    318:  */
                    319: #define        IPPROTO_MAXID   (IPPROTO_AH + 1)        /* don't list to IPPROTO_MAX */
                    320: 
                    321: #define        CTL_IPPROTO_NAMES { \
                    322:        { "ip", CTLTYPE_NODE }, \
                    323:        { "icmp", CTLTYPE_NODE }, \
                    324:        { "igmp", CTLTYPE_NODE }, \
                    325:        { "ggp", CTLTYPE_NODE }, \
                    326:        { 0, 0 }, \
                    327:        { 0, 0 }, \
                    328:        { "tcp", CTLTYPE_NODE }, \
                    329:        { 0, 0 }, \
                    330:        { "egp", CTLTYPE_NODE }, \
                    331:        { 0, 0 }, \
                    332:        { 0, 0 }, \
                    333:        { 0, 0 }, \
                    334:        { "pup", CTLTYPE_NODE }, \
                    335:        { 0, 0 }, \
                    336:        { 0, 0 }, \
                    337:        { 0, 0 }, \
                    338:        { 0, 0 }, \
                    339:        { "udp", CTLTYPE_NODE }, \
                    340:        { 0, 0 }, \
                    341:        { 0, 0 }, \
                    342:        { 0, 0 }, \
                    343:        { 0, 0 }, \
                    344:        { "idp", CTLTYPE_NODE }, \
                    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:        { 0, 0 }, \
                    373:        { "ipsec", CTLTYPE_NODE }, \
                    374:        { 0, 0 }, \
                    375:        { 0, 0 }, \
                    376:        { 0, 0 }, \
                    377:        { 0, 0 }, \
                    378:        { 0, 0 }, \
                    379:        { 0, 0 }, \
                    380:        { 0, 0 }, \
                    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:        { 0, 0 }, \
                    423:        { 0, 0 }, \
                    424:        { 0, 0 }, \
                    425:        { "pim", CTLTYPE_NODE }, \
                    426: }
                    427: 
                    428: /*
                    429:  * Names for IP sysctl objects
                    430:  */
                    431: #define        IPCTL_FORWARDING        1       /* act as router */
                    432: #define        IPCTL_SENDREDIRECTS     2       /* may send redirects when forwarding */
                    433: #define        IPCTL_DEFTTL            3       /* default TTL */
                    434: #ifdef notyet
                    435: #define        IPCTL_DEFMTU            4       /* default MTU */
                    436: #endif
                    437: #define        IPCTL_FORWSRCRT         5       /* forward source-routed packets */
                    438: #define        IPCTL_DIRECTEDBCAST     6       /* default broadcast behavior */
                    439: #define        IPCTL_ALLOWSRCRT        7       /* allow/drop all source-routed pkts */
                    440: #define        IPCTL_SUBNETSARELOCAL   8       /* treat subnets as local addresses */
                    441: #define        IPCTL_MTUDISC           9       /* allow path MTU discovery */
                    442: #define        IPCTL_ANONPORTMIN      10       /* minimum ephemeral port */
                    443: #define        IPCTL_ANONPORTMAX      11       /* maximum ephemeral port */
                    444: #define        IPCTL_MTUDISCTIMEOUT   12       /* allow path MTU discovery */
                    445: #define        IPCTL_MAXFLOWS         13       /* maximum ip flows allowed */
                    446: #define        IPCTL_HOSTZEROBROADCAST 14      /* is host zero a broadcast addr? */
                    447: #define        IPCTL_GIF_TTL          15       /* default TTL for gif encap packet */
                    448: #define        IPCTL_LOWPORTMIN       16       /* minimum reserved port */
                    449: #define        IPCTL_LOWPORTMAX       17       /* maximum reserved port */
                    450: #define        IPCTL_MAXFRAGPACKETS   18       /* max packets reassembly queue */
                    451: #define        IPCTL_GRE_TTL          19       /* default TTL for gre encap packet */
                    452: #define        IPCTL_CHECKINTERFACE   20       /* drop pkts in from 'wrong' iface */
                    453: #define        IPCTL_IFQ              21       /* ipintrq node */
                    454: #define        IPCTL_RANDOMID         22       /* use random IP ids (if configured) */
                    455: #define        IPCTL_LOOPBACKCKSUM    23       /* do IP checksum on loopback */
                    456: #define        IPCTL_STATS             24      /* IP statistics */
                    457: #define        IPCTL_MAXID            25
                    458: 
                    459: #define        IPCTL_NAMES { \
                    460:        { 0, 0 }, \
                    461:        { "forwarding", CTLTYPE_INT }, \
                    462:        { "redirect", CTLTYPE_INT }, \
                    463:        { "ttl", CTLTYPE_INT }, \
                    464:        { "mtu", CTLTYPE_INT }, \
                    465:        { "forwsrcrt", CTLTYPE_INT }, \
                    466:        { "directed-broadcast", CTLTYPE_INT }, \
                    467:        { "allowsrcrt", CTLTYPE_INT }, \
                    468:        { "subnetsarelocal", CTLTYPE_INT }, \
                    469:        { "mtudisc", CTLTYPE_INT }, \
                    470:        { "anonportmin", CTLTYPE_INT }, \
                    471:        { "anonportmax", CTLTYPE_INT }, \
                    472:        { "mtudisctimeout", CTLTYPE_INT }, \
                    473:        { "maxflows", CTLTYPE_INT }, \
                    474:        { "hostzerobroadcast", CTLTYPE_INT }, \
                    475:        { "gifttl", CTLTYPE_INT }, \
                    476:        { "lowportmin", CTLTYPE_INT }, \
                    477:        { "lowportmax", CTLTYPE_INT }, \
                    478:        { "maxfragpackets", CTLTYPE_INT }, \
                    479:        { "grettl", CTLTYPE_INT }, \
                    480:        { "checkinterface", CTLTYPE_INT }, \
                    481:        { "ifq", CTLTYPE_NODE }, \
                    482:        { "random_id", CTLTYPE_INT }, \
                    483:        { "do_loopback_cksum", CTLTYPE_INT }, \
                    484:        { "stats", CTLTYPE_STRUCT }, \
                    485: }
                    486: #endif /* _NETBSD_SOURCE */
                    487: 
                    488: /* INET6 stuff */
                    489: #define        __KAME_NETINET_IN_H_INCLUDED_
                    490: #include <netinet6/in6.h>
                    491: #undef __KAME_NETINET_IN_H_INCLUDED_
                    492: 
                    493: #ifdef _KERNEL
                    494: /*
                    495:  * in_cksum_phdr:
                    496:  *
                    497:  *     Compute significant parts of the IPv4 checksum pseudo-header
                    498:  *     for use in a delayed TCP/UDP checksum calculation.
                    499:  *
                    500:  *     Args:
                    501:  *
                    502:  *             src             Source IP address
                    503:  *             dst             Destination IP address
                    504:  *             lenproto        htons(proto-hdr-len + proto-number)
                    505:  */
                    506: static __inline u_int16_t __unused
                    507: in_cksum_phdr(u_int32_t src, u_int32_t dst, u_int32_t lenproto)
                    508: {
                    509:        u_int32_t sum;
                    510: 
                    511:        sum = lenproto +
                    512:              (u_int16_t)(src >> 16) +
                    513:              (u_int16_t)(src /*& 0xffff*/) +
                    514:              (u_int16_t)(dst >> 16) +
                    515:              (u_int16_t)(dst /*& 0xffff*/);
                    516: 
                    517:        sum = (u_int16_t)(sum >> 16) + (u_int16_t)(sum /*& 0xffff*/);
                    518: 
                    519:        if (sum > 0xffff)
                    520:                sum -= 0xffff;
                    521: 
                    522:        return (sum);
                    523: }
                    524: 
                    525: /*
                    526:  * in_cksum_addword:
                    527:  *
                    528:  *     Add the two 16-bit network-order values, carry, and return.
                    529:  */
                    530: static __inline u_int16_t __unused
                    531: in_cksum_addword(u_int16_t a, u_int16_t b)
                    532: {
                    533:        u_int32_t sum = a + b;
                    534: 
                    535:        if (sum > 0xffff)
                    536:                sum -= 0xffff;
                    537: 
                    538:        return (sum);
                    539: }
                    540: 
                    541: extern struct in_addr zeroin_addr;
                    542: extern u_char  ip_protox[];
                    543: extern const struct sockaddr_in in_any;
                    544: 
                    545: int    in_broadcast(struct in_addr, struct ifnet *);
                    546: int    in_canforward(struct in_addr);
                    547: int    cpu_in_cksum(struct mbuf *, int, int, uint32_t);
                    548: int    in_cksum(struct mbuf *, int);
                    549: int    in4_cksum(struct mbuf *, u_int8_t, int, int);
                    550: void   in_delayed_cksum(struct mbuf *);
                    551: int    in_localaddr(struct in_addr);
                    552: void   in_socktrim(struct sockaddr_in *);
                    553: 
                    554: #define        in_hosteq(s,t)  ((s).s_addr == (t).s_addr)
                    555: #define        in_nullhost(x)  ((x).s_addr == INADDR_ANY)
                    556: 
                    557: #define        satosin(sa)     ((struct sockaddr_in *)(sa))
                    558: #define        satocsin(sa)    ((const struct sockaddr_in *)(sa))
                    559: #define        sintosa(sin)    ((struct sockaddr *)(sin))
                    560: #define        sintocsa(sin)   ((const struct sockaddr *)(sin))
                    561: #define        ifatoia(ifa)    ((struct in_ifaddr *)(ifa))
                    562: 
                    563: int sockaddr_in_cmp(const struct sockaddr *, const struct sockaddr *);
                    564: const void *sockaddr_in_const_addr(const struct sockaddr *, socklen_t *);
                    565: void *sockaddr_in_addr(struct sockaddr *, socklen_t *);
                    566: 
                    567: static inline void
                    568: sockaddr_in_init1(struct sockaddr_in *sin, const struct in_addr *addr,
                    569:     in_port_t port)
                    570: {
                    571:        sin->sin_port = port;
                    572:        sin->sin_addr = *addr;
                    573:        memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
                    574: }
                    575: 
                    576: static inline void
                    577: sockaddr_in_init(struct sockaddr_in *sin, const struct in_addr *addr,
                    578:     in_port_t port)
                    579: {
                    580:        sin->sin_family = AF_INET;
                    581:        sin->sin_len = sizeof(*sin);
                    582:        sockaddr_in_init1(sin, addr, port);
                    583: }
                    584: 
                    585: static inline struct sockaddr *
                    586: sockaddr_in_alloc(const struct in_addr *addr, in_port_t port, int flags)
                    587: {
                    588:        struct sockaddr *sa;
                    589: 
                    590:        sa = sockaddr_alloc(AF_INET, sizeof(struct sockaddr_in), flags);
                    591: 
                    592:        if (sa == NULL)
                    593:                return NULL;
                    594: 
                    595:        sockaddr_in_init1(satosin(sa), addr, port);
                    596: 
                    597:        return sa;
                    598: }
                    599: #endif /* _KERNEL */
                    600: 
                    601: #endif /* !_NETINET_IN_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>