1*00b67f09SDavid van Moolenbroek /* $NetBSD: netdb.h,v 1.5 2014/12/10 04:38:01 christos Exp $ */ 2*00b67f09SDavid van Moolenbroek 3*00b67f09SDavid van Moolenbroek /* 4*00b67f09SDavid van Moolenbroek * Copyright (C) 2004, 2006, 2007, 2009, 2013 Internet Systems Consortium, Inc. ("ISC") 5*00b67f09SDavid van Moolenbroek * Copyright (C) 2000, 2001 Internet Software Consortium. 6*00b67f09SDavid van Moolenbroek * 7*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any 8*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above 9*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies. 10*00b67f09SDavid van Moolenbroek * 11*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 12*00b67f09SDavid van Moolenbroek * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 13*00b67f09SDavid van Moolenbroek * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 14*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 15*00b67f09SDavid van Moolenbroek * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 16*00b67f09SDavid van Moolenbroek * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17*00b67f09SDavid van Moolenbroek * PERFORMANCE OF THIS SOFTWARE. 18*00b67f09SDavid van Moolenbroek */ 19*00b67f09SDavid van Moolenbroek 20*00b67f09SDavid van Moolenbroek /* Id: netdb.h,v 1.9 2009/01/18 23:48:14 tbox Exp */ 21*00b67f09SDavid van Moolenbroek 22*00b67f09SDavid van Moolenbroek #ifndef NETDB_H 23*00b67f09SDavid van Moolenbroek #define NETDB_H 1 24*00b67f09SDavid van Moolenbroek 25*00b67f09SDavid van Moolenbroek #include <stddef.h> 26*00b67f09SDavid van Moolenbroek #include <winsock2.h> 27*00b67f09SDavid van Moolenbroek 28*00b67f09SDavid van Moolenbroek /* 29*00b67f09SDavid van Moolenbroek * Define if <netdb.h> does not declare struct addrinfo. 30*00b67f09SDavid van Moolenbroek */ 31*00b67f09SDavid van Moolenbroek 32*00b67f09SDavid van Moolenbroek #if _MSC_VER < 1600 33*00b67f09SDavid van Moolenbroek struct addrinfo { 34*00b67f09SDavid van Moolenbroek int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ 35*00b67f09SDavid van Moolenbroek int ai_family; /* PF_xxx */ 36*00b67f09SDavid van Moolenbroek int ai_socktype; /* SOCK_xxx */ 37*00b67f09SDavid van Moolenbroek int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 38*00b67f09SDavid van Moolenbroek size_t ai_addrlen; /* Length of ai_addr */ 39*00b67f09SDavid van Moolenbroek char *ai_canonname; /* Canonical name for hostname */ 40*00b67f09SDavid van Moolenbroek struct sockaddr *ai_addr; /* Binary address */ 41*00b67f09SDavid van Moolenbroek struct addrinfo *ai_next; /* Next structure in linked list */ 42*00b67f09SDavid van Moolenbroek }; 43*00b67f09SDavid van Moolenbroek #endif 44*00b67f09SDavid van Moolenbroek 45*00b67f09SDavid van Moolenbroek 46*00b67f09SDavid van Moolenbroek /* 47*00b67f09SDavid van Moolenbroek * Undefine all \#defines we are interested in as <netdb.h> may or may not have 48*00b67f09SDavid van Moolenbroek * defined them. 49*00b67f09SDavid van Moolenbroek */ 50*00b67f09SDavid van Moolenbroek 51*00b67f09SDavid van Moolenbroek /* 52*00b67f09SDavid van Moolenbroek * Error return codes from gethostbyname() and gethostbyaddr() 53*00b67f09SDavid van Moolenbroek * (left in extern int h_errno). 54*00b67f09SDavid van Moolenbroek */ 55*00b67f09SDavid van Moolenbroek 56*00b67f09SDavid van Moolenbroek #undef NETDB_INTERNAL 57*00b67f09SDavid van Moolenbroek #undef NETDB_SUCCESS 58*00b67f09SDavid van Moolenbroek #undef HOST_NOT_FOUND 59*00b67f09SDavid van Moolenbroek #undef TRY_AGAIN 60*00b67f09SDavid van Moolenbroek #undef NO_RECOVERY 61*00b67f09SDavid van Moolenbroek #undef NO_DATA 62*00b67f09SDavid van Moolenbroek #undef NO_ADDRESS 63*00b67f09SDavid van Moolenbroek 64*00b67f09SDavid van Moolenbroek #define NETDB_INTERNAL -1 /* see errno */ 65*00b67f09SDavid van Moolenbroek #define NETDB_SUCCESS 0 /* no problem */ 66*00b67f09SDavid van Moolenbroek #define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ 67*00b67f09SDavid van Moolenbroek #define TRY_AGAIN 2 /* Non-Authoritative Host not found, or SERVERFAIL */ 68*00b67f09SDavid van Moolenbroek #define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 69*00b67f09SDavid van Moolenbroek #define NO_DATA 4 /* Valid name, no data record of requested type */ 70*00b67f09SDavid van Moolenbroek #define NO_ADDRESS NO_DATA /* no address, look for MX record */ 71*00b67f09SDavid van Moolenbroek 72*00b67f09SDavid van Moolenbroek /* 73*00b67f09SDavid van Moolenbroek * Error return codes from getaddrinfo() 74*00b67f09SDavid van Moolenbroek */ 75*00b67f09SDavid van Moolenbroek 76*00b67f09SDavid van Moolenbroek #undef EAI_ADDRFAMILY 77*00b67f09SDavid van Moolenbroek #undef EAI_AGAIN 78*00b67f09SDavid van Moolenbroek #undef EAI_BADFLAGS 79*00b67f09SDavid van Moolenbroek #undef EAI_FAIL 80*00b67f09SDavid van Moolenbroek #undef EAI_FAMILY 81*00b67f09SDavid van Moolenbroek #undef EAI_MEMORY 82*00b67f09SDavid van Moolenbroek #undef EAI_NODATA 83*00b67f09SDavid van Moolenbroek #undef EAI_NONAME 84*00b67f09SDavid van Moolenbroek #undef EAI_SERVICE 85*00b67f09SDavid van Moolenbroek #undef EAI_SOCKTYPE 86*00b67f09SDavid van Moolenbroek #undef EAI_SYSTEM 87*00b67f09SDavid van Moolenbroek #undef EAI_BADHINTS 88*00b67f09SDavid van Moolenbroek #undef EAI_PROTOCOL 89*00b67f09SDavid van Moolenbroek #undef EAI_MAX 90*00b67f09SDavid van Moolenbroek 91*00b67f09SDavid van Moolenbroek #define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 92*00b67f09SDavid van Moolenbroek #define EAI_AGAIN 2 /* temporary failure in name resolution */ 93*00b67f09SDavid van Moolenbroek #define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 94*00b67f09SDavid van Moolenbroek #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 95*00b67f09SDavid van Moolenbroek #define EAI_FAMILY 5 /* ai_family not supported */ 96*00b67f09SDavid van Moolenbroek #define EAI_MEMORY 6 /* memory allocation failure */ 97*00b67f09SDavid van Moolenbroek #define EAI_NODATA 7 /* no address associated with hostname */ 98*00b67f09SDavid van Moolenbroek #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 99*00b67f09SDavid van Moolenbroek #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 100*00b67f09SDavid van Moolenbroek #define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 101*00b67f09SDavid van Moolenbroek #define EAI_SYSTEM 11 /* system error returned in errno */ 102*00b67f09SDavid van Moolenbroek #define EAI_BADHINTS 12 103*00b67f09SDavid van Moolenbroek #define EAI_PROTOCOL 13 104*00b67f09SDavid van Moolenbroek #define EAI_MAX 14 105*00b67f09SDavid van Moolenbroek 106*00b67f09SDavid van Moolenbroek /* 107*00b67f09SDavid van Moolenbroek * Flag values for getaddrinfo() 108*00b67f09SDavid van Moolenbroek */ 109*00b67f09SDavid van Moolenbroek #undef AI_PASSIVE 110*00b67f09SDavid van Moolenbroek #undef AI_CANONNAME 111*00b67f09SDavid van Moolenbroek #undef AI_NUMERICHOST 112*00b67f09SDavid van Moolenbroek 113*00b67f09SDavid van Moolenbroek #define AI_PASSIVE 0x00000001 114*00b67f09SDavid van Moolenbroek #define AI_CANONNAME 0x00000002 115*00b67f09SDavid van Moolenbroek #define AI_NUMERICHOST 0x00000004 116*00b67f09SDavid van Moolenbroek 117*00b67f09SDavid van Moolenbroek /* 118*00b67f09SDavid van Moolenbroek * Flag values for getipnodebyname() 119*00b67f09SDavid van Moolenbroek */ 120*00b67f09SDavid van Moolenbroek #undef AI_V4MAPPED 121*00b67f09SDavid van Moolenbroek #undef AI_ALL 122*00b67f09SDavid van Moolenbroek #undef AI_ADDRCONFIG 123*00b67f09SDavid van Moolenbroek #undef AI_DEFAULT 124*00b67f09SDavid van Moolenbroek 125*00b67f09SDavid van Moolenbroek #define AI_V4MAPPED 0x00000008 126*00b67f09SDavid van Moolenbroek #define AI_ALL 0x00000010 127*00b67f09SDavid van Moolenbroek #define AI_ADDRCONFIG 0x00000020 128*00b67f09SDavid van Moolenbroek #define AI_DEFAULT (AI_V4MAPPED|AI_ADDRCONFIG) 129*00b67f09SDavid van Moolenbroek 130*00b67f09SDavid van Moolenbroek /* 131*00b67f09SDavid van Moolenbroek * Constants for getnameinfo() 132*00b67f09SDavid van Moolenbroek */ 133*00b67f09SDavid van Moolenbroek #undef NI_MAXHOST 134*00b67f09SDavid van Moolenbroek #undef NI_MAXSERV 135*00b67f09SDavid van Moolenbroek 136*00b67f09SDavid van Moolenbroek #define NI_MAXHOST 1025 137*00b67f09SDavid van Moolenbroek #define NI_MAXSERV 32 138*00b67f09SDavid van Moolenbroek 139*00b67f09SDavid van Moolenbroek /* 140*00b67f09SDavid van Moolenbroek * Flag values for getnameinfo() 141*00b67f09SDavid van Moolenbroek */ 142*00b67f09SDavid van Moolenbroek #undef NI_NOFQDN 143*00b67f09SDavid van Moolenbroek #undef NI_NUMERICHOST 144*00b67f09SDavid van Moolenbroek #undef NI_NAMEREQD 145*00b67f09SDavid van Moolenbroek #undef NI_NUMERICSERV 146*00b67f09SDavid van Moolenbroek #undef NI_DGRAM 147*00b67f09SDavid van Moolenbroek #undef NI_NUMERICSCOPE 148*00b67f09SDavid van Moolenbroek 149*00b67f09SDavid van Moolenbroek #define NI_NOFQDN 0x00000001 150*00b67f09SDavid van Moolenbroek #define NI_NUMERICHOST 0x00000002 151*00b67f09SDavid van Moolenbroek #define NI_NAMEREQD 0x00000004 152*00b67f09SDavid van Moolenbroek #define NI_NUMERICSERV 0x00000008 153*00b67f09SDavid van Moolenbroek #define NI_DGRAM 0x00000010 154*00b67f09SDavid van Moolenbroek #define NI_NUMERICSCOPE 0x00000020 /*2553bis-00*/ 155*00b67f09SDavid van Moolenbroek 156*00b67f09SDavid van Moolenbroek /* 157*00b67f09SDavid van Moolenbroek * Structures for getrrsetbyname() 158*00b67f09SDavid van Moolenbroek */ 159*00b67f09SDavid van Moolenbroek struct rdatainfo { 160*00b67f09SDavid van Moolenbroek unsigned int rdi_length; 161*00b67f09SDavid van Moolenbroek unsigned char *rdi_data; 162*00b67f09SDavid van Moolenbroek }; 163*00b67f09SDavid van Moolenbroek 164*00b67f09SDavid van Moolenbroek struct rrsetinfo { 165*00b67f09SDavid van Moolenbroek unsigned int rri_flags; 166*00b67f09SDavid van Moolenbroek int rri_rdclass; 167*00b67f09SDavid van Moolenbroek int rri_rdtype; 168*00b67f09SDavid van Moolenbroek unsigned int rri_ttl; 169*00b67f09SDavid van Moolenbroek unsigned int rri_nrdatas; 170*00b67f09SDavid van Moolenbroek unsigned int rri_nsigs; 171*00b67f09SDavid van Moolenbroek char *rri_name; 172*00b67f09SDavid van Moolenbroek struct rdatainfo *rri_rdatas; 173*00b67f09SDavid van Moolenbroek struct rdatainfo *rri_sigs; 174*00b67f09SDavid van Moolenbroek }; 175*00b67f09SDavid van Moolenbroek 176*00b67f09SDavid van Moolenbroek /* 177*00b67f09SDavid van Moolenbroek * Flags for getrrsetbyname() 178*00b67f09SDavid van Moolenbroek */ 179*00b67f09SDavid van Moolenbroek #define RRSET_VALIDATED 0x00000001 180*00b67f09SDavid van Moolenbroek /* Set was dnssec validated */ 181*00b67f09SDavid van Moolenbroek 182*00b67f09SDavid van Moolenbroek /* 183*00b67f09SDavid van Moolenbroek * Return codes for getrrsetbyname() 184*00b67f09SDavid van Moolenbroek */ 185*00b67f09SDavid van Moolenbroek #define ERRSET_SUCCESS 0 186*00b67f09SDavid van Moolenbroek #define ERRSET_NOMEMORY 1 187*00b67f09SDavid van Moolenbroek #define ERRSET_FAIL 2 188*00b67f09SDavid van Moolenbroek #define ERRSET_INVAL 3 189*00b67f09SDavid van Moolenbroek 190*00b67f09SDavid van Moolenbroek 191*00b67f09SDavid van Moolenbroek #endif /* NETDB_H */ 192