Lines Matching defs:iter
156 isc_interfaceiter_t *iter;
164 iter = isc_mem_get(mctx, sizeof(*iter));
166 iter->mctx = mctx;
167 iter->buf = NULL;
168 iter->bufsize = 0;
169 iter->ifaddrs = NULL;
171 if (getifaddrs(&iter->ifaddrs) < 0) {
183 iter->pos = NULL;
184 iter->result = ISC_R_FAILURE;
186 iter->magic = IFITER_MAGIC;
187 *iterp = iter;
191 if (iter->ifaddrs != NULL) { /* just in case */
192 freeifaddrs(iter->ifaddrs);
194 isc_mem_put(mctx, iter, sizeof(*iter));
199 * Get information about the current interface to iter->current.
206 internal_current(isc_interfaceiter_t *iter) {
211 REQUIRE(VALID_IFITER(iter));
213 ifa = iter->pos;
227 memset(&iter->current, 0, sizeof(iter->current));
230 if (namelen > sizeof(iter->current.name) - 1) {
231 namelen = sizeof(iter->current.name) - 1;
234 memset(iter->current.name, 0, sizeof(iter->current.name));
235 memmove(iter->current.name, ifa->ifa_name, namelen);
237 iter->current.flags = 0;
240 iter->current.flags |= INTERFACE_F_UP;
244 iter->current.flags |= INTERFACE_F_POINTTOPOINT;
248 iter->current.flags |= INTERFACE_F_LOOPBACK;
251 iter->current.af = family;
253 get_addr(family, &iter->current.address, ifa->ifa_addr, ifa->ifa_name);
256 get_addr(family, &iter->current.netmask, ifa->ifa_netmask,
261 (iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0)
263 get_addr(family, &iter->current.dstaddress, ifa->ifa_dstaddr,
278 internal_next(isc_interfaceiter_t *iter) {
279 if (iter->pos != NULL) {
280 iter->pos = iter->pos->ifa_next;
282 if (iter->pos == NULL) {
290 internal_destroy(isc_interfaceiter_t *iter) {
291 if (iter->ifaddrs) {
292 freeifaddrs(iter->ifaddrs);
294 iter->ifaddrs = NULL;
298 internal_first(isc_interfaceiter_t *iter) {
299 iter->pos = iter->ifaddrs;
307 isc_interfaceiter_current(isc_interfaceiter_t *iter, isc_interface_t *ifdata) {
308 REQUIRE(iter->result == ISC_R_SUCCESS);
309 memmove(ifdata, &iter->current, sizeof(*ifdata));
314 isc_interfaceiter_first(isc_interfaceiter_t *iter) {
317 REQUIRE(VALID_IFITER(iter));
319 internal_first(iter);
321 result = internal_current(iter);
325 result = internal_next(iter);
330 iter->result = result;
335 isc_interfaceiter_next(isc_interfaceiter_t *iter) {
338 REQUIRE(VALID_IFITER(iter));
339 REQUIRE(iter->result == ISC_R_SUCCESS);
342 result = internal_next(iter);
346 result = internal_current(iter);
351 iter->result = result;
357 isc_interfaceiter_t *iter;
359 iter = *iterp;
361 REQUIRE(VALID_IFITER(iter));
363 internal_destroy(iter);
364 if (iter->buf != NULL) {
365 isc_mem_put(iter->mctx, iter->buf, iter->bufsize);
368 iter->magic = 0;
369 isc_mem_put(iter->mctx, iter, sizeof(*iter));