Annotation of embedaddon/ntp/include/ntp_rfc2553.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
                      3:  * 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:  * 3. Neither the name of the project 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 PROJECT 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 PROJECT 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: 
                     30: /*
                     31:  * Copyright (c) 1982, 1986, 1990, 1993
                     32:  *     The Regents of the University of California.  All rights reserved.
                     33:  *
                     34:  * Redistribution and use in source and binary forms, with or without
                     35:  * modification, are permitted provided that the following conditions
                     36:  * are met:
                     37:  * 1. Redistributions of source code must retain the above copyright
                     38:  *    notice, this list of conditions and the following disclaimer.
                     39:  * 2. Redistributions in binary form must reproduce the above copyright
                     40:  *    notice, this list of conditions and the following disclaimer in the
                     41:  *    documentation and/or other materials provided with the distribution.
                     42:  * 3. All advertising materials mentioning features or use of this software
                     43:  *    must display the following acknowledgement:
                     44:  *     This product includes software developed by the University of
                     45:  *     California, Berkeley and its contributors.
                     46:  * 4. Neither the name of the University nor the names of its contributors
                     47:  *    may be used to endorse or promote products derived from this software
                     48:  *    without specific prior written permission.
                     49:  *
                     50:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     51:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     52:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     53:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     54:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     55:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     56:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     57:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     58:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     59:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     60:  * SUCH DAMAGE.
                     61:  *
                     62:  *     @(#)in.h        8.3 (Berkeley) 1/3/94
                     63:  */
                     64: 
                     65: /*
                     66:  * Compatability shims with the rfc2553 API to simplify ntp.
                     67:  */
                     68: #ifndef NTP_RFC2553_H
                     69: #define NTP_RFC2553_H
                     70: 
                     71: /*
                     72:  * Ensure that we include the configuration file before we check
                     73:  * for IPV6
                     74:  */
                     75: #include <config.h>
                     76: #include <netdb.h>
                     77: #include <isc/net.h>
                     78: 
                     79: #include "ntp_types.h"
                     80: 
                     81: 
                     82: /*
                     83:  * If various macros are not defined we need to define them
                     84:  */
                     85: 
                     86: #ifndef AF_INET6
                     87: # define AF_INET6      AF_MAX
                     88: # define PF_INET6      AF_INET6
                     89: #endif
                     90: 
                     91: #if !defined(_SS_MAXSIZE) && !defined(_SS_ALIGNSIZE)
                     92: 
                     93: # define       _SS_MAXSIZE     128
                     94: # define       _SS_ALIGNSIZE   (sizeof(ntp_uint64_t))
                     95: # ifdef ISC_PLATFORM_HAVESALEN
                     96: #  define      _SS_PAD1SIZE    (_SS_ALIGNSIZE - sizeof(u_char) - sizeof(ntp_u_int8_t))
                     97: #  define      _SS_PAD2SIZE    (_SS_MAXSIZE - sizeof(u_char) - sizeof(ntp_u_int8_t) - \
                     98:                                _SS_PAD1SIZE - _SS_ALIGNSIZE)
                     99: # else
                    100: #  define      _SS_PAD1SIZE    (_SS_ALIGNSIZE - sizeof(short))
                    101: #  define      _SS_PAD2SIZE    (_SS_MAXSIZE - sizeof(short) - \
                    102:                                _SS_PAD1SIZE - _SS_ALIGNSIZE)
                    103: # endif /* ISC_PLATFORM_HAVESALEN */
                    104: #endif
                    105: 
                    106: #ifndef INET6_ADDRSTRLEN
                    107: # define       INET6_ADDRSTRLEN        46      /* max len of IPv6 addr in ascii */
                    108: #endif
                    109: 
                    110: /*
                    111:  * If we don't have the sockaddr_storage structure
                    112:  * we need to define it
                    113:  */
                    114: 
                    115: #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
                    116: struct sockaddr_storage {
                    117: #ifdef ISC_PLATFORM_HAVESALEN
                    118:        ntp_u_int8_t    ss_len;         /* address length */
                    119:        ntp_u_int8_t    ss_family;      /* address family */
                    120: #else
                    121:        short           ss_family;      /* address family */
                    122: #endif
                    123:        char            __ss_pad1[_SS_PAD1SIZE];
                    124:        ntp_uint64_t    __ss_align;     /* force desired structure storage alignment */
                    125:        char            __ss_pad2[_SS_PAD2SIZE];
                    126: };
                    127: #endif
                    128: 
                    129: /*
                    130:  * Finally if the platform doesn't support IPv6 we need some
                    131:  * additional definitions
                    132:  */
                    133: 
                    134: /*
                    135:  * Flag values for getaddrinfo()
                    136:  */
                    137: #ifndef AI_PASSIVE
                    138: #define        AI_PASSIVE      0x00000001 /* get address to use bind() */
                    139: #define        AI_CANONNAME    0x00000002 /* fill ai_canonname */
                    140: #define        AI_NUMERICHOST  0x00000004 /* prevent name resolution */
                    141: /* valid flags for addrinfo */
                    142: #define AI_MASK \
                    143:     (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_ADDRCONFIG)
                    144: 
                    145: #define        AI_ADDRCONFIG   0x00000400 /* only if any address is assigned */
                    146: #endif /* !AI_PASSIVE */
                    147: 
                    148: #ifndef AI_NUMERICHOST         /* such as AIX 4.3 */
                    149: # define Z_AI_NUMERICHOST      0
                    150: #else
                    151: # define Z_AI_NUMERICHOST      AI_NUMERICHOST
                    152: #endif
                    153: 
                    154: #ifndef AI_NUMERICSERV         /* not in RFC 2553 */
                    155: # define Z_AI_NUMERICSERV      0
                    156: #else
                    157: # define Z_AI_NUMERICSERV      AI_NUMERICSERV
                    158: #endif
                    159: 
                    160: #ifndef ISC_PLATFORM_HAVEIPV6
                    161: 
                    162: #ifdef SYS_WINNT
                    163: # define in6_addr in_addr6
                    164: #endif
                    165: 
                    166: struct addrinfo {
                    167:        int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
                    168:        int     ai_family;      /* PF_xxx */
                    169:        int     ai_socktype;    /* SOCK_xxx */
                    170:        int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
                    171:        size_t  ai_addrlen;     /* length of ai_addr */
                    172:        char    *ai_canonname;  /* canonical name for hostname */
                    173:        struct  sockaddr *ai_addr;      /* binary address */
                    174:        struct  addrinfo *ai_next;      /* next structure in linked list */
                    175: };
                    176: 
                    177: /*
                    178:  * Error return codes from getaddrinfo()
                    179:  */
                    180: #define        EAI_ADDRFAMILY   1      /* address family for hostname not supported */
                    181: #define        EAI_AGAIN        2      /* temporary failure in name resolution */
                    182: #define        EAI_BADFLAGS     3      /* invalid value for ai_flags */
                    183: #define        EAI_FAIL         4      /* non-recoverable failure in name resolution */
                    184: #define        EAI_FAMILY       5      /* ai_family not supported */
                    185: #define        EAI_MEMORY       6      /* memory allocation failure */
                    186: #define        EAI_NODATA       7      /* no address associated with hostname */
                    187: #define        EAI_NONAME       8      /* hostname nor servname provided, or not known */
                    188: #define        EAI_SERVICE      9      /* servname not supported for ai_socktype */
                    189: #define        EAI_SOCKTYPE    10      /* ai_socktype not supported */
                    190: #define        EAI_SYSTEM      11      /* system error returned in errno */
                    191: #define        EAI_BADHINTS    12
                    192: #define        EAI_PROTOCOL    13
                    193: #define        EAI_MAX         14
                    194: 
                    195: 
                    196: int    getaddrinfo (const char *, const char *,
                    197:                         const struct addrinfo *, struct addrinfo **);
                    198: int    getnameinfo (const struct sockaddr *, u_int, char *,
                    199:                         size_t, char *, size_t, int);
                    200: void   freeaddrinfo (struct addrinfo *);
                    201: char   *gai_strerror (int);
                    202: 
                    203: /*
                    204:  * Constants for getnameinfo()
                    205:  */
                    206: #ifndef NI_MAXHOST
                    207: #define        NI_MAXHOST      1025
                    208: #define        NI_MAXSERV      32
                    209: #endif
                    210: 
                    211: /*
                    212:  * Flag values for getnameinfo()
                    213:  */
                    214: #ifndef NI_NUMERICHOST
                    215: #define        NI_NOFQDN       0x00000001
                    216: #define        NI_NUMERICHOST  0x00000002
                    217: #define        NI_NAMEREQD     0x00000004
                    218: #define        NI_NUMERICSERV  0x00000008
                    219: #define        NI_DGRAM        0x00000010
                    220: #define NI_WITHSCOPEID 0x00000020
                    221: #endif
                    222: 
                    223: #endif /* !ISC_PLATFORM_HAVEIPV6 */
                    224: 
                    225: /* 
                    226:  * Set up some macros to look for IPv6 and IPv6 multicast
                    227:  */
                    228: 
                    229: #if defined(ISC_PLATFORM_HAVEIPV6) && defined(WANT_IPV6)
                    230: # define INCLUDE_IPV6_SUPPORT
                    231: # if defined(IPV6_JOIN_GROUP) && defined(IPV6_LEAVE_GROUP)
                    232: #  define INCLUDE_IPV6_MULTICAST_SUPPORT
                    233: # endif        /* IPV6 Multicast Support */
                    234: #endif  /* IPv6 Support */
                    235: 
                    236: #endif /* !NTP_RFC2553_H */

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