~ubuntu-branches/debian/squeeze/ntp/squeeze-201010051545

« back to all changes in this revision

Viewing changes to include/ntp_rfc2553.h

  • Committer: Bazaar Package Importer
  • Author(s): Matt Zimmerman
  • Date: 2004-10-11 16:10:27 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20041011161027-icyjbji8ujym633o
Tags: 1:4.2.0a-10ubuntu2
Use ntp.ubuntulinux.org instead of pool.ntp.org

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
77
#ifndef ISC_PLATFORM_HAVEIPV6
 
78
 
 
79
#include <sys/types.h>
 
80
#include "ntp_types.h"
 
81
 
 
82
#ifndef AF_INET6
 
83
#define AF_INET6        AF_MAX
 
84
#define PF_INET6        AF_INET6
 
85
#endif
 
86
 
 
87
#ifndef HAVE_TYPE_U_INT8_T
 
88
typedef u_char          u_int8_t;
 
89
typedef u_short         u_int16_t;
 
90
typedef u_int32         u_int32_t;
 
91
#endif /* HAVE_TYPE_U_INT8_T */
 
92
 
 
93
#ifndef HAVE_TYPE_U_INT64_T
 
94
typedef struct u_int64_t { u_int32 val[2]; } u_int64_t;
 
95
#endif /* HAVE_TYPE_U_INT64_T */
 
96
 
 
97
/*
 
98
 * IPv6 address
 
99
 */
 
100
#ifdef SYS_WINNT
 
101
#define in6_addr in_addr6
 
102
#else
 
103
/*
 
104
 * Don't include any additional IPv6 definitions
 
105
 * We are defining our own here.
 
106
 */
 
107
#define ISC_IPV6_H 1
 
108
 
 
109
struct in6_addr {
 
110
        union {
 
111
                u_int8_t   __u6_addr8[16];
 
112
                u_int16_t  __u6_addr16[8];
 
113
                u_int32_t  __u6_addr32[4];
 
114
        } __u6_addr;                    /* 128-bit IP6 address */
 
115
};
 
116
 
 
117
#define s6_addr   __u6_addr.__u6_addr8
 
118
#endif
 
119
 
 
120
/*
 
121
 * Definition of some useful macros to handle IP6 addresses
 
122
 */
 
123
#ifdef SYS_WINNT
 
124
#define IN6ADDR_ANY_INIT        {{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }}
 
125
#else
 
126
#define IN6ADDR_ANY_INIT \
 
