1*00b67f09SDavid van Moolenbroek /* 2*00b67f09SDavid van Moolenbroek * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC") 3*00b67f09SDavid van Moolenbroek * 4*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any 5*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above 6*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies. 7*00b67f09SDavid van Moolenbroek * 8*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 9*00b67f09SDavid van Moolenbroek * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10*00b67f09SDavid van Moolenbroek * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 11*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12*00b67f09SDavid van Moolenbroek * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 13*00b67f09SDavid van Moolenbroek * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14*00b67f09SDavid van Moolenbroek * PERFORMANCE OF THIS SOFTWARE. 15*00b67f09SDavid van Moolenbroek */ 16*00b67f09SDavid van Moolenbroek 17*00b67f09SDavid van Moolenbroek /* Id: netdb.h.in,v 1.3 2009/09/02 23:48:02 tbox Exp */ 18*00b67f09SDavid van Moolenbroek 19*00b67f09SDavid van Moolenbroek /*! \file */ 20*00b67f09SDavid van Moolenbroek 21*00b67f09SDavid van Moolenbroek #ifndef IRS_NETDB_H 22*00b67f09SDavid van Moolenbroek #define IRS_NETDB_H 1 23*00b67f09SDavid van Moolenbroek 24*00b67f09SDavid van Moolenbroek #include <stddef.h> /* Required on FreeBSD (and others?) for size_t. */ 25*00b67f09SDavid van Moolenbroek #include <netdb.h> /* Contractual provision. */ 26*00b67f09SDavid van Moolenbroek 27*00b67f09SDavid van Moolenbroek /* 28*00b67f09SDavid van Moolenbroek * Define if <netdb.h> does not declare struct addrinfo. 29*00b67f09SDavid van Moolenbroek */ 30*00b67f09SDavid van Moolenbroek #undef ISC_IRS_NEEDADDRINFO 31*00b67f09SDavid van Moolenbroek 32*00b67f09SDavid van Moolenbroek #ifdef ISC_IRS_NEEDADDRINFO 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 * Undefine all #defines we are interested in as <netdb.h> may or may not have 47*00b67f09SDavid van Moolenbroek * defined them. 48*00b67f09SDavid van Moolenbroek */ 49*00b67f09SDavid van Moolenbroek 50*00b67f09SDavid van Moolenbroek /* 51*00b67f09SDavid van Moolenbroek * Error return codes from gethostbyname() and gethostbyaddr() 52*00b67f09SDavid van Moolenbroek * (left in extern int h_errno). 53*00b67f09SDavid van Moolenbroek */ 54*00b67f09SDavid van Moolenbroek 55*00b67f09SDavid van Moolenbroek #undef NETDB_INTERNAL 56*00b67f09SDavid van Moolenbroek #undef NETDB_SUCCESS 57*00b67f09SDavid van Moolenbroek #undef HOST_NOT_FOUND 58*00b67f09SDavid van Moolenbroek #undef TRY_AGAIN 59*00b67f09SDavid van Moolenbroek #undef NO_RECOVERY 60*00b67f09SDavid van Moolenbroek #undef NO_DATA 61*00b67f09SDavid van Moolenbroek #undef NO_ADDRESS 62*00b67f09SDavid van Moolenbroek 63*00b67f09SDavid van Moolenbroek #define NETDB_INTERNAL -1 /* see errno */ 64*00b67f09SDavid van Moolenbroek #define NETDB_SUCCESS 0 /* no problem */ 65*00b67f09SDavid van Moolenbroek #define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ 66*00b67f09SDavid van Moolenbroek #define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */ 67*00b67f09SDavid van Moolenbroek #define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 68*00b67f09SDavid van Moolenbroek #define NO_DATA 4 /* Valid name, no data record of requested type */ 69*00b67f09SDavid van Moolenbroek #define NO_ADDRESS NO_DATA /* no address, look for MX record */ 70*00b67f09SDavid van Moolenbroek 71*00b67f09SDavid van Moolenbroek /* 72*00b67f09SDavid van Moolenbroek * Error return codes from getaddrinfo(). EAI_INSECUREDATA is our own extension 73*00b67f09SDavid van Moolenbroek * and it's very unlikely to be already defined, but undef it just in case; it 74*00b67f09SDavid van Moolenbroek * at least doesn't do any harm. 75*00b67f09SDavid van Moolenbroek */ 76*00b67f09SDavid van Moolenbroek 77*00b67f09SDavid van Moolenbroek #undef EAI_ADDRFAMILY 78*00b67f09SDavid van Moolenbroek #undef EAI_AGAIN 79*00b67f09SDavid van Moolenbroek #undef EAI_BADFLAGS 80*00b67f09SDavid van Moolenbroek #undef EAI_FAIL 81*00b67f09SDavid van Moolenbroek #undef EAI_FAMILY 82*00b67f09SDavid van Moolenbroek #undef EAI_MEMORY 83*00b67f09SDavid van Moolenbroek #undef EAI_NODATA 84*00b67f09SDavid van Moolenbroek #undef EAI_NONAME 85*00b67f09SDavid van Moolenbroek #undef EAI_SERVICE 86*00b67f09SDavid van Moolenbroek #undef EAI_SOCKTYPE 87*00b67f09SDavid van Moolenbroek #undef EAI_SYSTEM 88*00b67f09SDavid van Moolenbroek #undef EAI_BADHINTS 89*00b67f09SDavid van Moolenbroek #undef EAI_PROTOCOL 90*00b67f09SDavid van Moolenbroek #undef EAI_OVERFLOW 91*00b67f09SDavid van Moolenbroek #undef EAI_INSECUREDATA 92*00b67f09SDavid van Moolenbroek #undef EAI_MAX 93*00b67f09SDavid van Moolenbroek 94*00b67f09SDavid van Moolenbroek #define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 95*00b67f09SDavid van Moolenbroek #define EAI_AGAIN 2 /* temporary failure in name resolution */ 96*00b67f09SDavid van Moolenbroek #define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 97*00b67f09SDavid van Moolenbroek #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 98*00b67f09SDavid van Moolenbroek #define EAI_FAMILY 5 /* ai_family not supported */ 99*00b67f09SDavid van Moolenbroek #define EAI_MEMORY 6 /* memory allocation failure */ 100*00b67f09SDavid van Moolenbroek #define EAI_NODATA 7 /* no address associated with hostname */ 101*00b67f09SDavid van Moolenbroek #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 102*00b67f09SDavid van Moolenbroek #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 103*00b67f09SDavid van Moolenbroek #define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 104*00b67f09SDavid van Moolenbroek #define EAI_SYSTEM 11 /* system error returned in errno */ 105*00b67f09SDavid van Moolenbroek #define EAI_BADHINTS 12 106*00b67f09SDavid van Moolenbroek #define EAI_PROTOCOL 13 107*00b67f09SDavid van Moolenbroek #define EAI_OVERFLOW 14 108*00b67f09SDavid van Moolenbroek #define EAI_INSECUREDATA 15 109*00b67f09SDavid van Moolenbroek #define EAI_MAX 16 110*00b67f09SDavid van Moolenbroek 111*00b67f09SDavid van Moolenbroek /* 112*00b67f09SDavid van Moolenbroek * Flag values for getaddrinfo() 113*00b67f09SDavid van Moolenbroek */ 114*00b67f09SDavid van Moolenbroek #undef AI_PASSIVE 115*00b67f09SDavid van Moolenbroek #undef AI_CANONNAME 116*00b67f09SDavid van Moolenbroek #undef AI_NUMERICHOST 117*00b67f09SDavid van Moolenbroek 118*00b67f09SDavid van Moolenbroek #define AI_PASSIVE 0x00000001 119*00b67f09SDavid van Moolenbroek #define AI_CANONNAME 0x00000002 120*00b67f09SDavid van Moolenbroek #define AI_NUMERICHOST 0x00000004 121*00b67f09SDavid van Moolenbroek 122*00b67f09SDavid van Moolenbroek /* 123*00b67f09SDavid van Moolenbroek * Flag values for getipnodebyname() 124*00b67f09SDavid van Moolenbroek */ 125*00b67f09SDavid van Moolenbroek #undef AI_V4MAPPED 126*00b67f09SDavid van Moolenbroek #undef AI_ALL 127*00b67f09SDavid van Moolenbroek #undef AI_ADDRCONFIG 128*00b67f09SDavid van Moolenbroek #undef AI_DEFAULT 129*00b67f09SDavid van Moolenbroek 130*00b67f09SDavid van Moolenbroek #define AI_V4MAPPED 0x00000008 131*00b67f09SDavid van Moolenbroek #define AI_ALL 0x00000010 132*00b67f09SDavid van Moolenbroek #define AI_ADDRCONFIG 0x00000020 133*00b67f09SDavid van Moolenbroek #define AI_DEFAULT (AI_V4MAPPED|AI_ADDRCONFIG) 134*00b67f09SDavid van Moolenbroek 135*00b67f09SDavid van Moolenbroek /* 136*00b67f09SDavid van Moolenbroek * Constants for lwres_getnameinfo() 137*00b67f09SDavid van Moolenbroek */ 138*00b67f09SDavid van Moolenbroek #undef NI_MAXHOST 139*00b67f09SDavid van Moolenbroek #undef NI_MAXSERV 140*00b67f09SDavid van Moolenbroek 141*00b67f09SDavid van Moolenbroek #define NI_MAXHOST 1025 142*00b67f09SDavid van Moolenbroek #define NI_MAXSERV 32 143*00b67f09SDavid van Moolenbroek 144*00b67f09SDavid van Moolenbroek /* 145*00b67f09SDavid van Moolenbroek * Flag values for lwres_getnameinfo() 146*00b67f09SDavid van Moolenbroek */ 147*00b67f09SDavid van Moolenbroek #undef NI_NOFQDN 148*00b67f09SDavid van Moolenbroek #undef NI_NUMERICHOST 149*00b67f09SDavid van Moolenbroek #undef NI_NAMEREQD 150*00b67f09SDavid van Moolenbroek #undef NI_NUMERICSERV 151*00b67f09SDavid van Moolenbroek #undef NI_DGRAM 152*00b67f09SDavid van Moolenbroek #undef NI_NUMERICSCOPE 153*00b67f09SDavid van Moolenbroek 154*00b67f09SDavid van Moolenbroek #define NI_NOFQDN 0x00000001 155*00b67f09SDavid van Moolenbroek #define NI_NUMERICHOST 0x00000002 156*00b67f09SDavid van Moolenbroek #define NI_NAMEREQD 0x00000004 157*00b67f09SDavid van Moolenbroek #define NI_NUMERICSERV 0x00000008 158*00b67f09SDavid van Moolenbroek #define NI_DGRAM 0x00000010 159*00b67f09SDavid van Moolenbroek 160*00b67f09SDavid van Moolenbroek /* 161*00b67f09SDavid van Moolenbroek * Tell Emacs to use C mode on this file. 162*00b67f09SDavid van Moolenbroek * Local variables: 163*00b67f09SDavid van Moolenbroek * mode: c 164*00b67f09SDavid van Moolenbroek * End: 165*00b67f09SDavid van Moolenbroek */ 166*00b67f09SDavid van Moolenbroek 167*00b67f09SDavid van Moolenbroek #endif /* IRS_NETDB_H */ 168