Lines Matching refs:iface

84 #include "iface.h"
91 struct iface *
101 struct iface *iface;
139 iface = NULL;
142 while (ptr < end && iface == NULL) {
148 iface = (struct iface *)malloc(sizeof *iface);
149 if (iface == NULL) {
153 iface->name = strdup(name);
154 iface->descr = NULL;
155 iface->index = ifm->ifm_index;
156 iface->flags = ifm->ifm_flags;
157 iface->mtu = 0;
158 iface->addrs = 0;
159 iface->addr = NULL;
168 if (iface != NULL && ifam->ifam_addrs & RTA_IFA) {
180 realloc(iface->addr, (iface->addrs + 1) * sizeof iface->addr[0]);
183 iface->addr = addr;
185 addr += iface->addrs;
186 iface->addrs++;
200 return iface;
276 log_Printf(LogWARN, "iface rm: ioctl(SIOCDIFADDR%s, %s): %s\n",
280 log_Printf(LogWARN, "iface rm: ioctl(SIOCDIFADDR%s, %s -> %s): %s\n",
361 log_Printf(LogWARN, "iface add: ioctl(SIOCAIFADDR%s, %s): %s\n",
365 log_Printf(LogWARN, "iface add: ioctl(SIOCAIFADDR%s, %s -> %s): %s\n",
374 iface_Name(struct iface *iface, const char *name)
381 log_Printf(LogWARN, "iface name: strdup failed: %s\n", strerror(errno));
386 log_Printf(LogERROR, "iface name: socket(): %s\n", strerror(errno));
391 strlcpy(ifr.ifr_name, iface->name, sizeof(ifr.ifr_name));
394 log_Printf(LogWARN, "iface name: ioctl(SIOCSIFNAME, %s -> %s): %s\n",
400 free(iface->name);
401 iface->name = newname;
410 struct iface *iface;
417 log_Printf(LogERROR, "iface descr: sysctl failed: %s\n", strerror(errno));
422 log_Printf(LogERROR, "iface descr: sysctl net.ifdescr_maxlen < 1\n");
428 log_Printf(LogERROR, "iface descr: malloc failed: %s\n", strerror(errno));
442 log_Printf(LogERROR, "iface descr: description exceeds maximum (%d)\n",
449 log_Printf(LogERROR, "iface descr: socket(): %s\n", strerror(errno));
454 iface = arg->bundle->iface;
455 strlcpy(ifr.ifr_name, iface->name, sizeof(ifr.ifr_name));
459 log_Printf(LogWARN, "iface descr: ioctl(SIOCSIFDESCR, %s): %s\n",
465 free(iface->descr);
466 iface->descr = descr;
472 iface_Clear(struct iface *iface, struct ncp *ncp, int family, int how)
477 if (iface->addrs) {
480 for (n = 0; n < iface->addrs; n++) {
481 af = ncprange_family(&iface->addr[n].ifa);
483 if (!iface->addr[n].system && (how & IFACE_SYSTEM))
509 else if (iface_addr_Zap(iface->name, iface->addr + n, *s)) {
510 ncp_IfaceAddrDeleted(ncp, iface->addr + n);
511 bcopy(iface->addr + n + 1, iface->addr + n,
512 (iface->addrs - n - 1) * sizeof *iface->addr);
513 iface->addrs--;
529 iface_Add(struct iface *iface, struct ncp *ncp, const struct ncprange *ifa,
544 for (n = 0; n < iface->addrs; n++) {
545 if (ncprange_contains(&iface->addr[n].ifa, &ncplocal) ||
546 ncpaddr_equal(&iface->addr[n].peer, peer)) {
553 if (ncprange_equal(&iface->addr[n].ifa, ifa) &&
554 ncpaddr_equal(&iface->addr[n].peer, peer)) {
556 ncp_IfaceAddrAdded(ncp, iface->addr + n);
560 removed = iface_addr_Zap(iface->name, iface->addr + n, s);
562 ncp_IfaceAddrDeleted(ncp, iface->addr + n);
563 ncprange_copy(&iface->addr[n].ifa, ifa);
564 ncpaddr_copy(&iface->addr[n].peer, peer);
565 if (!iface_addr_Add(iface->name, iface->addr + n, s)) {
567 bcopy(iface->addr + n + 1, iface->addr + n,
568 (iface->addrs - n - 1) * sizeof *iface->addr);
569 iface->addrs--;
576 ncp_IfaceAddrAdded(ncp, iface->addr + n);
582 (iface->addr, (iface->addrs + 1) * sizeof iface->addr[0]);
588 iface->addr = addr;
593 if (!iface_addr_Add(iface->name, &newaddr, s)) {
601 bcopy(iface->addr, iface->addr + 1, iface->addrs * sizeof *iface->addr);
603 n = iface->addrs;
605 iface->addrs++;
606 memcpy(iface->addr + n, &newaddr, sizeof(*iface->addr));
609 ncp_IfaceAddrAdded(ncp, iface->addr + n);
615 iface_Delete(struct iface *iface, struct ncp *ncp, const struct ncpaddr *del)
626 for (n = res = 0; n < iface->addrs; n++) {
627 ncprange_getaddr(&iface->addr[n].ifa, &found);
629 if (iface_addr_Zap(iface->name, iface->addr + n, s)) {
630 ncp_IfaceAddrDeleted(ncp, iface->addr + n);
631 bcopy(iface->addr + n + 1, iface->addr + n,
632 (iface->addrs - n - 1) * sizeof *iface->addr);
633 iface->addrs--;
708 iface_Free(struct iface *iface)
710 free(iface->name);
711 free(iface->descr);
712 free(iface->addr);
713 free(iface);
717 iface_Destroy(struct iface *iface)
722 if (iface != NULL) {
726 strlcpy(ifr.ifr_name, iface->name, sizeof(ifr.ifr_name));
729 iface->name, strerror(errno));
731 iface_Free(iface);
763 struct iface *iface = arg->bundle->iface, *current;
771 current = iface_Create(iface->name);
772 flags = iface->flags = current->flags;
775 prompt_Printf(arg->prompt, "%s (idx %d) <", iface->name, iface->index);
778 prompt_Printf(arg->prompt, "%s%s", flags == iface->flags ? "" : ",",
785 prompt_Printf(arg->prompt, "%s0x%x", flags == iface->flags ? "" : ",",
789 prompt_Printf(arg->prompt, "> mtu %lu has %d address%s:\n", iface->mtu,
790 iface->addrs, iface->addrs == 1 ? "" : "es");
792 for (f = 0; f < iface->addrs; f++) {
793 ncprange_getaddr(&iface->addr[f].ifa, &ncpaddr);
794 switch (ncprange_family(&iface->addr[f].ifa)) {
797 if (ncpaddr_family(&iface->addr[f].peer) == AF_UNSPEC)
800 prompt_Printf(arg->prompt, "%s", ncpaddr_ntoa(&iface->addr[f].peer));
801 ncprange_getip4mask(&iface->addr[f].ifa, &mask);
808 if (ncpaddr_family(&iface->addr[f].peer) != AF_UNSPEC)
810 ncpaddr_ntoa(&iface->addr[f].peer));
811 ncprange_getwidth(&iface->addr[f].ifa, &width);
812 if (ncpaddr_family(&iface->addr[f].peer) == AF_UNSPEC)
814 if ((scopeid = ncprange_scopeid(&iface->addr[f].ifa)) != -1)