Annotation of embedaddon/pimd/include/linux/netinet/in-glibc-2.1.h, revision 1.1.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>