156893Sfenner/*
256893Sfenner * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
356893Sfenner * All rights reserved.
4127668Sbms *
556893Sfenner * Redistribution and use in source and binary forms, with or without
656893Sfenner * modification, are permitted provided that the following conditions
756893Sfenner * are met:
856893Sfenner * 1. Redistributions of source code must retain the above copyright
956893Sfenner *    notice, this list of conditions and the following disclaimer.
1056893Sfenner * 2. Redistributions in binary form must reproduce the above copyright
1156893Sfenner *    notice, this list of conditions and the following disclaimer in the
1256893Sfenner *    documentation and/or other materials provided with the distribution.
1356893Sfenner * 3. Neither the name of the project nor the names of its contributors
1456893Sfenner *    may be used to endorse or promote products derived from this software
1556893Sfenner *    without specific prior written permission.
16127668Sbms *
1756893Sfenner * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
1856893Sfenner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1956893Sfenner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2056893Sfenner * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
2156893Sfenner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2256893Sfenner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2356893Sfenner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2456893Sfenner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2556893Sfenner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2656893Sfenner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2756893Sfenner * SUCH DAMAGE.
2856893Sfenner */
2956893Sfenner
30190207Srpaulo/* $Id: addrinfo.h,v 1.4 2002-06-11 17:13:36 itojun Exp $ */
3156893Sfenner
3256893Sfenner#ifndef HAVE_ADDRINFO
3356893Sfenner
3456893Sfenner/*
3556893Sfenner * Error return codes from getaddrinfo()
3656893Sfenner */
3756893Sfenner#define	EAI_ADDRFAMILY	 1	/* address family for hostname not supported */
3856893Sfenner#define	EAI_AGAIN	 2	/* temporary failure in name resolution */
3956893Sfenner#define	EAI_BADFLAGS	 3	/* invalid value for ai_flags */
4056893Sfenner#define	EAI_FAIL	 4	/* non-recoverable failure in name resolution */
4156893Sfenner#define	EAI_FAMILY	 5	/* ai_family not supported */
4256893Sfenner#define	EAI_MEMORY	 6	/* memory allocation failure */
4356893Sfenner#define	EAI_NODATA	 7	/* no address associated with hostname */
4456893Sfenner#define	EAI_NONAME	 8	/* hostname nor servname provided, or not known */
4556893Sfenner#define	EAI_SERVICE	 9	/* servname not supported for ai_socktype */
4656893Sfenner#define	EAI_SOCKTYPE	10	/* ai_socktype not supported */
4756893Sfenner#define	EAI_SYSTEM	11	/* system error returned in errno */
4856893Sfenner#define EAI_BADHINTS	12
4956893Sfenner#define EAI_PROTOCOL	13
5056893Sfenner#define EAI_MAX		14
5156893Sfenner
5256893Sfenner/* internal error */
5356893Sfenner#define	NETDB_INTERNAL	-1	/* see errno */
5456893Sfenner
5556893Sfenner/*
5656893Sfenner * Flag values for getaddrinfo()
5756893Sfenner */
5856893Sfenner#define	AI_PASSIVE	0x00000001 /* get address to use bind() */
5956893Sfenner#define	AI_CANONNAME	0x00000002 /* fill ai_canonname */
6056893Sfenner#define	AI_NUMERICHOST	0x00000004 /* prevent name resolution */
6156893Sfenner/* valid flags for addrinfo */
6256893Sfenner#define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
6356893Sfenner
6456893Sfenner#define	AI_ALL		0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
6556893Sfenner#define	AI_V4MAPPED_CFG	0x00000200 /* accept IPv4-mapped if kernel supports */
6656893Sfenner#define	AI_ADDRCONFIG	0x00000400 /* only if any address is assigned */
6756893Sfenner#define	AI_V4MAPPED	0x00000800 /* accept IPv4-mapped IPv6 address */
6856893Sfenner/* special recommended flags for getipnodebyname */
6956893Sfenner#define	AI_DEFAULT	(AI_V4MAPPED_CFG | AI_ADDRCONFIG)
7056893Sfenner
7156893Sfennerstruct addrinfo {
7256893Sfenner	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
7356893Sfenner	int	ai_family;	/* PF_xxx */
7456893Sfenner	int	ai_socktype;	/* SOCK_xxx */
7556893Sfenner	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
7656893Sfenner	size_t	ai_addrlen;	/* length of ai_addr */
7756893Sfenner	char	*ai_canonname;	/* canonical name for hostname */
7856893Sfenner	struct sockaddr *ai_addr;	/* binary address */
7956893Sfenner	struct addrinfo *ai_next;	/* next structure in linked list */
8056893Sfenner};
8156893Sfenner
8275115Sfennerextern void freeaddrinfo (struct addrinfo *);
8375115Sfennerextern void freehostent (struct hostent *);
8475115Sfennerextern int getnameinfo (const struct sockaddr *, size_t, char *,
8575115Sfenner			    size_t, char *, size_t, int);
8675115Sfennerextern struct hostent *getipnodebyaddr (const void *, size_t, int, int *);
8775115Sfennerextern struct hostent *getipnodebyname (const char *, int, int, int *);
8875115Sfennerextern int inet_pton (int, const char *, void *);
8975115Sfennerextern const char *inet_ntop (int, const void *, char *, size_t);
9056893Sfenner#endif /* HAVE_ADDRINFO */
9156893Sfenner
9256893Sfenner/*
9356893Sfenner * Constants for getnameinfo()
9456893Sfenner */
9556893Sfenner#ifndef NI_MAXHOST
9656893Sfenner#define	NI_MAXHOST	1025
9756893Sfenner#endif
9856893Sfenner#ifndef NI_MAXSERV
9956893Sfenner#define	NI_MAXSERV	32
10056893Sfenner#endif
10156893Sfenner
10256893Sfenner/*
10356893Sfenner * Flag values for getnameinfo()
10456893Sfenner */
10556893Sfenner#ifndef NI_NOFQDN
10656893Sfenner#define	NI_NOFQDN	0x00000001
10756893Sfenner#endif
10856893Sfenner#ifndef NI_NUMERICHOST
10956893Sfenner#define	NI_NUMERICHOST	0x00000002
11056893Sfenner#endif
11156893Sfenner#ifndef NI_NAMEREQD
11256893Sfenner#define	NI_NAMEREQD	0x00000004
11356893Sfenner#endif
11456893Sfenner#ifndef NI_NUMERICSERV
11556893Sfenner#define	NI_NUMERICSERV	0x00000008
11656893Sfenner#endif
11756893Sfenner#ifndef NI_DGRAM
11856893Sfenner#define	NI_DGRAM	0x00000010
11956893Sfenner#endif
120