xref: /minix3/external/bsd/libpcap/dist/Win32/Include/addrinfo.h (revision d56f51ea7d8b9045e5c8e2028422523d3f9a5840)
1*d56f51eaSDavid van Moolenbroek /*
2*d56f51eaSDavid van Moolenbroek  * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
3*d56f51eaSDavid van Moolenbroek  * All rights reserved.
4*d56f51eaSDavid van Moolenbroek  *
5*d56f51eaSDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
6*d56f51eaSDavid van Moolenbroek  * modification, are permitted provided that the following conditions
7*d56f51eaSDavid van Moolenbroek  * are met:
8*d56f51eaSDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
9*d56f51eaSDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer.
10*d56f51eaSDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
11*d56f51eaSDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer in the
12*d56f51eaSDavid van Moolenbroek  *    documentation and/or other materials provided with the distribution.
13*d56f51eaSDavid van Moolenbroek  * 3. Neither the name of the project nor the names of its contributors
14*d56f51eaSDavid van Moolenbroek  *    may be used to endorse or promote products derived from this software
15*d56f51eaSDavid van Moolenbroek  *    without specific prior written permission.
16*d56f51eaSDavid van Moolenbroek  *
17*d56f51eaSDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
18*d56f51eaSDavid van Moolenbroek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*d56f51eaSDavid van Moolenbroek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*d56f51eaSDavid van Moolenbroek  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
21*d56f51eaSDavid van Moolenbroek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*d56f51eaSDavid van Moolenbroek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23*d56f51eaSDavid van Moolenbroek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24*d56f51eaSDavid van Moolenbroek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25*d56f51eaSDavid van Moolenbroek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26*d56f51eaSDavid van Moolenbroek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*d56f51eaSDavid van Moolenbroek  * SUCH DAMAGE.
28*d56f51eaSDavid van Moolenbroek  */
29*d56f51eaSDavid van Moolenbroek 
30*d56f51eaSDavid van Moolenbroek #ifndef HAVE_ADDRINFO
31*d56f51eaSDavid van Moolenbroek 
32*d56f51eaSDavid van Moolenbroek /*
33*d56f51eaSDavid van Moolenbroek  * Error return codes from getaddrinfo()
34*d56f51eaSDavid van Moolenbroek  */
35*d56f51eaSDavid van Moolenbroek #define	EAI_ADDRFAMILY	 1	/* address family for hostname not supported */
36*d56f51eaSDavid van Moolenbroek #define	EAI_AGAIN	 2	/* temporary failure in name resolution */
37*d56f51eaSDavid van Moolenbroek #define	EAI_BADFLAGS	 3	/* invalid value for ai_flags */
38*d56f51eaSDavid van Moolenbroek #define	EAI_FAIL	 4	/* non-recoverable failure in name resolution */
39*d56f51eaSDavid van Moolenbroek #define	EAI_FAMILY	 5	/* ai_family not supported */
40*d56f51eaSDavid van Moolenbroek #define	EAI_MEMORY	 6	/* memory allocation failure */
41*d56f51eaSDavid van Moolenbroek #define	EAI_NODATA	 7	/* no address associated with hostname */
42*d56f51eaSDavid van Moolenbroek #define	EAI_NONAME	 8	/* hostname nor servname provided, or not known */
43*d56f51eaSDavid van Moolenbroek #define	EAI_SERVICE	 9	/* servname not supported for ai_socktype */
44*d56f51eaSDavid van Moolenbroek #define	EAI_SOCKTYPE	10	/* ai_socktype not supported */
45*d56f51eaSDavid van Moolenbroek #define	EAI_SYSTEM	11	/* system error returned in errno */
46*d56f51eaSDavid van Moolenbroek #define EAI_BADHINTS	12
47*d56f51eaSDavid van Moolenbroek #define EAI_PROTOCOL	13
48*d56f51eaSDavid van Moolenbroek #define EAI_MAX		14
49*d56f51eaSDavid van Moolenbroek 
50*d56f51eaSDavid van Moolenbroek /* internal error */
51*d56f51eaSDavid van Moolenbroek #define	NETDB_INTERNAL	-1	/* see errno */
52*d56f51eaSDavid van Moolenbroek 
53*d56f51eaSDavid van Moolenbroek /*
54*d56f51eaSDavid van Moolenbroek  * Flag values for getaddrinfo()
55*d56f51eaSDavid van Moolenbroek  */
56*d56f51eaSDavid van Moolenbroek #define	AI_PASSIVE	0x00000001 /* get address to use bind() */
57*d56f51eaSDavid van Moolenbroek #define	AI_CANONNAME	0x00000002 /* fill ai_canonname */
58*d56f51eaSDavid van Moolenbroek #define	AI_NUMERICHOST	0x00000004 /* prevent name resolution */
59*d56f51eaSDavid van Moolenbroek /* valid flags for addrinfo */
60*d56f51eaSDavid van Moolenbroek #define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
61*d56f51eaSDavid van Moolenbroek 
62*d56f51eaSDavid van Moolenbroek #define	AI_ALL		0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
63*d56f51eaSDavid van Moolenbroek #define	AI_V4MAPPED_CFG	0x00000200 /* accept IPv4-mapped if kernel supports */
64*d56f51eaSDavid van Moolenbroek #define	AI_ADDRCONFIG	0x00000400 /* only if any address is assigned */
65*d56f51eaSDavid van Moolenbroek #define	AI_V4MAPPED	0x00000800 /* accept IPv4-mapped IPv6 address */
66*d56f51eaSDavid van Moolenbroek /* special recommended flags for getipnodebyname */
67*d56f51eaSDavid van Moolenbroek #define	AI_DEFAULT	(AI_V4MAPPED_CFG | AI_ADDRCONFIG)
68*d56f51eaSDavid van Moolenbroek 
69*d56f51eaSDavid van Moolenbroek struct addrinfo {
70*d56f51eaSDavid van Moolenbroek 	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
71*d56f51eaSDavid van Moolenbroek 	int	ai_family;	/* PF_xxx */
72*d56f51eaSDavid van Moolenbroek 	int	ai_socktype;	/* SOCK_xxx */
73*d56f51eaSDavid van Moolenbroek 	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
74*d56f51eaSDavid van Moolenbroek 	size_t	ai_addrlen;	/* length of ai_addr */
75*d56f51eaSDavid van Moolenbroek 	char	*ai_canonname;	/* canonical name for hostname */
76*d56f51eaSDavid van Moolenbroek 	struct sockaddr *ai_addr;	/* binary address */
77*d56f51eaSDavid van Moolenbroek 	struct addrinfo *ai_next;	/* next structure in linked list */
78*d56f51eaSDavid van Moolenbroek };
79*d56f51eaSDavid van Moolenbroek 
80*d56f51eaSDavid van Moolenbroek extern void freeaddrinfo (struct addrinfo *);
81*d56f51eaSDavid van Moolenbroek extern void freehostent (struct hostent *);
82*d56f51eaSDavid van Moolenbroek extern char *gai_strerror (int);
83*d56f51eaSDavid van Moolenbroek extern int getaddrinfo (const char *, const char *,
84*d56f51eaSDavid van Moolenbroek 			    const struct addrinfo *, struct addrinfo **);
85*d56f51eaSDavid van Moolenbroek extern int getnameinfo (const struct sockaddr *, size_t, char *,
86*d56f51eaSDavid van Moolenbroek 			    size_t, char *, size_t, int);
87*d56f51eaSDavid van Moolenbroek extern struct hostent *getipnodebyaddr (const void *, size_t, int, int *);
88*d56f51eaSDavid van Moolenbroek extern struct hostent *getipnodebyname (const char *, int, int, int *);
89*d56f51eaSDavid van Moolenbroek extern int inet_pton (int, const char *, void *);
90*d56f51eaSDavid van Moolenbroek extern const char *inet_ntop (int, const void *, char *, size_t);
91*d56f51eaSDavid van Moolenbroek #else
92*d56f51eaSDavid van Moolenbroek 
93*d56f51eaSDavid van Moolenbroek #ifndef EAI_BADHINTS
94*d56f51eaSDavid van Moolenbroek #define EAI_BADHINTS	12
95*d56f51eaSDavid van Moolenbroek #endif
96*d56f51eaSDavid van Moolenbroek 
97*d56f51eaSDavid van Moolenbroek #ifndef EAI_PROTOCOL
98*d56f51eaSDavid van Moolenbroek #define EAI_PROTOCOL	13
99*d56f51eaSDavid van Moolenbroek #endif
100*d56f51eaSDavid van Moolenbroek 
101*d56f51eaSDavid van Moolenbroek #ifndef EAI_MAX
102*d56f51eaSDavid van Moolenbroek #define EAI_MAX		14
103*d56f51eaSDavid van Moolenbroek #endif
104*d56f51eaSDavid van Moolenbroek 
105*d56f51eaSDavid van Moolenbroek #ifndef NETDB_INTERNAL
106*d56f51eaSDavid van Moolenbroek #define	NETDB_INTERNAL	-1	/* see errno */
107*d56f51eaSDavid van Moolenbroek #endif
108*d56f51eaSDavid van Moolenbroek 
109*d56f51eaSDavid van Moolenbroek #ifndef AI_MASK
110*d56f51eaSDavid van Moolenbroek /* valid flags for addrinfo */
111*d56f51eaSDavid van Moolenbroek #define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
112*d56f51eaSDavid van Moolenbroek #endif
113*d56f51eaSDavid van Moolenbroek 
114*d56f51eaSDavid van Moolenbroek #endif /* HAVE_ADDRINFO */
115*d56f51eaSDavid van Moolenbroek 
116*d56f51eaSDavid van Moolenbroek /*
117*d56f51eaSDavid van Moolenbroek  * Constants for getnameinfo()
118*d56f51eaSDavid van Moolenbroek  */
119*d56f51eaSDavid van Moolenbroek #ifndef NI_MAXHOST
120*d56f51eaSDavid van Moolenbroek #define	NI_MAXHOST	1025
121*d56f51eaSDavid van Moolenbroek #endif
122*d56f51eaSDavid van Moolenbroek #ifndef NI_MAXSERV
123*d56f51eaSDavid van Moolenbroek #define	NI_MAXSERV	32
124*d56f51eaSDavid van Moolenbroek #endif
125*d56f51eaSDavid van Moolenbroek 
126*d56f51eaSDavid van Moolenbroek /*
127*d56f51eaSDavid van Moolenbroek  * Flag values for getnameinfo()
128*d56f51eaSDavid van Moolenbroek  */
129*d56f51eaSDavid van Moolenbroek #ifndef NI_NOFQDN
130*d56f51eaSDavid van Moolenbroek #define	NI_NOFQDN	0x00000001
131*d56f51eaSDavid van Moolenbroek #endif
132*d56f51eaSDavid van Moolenbroek #ifndef NI_NUMERICHOST
133*d56f51eaSDavid van Moolenbroek #define	NI_NUMERICHOST	0x00000002
134*d56f51eaSDavid van Moolenbroek #endif
135*d56f51eaSDavid van Moolenbroek #ifndef NI_NAMEREQD
136*d56f51eaSDavid van Moolenbroek #define	NI_NAMEREQD	0x00000004
137*d56f51eaSDavid van Moolenbroek #endif
138*d56f51eaSDavid van Moolenbroek #ifndef NI_NUMERICSERV
139*d56f51eaSDavid van Moolenbroek #define	NI_NUMERICSERV	0x00000008
140*d56f51eaSDavid van Moolenbroek #endif
141*d56f51eaSDavid van Moolenbroek #ifndef NI_DGRAM
142*d56f51eaSDavid van Moolenbroek #define	NI_DGRAM	0x00000010
143*d56f51eaSDavid van Moolenbroek #endif
144*d56f51eaSDavid van Moolenbroek 
145