Annotation of embedaddon/ntp/include/ntp_rfc2553.h, revision 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>