Annotation of embedaddon/pimd/include/linux/netinet/in-glibc-2.1.h, revision 1.1

1.1     ! misho       1: /* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc.
        !             2:    This file is part of the GNU C Library.
        !             3: 
        !             4:    The GNU C Library is free software; you can redistribute it and/or
        !             5:    modify it under the terms of the GNU Library General Public License as
        !             6:    published by the Free Software Foundation; either version 2 of the
        !             7:    License, or (at your option) any later version.
        !             8: 
        !             9:    The GNU C Library is distributed in the hope that it will be useful,
        !            10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            12:    Library General Public License for more details.
        !            13: 
        !            14:    You should have received a copy of the GNU Library General Public
        !            15:    License along with the GNU C Library; see the file COPYING.LIB.  If not,
        !            16:    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
        !            17:    Boston, MA 02111-1307, USA.  */
        !            18: 
        !            19: #ifndef        _NETINET_IN_H
        !            20: #define        _NETINET_IN_H   1
        !            21: 
        !            22: #include <features.h>
        !            23: #include <stdint.h>
        !            24: 
        !            25: #include <sys/types.h>
        !            26: #include <bits/socket.h>
        !            27: 
        !            28: 
        !            29: __BEGIN_DECLS
        !            30: 
        !            31: /* Standard well-defined IP protocols.  */
        !            32: enum
        !            33:   {
        !            34:     IPPROTO_IP = 0,       /* Dummy protocol for TCP.  */
        !            35:     IPPROTO_HOPOPTS = 0,   /* IPv6 Hop-by-Hop options.  */
        !            36:     IPPROTO_ICMP = 1,     /* Internet Control Message Protocol.  */
        !            37:     IPPROTO_IGMP = 2,     /* Internet Group Management Protocol. */
        !            38:     IPPROTO_IPIP = 4,     /* IPIP tunnels (older KA9Q tunnels use 94).  */
        !            39:     IPPROTO_TCP = 6,      /* Transmission Control Protocol.  */
        !            40:     IPPROTO_EGP = 8,      /* Exterior Gateway Protocol.  */
        !            41:     IPPROTO_PUP = 12,     /* PUP protocol.  */
        !            42:     IPPROTO_UDP = 17,     /* User Datagram Protocol.  */
        !            43:     IPPROTO_IDP = 22,     /* XNS IDP protocol.  */
        !            44:     IPPROTO_IPV6 = 41,     /* IPv6 header.  */
        !            45:     IPPROTO_ROUTING = 43,  /* IPv6 routing header.  */
        !            46:     IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header.  */
        !            47:     IPPROTO_RSVP = 46,     /* RSVP Protocol.  */
        !            48:     IPPROTO_GRE = 47,      /* Cisco tunneling protocol.  */
        !            49:     IPPROTO_ESP = 50,      /* encapsulating security payload.  */
        !            50:     IPPROTO_AH = 51,       /* authentication header.  */
        !            51:     IPPROTO_ICMPV6 = 58,   /* ICMPv6.  */
        !            52:     IPPROTO_NONE = 59,     /* IPv6 no next header.  */
        !            53:     IPPROTO_DSTOPTS = 60,  /* IPv6 destination options.  */
        !            54:     IPPROTO_PIM = 103,     /* Protocol Independent Multicast.  */
        !            55:     IPPROTO_RAW = 255,    /* Raw IP packets.  */
        !            56:     IPPROTO_MAX
        !            57:   };
        !            58: 
        !            59: /* Standard well-known ports.  */
        !            60: enum
        !            61:   {
        !            62:     IPPORT_ECHO = 7,           /* Echo service.  */
        !            63:     IPPORT_DISCARD = 9,                /* Discard transmissions service.  */
        !            64:     IPPORT_SYSTAT = 11,                /* System status service.  */
        !            65:     IPPORT_DAYTIME = 13,       /* Time of day service.  */
        !            66:     IPPORT_NETSTAT = 15,       /* Network status service.  */
        !            67:     IPPORT_FTP = 21,           /* File Transfer Protocol.  */
        !            68:     IPPORT_TELNET = 23,                /* Telnet protocol.  */
        !            69:     IPPORT_SMTP = 25,          /* Simple Mail Transfer Protocol.  */
        !            70:     IPPORT_TIMESERVER = 37,    /* Timeserver service.  */
        !            71:     IPPORT_NAMESERVER = 42,    /* Domain Name Service.  */
        !            72:     IPPORT_WHOIS = 43,         /* Internet Whois service.  */
        !            73:     IPPORT_MTP = 57,
        !            74: 
        !            75:     IPPORT_TFTP = 69,          /* Trivial File Transfer Protocol.  */
        !            76:     IPPORT_RJE = 77,
        !            77:     IPPORT_FINGER = 79,                /* Finger service.  */
        !            78:     IPPORT_TTYLINK = 87,
        !            79:     IPPORT_SUPDUP = 95,                /* SUPDUP protocol.  */
        !            80: 
        !            81: 
        !            82:     IPPORT_EXECSERVER = 512,   /* execd service.  */
        !            83:     IPPORT_LOGINSERVER = 513,  /* rlogind service.  */
        !            84:     IPPORT_CMDSERVER = 514,
        !            85:     IPPORT_EFSSERVER = 520,
        !            86: 
        !            87:     /* UDP ports.  */
        !            88:     IPPORT_BIFFUDP = 512,
        !            89:     IPPORT_WHOSERVER = 513,
        !            90:     IPPORT_ROUTESERVER = 520,
        !            91: 
        !            92:     /* Ports less than this value are reserved for privileged processes.  */
        !            93:     IPPORT_RESERVED = 1024,
        !            94: 
        !            95:     /* Ports greater this value are reserved for (non-privileged) servers.  */
        !            96:     IPPORT_USERRESERVED = 5000
        !            97:   };
        !            98: 
        !            99: 
        !           100: /* Internet address.  */
        !           101: struct in_addr
        !           102:   {
        !           103:     uint32_t s_addr;
        !           104:   };
        !           105: 
        !           106: 
        !           107: /* Definitions of the bits in an Internet address integer.
        !           108: 
        !           109:    On subnets, host and network parts are found according to
        !           110:    the subnet mask, not these masks.  */
        !           111: 
        !           112: #define        IN_CLASSA(a)            ((((uint32_t) (a)) & 0x80000000) == 0)
        !           113: #define        IN_CLASSA_NET           0xff000000
        !           114: #define        IN_CLASSA_NSHIFT        24
        !           115: #define        IN_CLASSA_HOST          (0xffffffff & ~IN_CLASSA_NET)
        !           116: #define        IN_CLASSA_MAX           128
        !           117: 
        !           118: #define        IN_CLASSB(a)            ((((uint32_t) (a)) & 0xc0000000) == 0x80000000)
        !           119: #define        IN_CLASSB_NET           0xffff0000
        !           120: #define        IN_CLASSB_NSHIFT        16
        !           121: #define        IN_CLASSB_HOST          (0xffffffff & ~IN_CLASSB_NET)
        !           122: #define        IN_CLASSB_MAX           65536
        !           123: 
        !           124: #define        IN_CLASSC(a)            ((((uint32_t) (a)) & 0xe0000000) == 0xc0000000)
        !           125: #define        IN_CLASSC_NET           0xffffff00
        !           126: #define        IN_CLASSC_NSHIFT        8
        !           127: #define        IN_CLASSC_HOST          (0xffffffff & ~IN_CLASSC_NET)
        !           128: 
        !           129: #define        IN_CLASSD(a)            ((((uint32_t) (a)) & 0xf0000000) == 0xe0000000)
        !           130: #define        IN_MULTICAST(a)         IN_CLASSD(a)
        !           131: 
        !           132: #define        IN_EXPERIMENTAL(a)      ((((uint32_t) (a)) & 0xe0000000) == 0xe0000000)
        !           133: #define        IN_BADCLASS(a)          ((((uint32_t) (a)) & 0xf0000000) == 0xf0000000)
        !           134: 
        !           135: /* Address to accept any incoming messages.  */
        !           136: #define        INADDR_ANY              ((uint32_t) 0x00000000)
        !           137: /* Address to send to all hosts.  */
        !           138: #define        INADDR_BROADCAST        ((uint32_t) 0xffffffff)
        !           139: /* Address indicating an error return.  */
        !           140: #define        INADDR_NONE             ((uint32_t) 0xffffffff)
        !           141: 
        !           142: /* Network number for local host loopback.  */
        !           143: #define        IN_LOOPBACKNET          127
        !           144: /* Address to loopback in software to local host.  */
        !           145: #ifndef INADDR_LOOPBACK
        !           146: # define INADDR_LOOPBACK       ((uint32_t) 0x7f000001) /* Inet 127.0.0.1.  */
        !           147: #endif
        !           148: 
        !           149: /* Defines for Multicast INADDR.  */
        !           150: #define INADDR_UNSPEC_GROUP    ((uint32_t) 0xe0000000)      /* 224.0.0.0 */
        !           151: #define INADDR_ALLHOSTS_GROUP  ((uint32_t) 0xe0000001)      /* 224.0.0.1 */
        !           152: #define INADDR_ALLRTRS_GROUP    ((uint32_t) 0xe0000002)      /* 224.0.0.2 */
        !           153: #define INADDR_MAX_LOCAL_GROUP  ((uint32_t) 0xe00000ff)      /* 224.0.0.255 */
        !           154: 
        !           155: 
        !           156: /* IPv6 address */
        !           157: struct in6_addr
        !           158:   {
        !           159:     union
        !           160:       {
        !           161:        uint8_t         u6_addr8[16];
        !           162:        uint16_t        u6_addr16[8];
        !           163:        uint32_t        u6_addr32[4];
        !           164: #if (~0UL) > 0xffffffff
        !           165:        uint64_t        u6_addr64[2];
        !           166: #endif
        !           167:       } in6_u;
        !           168: #define s6_addr                        in6_u.u6_addr8
        !           169: #define s6_addr16              in6_u.u6_addr16
        !           170: #define s6_addr32              in6_u.u6_addr32
        !           171: #define s6_addr64              in6_u.u6_addr64
        !           172:   };
        !           173: 
        !           174: extern const struct in6_addr in6addr_any;        /* :: */
        !           175: extern const struct in6_addr in6addr_loopback;   /* ::1 */
        !           176: #define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
        !           177: #define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
        !           178: 
        !           179: #define INET_ADDRSTRLEN 16
        !           180: #define INET6_ADDRSTRLEN 46
        !           181: 
        !           182: /* Get the definition of the macro to define the common sockaddr members.  */
        !           183: #include <bits/sockaddr.h>
        !           184: 
        !           185: 
        !           186: /* Structure describing an Internet socket address.  */
        !           187: struct sockaddr_in
        !           188:   {
        !           189:     __SOCKADDR_COMMON (sin_);
        !           190:     uint16_t sin_port;                 /* Port number.  */
        !           191:     struct in_addr sin_addr;           /* Internet address.  */
        !           192: 
        !           193:     /* Pad to size of `struct sockaddr'.  */
        !           194:     unsigned char sin_zero[sizeof (struct sockaddr) -
        !           195:                           __SOCKADDR_COMMON_SIZE -
        !           196:                           sizeof (uint16_t) -
        !           197:                           sizeof (struct in_addr)];
        !           198:   };
        !           199: 
        !           200: /* Ditto, for IPv6.  */
        !           201: struct sockaddr_in6
        !           202:   {
        !           203:     __SOCKADDR_COMMON (sin6_);
        !           204:     uint16_t sin6_port;                /* Transport layer port # */
        !           205:     uint32_t sin6_flowinfo;    /* IPv6 flow information */
        !           206:     struct in6_addr sin6_addr; /* IPv6 address */
        !           207:   };
        !           208: 
        !           209: /* IPv6 multicast request.  */
        !           210: struct ipv6_mreq
        !           211:   {
        !           212:     /* IPv6 multicast address of group */
        !           213:     struct in6_addr ipv6mr_multiaddr;
        !           214: 
        !           215:     /* local interface */
        !           216:     unsigned int ipv6mr_ifindex;
        !           217:   };
        !           218: 
        !           219: /* Get system-specific definitions.  */
        !           220: #include <bits/in.h>
        !           221: 
        !           222: /* Functions to convert between host and network byte order.
        !           223: 
        !           224:    Please note that these functions normally take `unsigned long int' or
        !           225:    `unsigned short int' values as arguments and also return them.  But
        !           226:    this was a short-sighted decision since on different systems the types
        !           227:    may have different representations but the values are always the same.  */
        !           228: 
        !           229: extern uint32_t ntohl __P ((uint32_t __netlong));
        !           230: extern uint16_t ntohs __P ((uint16_t __netshort));
        !           231: extern uint32_t htonl __P ((uint32_t __hostlong));
        !           232: extern uint16_t htons __P ((uint16_t __hostshort));
        !           233: 
        !           234: #include <endian.h>
        !           235: 
        !           236: /* Get machine dependent optimized versions of byte swapping functions.  */
        !           237: #include <bits/byteswap.h>
        !           238: 
        !           239: #if __BYTE_ORDER == __BIG_ENDIAN && defined __OPTIMIZE__
        !           240: /* The host byte order is the same as network byte order,
        !           241:    so these functions are all just identity.  */
        !           242: # define ntohl(x)      (x)
        !           243: # define ntohs(x)      (x)
        !           244: # define htonl(x)      (x)
        !           245: # define htons(x)      (x)
        !           246: #else
        !           247: # if __BYTE_ORDER == __LITTLE_ENDIAN && defined __OPTIMIZE__
        !           248: #  define ntohl(x)     __bswap_32 (x)
        !           249: #  define ntohs(x)     __bswap_16 (x)
        !           250: #  define htonl(x)     __bswap_32 (x)
        !           251: #  define htons(x)     __bswap_16 (x)
        !           252: # endif
        !           253: #endif
        !           254: 
        !           255: #define IN6_IS_ADDR_UNSPECIFIED(a) \
        !           256:        (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \
        !           257:         ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == 0)
        !           258: 
        !           259: #define IN6_IS_ADDR_LOOPBACK(a) \
        !           260:        (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \
        !           261:         ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == htonl (1))
        !           262: 
        !           263: #define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)
        !           264: 
        !           265: #define IN6_IS_ADDR_LINKLOCAL(a) \
        !           266:        ((((uint32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
        !           267: 
        !           268: #define IN6_IS_ADDR_SITELOCAL(a) \
        !           269:        ((((uint32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfec00000))
        !           270: 
        !           271: #define IN6_IS_ADDR_V4MAPPED(a) \
        !           272:        ((((uint32_t *) (a))[0] == 0) && (((uint32_t *) (a))[1] == 0) && \
        !           273:         (((uint32_t *) (a))[2] == htonl (0xffff)))
        !           274: 
        !           275: #define IN6_IS_ADDR_V4COMPAT(a) \
        !           276:        ((((uint32_t *) (a))[0] == 0) && (((uint32_t *) (a))[1] == 0) && \
        !           277:         (((uint32_t *) (a))[2] == 0) && (ntohl (((uint32_t *) (a))[3]) > 1))
        !           278: 
        !           279: #define IN6_ARE_ADDR_EQUAL(a,b) \
        !           280:        ((((uint32_t *) (a))[0] == ((uint32_t *) (b))[0]) && \
        !           281:         (((uint32_t *) (a))[1] == ((uint32_t *) (b))[2]) && \
        !           282:         (((uint32_t *) (a))[2] == ((uint32_t *) (b))[1]) && \
        !           283:         (((uint32_t *) (a))[3] == ((uint32_t *) (b))[3]))
        !           284: 
        !           285: /* Bind socket to a privileged IP port.  */
        !           286: extern int bindresvport __P ((int __sockfd, struct sockaddr_in *__sock_in));
        !           287: 
        !           288: 
        !           289: 
        !           290: #define IN6_IS_ADDR_MC_NODELOCAL(a) \
        !           291:        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0x1))
        !           292: 
        !           293: #define IN6_IS_ADDR_MC_LINKLOCAL(a) \
        !           294:        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0x2))
        !           295: 
        !           296: #define IN6_IS_ADDR_MC_SITELOCAL(a) \
        !           297:        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0x5))
        !           298: 
        !           299: #define IN6_IS_ADDR_MC_ORGLOCAL(a) \
        !           300:        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0x8))
        !           301: 
        !           302: #define IN6_IS_ADDR_MC_GLOBAL(a) \
        !           303:        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t *) (a))[1] & 0xf) == 0xe))
        !           304: 
        !           305: /* IPv6 packet information.  */
        !           306: struct in6_pktinfo
        !           307:   {
        !           308:     struct in6_addr    ipi6_addr;    /* src/dst IPv6 address */
        !           309:     unsigned int       ipi6_ifindex; /* send/recv interface index */
        !           310:   };
        !           311: 
        !           312: __END_DECLS
        !           313: 
        !           314: #endif /* netinet/in.h */

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