1 /* $NetBSD: netdb.h,v 1.59 2007/05/10 17:45:50 christos Exp $ */ 2 3 /* 4 * Copyright (c) 1980, 1983, 1988, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of the University nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * - 31 * Portions Copyright (c) 1993 by Digital Equipment Corporation. 32 * 33 * Permission to use, copy, modify, and distribute this software for any 34 * purpose with or without fee is hereby granted, provided that the above 35 * copyright notice and this permission notice appear in all copies, and that 36 * the name of Digital Equipment Corporation not be used in advertising or 37 * publicity pertaining to distribution of the document or software without 38 * specific, written prior permission. 39 * 40 * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL 41 * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES 42 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT 43 * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 44 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 45 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 46 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 47 * SOFTWARE. 48 * - 49 * Portions Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 50 * All rights reserved. 51 * 52 * Redistribution and use in source and binary forms, with or without 53 * modification, are permitted provided that the following conditions 54 * are met: 55 * 1. Redistributions of source code must retain the above copyright 56 * notice, this list of conditions and the following disclaimer. 57 * 2. Redistributions in binary form must reproduce the above copyright 58 * notice, this list of conditions and the following disclaimer in the 59 * documentation and/or other materials provided with the distribution. 60 * 3. All advertising materials mentioning features or use of this software 61 * must display the following acknowledgement: 62 * This product includes software developed by WIDE Project and 63 * its contributors. 64 * 4. Neither the name of the project nor the names of its contributors 65 * may be used to endorse or promote products derived from this software 66 * without specific prior written permission. 67 * 68 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 69 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 70 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 71 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 72 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 73 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 74 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 75 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 76 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 77 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 78 * SUCH DAMAGE. 79 * - 80 * --Copyright-- 81 */ 82 83 /* 84 * @(#)netdb.h 8.1 (Berkeley) 6/2/93 85 * Id: netdb.h,v 1.15.18.6 2006/10/02 01:23:09 marka Exp 86 */ 87 88 #ifndef _NETDB_H_ 89 #define _NETDB_H_ 90 91 #include <machine/ansi.h> 92 #include <machine/endian_machdep.h> 93 #include <sys/ansi.h> 94 #include <sys/cdefs.h> 95 #include <sys/featuretest.h> 96 #include <inttypes.h> 97 /* 98 * Data types 99 */ 100 #ifndef socklen_t 101 typedef __socklen_t socklen_t; 102 #define socklen_t __socklen_t 103 #endif 104 105 #ifdef _BSD_SIZE_T_ 106 typedef _BSD_SIZE_T_ size_t; 107 #undef _BSD_SIZE_T_ 108 #endif 109 110 #if defined(_NETBSD_SOURCE) 111 #ifndef _PATH_HEQUIV 112 #define _PATH_HEQUIV "/etc/hosts.equiv" 113 #endif 114 #ifndef _PATH_HOSTS 115 #define _PATH_HOSTS "/etc/hosts" 116 #endif 117 #ifndef _PATH_NETWORKS 118 #define _PATH_NETWORKS "/etc/networks" 119 #endif 120 #ifndef _PATH_PROTOCOLS 121 #define _PATH_PROTOCOLS "/etc/protocols" 122 #endif 123 #ifndef _PATH_SERVICES 124 #define _PATH_SERVICES "/etc/services" 125 #endif 126 #ifndef _PATH_SERVICES_DB 127 #define _PATH_SERVICES_DB "/var/db/services.db" 128 #endif 129 #endif 130 131 __BEGIN_DECLS 132 extern int h_errno; 133 __END_DECLS 134 135 /*% 136 * Structures returned by network data base library. All addresses are 137 * supplied in host order, and returned in network order (suitable for 138 * use in system calls). 139 */ 140 struct hostent { 141 char *h_name; /*%< official name of host */ 142 char **h_aliases; /*%< alias list */ 143 int h_addrtype; /*%< host address type */ 144 int h_length; /*%< length of address */ 145 char **h_addr_list; /*%< list of addresses from name server */ 146 #define h_addr h_addr_list[0] /*%< address, for backward compatiblity */ 147 }; 148 149 /*% 150 * Assumption here is that a network number 151 * fits in an unsigned long -- probably a poor one. 152 */ 153 struct netent { 154 char *n_name; /*%< official name of net */ 155 char **n_aliases; /*%< alias list */ 156 int n_addrtype; /*%< net address type */ 157 #if (defined(__sparc__) && defined(_LP64)) || \ 158 (defined(__sh__) && defined(_LP64) && (_BYTE_ORDER == _BIG_ENDIAN)) 159 int __n_pad0; /* ABI compatibility */ 160 #endif 161 uint32_t n_net; /*%< network # */ 162 #if defined(__alpha__) || (defined(__i386__) && defined(_LP64)) || \ 163 (defined(__sh__) && defined(_LP64) && (_BYTE_ORDER == _LITTLE_ENDIAN)) 164 int __n_pad0; /* ABI compatibility */ 165 #endif 166 }; 167 168 struct servent { 169 char *s_name; /*%< official service name */ 170 char **s_aliases; /*%< alias list */ 171 int s_port; /*%< port # */ 172 char *s_proto; /*%< protocol to use */ 173 }; 174 175 struct protoent { 176 char *p_name; /*%< official protocol name */ 177 char **p_aliases; /*%< alias list */ 178 int p_proto; /*%< protocol # */ 179 }; 180 181 /* 182 * Note: ai_addrlen used to be a size_t, per RFC 2553. 183 * In XNS5.2, and subsequently in POSIX-2001 and 184 * draft-ietf-ipngwg-rfc2553bis-02.txt it was changed to a socklen_t. 185 * To accommodate for this while preserving binary compatibility with the 186 * old interface, we prepend or append 32 bits of padding, depending on 187 * the (LP64) architecture's endianness. 188 * 189 * This should be deleted the next time the libc major number is 190 * incremented. 191 */ 192 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 193 defined(_NETBSD_SOURCE) 194 struct addrinfo { 195 int ai_flags; /*%< AI_PASSIVE, AI_CANONNAME */ 196 int ai_family; /*%< PF_xxx */ 197 int ai_socktype; /*%< SOCK_xxx */ 198 int ai_protocol; /*%< 0 or IPPROTO_xxx for IPv4 and IPv6 */ 199 #if defined(__sparc__) && defined(_LP64) 200 int __ai_pad0; /* ABI compatibility */ 201 #endif 202 socklen_t ai_addrlen; /*%< length of ai_addr */ 203 #if defined(__alpha__) || (defined(__i386__) && defined(_LP64)) 204 int __ai_pad0; /* ABI compatibility */ 205 #endif 206 char *ai_canonname; /*%< canonical name for hostname */ 207 struct sockaddr *ai_addr; /*%< binary address */ 208 struct addrinfo *ai_next; /*%< next structure in linked list */ 209 }; 210 #endif 211 212 /*% 213 * Error return codes from gethostbyname() and gethostbyaddr() 214 * (left in extern int h_errno). 215 */ 216 217 #if defined(_NETBSD_SOURCE) 218 #define NETDB_INTERNAL -1 /*%< see errno */ 219 #define NETDB_SUCCESS 0 /*%< no problem */ 220 #endif 221 #define NO_ADDRESS NO_DATA /* no address, look for MX record */ 222 #define HOST_NOT_FOUND 1 /*%< Authoritative Answer Host not found */ 223 #define TRY_AGAIN 2 /*%< Non-Authoritive Host not found, or SERVERFAIL */ 224 #define NO_RECOVERY 3 /*%< Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 225 #define NO_DATA 4 /*%< Valid name, no data record of requested type */ 226 #if defined(_NETBSD_SOURCE) 227 #define NO_ADDRESS NO_DATA /*%< no address, look for MX record */ 228 #endif 229 230 /* 231 * Error return codes from getaddrinfo() 232 */ 233 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 234 defined(_NETBSD_SOURCE) 235 #define EAI_ADDRFAMILY 1 /*%< address family for hostname not supported */ 236 #define EAI_AGAIN 2 /*%< temporary failure in name resolution */ 237 #define EAI_BADFLAGS 3 /*%< invalid value for ai_flags */ 238 #define EAI_FAIL 4 /*%< non-recoverable failure in name resolution */ 239 #define EAI_FAMILY 5 /*%< ai_family not supported */ 240 #define EAI_MEMORY 6 /*%< memory allocation failure */ 241 #define EAI_NODATA 7 /*%< no address associated with hostname */ 242 #define EAI_NONAME 8 /*%< hostname nor servname provided, or not known */ 243 #define EAI_SERVICE 9 /*%< servname not supported for ai_socktype */ 244 #define EAI_SOCKTYPE 10 /*%< ai_socktype not supported */ 245 #define EAI_SYSTEM 11 /*%< system error returned in errno */ 246 #define EAI_BADHINTS 12 /* invalid value for hints */ 247 #define EAI_PROTOCOL 13 /* resolved protocol is unknown */ 248 #define EAI_OVERFLOW 14 /* argument buffer overflow */ 249 #define EAI_MAX 15 250 #endif /* _POSIX_C_SOURCE >= 200112 || _XOPEN_SOURCE >= 520 || _NETBSD_SOURCE */ 251 252 /*% 253 * Flag values for getaddrinfo() 254 */ 255 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 256 defined(_NETBSD_SOURCE) 257 #define AI_PASSIVE 0x00000001 /* get address to use bind() */ 258 #define AI_CANONNAME 0x00000002 /* fill ai_canonname */ 259 #define AI_NUMERICHOST 0x00000004 /* prevent host name resolution */ 260 #define AI_NUMERICSERV 0x00000008 /* prevent service name resolution */ 261 /* valid flags for addrinfo (not a standard def, apps should not use it) */ 262 #define AI_MASK \ 263 (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV) 264 #endif 265 266 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 267 defined(_NETBSD_SOURCE) 268 /*% 269 * Constants for getnameinfo() 270 */ 271 #if defined(_NETBSD_SOURCE) 272 #define NI_MAXHOST 1025 273 #define NI_MAXSERV 32 274 #endif 275 276 /*% 277 * Flag values for getnameinfo() 278 */ 279 #define NI_NOFQDN 0x00000001 280 #define NI_NUMERICHOST 0x00000002 281 #define NI_NAMEREQD 0x00000004 282 #define NI_NUMERICSERV 0x00000008 283 #define NI_DGRAM 0x00000010 284 #define NI_NUMERICSCOPE 0x00000040 285 286 /*% 287 * Scope delimit character 288 */ 289 #if defined(_NETBSD_SOURCE) 290 #define SCOPE_DELIMITER '%' 291 #endif 292 #endif /* (_POSIX_C_SOURCE - 0) >= 200112L || ... */ 293 294 __BEGIN_DECLS 295 void endhostent(void); 296 void endnetent(void); 297 void endprotoent(void); 298 void endservent(void); 299 #if (_XOPEN_SOURCE - 0) >= 520 && (_XOPEN_SOURCE - 0) < 600 || \ 300 defined(_NETBSD_SOURCE) 301 #if 0 /* we do not ship this */ 302 void freehostent(struct hostent *); 303 #endif 304 #endif 305 struct hostent *gethostbyaddr(const char *, socklen_t, int); 306 struct hostent *gethostbyname(const char *); 307 #if defined(_NETBSD_SOURCE) 308 struct hostent *gethostbyname2(const char *, int); 309 #endif 310 struct hostent *gethostent(void); 311 struct netent *getnetbyaddr(uint32_t, int); 312 struct netent *getnetbyname(const char *); 313 struct netent *getnetent(void); 314 struct protoent *getprotobyname(const char *); 315 struct protoent *getprotobynumber(int); 316 struct protoent *getprotoent(void); 317 struct servent *getservbyname(const char *, const char *); 318 struct servent *getservbyport(int, const char *); 319 struct servent *getservent(void); 320 #if defined(_NETBSD_SOURCE) 321 void herror(const char *); 322 const char *hstrerror(int); 323 #endif 324 void sethostent(int); 325 #if defined(_NETBSD_SOURCE) 326 /* void sethostfile(const char *); */ 327 #endif 328 void setnetent(int); 329 void setprotoent(int); 330 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 331 defined(_NETBSD_SOURCE) 332 void setservent(int); 333 int getaddrinfo(const char * __restrict, const char * __restrict, 334 const struct addrinfo * __restrict, 335 struct addrinfo ** __restrict); 336 int getnameinfo(const struct sockaddr * __restrict, socklen_t, 337 char * __restrict, socklen_t, 338 char * __restrict, socklen_t, int); 339 void freeaddrinfo(struct addrinfo *); 340 const char *gai_strerror(int); 341 #endif 342 void setservent(int); 343 __END_DECLS 344 345 #endif /* !_NETDB_H_ */ 346