Lines Matching refs:iter

55 	isc_interfaceiter_t *iter;
64 iter = isc_mem_get(mctx, sizeof(*iter));
65 if (iter == NULL)
68 iter->mctx = mctx;
69 iter->buf = NULL;
70 iter->bufsize = 0;
71 iter->ifaddrs = NULL;
78 iter->proc = fopen("/proc/net/if_inet6", "r");
79 if (iter->proc == NULL) {
86 iter->proc = NULL;
87 iter->valid = ISC_R_FAILURE;
92 if ((ret = getifaddrs(&iter->ifaddrs)) >= 0)
114 iter->pos = NULL;
115 iter->result = ISC_R_FAILURE;
117 iter->magic = IFITER_MAGIC;
118 *iterp = iter;
123 if (iter->proc != NULL)
124 fclose(iter->proc);
126 if (iter->ifaddrs != NULL) /* just in case */
127 freeifaddrs(iter->ifaddrs);
128 isc_mem_put(mctx, iter, sizeof(*iter));
133 * Get information about the current interface to iter->current.
140 internal_current(isc_interfaceiter_t *iter) {
145 REQUIRE(VALID_IFITER(iter));
147 ifa = iter->pos;
152 * burnicki: iter->pos is usually never NULL here (anymore?),
153 * so linux_if_inet6_current(iter) is never called here.
158 if (iter->pos == NULL)
159 return (linux_if_inet6_current(iter));
188 memset(&iter->current, 0, sizeof(iter->current));
191 if (namelen > sizeof(iter->current.name) - 1)
192 namelen = sizeof(iter->current.name) - 1;
194 memset(iter->current.name, 0, sizeof(iter->current.name));
195 memcpy(iter->current.name, ifa->ifa_name, namelen);
197 iter->current.flags = 0;
200 iter->current.flags |= INTERFACE_F_UP;
203 iter->current.flags |= INTERFACE_F_POINTTOPOINT;
206 iter->current.flags |= INTERFACE_F_LOOPBACK;
209 iter->current.flags |= INTERFACE_F_BROADCAST;
213 iter->current.flags |= INTERFACE_F_MULTICAST;
216 iter->current.af = family;
218 get_addr(family, &iter->current.address, ifa->ifa_addr, ifa->ifa_name);
221 get_addr(family, &iter->current.netmask, ifa->ifa_netmask,
225 (iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0)
226 get_addr(family, &iter->current.dstaddress, ifa->ifa_dstaddr,
230 (iter->current.flags & INTERFACE_F_BROADCAST) != 0)
231 get_addr(family, &iter->current.broadcast, ifa->ifa_broadaddr,
235 iter->current.ifindex = if_nametoindex(iter->current.name);
248 internal_next(isc_interfaceiter_t *iter) {
250 if (iter->pos != NULL)
251 iter->pos = iter->pos->ifa_next;
252 if (iter->pos == NULL) {
255 return (linux_if_inet6_next(iter));
264 internal_destroy(isc_interfaceiter_t *iter) {
267 if (iter->proc != NULL)
268 fclose(iter->proc);
269 iter->proc = NULL;
271 if (iter->ifaddrs)
272 freeifaddrs(iter->ifaddrs);
273 iter->ifaddrs = NULL;
277 void internal_first(isc_interfaceiter_t *iter) {
280 linux_if_inet6_first(iter);
282 iter->pos = iter->ifaddrs;