1 /* $NetBSD: netdb.h,v 1.54 2006/07/27 18:29:01 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.12.2.1.4.4 2004/03/16 02:19:19 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 "/etc/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 compatibility */ 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 accomodate 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_xxx */ 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 compatbility */ 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 HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ 222 #define TRY_AGAIN 2 /* Non-Authoritative Host not found, or SERVERFAIL */ 223 #define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 224 #define NO_DATA 4 /* Valid name, no data record of requested type */ 225 #if defined(_NETBSD_SOURCE) 226 #define NO_ADDRESS NO_DATA /* no address, look for MX record */ 227 #endif 228 229 /* 230 * Error return codes from getaddrinfo() 231 */ 232 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 233 defined(_NETBSD_SOURCE) 234 #define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 235 #define EAI_AGAIN 2 /* temporary failure in name resolution */ 236 #define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 237 #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 238 #define EAI_FAMILY 5 /* ai_family not supported */ 239 #define EAI_MEMORY 6 /* memory allocation failure */ 240 #define EAI_NODATA 7 /* no address associated with hostname */ 241 #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 242 #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 243 #define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 244 #define EAI_SYSTEM 11 /* system error returned in errno */ 245 #define EAI_BADHINTS 12 /* invalid value for hints */ 246 #define EAI_PROTOCOL 13 /* resolved protocol is unknown */ 247 #define EAI_OVERFLOW 14 /* argument buffer overflow */ 248 #define EAI_MAX 15 249 #endif /* _POSIX_C_SOURCE >= 200112 || _XOPEN_SOURCE >= 520 || _NETBSD_SOURCE */ 250 251 /* 252 * Flag values for getaddrinfo() 253 */ 254 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 255 defined(_NETBSD_SOURCE) 256 #define AI_PASSIVE 0x00000001 /* get address to use bind() */ 257 #define AI_CANONNAME 0x00000002 /* fill ai_canonname */ 258 #define AI_NUMERICHOST 0x00000004 /* prevent host name resolution */ 259 #define AI_NUMERICSERV 0x00000008 /* prevent service name resolution */ 260 /* valid flags for addrinfo (not a standard def, apps should not use it) */ 261 #define AI_MASK \ 262 (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV) 263 #endif 264 265 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 266 defined(_NETBSD_SOURCE) 267 /* 268 * Constants for getnameinfo() 269 */ 270 #if defined(_NETBSD_SOURCE) 271 #define NI_MAXHOST 1025 272 #define NI_MAXSERV 32 273 #endif 274 275 /* 276 * Flag values for getnameinfo() 277 */ 278 #define NI_NOFQDN 0x00000001 279 #define NI_NUMERICHOST 0x00000002 280 #define NI_NAMEREQD 0x00000004 281 #define NI_NUMERICSERV 0x00000008 282 #define NI_DGRAM 0x00000010 283 #define NI_NUMERICSCOPE 0x00000040 284 285 /* 286 * Scope delimit character 287 */ 288 #if defined(_NETBSD_SOURCE) 289 #define SCOPE_DELIMITER '%' 290 #endif 291 #endif /* (_POSIX_C_SOURCE - 0) >= 200112L || ... */ 292 293 __BEGIN_DECLS 294 void endhostent(void); 295 void endnetent(void); 296 void endprotoent(void); 297 void endservent(void); 298 #if (_XOPEN_SOURCE - 0) >= 520 && (_XOPEN_SOURCE - 0) < 600 || \ 299 defined(_NETBSD_SOURCE) 300 #if 0 /* we do not ship this */ 301 void freehostent(struct hostent *); 302 #endif 303 #endif 304 struct hostent *gethostbyaddr(const char *, socklen_t, int); 305 struct hostent *gethostbyname(const char *); 306 #if defined(_NETBSD_SOURCE) 307 struct hostent *gethostbyname2(const char *, int); 308 #endif 309 struct hostent *gethostent(void); 310 struct netent *getnetbyaddr(uint32_t, int); 311 struct netent *getnetbyname(const char *); 312 struct netent *getnetent(void); 313 struct protoent *getprotobyname(const char *); 314 struct protoent *getprotobynumber(int); 315 struct protoent *getprotoent(void); 316 struct servent *getservbyname(const char *, const char *); 317 struct servent *getservbyport(int, const char *); 318 struct servent *getservent(void); 319 #if defined(_NETBSD_SOURCE) 320 void herror(const char *); 321 const char *hstrerror(int); 322 #endif 323 void sethostent(int); 324 #if defined(_NETBSD_SOURCE) 325 /* void sethostfile(const char *); */ 326 #endif 327 void setnetent(int); 328 void setprotoent(int); 329 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 330 defined(_NETBSD_SOURCE) 331 void setservent(int); 332 int getaddrinfo(const char * __restrict, const char * __restrict, 333 const struct addrinfo * __restrict, 334 struct addrinfo ** __restrict); 335 int getnameinfo(const struct sockaddr * __restrict, socklen_t, 336 char * __restrict, socklen_t, 337 char * __restrict, socklen_t, int); 338 void freeaddrinfo(struct addrinfo *); 339 const char *gai_strerror(int); 340 #endif 341 void setservent(int); 342 __END_DECLS 343 344 #endif /* !_NETDB_H_ */ 345