Annotation of embedaddon/pimd/include/freebsd/netinet/in.h, revision 1.1

1.1     ! misho       1: /*-
        !             2:  * Copyright (c) 1982, 1986, 1990, 1993
        !             3:  *     The Regents of the University of California.  All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms, with or without
        !             6:  * modification, are permitted provided that the following conditions
        !             7:  * are met:
        !             8:  * 1. Redistributions of source code must retain the above copyright
        !             9:  *    notice, this list of conditions and the following disclaimer.
        !            10:  * 2. Redistributions in binary form must reproduce the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer in the
        !            12:  *    documentation and/or other materials provided with the distribution.
        !            13:  * 4. Neither the name of the University nor the names of its contributors
        !            14:  *    may be used to endorse or promote products derived from this software
        !            15:  *    without specific prior written permission.
        !            16:  *
        !            17:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            27:  * SUCH DAMAGE.
        !            28:  *
        !            29:  *     @(#)in.h        8.3 (Berkeley) 1/3/94
        !            30:  * $FreeBSD: src/sys/netinet/in.h,v 1.116 2010/08/19 11:31:03 anchie Exp $
        !            31:  */
        !            32: 
        !            33: #ifndef _NETINET_IN_H_
        !            34: #define        _NETINET_IN_H_
        !            35: 
        !            36: #include <sys/cdefs.h>
        !            37: #include <sys/_types.h>
        !            38: #include <machine/endian.h>
        !            39: 
        !            40: /* Protocols common to RFC 1700, POSIX, and X/Open. */
        !            41: #define        IPPROTO_IP              0               /* dummy for IP */
        !            42: #define        IPPROTO_ICMP            1               /* control message protocol */
        !            43: #define        IPPROTO_TCP             6               /* tcp */
        !            44: #define        IPPROTO_UDP             17              /* user datagram protocol */
        !            45: 
        !            46: #define        INADDR_ANY              (u_int32_t)0x00000000
        !            47: #define        INADDR_BROADCAST        (u_int32_t)0xffffffff   /* must be masked */
        !            48: 
        !            49: #ifndef _UINT8_T_DECLARED
        !            50: typedef        __uint8_t               uint8_t;
        !            51: #define        _UINT8_T_DECLARED
        !            52: #endif
        !            53: 
        !            54: #ifndef _UINT16_T_DECLARED
        !            55: typedef        __uint16_t              uint16_t;
        !            56: #define        _UINT16_T_DECLARED
        !            57: #endif
        !            58: 
        !            59: #ifndef _UINT32_T_DECLARED
        !            60: typedef        __uint32_t              uint32_t;
        !            61: #define        _UINT32_T_DECLARED
        !            62: #endif
        !            63: 
        !            64: #ifndef _IN_ADDR_T_DECLARED
        !            65: typedef        uint32_t                in_addr_t;
        !            66: #define        _IN_ADDR_T_DECLARED
        !            67: #endif
        !            68: 
        !            69: #ifndef _IN_PORT_T_DECLARED
        !            70: typedef        uint16_t                in_port_t;
        !            71: #define        _IN_PORT_T_DECLARED
        !            72: #endif
        !            73: 
        !            74: #ifndef _SA_FAMILY_T_DECLARED
        !            75: typedef        __sa_family_t           sa_family_t;
        !            76: #define        _SA_FAMILY_T_DECLARED
        !            77: #endif
        !            78: 
        !            79: /* Internet address (a structure for historical reasons). */
        !            80: #ifndef        _STRUCT_IN_ADDR_DECLARED
        !            81: struct in_addr {
        !            82:        in_addr_t s_addr;
        !            83: };
        !            84: #define        _STRUCT_IN_ADDR_DECLARED
        !            85: #endif
        !            86: 
        !            87: #ifndef        _SOCKLEN_T_DECLARED
        !            88: typedef        __socklen_t     socklen_t;
        !            89: #define        _SOCKLEN_T_DECLARED
        !            90: #endif
        !            91: 
        !            92: #include <sys/_sockaddr_storage.h>
        !            93: 
        !            94: /* Socket address, internet style. */
        !            95: struct sockaddr_in {
        !            96:        uint8_t sin_len;
        !            97:        sa_family_t     sin_family;
        !            98:        in_port_t       sin_port;
        !            99:        struct  in_addr sin_addr;
        !           100:        char    sin_zero[8];
        !           101: };
        !           102: 
        !           103: #if !defined(_KERNEL) && __BSD_VISIBLE
        !           104: 
        !           105: #ifndef _BYTEORDER_PROTOTYPED
        !           106: #define        _BYTEORDER_PROTOTYPED
        !           107: __BEGIN_DECLS
        !           108: uint32_t       htonl(uint32_t);
        !           109: uint16_t       htons(uint16_t);
        !           110: uint32_t       ntohl(uint32_t);
        !           111: uint16_t       ntohs(uint16_t);
        !           112: __END_DECLS
        !           113: #endif
        !           114: 
        !           115: #ifndef _BYTEORDER_FUNC_DEFINED
        !           116: #define        _BYTEORDER_FUNC_DEFINED
        !           117: #define        htonl(x)        __htonl(x)
        !           118: #define        htons(x)        __htons(x)
        !           119: #define        ntohl(x)        __ntohl(x)
        !           120: #define        ntohs(x)        __ntohs(x)
        !           121: #endif
        !           122: 
        !           123: #endif /* !_KERNEL && __BSD_VISIBLE */
        !           124: 
        !           125: #if __POSIX_VISIBLE >= 200112
        !           126: #define        IPPROTO_RAW             255             /* raw IP packet */
        !           127: #define        INET_ADDRSTRLEN         16
        !           128: #endif
        !           129: 
        !           130: #if __BSD_VISIBLE
        !           131: /*
        !           132:  * Constants and structures defined by the internet system,
        !           133:  * Per RFC 790, September 1981, and numerous additions.
        !           134:  */
        !           135: 
        !           136: /*
        !           137:  * Protocols (RFC 1700)
        !           138:  */
        !           139: #define        IPPROTO_HOPOPTS         0               /* IP6 hop-by-hop options */
        !           140: #define        IPPROTO_IGMP            2               /* group mgmt protocol */
        !           141: #define        IPPROTO_GGP             3               /* gateway^2 (deprecated) */
        !           142: #define        IPPROTO_IPV4            4               /* IPv4 encapsulation */
        !           143: #define        IPPROTO_IPIP            IPPROTO_IPV4    /* for compatibility */
        !           144: #define        IPPROTO_ST              7               /* Stream protocol II */
        !           145: #define        IPPROTO_EGP             8               /* exterior gateway protocol */
        !           146: #define        IPPROTO_PIGP            9               /* private interior gateway */
        !           147: #define        IPPROTO_RCCMON          10              /* BBN RCC Monitoring */
        !           148: #define        IPPROTO_NVPII           11              /* network voice protocol*/
        !           149: #define        IPPROTO_PUP             12              /* pup */
        !           150: #define        IPPROTO_ARGUS           13              /* Argus */
        !           151: #define        IPPROTO_EMCON           14              /* EMCON */
        !           152: #define        IPPROTO_XNET            15              /* Cross Net Debugger */
        !           153: #define        IPPROTO_CHAOS           16              /* Chaos*/
        !           154: #define        IPPROTO_MUX             18              /* Multiplexing */
        !           155: #define        IPPROTO_MEAS            19              /* DCN Measurement Subsystems */
        !           156: #define        IPPROTO_HMP             20              /* Host Monitoring */
        !           157: #define        IPPROTO_PRM             21              /* Packet Radio Measurement */
        !           158: #define        IPPROTO_IDP             22              /* xns idp */
        !           159: #define        IPPROTO_TRUNK1          23              /* Trunk-1 */
        !           160: #define        IPPROTO_TRUNK2          24              /* Trunk-2 */
        !           161: #define        IPPROTO_LEAF1           25              /* Leaf-1 */
        !           162: #define        IPPROTO_LEAF2           26              /* Leaf-2 */
        !           163: #define        IPPROTO_RDP             27              /* Reliable Data */
        !           164: #define        IPPROTO_IRTP            28              /* Reliable Transaction */
        !           165: #define        IPPROTO_TP              29              /* tp-4 w/ class negotiation */
        !           166: #define        IPPROTO_BLT             30              /* Bulk Data Transfer */
        !           167: #define        IPPROTO_NSP             31              /* Network Services */
        !           168: #define        IPPROTO_INP             32              /* Merit Internodal */
        !           169: #define        IPPROTO_SEP             33              /* Sequential Exchange */
        !           170: #define        IPPROTO_3PC             34              /* Third Party Connect */
        !           171: #define        IPPROTO_IDPR            35              /* InterDomain Policy Routing */
        !           172: #define        IPPROTO_XTP             36              /* XTP */
        !           173: #define        IPPROTO_DDP             37              /* Datagram Delivery */
        !           174: #define        IPPROTO_CMTP            38              /* Control Message Transport */
        !           175: #define        IPPROTO_TPXX            39              /* TP++ Transport */
        !           176: #define        IPPROTO_IL              40              /* IL transport protocol */
        !           177: #define        IPPROTO_IPV6            41              /* IP6 header */
        !           178: #define        IPPROTO_SDRP            42              /* Source Demand Routing */
        !           179: #define        IPPROTO_ROUTING         43              /* IP6 routing header */
        !           180: #define        IPPROTO_FRAGMENT        44              /* IP6 fragmentation header */
        !           181: #define        IPPROTO_IDRP            45              /* InterDomain Routing*/
        !           182: #define        IPPROTO_RSVP            46              /* resource reservation */
        !           183: #define        IPPROTO_GRE             47              /* General Routing Encap. */
        !           184: #define        IPPROTO_MHRP            48              /* Mobile Host Routing */
        !           185: #define        IPPROTO_BHA             49              /* BHA */
        !           186: #define        IPPROTO_ESP             50              /* IP6 Encap Sec. Payload */
        !           187: #define        IPPROTO_AH              51              /* IP6 Auth Header */
        !           188: #define        IPPROTO_INLSP           52              /* Integ. Net Layer Security */
        !           189: #define        IPPROTO_SWIPE           53              /* IP with encryption */
        !           190: #define        IPPROTO_NHRP            54              /* Next Hop Resolution */
        !           191: #define        IPPROTO_MOBILE          55              /* IP Mobility */
        !           192: #define        IPPROTO_TLSP            56              /* Transport Layer Security */
        !           193: #define        IPPROTO_SKIP            57              /* SKIP */
        !           194: #define        IPPROTO_ICMPV6          58              /* ICMP6 */
        !           195: #define        IPPROTO_NONE            59              /* IP6 no next header */
        !           196: #define        IPPROTO_DSTOPTS         60              /* IP6 destination option */
        !           197: #define        IPPROTO_AHIP            61              /* any host internal protocol */
        !           198: #define        IPPROTO_CFTP            62              /* CFTP */
        !           199: #define        IPPROTO_HELLO           63              /* "hello" routing protocol */
        !           200: #define        IPPROTO_SATEXPAK        64              /* SATNET/Backroom EXPAK */
        !           201: #define        IPPROTO_KRYPTOLAN       65              /* Kryptolan */
        !           202: #define        IPPROTO_RVD             66              /* Remote Virtual Disk */
        !           203: #define        IPPROTO_IPPC            67              /* Pluribus Packet Core */
        !           204: #define        IPPROTO_ADFS            68              /* Any distributed FS */
        !           205: #define        IPPROTO_SATMON          69              /* Satnet Monitoring */
        !           206: #define        IPPROTO_VISA            70              /* VISA Protocol */
        !           207: #define        IPPROTO_IPCV            71              /* Packet Core Utility */
        !           208: #define        IPPROTO_CPNX            72              /* Comp. Prot. Net. Executive */
        !           209: #define        IPPROTO_CPHB            73              /* Comp. Prot. HeartBeat */
        !           210: #define        IPPROTO_WSN             74              /* Wang Span Network */
        !           211: #define        IPPROTO_PVP             75              /* Packet Video Protocol */
        !           212: #define        IPPROTO_BRSATMON        76              /* BackRoom SATNET Monitoring */
        !           213: #define        IPPROTO_ND              77              /* Sun net disk proto (temp.) */
        !           214: #define        IPPROTO_WBMON           78              /* WIDEBAND Monitoring */
        !           215: #define        IPPROTO_WBEXPAK         79              /* WIDEBAND EXPAK */
        !           216: #define        IPPROTO_EON             80              /* ISO cnlp */
        !           217: #define        IPPROTO_VMTP            81              /* VMTP */
        !           218: #define        IPPROTO_SVMTP           82              /* Secure VMTP */
        !           219: #define        IPPROTO_VINES           83              /* Banyon VINES */
        !           220: #define        IPPROTO_TTP             84              /* TTP */
        !           221: #define        IPPROTO_IGP             85              /* NSFNET-IGP */
        !           222: #define        IPPROTO_DGP             86              /* dissimilar gateway prot. */
        !           223: #define        IPPROTO_TCF             87              /* TCF */
        !           224: #define        IPPROTO_IGRP            88              /* Cisco/GXS IGRP */
        !           225: #define        IPPROTO_OSPFIGP         89              /* OSPFIGP */
        !           226: #define        IPPROTO_SRPC            90              /* Strite RPC protocol */
        !           227: #define        IPPROTO_LARP            91              /* Locus Address Resoloution */
        !           228: #define        IPPROTO_MTP             92              /* Multicast Transport */
        !           229: #define        IPPROTO_AX25            93              /* AX.25 Frames */
        !           230: #define        IPPROTO_IPEIP           94              /* IP encapsulated in IP */
        !           231: #define        IPPROTO_MICP            95              /* Mobile Int.ing control */
        !           232: #define        IPPROTO_SCCSP           96              /* Semaphore Comm. security */
        !           233: #define        IPPROTO_ETHERIP         97              /* Ethernet IP encapsulation */
        !           234: #define        IPPROTO_ENCAP           98              /* encapsulation header */
        !           235: #define        IPPROTO_APES            99              /* any private encr. scheme */
        !           236: #define        IPPROTO_GMTP            100             /* GMTP*/
        !           237: #define        IPPROTO_IPCOMP          108             /* payload compression (IPComp) */
        !           238: #define        IPPROTO_SCTP            132             /* SCTP */
        !           239: #define        IPPROTO_MH              135             /* IPv6 Mobility Header */
        !           240: /* 101-254: Partly Unassigned */
        !           241: #define        IPPROTO_PIM             103             /* Protocol Independent Mcast */
        !           242: #define        IPPROTO_CARP            112             /* CARP */
        !           243: #define        IPPROTO_PGM             113             /* PGM */
        !           244: #define        IPPROTO_PFSYNC          240             /* PFSYNC */
        !           245: /* 255: Reserved */
        !           246: /* BSD Private, local use, namespace incursion, no longer used */
        !           247: #define        IPPROTO_OLD_DIVERT      254             /* OLD divert pseudo-proto */
        !           248: #define        IPPROTO_MAX             256
        !           249: 
        !           250: /* last return value of *_input(), meaning "all job for this pkt is done".  */
        !           251: #define        IPPROTO_DONE            257
        !           252: 
        !           253: /* Only used internally, so can be outside the range of valid IP protocols. */
        !           254: #define        IPPROTO_DIVERT          258             /* divert pseudo-protocol */
        !           255: #define        IPPROTO_SEND            259             /* SeND pseudo-protocol */
        !           256: 
        !           257: /*
        !           258:  * Defined to avoid confusion.  The master value is defined by
        !           259:  * PROTO_SPACER in sys/protosw.h.
        !           260:  */
        !           261: #define        IPPROTO_SPACER          32767           /* spacer for loadable protos */
        !           262: 
        !           263: /*
        !           264:  * Local port number conventions:
        !           265:  *
        !           266:  * When a user does a bind(2) or connect(2) with a port number of zero,
        !           267:  * a non-conflicting local port address is chosen.
        !           268:  * The default range is IPPORT_HIFIRSTAUTO through
        !           269:  * IPPORT_HILASTAUTO, although that is settable by sysctl.
        !           270:  *
        !           271:  * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
        !           272:  * default assignment range.
        !           273:  *
        !           274:  * The value IP_PORTRANGE_DEFAULT causes the default behavior.
        !           275:  *
        !           276:  * The value IP_PORTRANGE_HIGH changes the range of candidate port numbers
        !           277:  * into the "high" range.  These are reserved for client outbound connections
        !           278:  * which do not want to be filtered by any firewalls.
        !           279:  *
        !           280:  * The value IP_PORTRANGE_LOW changes the range to the "low" are
        !           281:  * that is (by convention) restricted to privileged processes.  This
        !           282:  * convention is based on "vouchsafe" principles only.  It is only secure
        !           283:  * if you trust the remote host to restrict these ports.
        !           284:  *
        !           285:  * The default range of ports and the high range can be changed by
        !           286:  * sysctl(3).  (net.inet.ip.port{hi,low}{first,last}_auto)
        !           287:  *
        !           288:  * Changing those values has bad security implications if you are
        !           289:  * using a stateless firewall that is allowing packets outside of that
        !           290:  * range in order to allow transparent outgoing connections.
        !           291:  *
        !           292:  * Such a firewall configuration will generally depend on the use of these
        !           293:  * default values.  If you change them, you may find your Security
        !           294:  * Administrator looking for you with a heavy object.
        !           295:  *
        !           296:  * For a slightly more orthodox text view on this:
        !           297:  *
        !           298:  *            ftp://ftp.isi.edu/in-notes/iana/assignments/port-numbers
        !           299:  *
        !           300:  *    port numbers are divided into three ranges:
        !           301:  *
        !           302:  *                0 -  1023 Well Known Ports
        !           303:  *             1024 - 49151 Registered Ports
        !           304:  *            49152 - 65535 Dynamic and/or Private Ports
        !           305:  *
        !           306:  */
        !           307: 
        !           308: /*
        !           309:  * Ports < IPPORT_RESERVED are reserved for
        !           310:  * privileged processes (e.g. root).         (IP_PORTRANGE_LOW)
        !           311:  */
        !           312: #define        IPPORT_RESERVED         1024
        !           313: 
        !           314: /*
        !           315:  * Default local port range, used by IP_PORTRANGE_DEFAULT
        !           316:  */
        !           317: #define IPPORT_EPHEMERALFIRST  10000
        !           318: #define IPPORT_EPHEMERALLAST   65535 
        !           319:  
        !           320: /*
        !           321:  * Dynamic port range, used by IP_PORTRANGE_HIGH.
        !           322:  */
        !           323: #define        IPPORT_HIFIRSTAUTO      49152
        !           324: #define        IPPORT_HILASTAUTO       65535
        !           325: 
        !           326: /*
        !           327:  * Scanning for a free reserved port return a value below IPPORT_RESERVED,
        !           328:  * but higher than IPPORT_RESERVEDSTART.  Traditionally the start value was
        !           329:  * 512, but that conflicts with some well-known-services that firewalls may
        !           330:  * have a fit if we use.
        !           331:  */
        !           332: #define        IPPORT_RESERVEDSTART    600
        !           333: 
        !           334: #define        IPPORT_MAX              65535
        !           335: 
        !           336: /*
        !           337:  * Definitions of bits in internet address integers.
        !           338:  * On subnets, the decomposition of addresses to host and net parts
        !           339:  * is done according to subnet mask, not the masks here.
        !           340:  */
        !           341: #define        IN_CLASSA(i)            (((u_int32_t)(i) & 0x80000000) == 0)
        !           342: #define        IN_CLASSA_NET           0xff000000
        !           343: #define        IN_CLASSA_NSHIFT        24
        !           344: #define        IN_CLASSA_HOST          0x00ffffff
        !           345: #define        IN_CLASSA_MAX           128
        !           346: 
        !           347: #define        IN_CLASSB(i)            (((u_int32_t)(i) & 0xc0000000) == 0x80000000)
        !           348: #define        IN_CLASSB_NET           0xffff0000
        !           349: #define        IN_CLASSB_NSHIFT        16
        !           350: #define        IN_CLASSB_HOST          0x0000ffff
        !           351: #define        IN_CLASSB_MAX           65536
        !           352: 
        !           353: #define        IN_CLASSC(i)            (((u_int32_t)(i) & 0xe0000000) == 0xc0000000)
        !           354: #define        IN_CLASSC_NET           0xffffff00
        !           355: #define        IN_CLASSC_NSHIFT        8
        !           356: #define        IN_CLASSC_HOST          0x000000ff
        !           357: 
        !           358: #define        IN_CLASSD(i)            (((u_int32_t)(i) & 0xf0000000) == 0xe0000000)
        !           359: #define        IN_CLASSD_NET           0xf0000000      /* These ones aren't really */
        !           360: #define        IN_CLASSD_NSHIFT        28              /* net and host fields, but */
        !           361: #define        IN_CLASSD_HOST          0x0fffffff      /* routing needn't know.    */
        !           362: #define        IN_MULTICAST(i)         IN_CLASSD(i)
        !           363: 
        !           364: #define        IN_EXPERIMENTAL(i)      (((u_int32_t)(i) & 0xf0000000) == 0xf0000000)
        !           365: #define        IN_BADCLASS(i)          (((u_int32_t)(i) & 0xf0000000) == 0xf0000000)
        !           366: 
        !           367: #define IN_LINKLOCAL(i)                (((u_int32_t)(i) & 0xffff0000) == 0xa9fe0000)
        !           368: #define IN_LOOPBACK(i)         (((u_int32_t)(i) & 0xff000000) == 0x7f000000)
        !           369: #define IN_ZERONET(i)          (((u_int32_t)(i) & 0xff000000) == 0)
        !           370: 
        !           371: #define        IN_PRIVATE(i)   ((((u_int32_t)(i) & 0xff000000) == 0x0a000000) || \
        !           372:                         (((u_int32_t)(i) & 0xfff00000) == 0xac100000) || \
        !           373:                         (((u_int32_t)(i) & 0xffff0000) == 0xc0a80000))
        !           374: 
        !           375: #define        IN_LOCAL_GROUP(i)       (((u_int32_t)(i) & 0xffffff00) == 0xe0000000)
        !           376:  
        !           377: #define        IN_ANY_LOCAL(i)         (IN_LINKLOCAL(i) || IN_LOCAL_GROUP(i))
        !           378: 
        !           379: #define        INADDR_LOOPBACK         (u_int32_t)0x7f000001
        !           380: #ifndef _KERNEL
        !           381: #define        INADDR_NONE             0xffffffff              /* -1 return */
        !           382: #endif
        !           383: 
        !           384: #define        INADDR_UNSPEC_GROUP     (u_int32_t)0xe0000000   /* 224.0.0.0 */
        !           385: #define        INADDR_ALLHOSTS_GROUP   (u_int32_t)0xe0000001   /* 224.0.0.1 */
        !           386: #define        INADDR_ALLRTRS_GROUP    (u_int32_t)0xe0000002   /* 224.0.0.2 */
        !           387: #define        INADDR_ALLRPTS_GROUP    (u_int32_t)0xe0000016   /* 224.0.0.22, IGMPv3 */
        !           388: #define        INADDR_CARP_GROUP       (u_int32_t)0xe0000012   /* 224.0.0.18 */
        !           389: #define        INADDR_PFSYNC_GROUP     (u_int32_t)0xe00000f0   /* 224.0.0.240 */
        !           390: #define        INADDR_ALLMDNS_GROUP    (u_int32_t)0xe00000fb   /* 224.0.0.251 */
        !           391: #define        INADDR_MAX_LOCAL_GROUP  (u_int32_t)0xe00000ff   /* 224.0.0.255 */
        !           392: 
        !           393: #define        IN_LOOPBACKNET          127                     /* official! */
        !           394: 
        !           395: /*
        !           396:  * Options for use with [gs]etsockopt at the IP level.
        !           397:  * First word of comment is data type; bool is stored in int.
        !           398:  */
        !           399: #define        IP_OPTIONS              1    /* buf/ip_opts; set/get IP options */
        !           400: #define        IP_HDRINCL              2    /* int; header is included with data */
        !           401: #define        IP_TOS                  3    /* int; IP type of service and preced. */
        !           402: #define        IP_TTL                  4    /* int; IP time to live */
        !           403: #define        IP_RECVOPTS             5    /* bool; receive all IP opts w/dgram */
        !           404: #define        IP_RECVRETOPTS          6    /* bool; receive IP opts for response */
        !           405: #define        IP_RECVDSTADDR          7    /* bool; receive IP dst addr w/dgram */
        !           406: #define        IP_SENDSRCADDR          IP_RECVDSTADDR /* cmsg_type to set src addr */
        !           407: #define        IP_RETOPTS              8    /* ip_opts; set/get IP options */
        !           408: #define        IP_MULTICAST_IF         9    /* struct in_addr *or* struct ip_mreqn;
        !           409:                                      * set/get IP multicast i/f  */
        !           410: #define        IP_MULTICAST_TTL        10   /* u_char; set/get IP multicast ttl */
        !           411: #define        IP_MULTICAST_LOOP       11   /* u_char; set/get IP multicast loopback */
        !           412: #define        IP_ADD_MEMBERSHIP       12   /* ip_mreq; add an IP group membership */
        !           413: #define        IP_DROP_MEMBERSHIP      13   /* ip_mreq; drop an IP group membership */
        !           414: #define        IP_MULTICAST_VIF        14   /* set/get IP mcast virt. iface */
        !           415: #define        IP_RSVP_ON              15   /* enable RSVP in kernel */
        !           416: #define        IP_RSVP_OFF             16   /* disable RSVP in kernel */
        !           417: #define        IP_RSVP_VIF_ON          17   /* set RSVP per-vif socket */
        !           418: #define        IP_RSVP_VIF_OFF         18   /* unset RSVP per-vif socket */
        !           419: #define        IP_PORTRANGE            19   /* int; range to choose for unspec port */
        !           420: #define        IP_RECVIF               20   /* bool; receive reception if w/dgram */
        !           421: /* for IPSEC */
        !           422: #define        IP_IPSEC_POLICY         21   /* int; set/get security policy */
        !           423: #define        IP_FAITH                22   /* bool; accept FAITH'ed connections */
        !           424: 
        !           425: #define        IP_ONESBCAST            23   /* bool: send all-ones broadcast */
        !           426: #define        IP_BINDANY              24   /* bool: allow bind to any address */
        !           427: 
        !           428: /*
        !           429:  * Options for controlling the firewall and dummynet.
        !           430:  * Historical options (from 40 to 64) will eventually be
        !           431:  * replaced by only two options, IP_FW3 and IP_DUMMYNET3.
        !           432:  */
        !           433: #define        IP_FW_TABLE_ADD         40   /* add entry */
        !           434: #define        IP_FW_TABLE_DEL         41   /* delete entry */
        !           435: #define        IP_FW_TABLE_FLUSH       42   /* flush table */
        !           436: #define        IP_FW_TABLE_GETSIZE     43   /* get table size */
        !           437: #define        IP_FW_TABLE_LIST        44   /* list table contents */
        !           438: 
        !           439: #define        IP_FW3                  48   /* generic ipfw v.3 sockopts */
        !           440: #define        IP_DUMMYNET3            49   /* generic dummynet v.3 sockopts */
        !           441: 
        !           442: #define        IP_FW_ADD               50   /* add a firewall rule to chain */
        !           443: #define        IP_FW_DEL               51   /* delete a firewall rule from chain */
        !           444: #define        IP_FW_FLUSH             52   /* flush firewall rule chain */
        !           445: #define        IP_FW_ZERO              53   /* clear single/all firewall counter(s) */
        !           446: #define        IP_FW_GET               54   /* get entire firewall rule chain */
        !           447: #define        IP_FW_RESETLOG          55   /* reset logging counters */
        !           448: 
        !           449: #define IP_FW_NAT_CFG           56   /* add/config a nat rule */
        !           450: #define IP_FW_NAT_DEL           57   /* delete a nat rule */
        !           451: #define IP_FW_NAT_GET_CONFIG    58   /* get configuration of a nat rule */
        !           452: #define IP_FW_NAT_GET_LOG       59   /* get log of a nat rule */
        !           453: 
        !           454: #define        IP_DUMMYNET_CONFIGURE   60   /* add/configure a dummynet pipe */
        !           455: #define        IP_DUMMYNET_DEL         61   /* delete a dummynet pipe from chain */
        !           456: #define        IP_DUMMYNET_FLUSH       62   /* flush dummynet */
        !           457: #define        IP_DUMMYNET_GET         64   /* get entire dummynet pipes */
        !           458: 
        !           459: #define        IP_RECVTTL              65   /* bool; receive IP TTL w/dgram */
        !           460: #define        IP_MINTTL               66   /* minimum TTL for packet or drop */
        !           461: #define        IP_DONTFRAG             67   /* don't fragment packet */
        !           462: 
        !           463: /* IPv4 Source Filter Multicast API [RFC3678] */
        !           464: #define        IP_ADD_SOURCE_MEMBERSHIP        70   /* join a source-specific group */
        !           465: #define        IP_DROP_SOURCE_MEMBERSHIP       71   /* drop a single source */
        !           466: #define        IP_BLOCK_SOURCE                 72   /* block a source */
        !           467: #define        IP_UNBLOCK_SOURCE               73   /* unblock a source */
        !           468: 
        !           469: /* The following option is private; do not use it from user applications. */
        !           470: #define        IP_MSFILTER                     74   /* set/get filter list */
        !           471: 
        !           472: /* Protocol Independent Multicast API [RFC3678] */
        !           473: #define        MCAST_JOIN_GROUP                80   /* join an any-source group */
        !           474: #define        MCAST_LEAVE_GROUP               81   /* leave all sources for group */
        !           475: #define        MCAST_JOIN_SOURCE_GROUP         82   /* join a source-specific group */
        !           476: #define        MCAST_LEAVE_SOURCE_GROUP        83   /* leave a single source */
        !           477: #define        MCAST_BLOCK_SOURCE              84   /* block a source */
        !           478: #define        MCAST_UNBLOCK_SOURCE            85   /* unblock a source */
        !           479: 
        !           480: /*
        !           481:  * Defaults and limits for options
        !           482:  */
        !           483: #define        IP_DEFAULT_MULTICAST_TTL  1     /* normally limit m'casts to 1 hop  */
        !           484: #define        IP_DEFAULT_MULTICAST_LOOP 1     /* normally hear sends if a member  */
        !           485: 
        !           486: /*
        !           487:  * The imo_membership vector for each socket is now dynamically allocated at
        !           488:  * run-time, bounded by USHRT_MAX, and is reallocated when needed, sized
        !           489:  * according to a power-of-two increment.
        !           490:  */
        !           491: #define        IP_MIN_MEMBERSHIPS      31
        !           492: #define        IP_MAX_MEMBERSHIPS      4095
        !           493: #define        IP_MAX_SOURCE_FILTER    1024    /* XXX to be unused */
        !           494: 
        !           495: /*
        !           496:  * Default resource limits for IPv4 multicast source filtering.
        !           497:  * These may be modified by sysctl.
        !           498:  */
        !           499: #define        IP_MAX_GROUP_SRC_FILTER         512     /* sources per group */
        !           500: #define        IP_MAX_SOCK_SRC_FILTER          128     /* sources per socket/group */
        !           501: #define        IP_MAX_SOCK_MUTE_FILTER         128     /* XXX no longer used */
        !           502: 
        !           503: /*
        !           504:  * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
        !           505:  */
        !           506: struct ip_mreq {
        !           507:        struct  in_addr imr_multiaddr;  /* IP multicast address of group */
        !           508:        struct  in_addr imr_interface;  /* local IP address of interface */
        !           509: };
        !           510: 
        !           511: /*
        !           512:  * Modified argument structure for IP_MULTICAST_IF, obtained from Linux.
        !           513:  * This is used to specify an interface index for multicast sends, as
        !           514:  * the IPv4 legacy APIs do not support this (unless IP_SENDIF is available).
        !           515:  */
        !           516: struct ip_mreqn {
        !           517:        struct  in_addr imr_multiaddr;  /* IP multicast address of group */
        !           518:        struct  in_addr imr_address;    /* local IP address of interface */
        !           519:        int             imr_ifindex;    /* Interface index; cast to uint32_t */
        !           520: };
        !           521: 
        !           522: /*
        !           523:  * Argument structure for IPv4 Multicast Source Filter APIs. [RFC3678]
        !           524:  */
        !           525: struct ip_mreq_source {
        !           526:        struct  in_addr imr_multiaddr;  /* IP multicast address of group */
        !           527:        struct  in_addr imr_sourceaddr; /* IP address of source */
        !           528:        struct  in_addr imr_interface;  /* local IP address of interface */
        !           529: };
        !           530: 
        !           531: /*
        !           532:  * Argument structures for Protocol-Independent Multicast Source
        !           533:  * Filter APIs. [RFC3678]
        !           534:  */
        !           535: struct group_req {
        !           536:        uint32_t                gr_interface;   /* interface index */
        !           537:        struct sockaddr_storage gr_group;       /* group address */
        !           538: };
        !           539: 
        !           540: struct group_source_req {
        !           541:        uint32_t                gsr_interface;  /* interface index */
        !           542:        struct sockaddr_storage gsr_group;      /* group address */
        !           543:        struct sockaddr_storage gsr_source;     /* source address */
        !           544: };
        !           545: 
        !           546: #ifndef __MSFILTERREQ_DEFINED
        !           547: #define __MSFILTERREQ_DEFINED
        !           548: /*
        !           549:  * The following structure is private; do not use it from user applications.
        !           550:  * It is used to communicate IP_MSFILTER/IPV6_MSFILTER information between
        !           551:  * the RFC 3678 libc functions and the kernel.
        !           552:  */
        !           553: struct __msfilterreq {
        !           554:        uint32_t                 msfr_ifindex;  /* interface index */
        !           555:        uint32_t                 msfr_fmode;    /* filter mode for group */
        !           556:        uint32_t                 msfr_nsrcs;    /* # of sources in msfr_srcs */
        !           557:        struct sockaddr_storage  msfr_group;    /* group address */
        !           558:        struct sockaddr_storage *msfr_srcs;     /* pointer to the first member
        !           559:                                                 * of a contiguous array of
        !           560:                                                 * sources to filter in full.
        !           561:                                                 */
        !           562: };
        !           563: #endif
        !           564: 
        !           565: struct sockaddr;
        !           566: 
        !           567: /*
        !           568:  * Advanced (Full-state) APIs [RFC3678]
        !           569:  * The RFC specifies uint_t for the 6th argument to [sg]etsourcefilter().
        !           570:  * We use uint32_t here to be consistent.
        !           571:  */
        !           572: int    setipv4sourcefilter(int, struct in_addr, struct in_addr, uint32_t,
        !           573:            uint32_t, struct in_addr *);
        !           574: int    getipv4sourcefilter(int, struct in_addr, struct in_addr, uint32_t *,
        !           575:            uint32_t *, struct in_addr *);
        !           576: int    setsourcefilter(int, uint32_t, struct sockaddr *, socklen_t,
        !           577:            uint32_t, uint32_t, struct sockaddr_storage *);
        !           578: int    getsourcefilter(int, uint32_t, struct sockaddr *, socklen_t,
        !           579:            uint32_t *, uint32_t *, struct sockaddr_storage *);
        !           580: 
        !           581: /*
        !           582:  * Filter modes; also used to represent per-socket filter mode internally.
        !           583:  */
        !           584: #define        MCAST_UNDEFINED 0       /* fmode: not yet defined */
        !           585: #define        MCAST_INCLUDE   1       /* fmode: include these source(s) */
        !           586: #define        MCAST_EXCLUDE   2       /* fmode: exclude these source(s) */
        !           587: 
        !           588: /*
        !           589:  * Argument for IP_PORTRANGE:
        !           590:  * - which range to search when port is unspecified at bind() or connect()
        !           591:  */
        !           592: #define        IP_PORTRANGE_DEFAULT    0       /* default range */
        !           593: #define        IP_PORTRANGE_HIGH       1       /* "high" - request firewall bypass */
        !           594: #define        IP_PORTRANGE_LOW        2       /* "low" - vouchsafe security */
        !           595: 
        !           596: /*
        !           597:  * Definitions for inet sysctl operations.
        !           598:  *
        !           599:  * Third level is protocol number.
        !           600:  * Fourth level is desired variable within that protocol.
        !           601:  */
        !           602: #define        IPPROTO_MAXID   (IPPROTO_AH + 1)        /* don't list to IPPROTO_MAX */
        !           603: 
        !           604: #define        CTL_IPPROTO_NAMES { \
        !           605:        { "ip", CTLTYPE_NODE }, \
        !           606:        { "icmp", CTLTYPE_NODE }, \
        !           607:        { "igmp", CTLTYPE_NODE }, \
        !           608:        { "ggp", CTLTYPE_NODE }, \
        !           609:        { 0, 0 }, \
        !           610:        { 0, 0 }, \
        !           611:        { "tcp", CTLTYPE_NODE }, \
        !           612:        { 0, 0 }, \
        !           613:        { "egp", CTLTYPE_NODE }, \
        !           614:        { 0, 0 }, \
        !           615:        { 0, 0 }, \
        !           616:        { 0, 0 }, \
        !           617:        { "pup", CTLTYPE_NODE }, \
        !           618:        { 0, 0 }, \
        !           619:        { 0, 0 }, \
        !           620:        { 0, 0 }, \
        !           621:        { 0, 0 }, \
        !           622:        { "udp", CTLTYPE_NODE }, \
        !           623:        { 0, 0 }, \
        !           624:        { 0, 0 }, \
        !           625:        { 0, 0 }, \
        !           626:        { 0, 0 }, \
        !           627:        { "idp", CTLTYPE_NODE }, \
        !           628:        { 0, 0 }, \
        !           629:        { 0, 0 }, \
        !           630:        { 0, 0 }, \
        !           631:        { 0, 0 }, \
        !           632:        { 0, 0 }, \
        !           633:        { 0, 0 }, \
        !           634:        { 0, 0 }, \
        !           635:        { 0, 0 }, \
        !           636:        { 0, 0 }, \
        !           637:        { 0, 0 }, \
        !           638:        { 0, 0 }, \
        !           639:        { 0, 0 }, \
        !           640:        { 0, 0 }, \
        !           641:        { 0, 0 }, \
        !           642:        { 0, 0 }, \
        !           643:        { 0, 0 }, \
        !           644:        { 0, 0 }, \
        !           645:        { 0, 0 }, \
        !           646:        { 0, 0 }, \
        !           647:        { 0, 0 }, \
        !           648:        { 0, 0 }, \
        !           649:        { 0, 0 }, \
        !           650:        { 0, 0 }, \
        !           651:        { 0, 0 }, \
        !           652:        { 0, 0 }, \
        !           653:        { 0, 0 }, \
        !           654:        { 0, 0 }, \
        !           655:        { 0, 0 }, \
        !           656:        { "ipsec", CTLTYPE_NODE }, \
        !           657:        { 0, 0 }, \
        !           658:        { 0, 0 }, \
        !           659:        { 0, 0 }, \
        !           660:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           661:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           662:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           663:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           664:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           665:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           666:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           667:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           668:        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
        !           669:        { 0, 0 }, \
        !           670:        { 0, 0 }, \
        !           671:        { 0, 0 }, \
        !           672:        { "pim", CTLTYPE_NODE }, \
        !           673: }
        !           674: 
        !           675: /*
        !           676:  * Names for IP sysctl objects
        !           677:  */
        !           678: #define        IPCTL_FORWARDING        1       /* act as router */
        !           679: #define        IPCTL_SENDREDIRECTS     2       /* may send redirects when forwarding */
        !           680: #define        IPCTL_DEFTTL            3       /* default TTL */
        !           681: #ifdef notyet
        !           682: #define        IPCTL_DEFMTU            4       /* default MTU */
        !           683: #endif
        !           684: #define        IPCTL_RTEXPIRE          5       /* cloned route expiration time */
        !           685: #define        IPCTL_RTMINEXPIRE       6       /* min value for expiration time */
        !           686: #define        IPCTL_RTMAXCACHE        7       /* trigger level for dynamic expire */
        !           687: #define        IPCTL_SOURCEROUTE       8       /* may perform source routes */
        !           688: #define        IPCTL_DIRECTEDBROADCAST 9       /* may re-broadcast received packets */
        !           689: #define        IPCTL_INTRQMAXLEN       10      /* max length of netisr queue */
        !           690: #define        IPCTL_INTRQDROPS        11      /* number of netisr q drops */
        !           691: #define        IPCTL_STATS             12      /* ipstat structure */
        !           692: #define        IPCTL_ACCEPTSOURCEROUTE 13      /* may accept source routed packets */
        !           693: #define        IPCTL_FASTFORWARDING    14      /* use fast IP forwarding code */
        !           694: #define        IPCTL_KEEPFAITH         15      /* FAITH IPv4->IPv6 translater ctl */
        !           695: #define        IPCTL_GIF_TTL           16      /* default TTL for gif encap packet */
        !           696: #define        IPCTL_MAXID             17
        !           697: 
        !           698: #define        IPCTL_NAMES { \
        !           699:        { 0, 0 }, \
        !           700:        { "forwarding", CTLTYPE_INT }, \
        !           701:        { "redirect", CTLTYPE_INT }, \
        !           702:        { "ttl", CTLTYPE_INT }, \
        !           703:        { "mtu", CTLTYPE_INT }, \
        !           704:        { "rtexpire", CTLTYPE_INT }, \
        !           705:        { "rtminexpire", CTLTYPE_INT }, \
        !           706:        { "rtmaxcache", CTLTYPE_INT }, \
        !           707:        { "sourceroute", CTLTYPE_INT }, \
        !           708:        { "directed-broadcast", CTLTYPE_INT }, \
        !           709:        { "intr-queue-maxlen", CTLTYPE_INT }, \
        !           710:        { "intr-queue-drops", CTLTYPE_INT }, \
        !           711:        { "stats", CTLTYPE_STRUCT }, \
        !           712:        { "accept_sourceroute", CTLTYPE_INT }, \
        !           713:        { "fastforwarding", CTLTYPE_INT }, \
        !           714: }
        !           715: 
        !           716: #endif /* __BSD_VISIBLE */
        !           717: 
        !           718: #ifdef _KERNEL
        !           719: 
        !           720: struct ifnet; struct mbuf;     /* forward declarations for Standard C */
        !           721: 
        !           722: int     in_broadcast(struct in_addr, struct ifnet *);
        !           723: int     in_canforward(struct in_addr);
        !           724: int     in_localaddr(struct in_addr);
        !           725: int     in_localip(struct in_addr);
        !           726: int     inet_aton(const char *, struct in_addr *); /* in libkern */
        !           727: char   *inet_ntoa(struct in_addr); /* in libkern */
        !           728: char   *inet_ntoa_r(struct in_addr ina, char *buf); /* in libkern */
        !           729: void    in_ifdetach(struct ifnet *);
        !           730: 
        !           731: #define        in_hosteq(s, t) ((s).s_addr == (t).s_addr)
        !           732: #define        in_nullhost(x)  ((x).s_addr == INADDR_ANY)
        !           733: #define        in_allhosts(x)  ((x).s_addr == htonl(INADDR_ALLHOSTS_GROUP))
        !           734: 
        !           735: #define        satosin(sa)     ((struct sockaddr_in *)(sa))
        !           736: #define        sintosa(sin)    ((struct sockaddr *)(sin))
        !           737: #define        ifatoia(ifa)    ((struct in_ifaddr *)(ifa))
        !           738: 
        !           739: /*
        !           740:  * Historically, BSD keeps ip_len and ip_off in host format
        !           741:  * when doing layer 3 processing, and this often requires
        !           742:  * to translate the format back and forth.
        !           743:  * To make the process explicit, we define a couple of macros
        !           744:  * that also take into account the fact that at some point
        !           745:  * we may want to keep those fields always in net format.
        !           746:  */
        !           747: 
        !           748: #if (BYTE_ORDER == BIG_ENDIAN) || defined(HAVE_NET_IPLEN)
        !           749: #define SET_NET_IPLEN(p)       do {} while (0)
        !           750: #define SET_HOST_IPLEN(p)      do {} while (0)
        !           751: #else
        !           752: #define SET_NET_IPLEN(p)       do {            \
        !           753:        struct ip *h_ip = (p);                  \
        !           754:        h_ip->ip_len = htons(h_ip->ip_len);     \
        !           755:        h_ip->ip_off = htons(h_ip->ip_off);     \
        !           756:        } while (0)
        !           757: 
        !           758: #define SET_HOST_IPLEN(p)      do {            \
        !           759:        struct ip *h_ip = (p);                  \
        !           760:        h_ip->ip_len = ntohs(h_ip->ip_len);     \
        !           761:        h_ip->ip_off = ntohs(h_ip->ip_off);     \
        !           762:        } while (0)
        !           763: #endif /* !HAVE_NET_IPLEN */
        !           764: 
        !           765: #endif /* _KERNEL */
        !           766: 
        !           767: /* INET6 stuff */
        !           768: #if __POSIX_VISIBLE >= 200112
        !           769: #define        __KAME_NETINET_IN_H_INCLUDED_
        !           770: #include <netinet6/in6.h>
        !           771: #undef __KAME_NETINET_IN_H_INCLUDED_
        !           772: #endif
        !           773: 
        !           774: #endif /* !_NETINET_IN_H_*/

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