00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef ISC_SOCKADDR_H
00021 #define ISC_SOCKADDR_H 1
00022
00023
00024
00025 #include <isc/lang.h>
00026 #include <isc/net.h>
00027 #include <isc/types.h>
00028 #ifdef ISC_PLATFORM_HAVESYSUNH
00029 #include <sys/un.h>
00030 #endif
00031
00032 struct isc_sockaddr {
00033 union {
00034 struct sockaddr sa;
00035 struct sockaddr_in sin;
00036 struct sockaddr_in6 sin6;
00037 struct sockaddr_storage ss;
00038 #ifdef ISC_PLATFORM_HAVESYSUNH
00039 struct sockaddr_un sunix;
00040 #endif
00041 } type;
00042 unsigned int length;
00043 ISC_LINK(struct isc_sockaddr) link;
00044 };
00045
00046 typedef ISC_LIST(struct isc_sockaddr) isc_sockaddrlist_t;
00047
00048 #define ISC_SOCKADDR_CMPADDR 0x0001
00049
00050 #define ISC_SOCKADDR_CMPPORT 0x0002
00051
00052 #define ISC_SOCKADDR_CMPSCOPE 0x0004
00053
00054 #define ISC_SOCKADDR_CMPSCOPEZERO 0x0008
00055
00056
00057 ISC_LANG_BEGINDECLS
00058
00059 isc_boolean_t
00060 isc_sockaddr_compare(const isc_sockaddr_t *a, const isc_sockaddr_t *b,
00061 unsigned int flags);
00062
00063
00064
00065
00066
00067
00068
00069 isc_boolean_t
00070 isc_sockaddr_equal(const isc_sockaddr_t *a, const isc_sockaddr_t *b);
00071
00072
00073
00074
00075 isc_boolean_t
00076 isc_sockaddr_eqaddr(const isc_sockaddr_t *a, const isc_sockaddr_t *b);
00077
00078
00079
00080
00081
00082 isc_boolean_t
00083 isc_sockaddr_eqaddrprefix(const isc_sockaddr_t *a, const isc_sockaddr_t *b,
00084 unsigned int prefixlen);
00085
00086
00087
00088
00089
00090
00091 unsigned int
00092 isc_sockaddr_hash(const isc_sockaddr_t *sockaddr, isc_boolean_t address_only);
00093
00094
00095
00096
00097
00098
00099
00100
00101 void
00102 isc_sockaddr_any(isc_sockaddr_t *sockaddr);
00103
00104
00105
00106
00107 void
00108 isc_sockaddr_any6(isc_sockaddr_t *sockaddr);
00109
00110
00111
00112
00113 void
00114 isc_sockaddr_anyofpf(isc_sockaddr_t *sockaddr, int family);
00115
00116
00117
00118
00119
00120
00121
00122
00123 void
00124 isc_sockaddr_fromin(isc_sockaddr_t *sockaddr, const struct in_addr *ina,
00125 in_port_t port);
00126
00127
00128
00129
00130 void
00131 isc_sockaddr_fromin6(isc_sockaddr_t *sockaddr, const struct in6_addr *ina6,
00132 in_port_t port);
00133
00134
00135
00136
00137 void
00138 isc_sockaddr_v6fromin(isc_sockaddr_t *sockaddr, const struct in_addr *ina,
00139 in_port_t port);
00140
00141
00142
00143
00144 void
00145 isc_sockaddr_fromnetaddr(isc_sockaddr_t *sockaddr, const isc_netaddr_t *na,
00146 in_port_t port);
00147
00148
00149
00150
00151 int
00152 isc_sockaddr_pf(const isc_sockaddr_t *sockaddr);
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 void
00167 isc_sockaddr_setport(isc_sockaddr_t *sockaddr, in_port_t port);
00168
00169
00170
00171
00172 in_port_t
00173 isc_sockaddr_getport(const isc_sockaddr_t *sockaddr);
00174
00175
00176
00177
00178 isc_result_t
00179 isc_sockaddr_totext(const isc_sockaddr_t *sockaddr, isc_buffer_t *target);
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 void
00192 isc_sockaddr_format(const isc_sockaddr_t *sa, char *array, unsigned int size);
00193
00194
00195
00196
00197
00198
00199 isc_boolean_t
00200 isc_sockaddr_ismulticast(const isc_sockaddr_t *sa);
00201
00202
00203
00204
00205 isc_boolean_t
00206 isc_sockaddr_isexperimental(const isc_sockaddr_t *sa);
00207
00208
00209
00210
00211 isc_boolean_t
00212 isc_sockaddr_islinklocal(const isc_sockaddr_t *sa);
00213
00214
00215
00216
00217 isc_boolean_t
00218 isc_sockaddr_issitelocal(const isc_sockaddr_t *sa);
00219
00220
00221
00222
00223 isc_result_t
00224 isc_sockaddr_frompath(isc_sockaddr_t *sockaddr, const char *path);
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234 #define ISC_SOCKADDR_FORMATSIZE \
00235 sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:XXX.XXX.XXX.XXX%SSSSSSSSSS#YYYYY")
00236
00237
00238
00239
00240 ISC_LANG_ENDDECLS
00241
00242 #endif