1 /* $NetBSD: netdb.h,v 1.51 2005/04/18 19:39:45 kleink 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 #endif 127 128 __BEGIN_DECLS 129 extern int h_errno; 130 __END_DECLS 131 132 /* 133 * Structures returned by network data base library. All addresses are 134 * supplied in host order, and returned in network order (suitable for 135 * use in system calls). 136 */ 137 struct hostent { 138 char *h_name; /* official name of host */ 139 char **h_aliases; /* alias list */ 140 int h_addrtype; /* host address type */ 141 int h_length; /* length of address */ 142 char **h_addr_list; /* list of addresses from name server */ 143 #define h_addr h_addr_list[0] /* address, for backward compatiblity */ 144 }; 145 146 /* 147 * Assumption here is that a network number 148 * fits in an unsigned long -- probably a poor one. 149 */ 150 struct netent { 151 char *n_name; /* official name of net */ 152 char **n_aliases; /* alias list */ 153 int n_addrtype; /* net address type */ 154 #if (defined(__sparc__) && defined(_LP64)) || \ 155 (defined(__sh__) && defined(_LP64) && (_BYTE_ORDER == _BIG_ENDIAN)) 156 int __n_pad0; /* ABI compatibility */ 157 #endif 158 uint32_t n_net; /* network # */ 159 #if defined(__alpha__) || (defined(__i386__) && defined(_LP64)) || \ 160 (defined(__sh__) && defined(_LP64) && (_BYTE_ORDER == _LITTLE_ENDIAN)) 161 int __n_pad0; /* ABI compatibility */ 162 #endif 163 }; 164 165 struct servent { 166 char *s_name; /* official service name */ 167 char **s_aliases; /* alias list */ 168 int s_port; /* port # */ 169 char *s_proto; /* protocol to use */ 170 }; 171 172 struct protoent { 173 char *p_name; /* official protocol name */ 174 char **p_aliases; /* alias list */ 175 int p_proto; /* protocol # */ 176 }; 177 178 /* 179 * Note: ai_addrlen used to be a size_t, per RFC 2553. 180 * In XNS5.2, and subsequently in POSIX-2001 and 181 * draft-ietf-ipngwg-rfc2553bis-02.txt it was changed to a socklen_t. 182 * To accomodate for this while preserving binary compatibility with the 183 * old interface, we prepend or append 32 bits of padding, depending on 184 * the (LP64) architecture's endianness. 185 * 186 * This should be deleted the next time the libc major number is 187 * incremented. 188 */ 189 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 190 defined(_NETBSD_SOURCE) 191 struct addrinfo { 192 int ai_flags; /* AI_xxx */ 193 int ai_family; /* PF_xxx */ 194 int ai_socktype; /* SOCK_xxx */ 195 int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 196 #if defined(__sparc__) && defined(_LP64) 197 int __ai_pad0; /* ABI compatibility */ 198 #endif 199 socklen_t ai_addrlen; /* length of ai_addr */ 200 #if defined(__alpha__) || (defined(__i386__) && defined(_LP64)) 201 int __ai_pad0; /* ABI compatbility */ 202 #endif 203 char *ai_canonname; /* canonical name for hostname */ 204 struct sockaddr *ai_addr; /* binary address */ 205 struct addrinfo *ai_next; /* next structure in linked list */ 206 }; 207 #endif 208 209 /* 210 * Error return codes from gethostbyname() and gethostbyaddr() 211 * (left in extern int h_errno). 212 */ 213 214 #if defined(_NETBSD_SOURCE) 215 #define NETDB_INTERNAL -1 /* see errno */ 216 #define NETDB_SUCCESS 0 /* no problem */ 217 #endif 218 #define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ 219 #define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */ 220 #define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 221 #define NO_DATA 4 /* Valid name, no data record of requested type */ 222 #if defined(_NETBSD_SOURCE) 223 #define NO_ADDRESS NO_DATA /* no address, look for MX record */ 224 #endif 225 226 /* 227 * Error return codes from getaddrinfo() 228 */ 229 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 230 defined(_NETBSD_SOURCE) 231 #define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 232 #define EAI_AGAIN 2 /* temporary failure in name resolution */ 233 #define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 234 #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 235 #define EAI_FAMILY 5 /* ai_family not supported */ 236 #define EAI_MEMORY 6 /* memory allocation failure */ 237 #define EAI_NODATA 7 /* no address associated with hostname */ 238 #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 239 #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 240 #define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 241 #define EAI_SYSTEM 11 /* system error returned in errno */ 242 #define EAI_BADHINTS 12 243 #define EAI_PROTOCOL 13 244 #define EAI_MAX 14 245 #endif /* _POSIX_C_SOURCE >= 200112 || _XOPEN_SOURCE >= 520 || _NETBSD_SOURCE */ 246 247 /* 248 * Flag values for getaddrinfo() 249 */ 250 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 251 defined(_NETBSD_SOURCE) 252 #define AI_PASSIVE 0x00000001 /* get address to use bind() */ 253 #define AI_CANONNAME 0x00000002 /* fill ai_canonname */ 254 #define AI_NUMERICHOST 0x00000004 /* prevent host name resolution */ 255 #define AI_NUMERICSERV 0x00000008 /* prevent service name resolution */ 256 /* valid flags for addrinfo (not a standard def, apps should not use it) */ 257 #define AI_MASK \ 258 (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV) 259 #endif 260 261 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 262 defined(_NETBSD_SOURCE) 263 /* 264 * Constants for getnameinfo() 265 */ 266 #if defined(_NETBSD_SOURCE) 267 #define NI_MAXHOST 1025 268 #define NI_MAXSERV 32 269 #endif 270 271 /* 272 * Flag values for getnameinfo() 273 */ 274 #define NI_NOFQDN 0x00000001 275 #define NI_NUMERICHOST 0x00000002 276 #define NI_NAMEREQD 0x00000004 277 #define NI_NUMERICSERV 0x00000008 278 #define NI_DGRAM 0x00000010 279 #define NI_NUMERICSCOPE 0x00000040 280 281 /* 282 * Scope delimit character 283 */ 284 #if defined(_NETBSD_SOURCE) 285 #define SCOPE_DELIMITER '%' 286 #endif 287 #endif /* (_POSIX_C_SOURCE - 0) >= 200112L || ... */ 288 289 __BEGIN_DECLS 290 void endhostent(void); 291 void endnetent(void); 292 void endprotoent(void); 293 void endservent(void); 294 #if (_XOPEN_SOURCE - 0) >= 520 && (_XOPEN_SOURCE - 0) < 600 || \ 295 defined(_NETBSD_SOURCE) 296 #if 0 /* we do not ship this */ 297 void freehostent(struct hostent *); 298 #endif 299 #endif 300 struct hostent *gethostbyaddr(const char *, socklen_t, int); 301 struct hostent *gethostbyname(const char *); 302 #if defined(_NETBSD_SOURCE) 303 struct hostent *gethostbyname2(const char *, int); 304 #endif 305 struct hostent *gethostent(void); 306 struct netent *getnetbyaddr(uint32_t, int); 307 struct netent *getnetbyname(const char *); 308 struct netent *getnetent(void); 309 struct protoent *getprotobyname(const char *); 310 struct protoent *getprotobynumber(int); 311 struct protoent *getprotoent(void); 312 struct servent *getservbyname(const char *, const char *); 313 struct servent *getservbyport(int, const char *); 314 struct servent *getservent(void); 315 #if defined(_NETBSD_SOURCE) 316 void herror(const char *); 317 const char *hstrerror(int); 318 #endif 319 void sethostent(int); 320 #if defined(_NETBSD_SOURCE) 321 /* void sethostfile(const char *); */ 322 #endif 323 void setnetent(int); 324 void setprotoent(int); 325 #if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 520 || \ 326 defined(_NETBSD_SOURCE) 327 void setservent(int); 328 int getaddrinfo(const char * __restrict, const char * __restrict, 329 const struct addrinfo * __restrict, 330 struct addrinfo ** __restrict); 331 int getnameinfo(const struct sockaddr * __restrict, socklen_t, 332 char * __restrict, socklen_t, 333 char * __restrict, socklen_t, int); 334 void freeaddrinfo(struct addrinfo *); 335 const char *gai_strerror(int); 336 #endif 337 void setservent(int); 338 __END_DECLS 339 340 #endif /* !_NETDB_H_ */ 341