1511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/*
2511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
3511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * All rights reserved.
4511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *
5511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Redistribution and use in source and binary forms, with or without
6511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * modification, are permitted provided that the following conditions
7511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * are met:
8511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 1. Redistributions of source code must retain the above copyright
9511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *    notice, this list of conditions and the following disclaimer.
10511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 2. Redistributions in binary form must reproduce the above copyright
11511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *    notice, this list of conditions and the following disclaimer in the
12511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *    documentation and/or other materials provided with the distribution.
13511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 3. Neither the name of the project nor the names of its contributors
14511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *    may be used to endorse or promote products derived from this software
15511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *    without specific prior written permission.
16511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall *
17511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
18511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
21511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * SUCH DAMAGE.
28511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */
29511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
30511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* $Id: addrinfo.h,v 1.1 2002-08-01 08:33:05 risso Exp $ */
31511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
32511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef HAVE_ADDRINFO
33511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
34511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/*
35511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Error return codes from getaddrinfo()
36511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */
37511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_ADDRFAMILY	 1	/* address family for hostname not supported */
38511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_AGAIN	 2	/* temporary failure in name resolution */
39511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_BADFLAGS	 3	/* invalid value for ai_flags */
40511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_FAIL	 4	/* non-recoverable failure in name resolution */
41511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_FAMILY	 5	/* ai_family not supported */
42511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_MEMORY	 6	/* memory allocation failure */
43511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_NODATA	 7	/* no address associated with hostname */
44511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_NONAME	 8	/* hostname nor servname provided, or not known */
45511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_SERVICE	 9	/* servname not supported for ai_socktype */
46511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_SOCKTYPE	10	/* ai_socktype not supported */
47511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	EAI_SYSTEM	11	/* system error returned in errno */
48511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_BADHINTS	12
49511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_PROTOCOL	13
50511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_MAX		14
51511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
52511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* internal error */
53511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NETDB_INTERNAL	-1	/* see errno */
54511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
55511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/*
56511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Flag values for getaddrinfo()
57511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */
58511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_PASSIVE	0x00000001 /* get address to use bind() */
59511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_CANONNAME	0x00000002 /* fill ai_canonname */
60511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_NUMERICHOST	0x00000004 /* prevent name resolution */
61511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* valid flags for addrinfo */
62511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
63511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
64511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_ALL		0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
65511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_V4MAPPED_CFG	0x00000200 /* accept IPv4-mapped if kernel supports */
66511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_ADDRCONFIG	0x00000400 /* only if any address is assigned */
67511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_V4MAPPED	0x00000800 /* accept IPv4-mapped IPv6 address */
68511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* special recommended flags for getipnodebyname */
69511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_DEFAULT	(AI_V4MAPPED_CFG | AI_ADDRCONFIG)
70511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
71511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct addrinfo {
72511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
73511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	int	ai_family;	/* PF_xxx */
74511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	int	ai_socktype;	/* SOCK_xxx */
75511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
76511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	size_t	ai_addrlen;	/* length of ai_addr */
77511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	char	*ai_canonname;	/* canonical name for hostname */
78511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	struct sockaddr *ai_addr;	/* binary address */
79511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	struct addrinfo *ai_next;	/* next structure in linked list */
80511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall};
81511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
82511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern void freeaddrinfo (struct addrinfo *);
83511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern void freehostent (struct hostent *);
84511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern char *gai_strerror (int);
85511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern int getaddrinfo (const char *, const char *,
86511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall			    const struct addrinfo *, struct addrinfo **);
87511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern int getnameinfo (const struct sockaddr *, size_t, char *,
88511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall			    size_t, char *, size_t, int);
89511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern struct hostent *getipnodebyaddr (const void *, size_t, int, int *);
90511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern struct hostent *getipnodebyname (const char *, int, int, int *);
91511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern int inet_pton (int, const char *, void *);
92511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern const char *inet_ntop (int, const void *, char *, size_t);
93511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#else
94511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
95511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef EAI_BADHINTS
96511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_BADHINTS	12
97511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
98511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
99511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef EAI_PROTOCOL
100511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_PROTOCOL	13
101511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
102511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
103511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef EAI_MAX
104511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_MAX		14
105511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
106511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
107511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NETDB_INTERNAL
108511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NETDB_INTERNAL	-1	/* see errno */
109511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
110511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
111511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef AI_MASK
112511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* valid flags for addrinfo */
113511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
114511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
115511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
116511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif /* HAVE_ADDRINFO */
117511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
118511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/*
119511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Constants for getnameinfo()
120511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */
121511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_MAXHOST
122511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NI_MAXHOST	1025
123511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
124511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_MAXSERV
125511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NI_MAXSERV	32
126511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
127511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
128511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/*
129511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Flag values for getnameinfo()
130511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */
131511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_NOFQDN
132511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NI_NOFQDN	0x00000001
133511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
134511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_NUMERICHOST
135511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NI_NUMERICHOST	0x00000002
136511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
137511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_NAMEREQD
138511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NI_NAMEREQD	0x00000004
139511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
140511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_NUMERICSERV
141511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NI_NUMERICSERV	0x00000008
142511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
143511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_DGRAM
144511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define	NI_DGRAM	0x00000010
145511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif
146511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
147