Home | History | Annotate | Download | only in win32

Lines Matching refs:iter

121 	isc_interfaceiter_t *iter;
135 iter = isc_mem_get(mctx, sizeof(*iter));
136 if (iter == NULL)
141 iter->mctx = mctx;
142 iter->ipaa = NULL;
143 iter->buf4 = NULL;
144 iter->buf6 = NULL;
145 iter->pos4 = NULL;
146 iter->ipaaCur = NULL;
147 iter->ipuaCur = NULL;
148 iter->ipaasize = 0;
149 iter->pos6 = 0;
150 iter->buf6size = 0;
151 iter->buf4size = 0;
152 iter->result = ISC_R_FAILURE;
153 iter->numIF = 0;
154 iter->v4IF = 0;
184 iter->ipaasize = 16 * 1024;
187 iter->ipaa = isc_mem_reallocate(mctx, iter->ipaa,
188 iter->ipaasize);
189 if (NULL == iter->ipaa) {
197 iter->ipaa,
198 &iter->ipaasize);
212 iter->ipaaCur = iter->ipaa;
220 if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
236 iter->buf4size = IFCONF_SIZE_INITIAL*sizeof(INTERFACE_INFO);
239 iter->buf4 = isc_mem_get(mctx, iter->buf4size);
240 if (iter->buf4 == NULL) {
245 if (WSAIoctl(iter->socket, SIO_GET_INTERFACE_LIST,
246 0, 0, iter->buf4, iter->buf4size,
270 (bytesReturned < iter->buf4size))
273 if (iter->buf4size >= IFCONF_SIZE_MAX*sizeof(INTERFACE_INFO)) {
280 isc_mem_put(mctx, iter->buf4, iter->buf4size);
282 iter->buf4size += IFCONF_SIZE_INCREMENT *
290 iter->v4IF = bytesReturned/sizeof(INTERFACE_INFO);
293 closesocket(iter->socket);
300 if ((iter->socket = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
316 iter->buf6size = sizeof(SOCKET_ADDRESS_LIST) +
320 iter->buf6 = isc_mem_get(mctx, iter->buf6size);
321 if (iter->buf6 == NULL) {
326 if (WSAIoctl(iter->socket, SIO_ADDRESS_LIST_QUERY,
327 0, 0, iter->buf6, iter->buf6size,
346 if (iter->buf6size >= IFCONF_SIZE_MAX*sizeof(SOCKET_ADDRESS)) {
353 isc_mem_put(mctx, iter->buf6, iter->buf6size);
355 iter->buf6size += IFCONF_SIZE_INCREMENT *
363 memset(&iter->loop__1, 0, sizeof(iter->loop__1));
364 memset(&iter->loopfe80__1, 0, sizeof(iter->loopfe80__1));
365 iter->loop__1.s6_addr[15] = 1;
366 iter->loopfe80__1.s6_addr[15] = 1;
367 iter->loopfe80__1.s6_addr[0] = 0xfe;
368 iter->loopfe80__1.s6_addr[1] = 0x80;
370 closesocket(iter->socket);
373 iter->magic = IFITER_MAGIC;
374 *iterp = iter;
378 isc_mem_put(mctx, iter->ipaa, iter->ipaasize);
382 isc_mem_put(mctx, iter->buf6, iter->buf6size);
385 if (iter->buf4 != NULL)
386 isc_mem_put(mctx, iter->buf4, iter->buf4size);
389 if (iter->socket >= 0)
390 (void) closesocket(iter->socket);
393 isc_mem_put(mctx, iter, sizeof(*iter));
398 GAA_find_prefix(isc_interfaceiter_t *iter) {
415 (isc_sockaddr_t *)iter->ipuaCur->Address.lpSockaddr);
419 iter->current.netmask.family = af;
420 for (ipap = iter->ipaaCur->FirstPrefix;
438 octets = sizeof(iter->current.netmask.type.in6);
440 octets = sizeof(iter->current.netmask.type.in);
441 memset(&iter->current.netmask.type, 0xFF, octets);
446 memset(&iter->current.netmask.type.in6, 0xFF, nbytes);
447 pbits = (void *)&iter->current.netmask.type.in6;
454 internal_current_GAA(isc_interfaceiter_t *iter) {
459 REQUIRE(iter->ipaaCur != NULL);
460 REQUIRE(iter->ipuaCur != NULL);
461 adap = iter->ipaaCur;
462 addr = iter->ipuaCur;
465 memset(&iter->current, 0, sizeof(iter->current));
466 iter->current.af = addr->Address.lpSockaddr->sa_family;
467 isc_netaddr_fromsockaddr(&iter->current.address,
469 if (AF_INET6 == iter->current.af)
470 iter->current.ifindex = adap->Ipv6IfIndex;
471 iter->current.name[0] = '\0';
477 iter->current.name,
478 sizeof(iter->current.name),
481 iter->current.name[sizeof(iter->current.name) - 1] = '\0';
483 iter->current.flags |= INTERFACE_F_UP;
485 iter->current.flags |= INTERFACE_F_POINTTOPOINT;
487 iter->current.flags |= INTERFACE_F_LOOPBACK;
489 iter->current.flags |= INTERFACE_F_MULTICAST;
491 iter->current.flags |= INTERFACE_F_PRIVACY;
493 prefix_len = GAA_find_prefix(iter);
495 if (AF_INET == iter->current.af && prefix_len < 32 &&
496 (INTERFACE_F_LOOPBACK & iter->current.flags) == 0) {
497 iter->current.flags |= INTERFACE_F_BROADCAST;
498 get_broadcastaddr(&iter->current.broadcast,
499 &iter->current.address,
500 &iter->current.netmask);
506 * Get information about the current interface to iter->current.
514 internal_current(isc_interfaceiter_t *iter) {
518 REQUIRE(VALID_IFITER(iter));
519 REQUIRE(iter->numIF >= 0);
521 memset(&iter->current, 0, sizeof(iter->current));
522 iter->current.af = AF_INET;
524 isc_netaddr_fromsockaddr(&iter->current.address,
525 (isc_sockaddr_t *)&(iter->IFData.iiAddress));
531 iter->current.flags = 0;
532 flags = iter->IFData.iiFlags;
535 iter->current.flags |= INTERFACE_F_UP;
538 iter->current.flags |= INTERFACE_F_BROADCAST;
541 iter->current.flags |= INTERFACE_F_MULTICAST;
544 iter->current.flags |= INTERFACE_F_POINTTOPOINT;
545 snprintf(iter->current.name, sizeof(iter->current.name),
546 "PPP %d", iter->numIF);
551 iter->current.flags |= INTERFACE_F_LOOPBACK;
552 snprintf(iter->current.name, sizeof(iter->current.name),
553 "v4loop %d", iter->numIF);
560 if ((iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0)
561 isc_netaddr_fromsockaddr(&iter->current.dstaddress,
562 (isc_sockaddr_t *)&(iter->IFData.iiBroadcastAddress));
567 isc_netaddr_fromsockaddr(&iter->current.netmask,
568 (isc_sockaddr_t *)&(iter->IFData.iiNetmask));
574 if ((iter->current.flags & INTERFACE_F_BROADCAST) != 0)
575 get_broadcastaddr(&iter->current.broadcast,
576 &iter->current.address,
577 &iter->current.netmask);
580 snprintf(iter->current.name, sizeof(iter->current.name),
581 "IPv4 %d", iter->numIF);
587 internal_current6(isc_interfaceiter_t *iter) {
593 REQUIRE(VALID_IFITER(iter));
594 REQUIRE(iter
595 REQUIRE(iter->buf6 != 0);
597 memset(&iter->current, 0, sizeof(iter->current));
598 iter->current.af = AF_INET6;
604 if (iter->pos6 >= (unsigned)iter->buf6->iAddressCount) {
606 for (i = 0; i < iter->buf6->iAddressCount; i++) {
608 iter->buf6->Address[i].lpSockaddr;
609 if (!memcmp(&iter->loop__1, &psa6->sin6_addr,
610 sizeof(iter->loop__1))) {
616 iter->pos6 = iter->buf6->iAddressCount - 1;
619 if (iter->pos6 < (unsigned)iter->buf6->iAddressCount) {
620 isc_netaddr_fromsockaddr(&iter->current.address,
621 (isc_sockaddr_t *)iter->buf6->Address[iter->pos6].lpSockaddr);
623 iter->current.address.family = AF_INET6;
624 memcpy(&iter->current.address.type.in6, &iter->loop__1,
625 sizeof(iter->current.address.type.in6));
632 iter->current.flags = INTERFACE_F_UP | INTERFACE_F_MULTICAST;
634 if (!memcmp(&iter->current.address.type.in6, &iter->loop__1,
635 sizeof(iter->current.address.type.in6)) ||
636 !memcmp(&iter->current.address.type.in6, &iter->loopfe80__1,
637 sizeof(iter->current.address.type.in6))) {
639 iter->current.flags |= INTERFACE_F_LOOPBACK;
640 snprintf(iter->current.name, sizeof(iter->current.name),
642 iter->buf6->iAddressCount - iter->pos6);
647 snprintf(iter->current.name, sizeof(iter->current.name),
649 iter->buf6->iAddressCount - iter->pos6);
651 memset(iter->current.netmask.type.in6.s6_addr, 0xff,
652 sizeof(iter->current.netmask.type.in6.s6_addr));
653 iter->current.netmask.family = AF_INET6;
658 internal_next_GAA(isc_interfaceiter_t *iter) {
660 if (NULL == iter->ipaaCur)
662 if (NULL == iter->ipuaCur)
663 iter->ipuaCur = iter->ipaaCur->FirstUnicastAddress;
665 iter->ipuaCur = iter->ipuaCur->Next;
666 while (NULL == iter->ipuaCur) {
667 iter->ipaaCur = iter->ipaaCur->Next;
668 if (NULL == iter->ipaaCur)
670 iter->ipuaCur = iter->ipaaCur->FirstUnicastAddress;
683 internal_next(isc_interfaceiter_t *iter) {
684 if (iter->numIF >= iter->v4IF)
694 if (iter->numIF == 0)
695 iter->pos4 = (INTERFACE_INFO *)(iter->buf4 + (iter->v4IF));
697 iter->pos4--;
698 if (&(iter->pos4) < &(iter->buf4))
701 memset(&(iter->IFData), 0, sizeof(INTERFACE_INFO));
702 memcpy(&(iter->IFData), iter->pos4, sizeof(INTERFACE_INFO));
703 iter->numIF++;
709 internal_next6(isc_interfaceiter_t *iter) {
710 if (iter->pos6 == 0)
712 iter->pos6--;
717 isc_interfaceiter_current(isc_interfaceiter_t *iter,
719 REQUIRE(iter->result == ISC_R_SUCCESS);
720 memcpy(ifdata, &iter->current, sizeof(*ifdata));
725 isc_interfaceiter_first(isc_interfaceiter_t *iter) {
726 REQUIRE(VALID_IFITER(iter));
740 if (!use_GAA && iter->buf6 != NULL)
741 iter->pos6 = iter->buf6->iAddressCount + 1;
742 iter->result = ISC_R_SUCCESS;
743 return (isc_interfaceiter_next(iter));
747 isc_interfaceiter_next(isc_interfaceiter_t *iter) {
750 REQUIRE(VALID_IFITER(iter));
751 REQUIRE(iter->result == ISC_R_SUCCESS);
756 result = internal_next_GAA(iter);
759 result = internal_current_GAA(iter);
765 result = internal_next(iter);
767 result = internal_next6(iter);
770 result = internal_current6(iter);
775 result = internal_current(iter);
780 iter->result = result;
786 isc_interfaceiter_t *iter;
789 iter = *iterp;
790 REQUIRE(VALID_IFITER(iter));
794 REQUIRE(NULL == iter->buf4);
795 REQUIRE(NULL == iter->buf4);
796 if (iter->ipaa != NULL)
797 isc_mem_put(iter->mctx, iter->ipaa, iter->ipaasize);
799 REQUIRE(NULL == iter->ipaa);
800 if (iter->buf4 != NULL)
801 isc_mem_put(iter->mctx, iter->buf4, iter->buf4size);
802 if (iter->buf6 != NULL)
803 isc_mem_put(iter->mctx, iter->buf6, iter->buf6size);
806 iter->magic = 0;
807 isc_mem_put(iter->mctx, iter, sizeof(*iter));