Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / netdb.h @ 13

History | View | Annotate | Download (13.1 KB)

1
/*        $NetBSD: netdb.h,v 1.69 2013/08/19 07:18:42 christos Exp $        */
2

    
3
/*
4
 * ++Copyright++ 1980, 1983, 1988, 1993
5
 * -
6
 * Copyright (c) 1980, 1983, 1988, 1993
7
 *        The Regents of the University of California.  All rights reserved.
8
 *
9
 * Redistribution and use in source and binary forms, with or without
10
 * modification, are permitted provided that the following conditions
11
 * are met:
12
 * 1. Redistributions of source code must retain the above copyright
13
 *    notice, this list of conditions and the following disclaimer.
14
 * 2. Redistributions in binary form must reproduce the above copyright
15
 *    notice, this list of conditions and the following disclaimer in the
16
 *    documentation and/or other materials provided with the distribution.
17
 * 3. Neither the name of the University nor the names of its contributors
18
 *    may be used to endorse or promote products derived from this software
19
 *    without specific prior written permission.
20
 *
21
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
 * SUCH DAMAGE.
32
 * -
33
 * Portions Copyright (c) 1993 by Digital Equipment Corporation.
34
 *
35
 * Permission to use, copy, modify, and distribute this software for any
36
 * purpose with or without fee is hereby granted, provided that the above
37
 * copyright notice and this permission notice appear in all copies, and that
38
 * the name of Digital Equipment Corporation not be used in advertising or
39
 * publicity pertaining to distribution of the document or software without
40
 * specific, written prior permission.
41
 *
42
 * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
43
 * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
44
 * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
45
 * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
46
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
47
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
48
 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
49
 * SOFTWARE.
50
 * -
51
 * Portions Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
52
 * All rights reserved.
53
 *
54
 * Redistribution and use in source and binary forms, with or without
55
 * modification, are permitted provided that the following conditions
56
 * are met:
57
 * 1. Redistributions of source code must retain the above copyright
58
 *    notice, this list of conditions and the following disclaimer.
59
 * 2. Redistributions in binary form must reproduce the above copyright
60
 *    notice, this list of conditions and the following disclaimer in the
61
 *    documentation and/or other materials provided with the distribution.
62
 * 3. All advertising materials mentioning features or use of this software
63
 *    must display the following acknowledgement:
64
 *    This product includes software developed by WIDE Project and
65
 *    its contributors.
66
 * 4. Neither the name of the project nor the names of its contributors
67
 *    may be used to endorse or promote products derived from this software
68
 *    without specific prior written permission.
69
 *
70
 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
71
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
72
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
73
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
74
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
75
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
76
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
77
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
78
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
79
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
80
 * SUCH DAMAGE.
81
 * -
82
 * --Copyright--
83
 */
84

    
85
/*
86
 *      @(#)netdb.h        8.1 (Berkeley) 6/2/93
87
 *        Id: netdb.h,v 1.22 2008/02/28 05:34:17 marka Exp
88
 */
89

    
90
#ifndef _NETDB_H_
91
#define        _NETDB_H_
92

    
93
#include <sys/cdefs.h>
94
#include <machine/endian_machdep.h>
95
#include <sys/ansi.h>
96
#include <sys/featuretest.h>
97
#include <inttypes.h>
98
/*
99
 * Data types
100
 */
101
#ifndef socklen_t
102
typedef __socklen_t        socklen_t;
103
#define        socklen_t        __socklen_t
104
#endif
105

    
106
#ifdef  _BSD_SIZE_T_
107
typedef _BSD_SIZE_T_        size_t;
108
#undef  _BSD_SIZE_T_
109
#endif
110

    
111
#if defined(_NETBSD_SOURCE)
112
#ifndef _PATH_HEQUIV
113
#define        _PATH_HEQUIV        "/etc/hosts.equiv"
114
#endif
115
#ifndef _PATH_HOSTS
116
#define        _PATH_HOSTS        "/etc/hosts"
117
#endif
118
#ifndef _PATH_NETWORKS
119
#define        _PATH_NETWORKS        "/etc/networks"
120
#endif
121
#ifndef _PATH_PROTOCOLS
122
#define        _PATH_PROTOCOLS        "/etc/protocols"
123
#endif
124
#ifndef _PATH_SERVICES
125
#define        _PATH_SERVICES        "/etc/services"
126
#endif
127
#ifndef _PATH_SERVICES_CDB
128
#define        _PATH_SERVICES_CDB "/var/db/services.cdb"
129
#endif
130
#ifndef _PATH_SERVICES_DB
131
#define        _PATH_SERVICES_DB "/var/db/services.db"
132
#endif
133
#endif
134

    
135
__BEGIN_DECLS
136
extern int h_errno;
137
extern int * __h_errno(void);
138
#ifdef _REENTRANT
139
#define        h_errno (*__h_errno())
140
#endif
141
__END_DECLS
142

    
143
/*%
144
 * Structures returned by network data base library.  All addresses are
145
 * supplied in host order, and returned in network order (suitable for
146
 * use in system calls).
147
 */
