Lines Matching refs:iter

119 	isc_interfaceiter_t *iter;
133 iter = isc_mem_get(mctx, sizeof(*iter));
134 if (iter == NULL)
139 iter->mctx = mctx;
140 iter->ipaa = NULL;
141 iter->buf4 = NULL;
142 iter->buf6 = NULL;
143 iter->pos4 = NULL;
144 iter->ipaaCur = NULL;
145 iter->ipuaCur = NULL;
146 iter->ipaasize = 0;
147 iter->pos6 = 0;
148 iter->buf6size = 0;
149 iter->buf4size = 0;
150 iter->result = ISC_R_FAILURE;
151 iter->numIF = 0;
152 iter->v4IF = 0;
182 iter->ipaasize = 16 * 1024;
185 iter->ipaa = isc_mem_reallocate(mctx, iter->ipaa,
186 iter->ipaasize);
187 if (NULL == iter->ipaa) {
195 iter->ipaa,
196 &iter->ipaasize);
210 iter->ipaaCur = iter->ipaa;
218 if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
234 iter->buf4size = IFCONF_SIZE_INITIAL*sizeof(INTERFACE_INFO);
237 iter->buf4 = isc_mem_get(mctx, iter->buf4size);
238 if (iter->buf4 == NULL) {
243 if (WSAIoctl(iter->socket, SIO_GET_INTERFACE_LIST,
244 0, 0, iter->buf4, iter->buf4size,
268 (bytesReturned < iter->buf4size))
271 if (iter->buf4size >= IFCONF_SIZE_MAX*sizeof(INTERFACE_INFO)) {
278 isc_mem_put(mctx, iter->buf4, iter->buf4size);
280 iter->buf4size += IFCONF_SIZE_INCREMENT *
288 iter->v4IF = bytesReturned/sizeof(INTERFACE_INFO);
291 closesocket(iter->socket);
298 if ((iter->socket = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
314 iter->buf6size = sizeof(SOCKET_ADDRESS_LIST) +
318 iter->buf6 = isc_mem_get(mctx, iter->buf6size);
319 if (iter->buf6 == NULL) {
324 if (WSAIoctl(iter->socket, SIO_ADDRESS_LIST_QUERY,
325 0, 0, iter->buf6, iter->buf6size,
344 if (iter->buf6size >= IFCONF_SIZE_MAX*sizeof(SOCKET_ADDRESS)) {
351 isc_mem_put(mctx, iter->buf6, iter->buf6size);
353 iter->buf6size += IFCONF_SIZE_INCREMENT *
361 memset(&iter->loop__1, 0, sizeof(iter->loop__1));
362 memset(&iter->loopfe80__1, 0, sizeof(iter->loopfe80__1));
363 iter->loop__1.s6_addr[15] = 1;
364 iter->loopfe80__1.s6_addr[15] = 1;
365 iter->loopfe80__1.s6_addr[0] = 0xfe;
366 iter->loopfe80__1.s6_addr[1] = 0x80;
368 closesocket(iter->socket);
371 iter->magic = IFITER_MAGIC;
372 *iterp = iter;
376 isc_mem_put(mctx, iter->ipaa, iter->ipaasize);
380 isc_mem_put(mctx, iter->buf6, iter->buf6size);
383 if (iter->buf4 != NULL)
384 isc_mem_put(mctx, iter->buf4, iter->buf4size);
387 if (iter->socket >= 0)
388 (void) closesocket(iter->socket);
391 isc_mem_put(mctx, iter, sizeof(*iter));
396 GAA_find_prefix(isc_interfaceiter_t *iter) {
413 (isc_sockaddr_t *)iter->ipuaCur->Address.lpSockaddr);
417 iter->current.netmask.family = af;
418 for (ipap = iter->ipaaCur->FirstPrefix;
436 octets = sizeof(iter->current.netmask.type.in6);
438 octets = sizeof(iter->current.netmask.type.in);
439 memset(&iter->current.netmask.type, 0xFF, octets);
444 memset(&iter->current.netmask.type.in6, 0xFF, nbytes);
445 pbits = (void *)&iter->current.netmask.type.in6;
452 internal_current_GAA(isc_interfaceiter_t *iter) {
457 REQUIRE(iter->ipaaCur != NULL);
458 REQUIRE(iter->ipuaCur != NULL);
459 adap = iter->ipaaCur;
460 addr = iter->ipuaCur;
463 memset(&iter->current, 0, sizeof(iter->current));
464 iter->current.af = addr->Address.lpSockaddr->sa_family;
465 isc_netaddr_fromsockaddr(&iter->current.address,
467 if (AF_INET6 == iter->current.af)
468 iter->current.ifindex = adap->Ipv6IfIndex;
469 iter->current.name[0] = '\0';
475 iter->current.name,
476 sizeof(iter->current.name),
479 iter->current.name[sizeof(iter->current.name) - 1] = '\0';
481 iter->current.flags |= INTERFACE_F_UP;
483 iter->current.flags |= INTERFACE_F_POINTTOPOINT;
485 iter->current.flags |= INTERFACE_F_LOOPBACK;
487 iter->current.flags |= INTERFACE_F_MULTICAST;
489 iter->current.flags |= INTERFACE_F_PRIVACY;
491 prefix_len = GAA_find_prefix(iter);
493 if (AF_INET == iter->current.af && prefix_len < 32 &&
494 (INTERFACE_F_LOOPBACK & iter->current.flags) == 0) {
495 iter->current.flags |= INTERFACE_F_BROADCAST;
496 get_broadcastaddr(&iter->current.broadcast,
497 &iter->current.address,
498 &iter->current.netmask);
504 * Get information about the current interface to iter->current.
512 internal_current(isc_interfaceiter_t *iter) {
516 REQUIRE(VALID_IFITER(iter));
517 REQUIRE(iter->numIF >= 0);
519 memset(&iter->current, 0, sizeof(iter->current));
520 iter->current.af = AF_INET;
522 isc_netaddr_fromsockaddr(&iter->current.address,
523 (isc_sockaddr_t *)&(iter->IFData.iiAddress));
529 iter->current.flags = 0;
530 flags = iter->IFData.iiFlags;
533 iter->current.flags |= INTERFACE_F_UP;
536 iter->current.flags |= INTERFACE_F_BROADCAST;
539 iter->current.flags |= INTERFACE_F_MULTICAST;
542 iter->current.flags |= INTERFACE_F_POINTTOPOINT;
543 snprintf(iter->current.name, sizeof(iter->current.name),
544 "PPP %d", iter->numIF);
549 iter->current.flags |= INTERFACE_F_LOOPBACK;
550 snprintf(iter->current.name, sizeof(iter->current.name),
551 "v4loop %d", iter->numIF);
558 if ((iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0)
559 isc_netaddr_fromsockaddr(&iter->current.dstaddress,
560 (isc_sockaddr_t *)&(iter->IFData.iiBroadcastAddress));
565 isc_netaddr_fromsockaddr(&iter->current.netmask,
566 (isc_sockaddr_t *)&(iter->IFData.iiNetmask));
572 if ((iter->current.flags & INTERFACE_F_BROADCAST) != 0)
573 get_broadcastaddr(&iter->current.broadcast,
574 &iter->current.address,
575 &iter->current.netmask);
578 snprintf(iter->current.name, sizeof(iter->current.name),
579 "IPv4 %d", iter->numIF);
585 internal_current6(isc_interfaceiter_t *iter) {
591 REQUIRE(VALID_IFITER(iter));
592 REQUIRE(iter->pos6 >= 0);
593 REQUIRE(iter->buf6 != 0);
595 memset(&iter->current, 0, sizeof(iter->current));
596 iter->current.af = AF_INET6;
602 if (iter->pos6 >= (unsigned)iter->buf6->iAddressCount) {
604 for (i = 0; i < iter->buf6->iAddressCount; i++) {
606 iter->buf6->Address[i].lpSockaddr;
607 if (!memcmp(&iter->loop__1, &psa6->sin6_addr,
608 sizeof(iter->loop__1))) {
614 iter->pos6 = iter->buf6->iAddressCount - 1;
617 if (iter->pos6 < (unsigned)iter->buf6->iAddressCount) {
618 isc_netaddr_fromsockaddr(&iter->current.address,
619 (isc_sockaddr_t *)iter->buf6->Address[iter->pos6].lpSockaddr);
621 iter->current.address.family = AF_INET6;
622 memcpy(&iter->current.address.type.in6, &iter->loop__1,
623 sizeof(iter->current.address.type.in6));
630 iter->current.flags = INTERFACE_F_UP | INTERFACE_F_MULTICAST;
632 if (!memcmp(&iter->current.address.type.in6, &iter->loop__1,
633 sizeof(iter->current.address.type.in6)) ||
634 !memcmp(&iter->current.address.type.in6, &iter->loopfe80__1,
635 sizeof(iter->current.address.type.in6))) {
637 iter->current.flags |= INTERFACE_F_LOOPBACK;
638 snprintf(iter->current.name, sizeof(iter->current.name),
640 iter->buf6->iAddressCount - iter->pos6);
645 snprintf(iter->current.name, sizeof(iter->current.name),
647 iter->buf6->iAddressCount - iter->pos6);
649 memset(iter->current.netmask.type.in6.s6_addr, 0xff,
650 sizeof(iter->current.netmask.type.in6.s6_addr));
651 iter->current.netmask.family = AF_INET6;
656 internal_next_GAA(isc_interfaceiter_t *iter) {
658 if (NULL == iter->ipaaCur)
660 if (NULL == iter->ipuaCur)
661 iter->ipuaCur = iter->ipaaCur->FirstUnicastAddress;
663 iter->ipuaCur = iter->ipuaCur->Next;
664 while (NULL == iter->ipuaCur) {
665 iter->ipaaCur = iter->ipaaCur->Next;
666 if (NULL == iter->ipaaCur)
668 iter->ipuaCur = iter->ipaaCur->FirstUnicastAddress;
681 internal_next(isc_interfaceiter_t *iter) {
682 if (iter->numIF >= iter->v4IF)
692 if (iter->numIF == 0)
693 iter->pos4 = (INTERFACE_INFO *)(iter->buf4 + (iter->v4IF));
695 iter->pos4--;
696 if (&(iter->pos4) < &(iter->buf4))
699 memset(&(iter->IFData), 0, sizeof(INTERFACE_INFO));
700 memcpy(&(iter->IFData), iter->pos4, sizeof(INTERFACE_INFO));
701 iter->numIF++;
707 internal_next6(isc_interfaceiter_t *iter) {
708 if (iter->pos6 == 0)
710 iter->pos6--;
715 isc_interfaceiter_current(isc_interfaceiter_t *iter,
717 REQUIRE(iter->result == ISC_R_SUCCESS);
718 memcpy(ifdata, &iter->current, sizeof(*ifdata));
723 isc_interfaceiter_first(isc_interfaceiter_t *iter) {
724 REQUIRE(VALID_IFITER(iter));
738 if (!use_GAA && iter->buf6 != NULL)
739 iter->pos6 = iter->buf6->iAddressCount + 1;
740 iter->result = ISC_R_SUCCESS;
741 return (isc_interfaceiter_next(iter));
745 isc_interfaceiter_next(isc_interfaceiter_t *iter) {
748 REQUIRE(VALID_IFITER(iter));
749 REQUIRE(iter->result == ISC_R_SUCCESS);
754 result = internal_next_GAA(iter);
757 result = internal_current_GAA(iter);
763 result = internal_next(iter);
765 result = internal_next6(iter);
768 result = internal_current6(iter);
773 result = internal_current(iter);
778 iter->result = result;
784 isc_interfaceiter_t *iter;
787 iter = *iterp;
788 REQUIRE(VALID_IFITER(iter));
792 REQUIRE(NULL == iter->buf4);
793 REQUIRE(NULL == iter->buf4);
794 if (iter->ipaa != NULL)
795 isc_mem_put(iter->mctx, iter->ipaa, iter->ipaasize);
797 REQUIRE(NULL == iter->ipaa);
798 if (iter->buf4 != NULL)
799 isc_mem_put(iter->mctx, iter->buf4, iter->buf4size);
800 if (iter->buf6 != NULL)
801 isc_mem_put(iter->mctx, iter->buf6, iter->buf6size);
804 iter->magic = 0;
805 isc_mem_put(iter->mctx, iter, sizeof(*iter));