Lines Matching full:iface
81 #include "iface.h"
88 struct iface *
98 struct iface *iface;
136 iface = NULL;
139 while (ptr < end && iface == NULL) {
145 iface = (struct iface *)malloc(sizeof *iface);
146 if (iface == NULL) {
151 iface->name = strdup(name);
152 iface->descr = NULL;
153 iface->index = ifm->ifm_index;
154 iface->flags = ifm->ifm_flags;
155 iface->mtu = 0;
156 iface->addrs = 0;
157 iface->addr = NULL;
166 if (iface != NULL && ifam->ifam_addrs & RTA_IFA) {
178 realloc(iface->addr, (iface->addrs + 1) * sizeof iface->addr[0]);
181 iface->addr = addr;
183 addr += iface->addrs;
184 iface->addrs++;
198 return iface;
254 log_Printf(LogWARN, "iface rm: ioctl(SIOCDIFADDR%s, %s): %s\n",
258 log_Printf(LogWARN, "iface rm: ioctl(SIOCDIFADDR%s, %s -> %s): %s\n",
341 log_Printf(LogWARN, "iface add: ioctl(SIOCAIFADDR%s, %s): %s\n",
345 log_Printf(LogWARN, "iface add: ioctl(SIOCAIFADDR%s, %s -> %s): %s\n",
354 iface_Name(struct iface *iface, const char *name)
361 log_Printf(LogWARN, "iface name: strdup failed: %s\n", strerror(errno));
366 log_Printf(LogERROR, "iface name: socket(): %s\n", strerror(errno));
371 strlcpy(ifr.ifr_name, iface->name, sizeof(ifr.ifr_name));
374 log_Printf(LogWARN, "iface name: ioctl(SIOCSIFNAME, %s -> %s): %s\n",
380 free(iface->name);
381 iface->name = newname;
390 struct iface *iface;
397 log_Printf(LogERROR, "iface descr: sysctl failed: %s\n", strerror(errno));
402 log_Printf(LogERROR, "iface descr: sysctl net.ifdescr_maxlen < 1\n");
408 log_Printf(LogERROR, "iface descr: malloc failed: %s\n", strerror(errno));
422 log_Printf(LogERROR, "iface descr: description exceeds maximum (%d)\n",
429 log_Printf(LogERROR, "iface descr: socket(): %s\n", strerror(errno));
434 iface = arg->bundle->iface;
435 strlcpy(ifr.ifr_name, iface->name, sizeof(ifr.ifr_name));
439 log_Printf(LogWARN, "iface descr: ioctl(SIOCSIFDESCR, %s): %s\n",
445 free(iface->descr);
446 iface->descr = descr;
452 iface_Clear(struct iface *iface, struct ncp *ncp, int family, int how)
457 if (iface->addrs) {
460 for (n = 0; n < iface->addrs; n++) {
461 af = ncprange_family(&iface->addr[n].ifa);
463 if (!iface->addr[n].system && (how & IFACE_SYSTEM))
489 else if (iface_addr_Zap(iface->name, iface->addr + n, *s)) {
490 ncp_IfaceAddrDeleted(ncp, iface->addr + n);
491 bcopy(iface->addr + n + 1, iface->addr + n,
492 (iface->addrs - n - 1) * sizeof *iface->addr);
493 iface->addrs--;
509 iface_Add(struct iface *iface, struct ncp *ncp, const struct ncprange *ifa,
524 for (n = 0; n < iface->addrs; n++) {
525 if (ncprange_contains(&iface->addr[n].ifa, &ncplocal) ||
526 ncpaddr_equal(&iface->addr[n].peer, peer)) {
533 if (ncprange_equal(&iface->addr[n].ifa, ifa) &&
534 ncpaddr_equal(&iface->addr[n].peer, peer)) {
536 ncp_IfaceAddrAdded(ncp, iface->addr + n);
540 removed = iface_addr_Zap(iface->name, iface->addr + n, s);
542 ncp_IfaceAddrDeleted(ncp, iface->addr + n);
543 ncprange_copy(&iface->addr[n].ifa, ifa);
544 ncpaddr_copy(&iface->addr[n].peer, peer);
545 if (!iface_addr_Add(iface->name, iface->addr + n, s)) {
547 bcopy(iface->addr + n + 1, iface->addr + n,
548 (iface->addrs - n - 1) * sizeof *iface->addr);
549 iface->addrs--;
556 ncp_IfaceAddrAdded(ncp, iface->addr + n);
562 (iface->addr, (iface->addrs + 1) * sizeof iface->addr[0]);
568 iface->addr = addr;
573 if (!iface_addr_Add(iface->name, &newaddr, s)) {
581 bcopy(iface->addr, iface->addr + 1, iface->addrs * sizeof *iface->addr);
583 n = iface->addrs;
585 iface->addrs++;
586 memcpy(iface->addr + n, &newaddr, sizeof(*iface->addr));
589 ncp_IfaceAddrAdded(ncp, iface->addr + n);
595 iface_Delete(struct iface *iface, struct ncp *ncp, const struct ncpaddr *del)
606 for (n = res = 0; n < iface->addrs; n++) {
607 ncprange_getaddr(&iface->addr[n].ifa, &found);
609 if (iface_addr_Zap(iface->name, iface->addr + n, s)) {
610 ncp_IfaceAddrDeleted(ncp, iface->addr + n);
611 bcopy(iface->addr + n + 1, iface->addr + n,
612 (iface->addrs - n - 1) * sizeof *iface->addr);
613 iface->addrs--;
688 iface_Free(struct iface *iface)
690 free(iface->name);
691 free(iface->descr);
692 free(iface->addr);
693 free(iface);
697 iface_Destroy(struct iface *iface)
702 if (iface != NULL) {
706 strlcpy(ifr.ifr_name, iface->name, sizeof(ifr.ifr_name));
709 iface->name, strerror(errno));
711 iface_Free(iface);
743 struct iface *iface = arg->bundle->iface, *current;
751 current = iface_Create(iface->name);
752 flags = iface->flags = current->flags;
755 prompt_Printf(arg->prompt, "%s (idx %d) <", iface->name, iface->index);
758 prompt_Printf(arg->prompt, "%s%s", flags == iface->flags ? "" : ",",
765 prompt_Printf(arg->prompt, "%s0x%x", flags == iface->flags ? "" : ",",
769 prompt_Printf(arg->prompt, "> mtu %lu has %d address%s:\n", iface->mtu,
770 iface->addrs, iface->addrs == 1 ? "" : "es");
772 for (f = 0; f < iface->addrs; f++) {
773 ncprange_getaddr(&iface->addr[f].ifa, &ncpaddr);
774 switch (ncprange_family(&iface->addr[f].ifa)) {
777 if (ncpaddr_family(&iface->addr[f].peer) == AF_UNSPEC)
780 prompt_Printf(arg->prompt, "%s", ncpaddr_ntoa(&iface->addr[f].peer));
781 ncprange_getip4mask(&iface->addr[f].ifa, &mask);
788 if (ncpaddr_family(&iface->addr[f].peer) != AF_UNSPEC)
790 ncpaddr_ntoa(&iface->addr[f].peer));
791 ncprange_getwidth(&iface->addr[f].ifa, &width);
792 if (ncpaddr_family(&iface->addr[f].peer) == AF_UNSPEC)
794 if ((scopeid = ncprange_scopeid(&iface->addr[f].ifa)) != -1)