00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef ISC_NETADDR_H
00021 #define ISC_NETADDR_H 1
00022
00023
00024
00025 #include <isc/lang.h>
00026 #include <isc/net.h>
00027 #include <isc/types.h>
00028
00029 #ifdef ISC_PLATFORM_HAVESYSUNH
00030 #include <sys/types.h>
00031 #include <sys/un.h>
00032 #endif
00033
00034 ISC_LANG_BEGINDECLS
00035
00036 struct isc_netaddr {
00037 unsigned int family;
00038 union {
00039 struct in_addr in;
00040 struct in6_addr in6;
00041 #ifdef ISC_PLATFORM_HAVESYSUNH
00042 char un[sizeof(((struct sockaddr_un *)0)->sun_path)];
00043 #endif
00044 } type;
00045 isc_uint32_t zone;
00046 };
00047
00048 isc_boolean_t
00049 isc_netaddr_equal(const isc_netaddr_t *a, const isc_netaddr_t *b);
00050
00051
00052
00053
00054
00055
00056 isc_boolean_t
00057 isc_netaddr_eqprefix(const isc_netaddr_t *a, const isc_netaddr_t *b,
00058 unsigned int prefixlen);
00059
00060
00061
00062
00063
00064
00065 isc_result_t
00066 isc_netaddr_masktoprefixlen(const isc_netaddr_t *s, unsigned int *lenp);
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 isc_result_t
00079 isc_netaddr_totext(const isc_netaddr_t *netaddr, isc_buffer_t *target);
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 void
00091 isc_netaddr_format(const isc_netaddr_t *na, char *array, unsigned int size);
00092
00093
00094
00095
00096
00097
00098 #define ISC_NETADDR_FORMATSIZE \
00099 sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:XXX.XXX.XXX.XXX%SSSSSSSSSS")
00100
00101
00102
00103
00104 void
00105 isc_netaddr_fromsockaddr(isc_netaddr_t *netaddr, const isc_sockaddr_t *source);
00106
00107 void
00108 isc_netaddr_fromin(isc_netaddr_t *netaddr, const struct in_addr *ina);
00109
00110 void
00111 isc_netaddr_fromin6(isc_netaddr_t *netaddr, const struct in6_addr *ina6);
00112
00113 isc_result_t
00114 isc_netaddr_frompath(isc_netaddr_t *netaddr, const char *path);
00115
00116 void
00117 isc_netaddr_setzone(isc_netaddr_t *netaddr, isc_uint32_t zone);
00118
00119 isc_uint32_t
00120 isc_netaddr_getzone(const isc_netaddr_t *netaddr);
00121
00122 void
00123 isc_netaddr_any(isc_netaddr_t *netaddr);
00124
00125
00126
00127
00128 void
00129 isc_netaddr_any6(isc_netaddr_t *netaddr);
00130
00131
00132
00133
00134 isc_boolean_t
00135 isc_netaddr_ismulticast(isc_netaddr_t *na);
00136
00137
00138
00139
00140 isc_boolean_t
00141 isc_netaddr_isexperimental(isc_netaddr_t *na);
00142
00143
00144
00145
00146 isc_boolean_t
00147 isc_netaddr_islinklocal(isc_netaddr_t *na);
00148
00149
00150
00151
00152 isc_boolean_t
00153 isc_netaddr_issitelocal(isc_netaddr_t *na);
00154
00155
00156
00157
00158 void
00159 isc_netaddr_fromv4mapped(isc_netaddr_t *t, const isc_netaddr_t *s);
00160
00161
00162
00163
00164 isc_result_t
00165 isc_netaddr_prefixok(const isc_netaddr_t *na, unsigned int prefixlen);
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 ISC_LANG_ENDDECLS
00179
00180 #endif