148
struct        hostent {
149
        char        *h_name;        /*%< official name of host */
150
        char        **h_aliases;        /*%< alias list */
151
        int        h_addrtype;        /*%< host address type */
152
        int        h_length;        /*%< length of address */
153
        char        **h_addr_list;        /*%< list of addresses from name server */
154
#define        h_addr        h_addr_list[0]        /*%< address, for backward compatiblity */
155
};
156

    
157
/*%
158
 * Assumption here is that a network number
159
 * fits in an unsigned long -- probably a poor one.
160
 */
161
struct        netent {
162
        char                *n_name;        /*%< official name of net */
163
        char                **n_aliases;        /*%< alias list */
164
        int                n_addrtype;        /*%< net address type */
165
#if (defined(__sparc__) && defined(_LP64)) || \
166
    (defined(__sh__) && defined(_LP64) && (_BYTE_ORDER == _BIG_ENDIAN))
167
        int                __n_pad0;        /* ABI compatibility */
168
#endif
169
        uint32_t        n_net;                /*%< network # */
170
#if defined(__alpha__) || (defined(__i386__) && defined(_LP64)) || \
171
    (defined(__sh__) && defined(_LP64) && (_BYTE_ORDER == _LITTLE_ENDIAN))
172
        int                __n_pad0;        /* ABI compatibility */
173
#endif
174
};
175

    
176
struct        servent {
177
        char        *s_name;        /*%< official service name */
178
        char        **s_aliases;        /*%< alias list */
179
        int        s_port;                /*%< port # */
180
        char        *s_proto;        /*%< protocol to use */
181
};
182

    
183
struct        protoent {
184
        char        *p_name;        /*%< official protocol name */
185
        char        **p_aliases;        /*%< alias list */
186
        int        p_proto;        /*%< protocol # */
187
};
188

    
189
/*
190
 * Note: ai_addrlen used to be a size_t, per RFC 2553.
191
 * In XNS5.2, and subsequently in POSIX-2001 and
192
 * draft-ietf-ipngwg-rfc2553bis-02.txt it was changed to a socklen_t.
193
 * To accommodate for this while preserving binary compatibility with the
194
 * old interface, we prepend or append 32 bits of padding, depending on
195
 * the (LP64) architecture's endianness.
196
 *
197
 * This should be deleted the next time the libc major number is
198
 * incremented.
199
 */
200
#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \
201
    defined(_NETBSD_SOURCE)
202
struct addrinfo {
203
        int                ai_flags;        /*%< AI_PASSIVE, AI_CANONNAME */
204
        int                ai_family;        /*%< PF_xxx */
205
        int                ai_socktype;        /*%< SOCK_xxx */
206
        int                ai_protocol;        /*%< 0 or IPPROTO_xxx for IPv4 and IPv6 */
207
#if defined(__sparc__) && defined(_LP64)
208
        int                __ai_pad0;        /* ABI compatibility */
209
#endif
210
        socklen_t         ai_addrlen;        /*%< length of ai_addr */
211
#if defined(__alpha__) || (defined(__i386__) && defined(_LP64))
212
        int                __ai_pad0;        /* ABI compatibility */
213
#endif
214
        char                *ai_canonname;        /*%< canonical name for hostname */
215
        struct sockaddr        *ai_addr;         /*%< binary address */
216
        struct addrinfo        *ai_next;         /*%< next structure in linked list */
217
};
218
#endif
219

    
220
/*%
221
 * Error return codes from gethostbyname() and gethostbyaddr()
222
 * (left in extern int h_errno).
223
 */
224

    
225
#if defined(_NETBSD_SOURCE)
226
#define        NETDB_INTERNAL        -1        /*%< see errno */
227
#define        NETDB_SUCCESS        0        /*%< no problem */
228
#endif
229
#define        NO_ADDRESS        NO_DATA                /* no address, look for MX record */
230
#define        HOST_NOT_FOUND        1 /*%< Authoritative Answer Host not found */
231
#define        TRY_AGAIN        2 /*%< Non-Authoritive Host not found, or SERVERFAIL */
232
#define        NO_RECOVERY        3 /*%< Non recoverable errors, FORMERR, REFUSED, NOTIMP */
233
#define        NO_DATA                4 /*%< Valid name, no data record of requested type */
234
#if defined(_NETBSD_SOURCE)
235
#define        NO_ADDRESS        NO_DATA                /*%< no address, look for MX record */
236
#endif
237

    
238
/*
239
 * Error return codes from getaddrinfo()
240
 */
241
#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \
242
    defined(_NETBSD_SOURCE)