127
        {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
 
128
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
 
129
#endif
 
130
 
 
131
extern const struct in6_addr in6addr_any;
 
132
 
 
133
#define SIN6_LEN
 
134
#ifndef HAVE_SOCKADDR_IN6
 
135
struct sockaddr_in6 {
 
136
#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
 
137
        u_int8_t        sin6_len;       /* length of this struct(sa_family_t)*/
 
138
        u_int8_t        sin6_family;    /* AF_INET6 (sa_family_t) */
 
139
#else
 
140
        short           sin6_family;    /* AF_INET6 (sa_family_t) */
 
141
#endif
 
142
        u_int16_t       sin6_port;      /* Transport layer port # (in_port_t)*/
 
143
        u_int32_t       sin6_flowinfo;  /* IP6 flow information */
 
144
        struct in6_addr sin6_addr;      /* IP6 address */
 
145
        u_int32_t       sin6_scope_id;  /* scope zone index */
 
146
};
 
147
#endif
 
148
 
 
149
/*
 
150
 * Unspecified
 
151
 */
 
152
#ifndef IN6_IS_ADDR_UNSPECIFIED
 
153
#define IN6_IS_ADDR_UNSPECIFIED(a)      \
 
154
        ((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
 
155
         (*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
 
156
         (*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
 
157
         (*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) == 0))
 
158
#endif
 
159
/*
 
160
 * Multicast
 
161
 */
 
162
#ifndef IN6_IS_ADDR_MULTICAST
 
163
#define IN6_IS_ADDR_MULTICAST(a)        ((a)->s6_addr[0] == 0xff)
 
164
#endif
 
165
 
 
166
/*
 
167
 * RFC 2553: protocol-independent placeholder for socket addresses
 
168
 */
 
169
#define _SS_MAXSIZE     128
 
170
#define _SS_ALIGNSIZE   (sizeof(u_int64_t))
 
171
#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
 
172
#define _SS_PAD1SIZE    (_SS_ALIGNSIZE - sizeof(u_char) - sizeof(u_int8_t))
 
173
#define _SS_PAD2SIZE    (_SS_MAXSIZE - sizeof(u_char) - sizeof(u_int8_t) - \
 
174
                                _SS_PAD1SIZE - _SS_ALIGNSIZE)
 
175
#else
 
176
#define _SS_PAD1SIZE    (_SS_ALIGNSIZE - sizeof(short))
 
177
#define _SS_PAD2SIZE    (_SS_MAXSIZE - sizeof(short) - \
 
178
                                _SS_PAD1SIZE - _SS_ALIGNSIZE)
 
179
#endif /* HAVE_SA_LEN_IN_STRUCT_SOCKADDR */
 
180
 
 
181
struct sockaddr_storage {
 
182
#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
 
183
        u_int8_t        ss_len;         /* address length */
 
184
        u_int8_t        ss_family;      /* address family */
 
185
#else
 
186
        short           ss_family;      /* address family */
 
187
#endif
 
188
        char            __ss_pad1[_SS_PAD1SIZE];
 
189
        u_int64_t       __ss_align;     /* force desired structure storage alignment */
 
190
        char            __ss_pad2[_SS_PAD2SIZE];
 
191
};
 
192
 
 
193
struct addrinfo {
 
194
        int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
 
195
        int     ai_family;      /* PF_xxx */
 
196
        int     ai_socktype;    /* SOCK_xxx */
 
197
        int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
 
198
        size_t  ai_addrlen;     /* length of ai_addr */
 
199
        char    *ai_canonname;  /* canonical name for hostname */
 
200
        struct  sockaddr *ai_addr;      /* binary address */
 
201
        struct  addrinfo *ai_next;      /* next structure in linked list */
 
202
};
 
203
 
 
204
/*
 
205
 * Error return codes from getaddrinfo()
 
206
 */
 
207
#define EAI_ADDRFAMILY   1      /* address family for hostname not supported */
 
208
#define EAI_AGAIN        2      /* temporary failure in name resolution */
 
209
#define EAI_BADFLAGS     3      /* invalid value for ai_flags */
 
210
#define EAI_FAIL         4      /* non-recoverable failure in name resolution */
 
211
#define EAI_FAMILY       5      /* ai_family not supported */
 
212
#define EAI_MEMORY       6      /* memory allocation failure */
 
213
#define EAI_NODATA       7      /* no address associated with hostname */
 
214
#define EAI_NONAME       8      /* hostname nor servname provided, or not known */
 
215
#define EAI_SERVICE      9      /* servname not supported for ai_socktype */
 
216
#define EAI_SOCKTYPE    10      /* ai_socktype not supported */
 
217
#define EAI_SYSTEM      11      /* system error returned in errno */
 
218
#define EAI_BADHINTS    12
 
219
#define EAI_PROTOCOL    13
 
220
#define EAI_MAX         14
 
221
 
 
222
/*
 
223
 * Flag values for getaddrinfo()
 
224
 */
 
225
#define AI_PASSIVE      0x00000001 /* get address to use bind() */
 
226
#define AI_CANONNAME    0x00000002 /* fill ai_canonname */
 
227
#define AI_NUMERICHOST  0x00000004 /* prevent name resolution */
 
228
/* valid flags for addrinfo */
 
229
#define AI_MASK \
 
230
    (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_ADDRCONFIG)
 
231
 
 
232
#define AI_ADDRCONFIG   0x00000400 /* only if any address is assigned */
 
233
 
 
234
/*
 
235
 * Constants for getnameinfo()
 
236
 */
 
237
#define NI_MAXHOST      1025
 
238
#define NI_MAXSERV      32
 
239
 
 
240
/*
 
241
 * Flag values for getnameinfo()
 
242
 */
 
243
#define NI_NOFQDN       0x00000001
 
244
#define NI_NUMERICHOST  0x00000002
 
245
#define NI_NAMEREQD     0x00000004
 
246
#define NI_NUMERICSERV  0x00000008
 
247
#define NI_DGRAM        0x00000010
 
248
#define NI_WITHSCOPEID  0x00000020
 
249
 
 
250
int     getaddrinfo P((const char *, const char *,
 
251
                         const struct addrinfo *, struct addrinfo **));
 
252
int     getnameinfo P((const struct sockaddr *, u_int, char *,
 
253
                         size_t, char *, size_t, int));
 
254
void    freeaddrinfo P((struct addrinfo *));
 
255
char    *gai_strerror P((int));
 
256
 
 
257
#endif /* ISC_PLATFORM_HAVEIPV6 */
 
258
#endif /* !_NTP_RFC2553_H_ */