Lines Matching +full:proc +full:- +full:id
3 * Copyright (C) 1999-2003 Internet Software Consortium.
18 /* $Id: interfaceiter.c,v 1.45 2008/12/01 03:51:47 marka Exp $ */
64 * instead of using src->sa_family, because the latter does not work
83 dst->family = family; in get_addr()
86 memcpy(&dst->type.in, in get_addr()
87 &((struct sockaddr_in *)(void *)src)->sin_addr, in get_addr()
92 memcpy(&dst->type.in6, &sa6->sin6_addr, in get_addr()
95 if (sa6->sin6_scope_id != 0) in get_addr()
96 isc_netaddr_setzone(dst, sa6->sin6_scope_id); in get_addr()
104 * part and the zone ID part. in get_addr()
107 * we only consider unicast link-local addresses. in get_addr()
109 if (IN6_IS_ADDR_LINKLOCAL(&sa6->sin6_addr)) { in get_addr()
112 memcpy(&zone16, &sa6->sin6_addr.s6_addr[2], in get_addr()
116 /* the zone ID is embedded */ in get_addr()
119 dst->type.in6.s6_addr[2] = 0; in get_addr()
120 dst->type.in6.s6_addr[3] = 0; in get_addr()
128 * is know. Use the interface ID as in get_addr()
129 * the link ID. in get_addr()
149 * Include system-dependent code.
171 if (iter->proc != NULL) { in linux_if_inet6_first()
172 rewind(iter->proc); in linux_if_inet6_first()
175 iter->valid = ISC_R_NOMORE; in linux_if_inet6_first()
180 if (iter->proc != NULL && in linux_if_inet6_next()
181 fgets(iter->entry, sizeof(iter->entry), iter->proc) != NULL) in linux_if_inet6_next()
182 iter->valid = ISC_R_SUCCESS; in linux_if_inet6_next()
184 iter->valid = ISC_R_NOMORE; in linux_if_inet6_next()
185 return (iter->valid); in linux_if_inet6_next()
198 if (iter->valid != ISC_R_SUCCESS) in linux_if_inet6_current()
199 return (iter->valid); in linux_if_inet6_current()
200 if (iter->proc == NULL) { in linux_if_inet6_current()
203 "/proc/net/if_inet6:iter->proc == NULL"); in linux_if_inet6_current()
207 res = sscanf(iter->entry, "%32[a-f0-9] %x %x %x %x %16s\n", in linux_if_inet6_current()
212 "/proc/net/if_inet6:sscanf() -> %d (expected 6)", in linux_if_inet6_current()
219 "/proc/net/if_inet6:strlen(%s) != 32", address); in linux_if_inet6_current()
223 ** Ignore DAD addresses -- in linux_if_inet6_current()
234 byte = ((strchr(hex, address[i * 2]) - hex) << 4) | in linux_if_inet6_current()
235 (strchr(hex, address[i * 2 + 1]) - hex); in linux_if_inet6_current()
238 iter->current.af = AF_INET6; in linux_if_inet6_current()
239 iter->current.flags = INTERFACE_F_UP; in linux_if_inet6_current()
240 isc_netaddr_fromin6(&iter->current.address, &addr6); in linux_if_inet6_current()
241 iter->current.ifindex = ifindex; in linux_if_inet6_current()
242 if (isc_netaddr_islinklocal(&iter->current.address)) { in linux_if_inet6_current()
243 isc_netaddr_setzone(&iter->current.address, in linux_if_inet6_current()
249 prefix -= 8; in linux_if_inet6_current()
251 addr6.s6_addr[i] = (0xff << (8 - prefix)) & 0xff; in linux_if_inet6_current()
255 isc_netaddr_fromin6(&iter->current.netmask, &addr6); in linux_if_inet6_current()
256 strncpy(iter->current.name, name, sizeof(iter->current.name)); in linux_if_inet6_current()
269 REQUIRE(iter->result == ISC_R_SUCCESS); in isc_interfaceiter_current()
270 memcpy(ifdata, &iter->current, sizeof(*ifdata)); in isc_interfaceiter_current()
289 iter->result = result; in isc_interfaceiter_first()
298 REQUIRE(iter->result == ISC_R_SUCCESS); in isc_interfaceiter_next()
308 iter->result = result; in isc_interfaceiter_next()
321 if (iter->buf != NULL) in isc_interfaceiter_destroy()
322 isc_mem_put(iter->mctx, iter->buf, iter->bufsize); in isc_interfaceiter_destroy()
324 iter->magic = 0; in isc_interfaceiter_destroy()
325 isc_mem_put(iter->mctx, iter, sizeof(*iter)); in isc_interfaceiter_destroy()