243
#define        EAI_ADDRFAMILY         1        /*%< address family for hostname not supported */
244
#define        EAI_AGAIN         2        /*%< temporary failure in name resolution */
245
#define        EAI_BADFLAGS         3        /*%< invalid value for ai_flags */
246
#define        EAI_FAIL         4        /*%< non-recoverable failure in name resolution */
247
#define        EAI_FAMILY         5        /*%< ai_family not supported */
248
#define        EAI_MEMORY         6        /*%< memory allocation failure */
249
#define        EAI_NODATA         7        /*%< no address associated with hostname */
250
#define        EAI_NONAME         8        /*%< hostname nor servname provided, or not known */
251
#define        EAI_SERVICE         9        /*%< servname not supported for ai_socktype */
252
#define        EAI_SOCKTYPE        10        /*%< ai_socktype not supported */
253
#define        EAI_SYSTEM        11        /*%< system error returned in errno */
254
#define        EAI_BADHINTS        12        /* invalid value for hints */
255
#define        EAI_PROTOCOL        13        /* resolved protocol is unknown */
256
#define        EAI_OVERFLOW        14        /* argument buffer overflow */
257
#define        EAI_MAX                15
258
#endif /* _POSIX_C_SOURCE >= 200112 || _XOPEN_SOURCE >= 520 || _NETBSD_SOURCE */
259

    
260
/*%
261
 * Flag values for getaddrinfo()
262
 */
263
#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \
264
    defined(_NETBSD_SOURCE)
265
#define        AI_PASSIVE        0x00000001 /* get address to use bind() */
266
#define        AI_CANONNAME        0x00000002 /* fill ai_canonname */
267
#define        AI_NUMERICHOST        0x00000004 /* prevent host name resolution */
268
#define        AI_NUMERICSERV        0x00000008 /* prevent service name resolution */
269
#define        AI_ADDRCONFIG        0x00000400 /* only if any address is assigned */
270
/* valid flags for addrinfo (not a standard def, apps should not use it) */
271
#ifdef _NETBSD_SOURCE
272
#define        AI_SRV                0x00000800 /* do _srv lookups */
273
#define        AI_MASK        \
274
    (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | \
275
    AI_ADDRCONFIG | AI_SRV)
276
#else
277
#define        AI_MASK        \
278
    (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | \
279
    AI_ADDRCONFIG)
280
#endif
281
#endif
282

    
283
#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \
284
    defined(_NETBSD_SOURCE)
285
/*%
286
 * Constants for getnameinfo()
287
 */
288
#if defined(_NETBSD_SOURCE)
289
#define        NI_MAXHOST        1025
290
#define        NI_MAXSERV        32
291
#endif
292

    
293
/*%
294
 * Flag values for getnameinfo()
295
 */
296
#define        NI_NOFQDN        0x00000001
297
#define        NI_NUMERICHOST        0x00000002
298
#define        NI_NAMEREQD        0x00000004
299
#define        NI_NUMERICSERV        0x00000008
300
#define        NI_DGRAM        0x00000010
301
#define        NI_WITHSCOPEID        0x00000020
302
#define        NI_NUMERICSCOPE        0x00000040
303

    
304
/*%
305
 * Scope delimit character
306
 */
307
#if defined(_NETBSD_SOURCE)
308
#define        SCOPE_DELIMITER        '%'
309
#endif
310
#endif /* (_POSIX_C_SOURCE - 0) >= 200112L || ... */
311

    
312
__BEGIN_DECLS
313
void                endhostent(void);
314
void                endnetent(void);
315
void                endprotoent(void);
316
void                endservent(void);
317
#if (_XOPEN_SOURCE - 0) >= 520 && (_XOPEN_SOURCE - 0) < 600 || \
318
    defined(_NETBSD_SOURCE)
319
#if 0 /* we do not ship this */
320
void                freehostent(struct hostent *);
321
#endif
322
#endif
323
struct hostent        *gethostbyaddr(const void *, socklen_t, int);
324
struct hostent        *gethostbyname(const char *);
325
#if defined(_NETBSD_SOURCE)
326
struct hostent        *gethostbyname2(const char *, int);
327
#endif
328
struct hostent        *gethostent(void);
329
struct netent        *getnetbyaddr(uint32_t, int);
330
struct netent        *getnetbyname(const char *);
331
struct netent        *getnetent(void);
332
struct protoent        *getprotobyname(const char *);
333
struct protoent        *getprotobynumber(int);
334
struct protoent        *getprotoent(void);
335
struct servent        *getservbyname(const char *, const char *);
336
struct servent        *getservbyport(int, const char *);
337
struct servent        *getservent(void);
338
#if defined(_NETBSD_SOURCE)
339
void                herror(const char *);
340
const char        *hstrerror(int);
341
#endif
342
void                sethostent(int);
343
#if defined(_NETBSD_SOURCE)
344
/* void                sethostfile(const char *); */
345
#endif
346
void                setnetent(int);
347
void                setprotoent(int);
348
void                setservent(int);
349
#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \
350
    defined(_NETBSD_SOURCE)
351
int                getaddrinfo(const char * __restrict, const char * __restrict,
352
                                 const struct addrinfo * __restrict,
353
                                 struct addrinfo ** __restrict);
354
int                getnameinfo(const struct sockaddr * __restrict, socklen_t,
355
                                 char * __restrict, socklen_t,
356
                                 char * __restrict, socklen_t, int);
357
struct addrinfo *allocaddrinfo(socklen_t);
358
void                freeaddrinfo(struct addrinfo *);
359
const char        *gai_strerror(int);
360
#endif
361
__END_DECLS
362

    
363
#endif /* !_NETDB_H_ */