1df6ad731Slogwang /*- 2df6ad731Slogwang * Copyright (c) 1980, 1983, 1988, 1993 3df6ad731Slogwang * The Regents of the University of California. All rights reserved. 4df6ad731Slogwang * 5df6ad731Slogwang * Redistribution and use in source and binary forms, with or without 6df6ad731Slogwang * modification, are permitted provided that the following conditions 7df6ad731Slogwang * are met: 8df6ad731Slogwang * 1. Redistributions of source code must retain the above copyright 9df6ad731Slogwang * notice, this list of conditions and the following disclaimer. 10df6ad731Slogwang * 2. Redistributions in binary form must reproduce the above copyright 11df6ad731Slogwang * notice, this list of conditions and the following disclaimer in the 12df6ad731Slogwang * documentation and/or other materials provided with the distribution. 13df6ad731Slogwang * 3. Neither the name of the University nor the names of its contributors 14df6ad731Slogwang * may be used to endorse or promote products derived from this software 15df6ad731Slogwang * without specific prior written permission. 16df6ad731Slogwang * 17df6ad731Slogwang * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18df6ad731Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19df6ad731Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20df6ad731Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21df6ad731Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22df6ad731Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23df6ad731Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24df6ad731Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25df6ad731Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26df6ad731Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27df6ad731Slogwang * SUCH DAMAGE. 28df6ad731Slogwang * 29df6ad731Slogwang * - 30df6ad731Slogwang * Portions Copyright (c) 1993 by Digital Equipment Corporation. 31df6ad731Slogwang * 32df6ad731Slogwang * Permission to use, copy, modify, and distribute this software for any 33df6ad731Slogwang * purpose with or without fee is hereby granted, provided that the above 34df6ad731Slogwang * copyright notice and this permission notice appear in all copies, and that 35df6ad731Slogwang * the name of Digital Equipment Corporation not be used in advertising or 36df6ad731Slogwang * publicity pertaining to distribution of the document or software without 37df6ad731Slogwang * specific, written prior permission. 38df6ad731Slogwang * 39df6ad731Slogwang * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL 40df6ad731Slogwang * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES 41df6ad731Slogwang * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT 42df6ad731Slogwang * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 43df6ad731Slogwang * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 44df6ad731Slogwang * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 45df6ad731Slogwang * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 46df6ad731Slogwang * SOFTWARE. 47df6ad731Slogwang * - 48df6ad731Slogwang * --Copyright-- 49df6ad731Slogwang */ 50df6ad731Slogwang 51df6ad731Slogwang /* 52df6ad731Slogwang * @(#)netdb.h 8.1 (Berkeley) 6/2/93 53df6ad731Slogwang * From: Id: netdb.h,v 8.9 1996/11/19 08:39:29 vixie Exp $ 54df6ad731Slogwang * $FreeBSD$ 55df6ad731Slogwang */ 56df6ad731Slogwang 57df6ad731Slogwang #ifndef _NETDB_H_ 58df6ad731Slogwang #define _NETDB_H_ 59df6ad731Slogwang 60df6ad731Slogwang #include <sys/cdefs.h> 61df6ad731Slogwang 62df6ad731Slogwang #ifndef _IN_ADDR_T_DECLARED 63df6ad731Slogwang typedef __uint32_t in_addr_t; 64df6ad731Slogwang #define _IN_ADDR_T_DECLARED 65df6ad731Slogwang #endif 66df6ad731Slogwang 67df6ad731Slogwang #ifndef _IN_PORT_T_DECLARED 68df6ad731Slogwang typedef __uint16_t in_port_t; 69df6ad731Slogwang #define _IN_PORT_T_DECLARED 70df6ad731Slogwang #endif 71df6ad731Slogwang 72df6ad731Slogwang #ifndef _SIZE_T_DECLARED 73df6ad731Slogwang typedef __size_t size_t; 74df6ad731Slogwang #define _SIZE_T_DECLARED 75df6ad731Slogwang #endif 76df6ad731Slogwang 77df6ad731Slogwang #ifndef _SOCKLEN_T_DECLARED 78df6ad731Slogwang typedef __socklen_t socklen_t; 79df6ad731Slogwang #define _SOCKLEN_T_DECLARED 80df6ad731Slogwang #endif 81df6ad731Slogwang 82df6ad731Slogwang #ifndef _UINT32_T_DECLARED 83df6ad731Slogwang typedef __uint32_t uint32_t; 84df6ad731Slogwang #define _UINT32_T_DECLARED 85df6ad731Slogwang #endif 86df6ad731Slogwang 87df6ad731Slogwang #ifndef _PATH_HEQUIV 88df6ad731Slogwang # define _PATH_HEQUIV "/etc/hosts.equiv" 89df6ad731Slogwang #endif 90df6ad731Slogwang #define _PATH_HOSTS "/etc/hosts" 91df6ad731Slogwang #define _PATH_NETWORKS "/etc/networks" 92df6ad731Slogwang #define _PATH_PROTOCOLS "/etc/protocols" 93df6ad731Slogwang #define _PATH_SERVICES "/etc/services" 94df6ad731Slogwang #define _PATH_SERVICES_DB "/var/db/services.db" 95df6ad731Slogwang 96*df9cc249Slogwang #ifndef FSTACK 97df6ad731Slogwang #define h_errno (*__h_errno()) 98*df9cc249Slogwang #else 99*df9cc249Slogwang /* Error status for non-reentrant lookup functions. 100*df9cc249Slogwang We use a macro to access always the thread-specific `h_errno' variable. */ 101*df9cc249Slogwang # define h_errno (*__h_errno_location ()) 102*df9cc249Slogwang 103*df9cc249Slogwang /* Function to get address of global `h_errno' variable. */ 104*df9cc249Slogwang extern int *__h_errno_location (void) __THROW __attribute__ ((__const__)); 105*df9cc249Slogwang #endif 106df6ad731Slogwang 107df6ad731Slogwang /* 108df6ad731Slogwang * Structures returned by network data base library. All addresses are 109df6ad731Slogwang * supplied in host order, and returned in network order (suitable for 110df6ad731Slogwang * use in system calls). 111df6ad731Slogwang */ 112df6ad731Slogwang struct hostent { 113df6ad731Slogwang char *h_name; /* official name of host */ 114df6ad731Slogwang char **h_aliases; /* alias list */ 115df6ad731Slogwang int h_addrtype; /* host address type */ 116df6ad731Slogwang int h_length; /* length of address */ 117df6ad731Slogwang char **h_addr_list; /* list of addresses from name server */ 118df6ad731Slogwang #define h_addr h_addr_list[0] /* address, for backward compatibility */ 119df6ad731Slogwang }; 120df6ad731Slogwang 121df6ad731Slogwang struct netent { 122df6ad731Slogwang char *n_name; /* official name of net */ 123df6ad731Slogwang char **n_aliases; /* alias list */ 124df6ad731Slogwang int n_addrtype; /* net address type */ 125df6ad731Slogwang uint32_t n_net; /* network # */ 126df6ad731Slogwang }; 127df6ad731Slogwang 128df6ad731Slogwang struct servent { 129df6ad731Slogwang char *s_name; /* official service name */ 130df6ad731Slogwang char **s_aliases; /* alias list */ 131df6ad731Slogwang int s_port; /* port # */ 132df6ad731Slogwang char *s_proto; /* protocol to use */ 133df6ad731Slogwang }; 134df6ad731Slogwang 135df6ad731Slogwang struct protoent { 136df6ad731Slogwang char *p_name; /* official protocol name */ 137df6ad731Slogwang char **p_aliases; /* alias list */ 138df6ad731Slogwang int p_proto; /* protocol # */ 139df6ad731Slogwang }; 140df6ad731Slogwang 141df6ad731Slogwang struct addrinfo { 142df6ad731Slogwang int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */ 143df6ad731Slogwang int ai_family; /* AF_xxx */ 144df6ad731Slogwang int ai_socktype; /* SOCK_xxx */ 145df6ad731Slogwang int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 146df6ad731Slogwang socklen_t ai_addrlen; /* length of ai_addr */ 147df6ad731Slogwang char *ai_canonname; /* canonical name for hostname */ 148df6ad731Slogwang struct sockaddr *ai_addr; /* binary address */ 149df6ad731Slogwang struct addrinfo *ai_next; /* next structure in linked list */ 150df6ad731Slogwang }; 151df6ad731Slogwang 152df6ad731Slogwang #define IPPORT_RESERVED 1024 153df6ad731Slogwang 154df6ad731Slogwang /* 155df6ad731Slogwang * Error return codes from gethostbyname() and gethostbyaddr() 156df6ad731Slogwang * (left in h_errno). 157df6ad731Slogwang */ 158df6ad731Slogwang 159df6ad731Slogwang #define NETDB_INTERNAL -1 /* see errno */ 160df6ad731Slogwang #define NETDB_SUCCESS 0 /* no problem */ 161df6ad731Slogwang #define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ 162df6ad731Slogwang #define TRY_AGAIN 2 /* Non-Authoritative Host not found, or SERVERFAIL */ 163df6ad731Slogwang #define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 164df6ad731Slogwang #define NO_DATA 4 /* Valid name, no data record of requested type */ 165df6ad731Slogwang #define NO_ADDRESS NO_DATA /* no address, look for MX record */ 166df6ad731Slogwang 167df6ad731Slogwang /* 168df6ad731Slogwang * Error return codes from getaddrinfo() 169df6ad731Slogwang */ 170df6ad731Slogwang #if 0 171df6ad731Slogwang /* obsoleted */ 172df6ad731Slogwang #define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 173df6ad731Slogwang #endif 174df6ad731Slogwang #define EAI_AGAIN 2 /* temporary failure in name resolution */ 175df6ad731Slogwang #define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 176df6ad731Slogwang #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 177df6ad731Slogwang #define EAI_FAMILY 5 /* ai_family not supported */ 178df6ad731Slogwang #define EAI_MEMORY 6 /* memory allocation failure */ 179df6ad731Slogwang #if 0 180df6ad731Slogwang /* obsoleted */ 181df6ad731Slogwang #define EAI_NODATA 7 /* no address associated with hostname */ 182df6ad731Slogwang #endif 183df6ad731Slogwang #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 184df6ad731Slogwang #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 185df6ad731Slogwang #define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 186df6ad731Slogwang #define EAI_SYSTEM 11 /* system error returned in errno */ 187df6ad731Slogwang #define EAI_BADHINTS 12 /* invalid value for hints */ 188df6ad731Slogwang #define EAI_PROTOCOL 13 /* resolved protocol is unknown */ 189df6ad731Slogwang #define EAI_OVERFLOW 14 /* argument buffer overflow */ 190df6ad731Slogwang #define EAI_MAX 15 191df6ad731Slogwang 192df6ad731Slogwang /* 193df6ad731Slogwang * Flag values for getaddrinfo() 194df6ad731Slogwang */ 195df6ad731Slogwang #define AI_PASSIVE 0x00000001 /* get address to use bind() */ 196df6ad731Slogwang #define AI_CANONNAME 0x00000002 /* fill ai_canonname */ 197df6ad731Slogwang #define AI_NUMERICHOST 0x00000004 /* prevent host name resolution */ 198df6ad731Slogwang #define AI_NUMERICSERV 0x00000008 /* prevent service name resolution */ 199df6ad731Slogwang /* valid flags for addrinfo (not a standard def, apps should not use it) */ 200df6ad731Slogwang #define AI_MASK \ 201df6ad731Slogwang (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | \ 202df6ad731Slogwang AI_ADDRCONFIG | AI_ALL | AI_V4MAPPED) 203df6ad731Slogwang 204df6ad731Slogwang #define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */ 205df6ad731Slogwang #define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */ 206df6ad731Slogwang #define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */ 207df6ad731Slogwang #define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */ 208df6ad731Slogwang /* special recommended flags for getipnodebyname */ 209df6ad731Slogwang #define AI_DEFAULT (AI_V4MAPPED_CFG | AI_ADDRCONFIG) 210df6ad731Slogwang 211df6ad731Slogwang /* 212df6ad731Slogwang * Constants for getnameinfo() 213df6ad731Slogwang */ 214df6ad731Slogwang #define NI_MAXHOST 1025 215df6ad731Slogwang #define NI_MAXSERV 32 216df6ad731Slogwang 217df6ad731Slogwang /* 218df6ad731Slogwang * Flag values for getnameinfo() 219df6ad731Slogwang */ 220df6ad731Slogwang #define NI_NOFQDN 0x00000001 221df6ad731Slogwang #define NI_NUMERICHOST 0x00000002 222df6ad731Slogwang #define NI_NAMEREQD 0x00000004 223df6ad731Slogwang #define NI_NUMERICSERV 0x00000008 224df6ad731Slogwang #define NI_DGRAM 0x00000010 225df6ad731Slogwang #if 0 /* obsolete */ 226df6ad731Slogwang #define NI_WITHSCOPEID 0x00000020 227df6ad731Slogwang #endif 228df6ad731Slogwang 229df6ad731Slogwang /* 230df6ad731Slogwang * Scope delimit character 231df6ad731Slogwang */ 232df6ad731Slogwang #define SCOPE_DELIMITER '%' 233df6ad731Slogwang 234df6ad731Slogwang int getaddrinfo(const char *, const char *, 235df6ad731Slogwang const struct addrinfo *, struct addrinfo **); 236df6ad731Slogwang void freeaddrinfo(struct addrinfo *); 237df6ad731Slogwang const char *gai_strerror(int ecode); 238df6ad731Slogwang 2391eaf0ac3Slogwang struct servent *getservbyport(int port, const char *proto); 2401eaf0ac3Slogwang 2411eaf0ac3Slogwang struct protoent *getprotoent(void); 2421eaf0ac3Slogwang struct protoent *getprotobyname(const char *name); 2431eaf0ac3Slogwang struct protoent *getprotobynumber(int proto); 2441eaf0ac3Slogwang void setprotoent(int stayopen); 2451eaf0ac3Slogwang void endprotoent(void); 2461eaf0ac3Slogwang 247b37139caSwhl739 struct servent *getservent(void); 248b37139caSwhl739 struct servent *getservbyname(const char *name, const char *proto); 249b37139caSwhl739 struct servent *getservbyport(int port, const char *proto); 250b37139caSwhl739 void setservent(int stayopen); 251b37139caSwhl739 void endservent(void); 252b37139caSwhl739 2531eaf0ac3Slogwang int getnameinfo(const struct sockaddr *sa, socklen_t salen, 2541eaf0ac3Slogwang char *host, size_t hostlen, char *serv, size_t servlen, int flags); 2551eaf0ac3Slogwang 2561eaf0ac3Slogwang struct netent *getnetbyaddr(uint32_t net, int type); 2571eaf0ac3Slogwang 258b37139caSwhl739 struct hostent *gethostbyaddr(const void *addr, 259b37139caSwhl739 socklen_t len, int type); 260b37139caSwhl739 261b37139caSwhl739 struct hostent *gethostbyname2(const char *name, int af); 262*df9cc249Slogwang struct hostent *gethostbyname(const char *name); 263*df9cc249Slogwang 264*df9cc249Slogwang const char *hstrerror(int err); 265b37139caSwhl739 266df6ad731Slogwang #endif /* !_NETDB_H_ */ 267