home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / isc / netaddr.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-09-17  |  4.6 KB  |  176 lines

  1. /*
  2.  * Copyright (C) 2004, 2005  Internet Systems Consortium, Inc. ("ISC")
  3.  * Copyright (C) 1998-2002  Internet Software Consortium.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software for any
  6.  * purpose with or without fee is hereby granted, provided that the above
  7.  * copyright notice and this permission notice appear in all copies.
  8.  *
  9.  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  10.  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  11.  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  12.  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  13.  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  14.  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  15.  * PERFORMANCE OF THIS SOFTWARE.
  16.  */
  17.  
  18. /* $Id: netaddr.h,v 1.25.18.5 2005/07/28 04:58:47 marka Exp $ */
  19.  
  20. #ifndef ISC_NETADDR_H
  21. #define ISC_NETADDR_H 1
  22.  
  23. /*! \file */
  24.  
  25. #include <isc/lang.h>
  26. #include <isc/net.h>
  27. #include <isc/types.h>
  28.  
  29. #ifdef ISC_PLATFORM_HAVESYSUNH
  30. #include <sys/types.h>
  31. #include <sys/un.h>
  32. #endif
  33.  
  34. ISC_LANG_BEGINDECLS
  35.  
  36. struct isc_netaddr {
  37.     unsigned int family;
  38.     union {
  39.             struct in_addr in;
  40.         struct in6_addr in6;
  41. #ifdef ISC_PLATFORM_HAVESYSUNH
  42.         char un[sizeof(((struct sockaddr_un *)0)->sun_path)];
  43. #endif
  44.     } type;
  45.     isc_uint32_t zone;
  46. };
  47.  
  48. isc_boolean_t
  49. isc_netaddr_equal(const isc_netaddr_t *a, const isc_netaddr_t *b);
  50.  
  51. isc_boolean_t
  52. isc_netaddr_eqprefix(const isc_netaddr_t *a, const isc_netaddr_t *b,
  53.              unsigned int prefixlen);
  54. /*%<
  55.  * Compare the 'prefixlen' most significant bits of the network
  56.  * addresses 'a' and 'b'.  Return #ISC_TRUE if they are equal,
  57.  * #ISC_FALSE if not.
  58.  */
  59.  
  60. isc_result_t
  61. isc_netaddr_masktoprefixlen(const isc_netaddr_t *s, unsigned int *lenp);
  62. /*%<
  63.  * Convert a netmask in 's' into a prefix length in '*lenp'.
  64.  * The mask should consist of zero or more '1' bits in the most
  65.  * most significant part of the address, followed by '0' bits.
  66.  * If this is not the case, #ISC_R_MASKNONCONTIG is returned.
  67.  *
  68.  * Returns:
  69.  *\li    #ISC_R_SUCCESS
  70.  *\li    #ISC_R_MASKNONCONTIG
  71.  */
  72.  
  73. isc_result_t
  74. isc_netaddr_totext(const isc_netaddr_t *netaddr, isc_buffer_t *target);
  75. /*%<
  76.  * Append a text representation of 'sockaddr' to the buffer 'target'.
  77.  * The text is NOT null terminated.  Handles IPv4 and IPv6 addresses.
  78.  *
  79.  * Returns:
  80.  *\li    #ISC_R_SUCCESS
  81.  *\li    #ISC_R_NOSPACE    The text or the null termination did not fit.
  82.  *\li    #ISC_R_FAILURE    Unspecified failure
  83.  */
  84.  
  85. void
  86. isc_netaddr_format(const isc_netaddr_t *na, char *array, unsigned int size);
  87. /*%<
  88.  * Format a human-readable representation of the network address '*na'
  89.  * into the character array 'array', which is of size 'size'.
  90.  * The resulting string is guaranteed to be null-terminated.
  91.  */
  92.  
  93. #define ISC_NETADDR_FORMATSIZE \
  94.     sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:XXX.XXX.XXX.XXX%SSSSSSSSSS")
  95. /*%<
  96.  * Minimum size of array to pass to isc_netaddr_format().
  97.  */
  98.  
  99. void
  100. isc_netaddr_fromsockaddr(isc_netaddr_t *netaddr, const isc_sockaddr_t *source);
  101.  
  102. void
  103. isc_netaddr_fromin(isc_netaddr_t *netaddr, const struct in_addr *ina);
  104.  
  105. void
  106. isc_netaddr_fromin6(isc_netaddr_t *netaddr, const struct in6_addr *ina6);
  107.  
  108. isc_result_t
  109. isc_netaddr_frompath(isc_netaddr_t *netaddr, const char *path);
  110.  
  111. void
  112. isc_netaddr_setzone(isc_netaddr_t *netaddr, isc_uint32_t zone);
  113.  
  114. isc_uint32_t
  115. isc_netaddr_getzone(const isc_netaddr_t *netaddr);
  116.  
  117. void
  118. isc_netaddr_any(isc_netaddr_t *netaddr);
  119. /*%<
  120.  * Return the IPv4 wildcard address.
  121.  */
  122.  
  123. void
  124. isc_netaddr_any6(isc_netaddr_t *netaddr);
  125. /*%<
  126.  * Return the IPv6 wildcard address.
  127.  */
  128.  
  129. isc_boolean_t
  130. isc_netaddr_ismulticast(isc_netaddr_t *na);
  131. /*%<
  132.  * Returns ISC_TRUE if the address is a multicast address.
  133.  */
  134.  
  135. isc_boolean_t
  136. isc_netaddr_isexperimental(isc_netaddr_t *na);
  137. /*%<
  138.  * Returns ISC_TRUE if the address is a experimental (CLASS E) address.
  139.  */
  140.  
  141. isc_boolean_t
  142. isc_netaddr_islinklocal(isc_netaddr_t *na);
  143. /*%<
  144.  * Returns #ISC_TRUE if the address is a link local address.
  145.  */
  146.  
  147. isc_boolean_t
  148. isc_netaddr_issitelocal(isc_netaddr_t *na);
  149. /*%<
  150.  * Returns #ISC_TRUE if the address is a site local address.
  151.  */
  152.  
  153. void
  154. isc_netaddr_fromv4mapped(isc_netaddr_t *t, const isc_netaddr_t *s);
  155. /*%<
  156.  * Convert an IPv6 v4mapped address into an IPv4 address.
  157.  */
  158.  
  159. isc_result_t
  160. isc_netaddr_prefixok(const isc_netaddr_t *na, unsigned int prefixlen);
  161. /*
  162.  * Test whether the netaddr 'na' and 'prefixlen' are consistant.
  163.  * e.g. prefixlen within range.
  164.  *      na does not have bits set which are not covered by the prefixlen.
  165.  *
  166.  * Returns:
  167.  *    ISC_R_SUCCESS
  168.  *    ISC_R_RANGE        prefixlen out of range
  169.  *    ISC_R_NOTIMPLENTED    unsupported family
  170.  *    ISC_R_FAILURE        extra bits.
  171.  */
  172.  
  173. ISC_LANG_ENDDECLS
  174.  
  175. #endif /* ISC_NETADDR_H */
  176.