• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/bind9-45.101/bind9/lib/isc/unix/

Lines Matching refs:iter

111 getbuf4(isc_interfaceiter_t *iter) {
114 iter->bufsize = IFCONF_BUFSIZE_INITIAL;
117 iter->buf = isc_mem_get(iter->mctx, iter->bufsize);
118 if (iter->buf == NULL)
121 memset(&iter->ifc.ifc_len, 0, sizeof(iter->ifc.ifc_len));
122 iter->ifc.ifc_len = iter->bufsize;
123 iter->ifc.ifc_buf = iter->buf;
129 if (ioctl(iter->socket, SIOCGIFCONF, (char *)&iter->ifc)
155 if (iter->ifc.ifc_len + 2 * sizeof(struct ifreq)
156 < iter->bufsize)
159 if (iter->bufsize >= IFCONF_BUFSIZE_MAX) {
170 isc_mem_put(iter->mctx, iter->buf, iter->bufsize);
172 iter->bufsize *= 2;
177 isc_mem_put(iter->mctx, iter->buf, iter->bufsize);
178 iter->buf = NULL;
184 getbuf6(isc_interfaceiter_t *iter) {
188 iter->bufsize6 = IFCONF_BUFSIZE_INITIAL;
191 iter->buf6 = isc_mem_get(iter->mctx, iter->bufsize6);
192 if (iter->buf6 == NULL)
195 memset(&iter->lifc, 0, sizeof(iter->lifc));
197 iter->lifc.lifc_family = AF_INET6;
200 iter->lifc.lifc_flags = 0;
202 iter->lifc.lifc_len = iter->bufsize6;
203 iter->lifc.lifc_buf = iter->buf6;
209 if (ioctl(iter->socket6, SIOCGLIFCONF, (char *)&iter->lifc)
256 if (iter->lifc.lifc_len + 2 * sizeof(struct LIFREQ)
257 < iter->bufsize6)
260 if (iter->bufsize6 >= IFCONF_BUFSIZE_MAX) {
272 isc_mem_put(iter->mctx, iter->buf6, iter->bufsize6);
274 iter->bufsize6 *= 2;
277 if (iter->lifc.lifc_len != 0)
278 iter->mode = 6;
282 isc_mem_put(iter->mctx, iter->buf6, iter->bufsize6);
283 iter->buf6 = NULL;
290 isc_interfaceiter_t *iter;
298 iter = isc_mem_get(mctx, sizeof(*iter));
299 if (iter == NULL)
302 iter->mctx = mctx;
303 iter->mode = 4;
304 iter->buf = NULL;
305 iter->pos = (unsigned int) -1;
307 iter->buf6 = NULL;
308 iter->pos6 = (unsigned int) -1;
309 iter->result6 = ISC_R_NOMORE;
310 iter->socket6 = -1;
311 iter->first6 = ISC_FALSE;
327 if ((iter->socket6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
339 result = iter->result6 = getbuf6(iter);
344 if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
356 result = getbuf4(iter);
365 iter->clua_context = -1;
366 iter->clua_done = ISC_TRUE;
369 iter->proc = fopen("/proc/net/if_inet6", "r");
370 iter->valid = ISC_R_FAILURE;
372 iter->result = ISC_R_FAILURE;
374 iter->magic = IFITER_MAGIC;
375 *iterp = iter;
379 if (iter->buf != NULL)
380 isc_mem_put(mctx, iter->buf, iter->bufsize);
381 (void) close(iter->socket);
385 if (iter->buf6 != NULL)
386 isc_mem_put(mctx, iter->buf6, iter->bufsize6);
388 if (iter->socket6 != -1)
389 (void) close(iter->socket6);
393 isc_mem_put(mctx, iter, sizeof(*iter));
405 internal_current_clusteralias(isc_interfaceiter_t *iter) {
407 if (clua_getaliasinfo(&iter->clua_sa, &ci) != CLUA_SUCCESS)
409 memset(&iter->current, 0, sizeof(iter->current));
410 iter->current.af = iter->clua_sa.sa_family;
411 memset(iter->current.name, 0, sizeof(iter->current.name));
412 sprintf(iter->current.name, "clua%d", ci.aliasid);
413 iter->current.flags = INTERFACE_F_UP;
414 get_inaddr(&iter->current.address, &ci.addr);
415 get_inaddr(&iter->current.netmask, &ci.netmask);
421 * Get information about the current interface to iter->current.
429 internal_current4(isc_interfaceiter_t *iter) {
441 REQUIRE(VALID_IFITER(iter));
443 if (iter->ifc.ifc_len == 0 ||
444 iter->pos == (unsigned int)iter->ifc.ifc_len) {
446 return (linux_if_inet6_current(iter));
452 INSIST( iter->pos < (unsigned int) iter->ifc.ifc_len);
454 ifrp = (struct ifreq *)((char *) iter->ifc.ifc_req + iter->pos);
467 memset(&iter->current, 0, sizeof(iter->current));
468 iter->current.af = family;
470 INSIST(sizeof(ifreq.ifr_name) <= sizeof(iter->current.name));
471 memset(iter->current.name, 0, sizeof(iter->current.name));
472 memcpy(iter->current.name, ifreq.ifr_name, sizeof(ifreq.ifr_name));
474 get_addr(family, &iter->current.address,
482 if (iter->current.address.type.in.s_addr == htonl(INADDR_ANY))
486 if (memcmp(&iter->current.address.type.in6, &in6addr_any,
496 iter->current.flags = 0;
503 if (ioctl(iter->socket, SIOCGIFFLAGS, (char *) &ifreq) < 0) {
512 iter->current.flags |= INTERFACE_F_UP;
516 iter->current.flags |= INTERFACE_F_POINTTOPOINT;
520 iter->current.flags |= INTERFACE_F_LOOPBACK;
527 memcpy(lifreq.lifr_name, iter->current.name, sizeof(lifreq.lifr_name));
528 memcpy(&lifreq.lifr_addr, &iter->current.address.type.in6,
529 sizeof(iter->current.address.type.in6));
531 if (ioctl(iter->socket, SIOCGLIFADDR, &lifreq) < 0) {
540 isc_netaddr_format(&iter->current.address, sabuf, sizeof(sabuf));
555 iter->current.netmask.family = family;
564 iter->current.netmask.type.in6.s6_addr[i] = (~0 << bits) & 0xff;
575 if ((iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0) {
581 if (ioctl(iter->socket, SIOCGIFDSTADDR, (char *)&ifreq)
593 get_addr(family, &iter->current.dstaddress,
608 if (ioctl(iter->socket, SIOCGIFNETMASK, (char *)&ifreq) < 0) {
618 get_addr(family, &iter->current.netmask,
625 internal_current6(isc_interfaceiter_t *iter) {
632 REQUIRE(VALID_IFITER(iter));
633 if (iter->result6 != ISC_R_SUCCESS)
634 return (iter->result6);
635 REQUIRE(iter->pos6 < (unsigned int) iter->lifc.lifc_len);
637 ifrp = (struct LIFREQ *)((char *) iter->lifc.lifc_req + iter->pos6);
650 memset(&iter->current, 0, sizeof(iter->current));
651 iter->current.af = family;
653 INSIST(sizeof(lifreq.lifr_name) <= sizeof(iter->current.name));
654 memset(iter->current.name, 0, sizeof(iter->current.name));
655 memcpy(iter->current.name, lifreq.lifr_name, sizeof(lifreq.lifr_name));
657 get_addr(family, &iter->current.address,
665 if (iter->current.address.type.in.s_addr == htonl(INADDR_ANY))
669 if (memcmp(&iter->current.address.type.in6, &in6addr_any,
679 iter->current.flags = 0;
682 fd = iter->socket6;
684 fd = iter->socket;
700 iter->current.flags |= INTERFACE_F_UP;
704 iter->current.flags |= INTERFACE_F_POINTTOPOINT;
708 iter->current.flags |= INTERFACE_F_LOOPBACK;
714 if ((iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0) {
732 get_addr(family, &iter->current.dstaddress,
753 iter->current.netmask.family = family;
757 iter->current.netmask.type.in6.s6_addr[i / 8] =
780 get_addr(family, &iter->current.netmask,
788 internal_current(isc_interfaceiter_t *iter) {
790 if (iter->mode == 6) {
791 iter->result6 = internal_current6(iter);
792 if (iter->result6 != ISC_R_NOMORE)
793 return (iter->result6);
797 if (!iter->clua_done)
798 return(internal_current_clusteralias(iter));
800 return (internal_current4(iter));
811 internal_next4(isc_interfaceiter_t *iter) {
816 if (iter->pos < (unsigned int) iter->ifc.ifc_len) {
818 ifrp = (struct ifreq *)((char *) iter->ifc.ifc_req + iter->pos);
821 iter->pos += sizeof(ifrp->ifr_name) +
825 iter->pos += sizeof(struct ifreq);
828 INSIST(iter->pos == (unsigned int) iter->ifc.ifc_len);
830 return (linux_if_inet6_next(iter));
840 internal_next6(isc_interfaceiter_t *iter) {
845 if (iter->result6 != ISC_R_SUCCESS && iter->result6 != ISC_R_IGNORE)
846 return (iter->result6);
848 REQUIRE(iter->pos6 < (unsigned int) iter->lifc.lifc_len);
851 ifrp = (struct LIFREQ *)((char *) iter->lifc.lifc_req + iter->pos6);
854 iter->pos6 += sizeof(ifrp->lifr_name) + ifrp->lifr_addr.sa_len;
857 iter->pos6 += sizeof(struct LIFREQ);
859 if (iter->pos6 >= (unsigned int) iter->lifc.lifc_len)
867 internal_next(isc_interfaceiter_t *iter) {
872 if (iter->mode == 6) {
873 iter->result6 = internal_next6(iter);
874 if (iter->result6 != ISC_R_NOMORE)
875 return (iter->result6);
876 if (iter->first6) {
877 iter->first6 = ISC_FALSE;
883 if (!iter->clua_done) {
884 clua_result = clua_getaliasaddress(&iter->clua_sa,
885 &iter->clua_context);
887 iter->clua_done = ISC_TRUE;
891 return (internal_next4(iter));
895 internal_destroy(isc_interfaceiter_t *iter) {
896 (void) close(iter->socket);
898 if (iter->socket6 != -1)
899 (void) close(iter->socket6);
900 if (iter->buf6 != NULL) {
901 isc_mem_put(iter->mctx, iter->buf6, iter->bufsize6);
905 if (iter->proc != NULL)
906 fclose(iter->proc);
911 void internal_first(isc_interfaceiter_t *iter) {
915 iter->pos = 0;
917 iter->pos6 = 0;
918 if (iter->result6 == ISC_R_NOMORE)
919 iter->result6 = ISC_R_SUCCESS;
920 iter->first6 = ISC_TRUE;
923 iter->clua_context = 0;
924 clua_result = clua_getaliasaddress(&iter->clua_sa,
925 &iter->clua_context);
926 iter->clua_done = ISC_TF(clua_result != CLUA_SUCCESS);
929 linux_if_inet6_first(iter);