1 /* $NetBSD: net.h,v 1.4 2014/12/10 04:38:02 christos Exp $ */ 2 3 /* 4 * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") 5 * Copyright (C) 2000-2002 Internet Software Consortium. 6 * 7 * Permission to use, copy, modify, and/or distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 12 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 13 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 14 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 15 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 16 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /* Id: net.h,v 1.9 2007/06/19 23:47:23 tbox Exp */ 21 22 #ifndef LWRES_NET_H 23 #define LWRES_NET_H 1 24 25 /***** 26 ***** Module Info 27 *****/ 28 29 /*! \file net.h 30 * This module is responsible for defining the following basic networking 31 * types: 32 * 33 *\li struct in_addr 34 *\li struct in6_addr 35 *\li struct sockaddr 36 *\li struct sockaddr_in 37 *\li struct sockaddr_in6 38 * 39 * It ensures that the AF_ and PF_ macros are defined. 40 * 41 * It declares ntoh[sl]() and hton[sl](). 42 * 43 * It declares lwres_net_aton(), lwres_net_ntop(), and lwres_net_pton(). 44 * 45 * It ensures that #INADDR_LOOPBACK, #INADDR_ANY and #IN6ADDR_ANY_INIT 46 * are defined. 47 */ 48 49 /*** 50 *** Imports. 51 ***/ 52 53 #include <lwres/platform.h> /* Required for LWRES_PLATFORM_*. */ 54 55 #include <unistd.h> 56 #include <sys/types.h> 57 #include <sys/socket.h> /* Contractual promise. */ 58 #include <sys/ioctl.h> 59 #include <sys/time.h> 60 #include <sys/un.h> 61 62 #include <netinet/in.h> /* Contractual promise. */ 63 #include <arpa/inet.h> /* Contractual promise. */ 64 #ifdef LWRES_PLATFORM_NEEDNETINETIN6H 65 #include <netinet/in6.h> /* Required on UnixWare. */ 66 #endif 67 #ifdef LWRES_PLATFORM_NEEDNETINET6IN6H 68 #include <netinet6/in6.h> /* Required on BSD/OS for in6_pktinfo. */ 69 #endif 70 #include <net/if.h> 71 72 #include <lwres/lang.h> 73 74 #ifndef LWRES_PLATFORM_HAVEIPV6 75 #include <lwres/ipv6.h> /* Contractual promise. */ 76 #endif 77 78 #ifdef LWRES_PLATFORM_HAVEINADDR6 79 #define in6_addr in_addr6 /* Required for pre RFC2133 implementations. */ 80 #endif 81 82 /*! 83 * Required for some pre RFC2133 implementations. 84 * IN6ADDR_ANY_INIT and IN6ADDR_LOOPBACK_INIT were added in 85 * draft-ietf-ipngwg-bsd-api-04.txt or draft-ietf-ipngwg-bsd-api-05.txt. 86 * If 's6_addr' is defined then assume that there is a union and three 87 * levels otherwise assume two levels required. 88 */ 89 #ifndef IN6ADDR_ANY_INIT 90 #ifdef s6_addr 91 #define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } 92 #else 93 #define IN6ADDR_ANY_INIT { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } 94 #endif 95 #endif 96 97 /*! 98 * Initialize address loopback. See IN6ADDR_ANY_INIT 99 */ 100 #ifndef IN6ADDR_LOOPBACK_INIT 101 #ifdef s6_addr 102 #define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } 103 #else 104 #define IN6ADDR_LOOPBACK_INIT { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } 105 #endif 106 #endif 107 108 /*% Used by AI_ALL */ 109 #ifndef AF_INET6 110 #define AF_INET6 99 111 #endif 112 113 114 /*% Used to return IPV6 address types. */ 115 #ifndef PF_INET6 116 #define PF_INET6 AF_INET6 117 #endif 118 119 /*% inaddr Loopback */ 120 #ifndef INADDR_LOOPBACK 121 #define INADDR_LOOPBACK 0x7f000001UL 122 #endif 123 124 LWRES_LANG_BEGINDECLS 125 126 const char * 127 lwres_net_ntop(int af, const void *src, char *dst, size_t size); 128 129 int 130 lwres_net_pton(int af, const char *src, void *dst); 131 132 int 133 lwres_net_aton(const char *cp, struct in_addr *addr); 134 135 LWRES_LANG_ENDDECLS 136 137 #endif /* LWRES_NET_H */ 138