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>