Lines Matching refs:ap

405 	const struct ipv6_addr *ap;  in ipv6_makeaddr()  local
429 if ((ap = ipv6_linklocal(ifp)) == NULL) { in ipv6_makeaddr()
438 addr->s6_addr32[2] = ap->addr.s6_addr32[2]; in ipv6_makeaddr()
439 addr->s6_addr32[3] = ap->addr.s6_addr32[3]; in ipv6_makeaddr()
586 struct ipv6_addr *ap; in ipv6_checkaddrflags() local
589 ap = arg; in ipv6_checkaddrflags()
590 ifa_flags = if_addrflags6(&ap->addr, ap->iface); in ipv6_checkaddrflags()
592 logger(ap->iface->ctx, LOG_ERR, in ipv6_checkaddrflags()
593 "%s: if_addrflags6: %m", ap->iface->name); in ipv6_checkaddrflags()
595 ipv6_handleifa(ap->iface->ctx, RTM_NEWADDR, in ipv6_checkaddrflags()
596 ap->iface->ctx->ifaces, ap->iface->name, in ipv6_checkaddrflags()
597 &ap->addr, ap->prefix_len, ifa_flags); in ipv6_checkaddrflags()
602 eloop_timeout_add_tv(ap->iface->ctx->eloop, &tv, in ipv6_checkaddrflags()
603 ipv6_checkaddrflags, ap); in ipv6_checkaddrflags()
614 struct ipv6_addr *ap; in ipv6_deleteaddr() local
623 TAILQ_FOREACH(ap, &state->addrs, next) { in ipv6_deleteaddr()
624 if (IN6_ARE_ADDR_EQUAL(&ap->addr, &ia->addr)) { in ipv6_deleteaddr()
625 TAILQ_REMOVE(&state->addrs, ap, next); in ipv6_deleteaddr()
626 ipv6_freeaddr(ap); in ipv6_deleteaddr()
634 ipv6_addaddr(struct ipv6_addr *ap, const struct timespec *now) in ipv6_addaddr() argument
643 TAILQ_FOREACH(ifp, ap->iface->ctx->ifaces, next) { in ipv6_addaddr()
644 if (ifp == ap->iface || strcmp(ifp->name, ap->iface->name) == 0) in ipv6_addaddr()
650 if (IN6_ARE_ADDR_EQUAL(&nap->addr, &ap->addr)) { in ipv6_addaddr()
657 if (!(ap->flags & IPV6_AF_DADCOMPLETED) && in ipv6_addaddr()
658 ipv6_iffindaddr(ap->iface, &ap->addr)) in ipv6_addaddr()
659 ap->flags |= IPV6_AF_DADCOMPLETED; in ipv6_addaddr()
661 logger(ap->iface->ctx, ap->flags & IPV6_AF_NEW ? LOG_INFO : LOG_DEBUG, in ipv6_addaddr()
662 "%s: adding address %s", ap->iface->name, ap->saddr); in ipv6_addaddr()
663 if (ap->prefix_pltime == ND6_INFINITE_LIFETIME && in ipv6_addaddr()
664 ap->prefix_vltime == ND6_INFINITE_LIFETIME) in ipv6_addaddr()
665 logger(ap->iface->ctx, LOG_DEBUG, in ipv6_addaddr()
667 ap->iface->name); in ipv6_addaddr()
668 else if (ap->prefix_pltime == ND6_INFINITE_LIFETIME) in ipv6_addaddr()
669 logger(ap->iface->ctx, LOG_DEBUG, in ipv6_addaddr()
671 ap->iface->name, ap->prefix_vltime); in ipv6_addaddr()
672 else if (ap->prefix_vltime == ND6_INFINITE_LIFETIME) in ipv6_addaddr()
673 logger(ap->iface->ctx, LOG_DEBUG, in ipv6_addaddr()
675 ap->iface->name, ap->prefix_pltime); in ipv6_addaddr()
677 logger(ap->iface->ctx, LOG_DEBUG, in ipv6_addaddr()
679 ap->iface->name, ap->prefix_pltime, ap->prefix_vltime); in ipv6_addaddr()
682 pltime = ap->prefix_pltime; in ipv6_addaddr()
683 vltime = ap->prefix_vltime; in ipv6_addaddr()
684 if (timespecisset(&ap->acquired) && in ipv6_addaddr()
685 (ap->prefix_pltime != ND6_INFINITE_LIFETIME || in ipv6_addaddr()
686 ap->prefix_vltime != ND6_INFINITE_LIFETIME)) in ipv6_addaddr()
694 timespecsub(now, &ap->acquired, &n); in ipv6_addaddr()
695 if (ap->prefix_pltime != ND6_INFINITE_LIFETIME) in ipv6_addaddr()
696 ap->prefix_pltime -= (uint32_t)n.tv_sec; in ipv6_addaddr()
697 if (ap->prefix_vltime != ND6_INFINITE_LIFETIME) in ipv6_addaddr()
698 ap->prefix_vltime -= (uint32_t)n.tv_sec; in ipv6_addaddr()
701 if (if_addaddress6(ap) == -1) { in ipv6_addaddr()
702 logger(ap->iface->ctx, LOG_ERR, "if_addaddress6: %m"); in ipv6_addaddr()
704 logger(ap->iface->ctx, LOG_DEBUG, in ipv6_addaddr()
707 ap->iface->name, ap->prefix_pltime, ap->prefix_vltime); in ipv6_addaddr()
710 ap->prefix_pltime = pltime; in ipv6_addaddr()
711 ap->prefix_vltime = vltime; in ipv6_addaddr()
717 if (ap->flags & IPV6_AF_TEMPORARY && in ipv6_addaddr()
718 ap->prefix_pltime && in ipv6_addaddr()
719 ap->prefix_vltime && in ipv6_addaddr()
720 ap->iface->options->options & DHCPCD_IPV6RA_OWN && in ipv6_addaddr()
721 ip6_use_tempaddr(ap->iface->name)) in ipv6_addaddr()
722 eloop_timeout_add_sec(ap->iface->ctx->eloop, in ipv6_addaddr()
723 (time_t)ap->prefix_pltime - REGEN_ADVANCE, in ipv6_addaddr()
724 ipv6_regentempaddr, ap); in ipv6_addaddr()
728 ap->prefix_pltime = pltime; in ipv6_addaddr()
729 ap->prefix_vltime = vltime; in ipv6_addaddr()
731 ap->flags &= ~IPV6_AF_NEW; in ipv6_addaddr()
732 ap->flags |= IPV6_AF_ADDED; in ipv6_addaddr()
733 if (ap->delegating_iface) in ipv6_addaddr()
734 ap->flags |= IPV6_AF_DELEGATED; in ipv6_addaddr()
737 eloop_timeout_delete(ap->iface->ctx->eloop, in ipv6_addaddr()
738 ipv6_checkaddrflags, ap); in ipv6_addaddr()
739 if (!(ap->flags & IPV6_AF_DADCOMPLETED)) { in ipv6_addaddr()
743 eloop_timeout_add_tv(ap->iface->ctx->eloop, in ipv6_addaddr()
744 &tv, ipv6_checkaddrflags, ap); in ipv6_addaddr()
781 struct ipv6_addr *ap, *apn, *apf; in ipv6_addaddrs() local
787 TAILQ_FOREACH_SAFE(ap, addrs, next, apn) { in ipv6_addaddrs()
788 if (ap->prefix_vltime == 0) { in ipv6_addaddrs()
789 if (ap->flags & IPV6_AF_ADDED) { in ipv6_addaddrs()
790 ipv6_deleteaddr(ap); in ipv6_addaddrs()
793 eloop_q_timeout_delete(ap->iface->ctx->eloop, in ipv6_addaddrs()
794 0, NULL, ap); in ipv6_addaddrs()
795 if (ap->flags & IPV6_AF_REQUEST) { in ipv6_addaddrs()
796 ap->flags &= ~IPV6_AF_ADDED; in ipv6_addaddrs()
798 TAILQ_REMOVE(addrs, ap, next); in ipv6_addaddrs()
799 ipv6_freeaddr(ap); in ipv6_addaddrs()
801 } else if (!(ap->flags & IPV6_AF_STALE) && in ipv6_addaddrs()
802 !IN6_IS_ADDR_UNSPECIFIED(&ap->addr)) in ipv6_addaddrs()
804 apf = ipv6_findaddr(ap->iface->ctx, in ipv6_addaddrs()
805 &ap->addr, IPV6_AF_ADDED); in ipv6_addaddrs()
806 if (apf && apf->iface != ap->iface && in ipv6_addaddrs()
807 strcmp(apf->iface->name, ap->iface->name)) in ipv6_addaddrs()
809 if (apf->iface->metric <= ap->iface->metric) { in ipv6_addaddrs()
812 ap->iface->name, in ipv6_addaddrs()
813 ap->saddr, in ipv6_addaddrs()
820 ap->saddr, in ipv6_addaddrs()
821 ap->iface->name); in ipv6_addaddrs()
830 if (ap->flags & IPV6_AF_NEW) in ipv6_addaddrs()
834 ipv6_addaddr(ap, &now); in ipv6_addaddrs()
842 ipv6_freeaddr(struct ipv6_addr *ap) in ipv6_freeaddr() argument
845 eloop_q_timeout_delete(ap->iface->ctx->eloop, 0, NULL, ap); in ipv6_freeaddr()
846 free(ap); in ipv6_freeaddr()
853 struct ipv6_addr *ap, *apn, *apf; in ipv6_freedrop_addrs() local
857 TAILQ_FOREACH_SAFE(ap, addrs, next, apn) { in ipv6_freedrop_addrs()
858 if (ifd && ap->delegating_iface != ifd) in ipv6_freedrop_addrs()
861 TAILQ_REMOVE(addrs, ap, next); in ipv6_freedrop_addrs()
862 if (drop && ap->flags & IPV6_AF_ADDED && in ipv6_freedrop_addrs()
863 (ap->iface->options->options & in ipv6_freedrop_addrs()
868 TAILQ_REMOVE(addrs, ap, next); in ipv6_freedrop_addrs()
870 apf = ipv6_findaddr(ap->iface->ctx, &ap->addr, 0); in ipv6_freedrop_addrs()
872 (apf->iface != ap->iface && in ipv6_freedrop_addrs()
873 strcmp(apf->iface->name, ap->iface->name))) in ipv6_freedrop_addrs()
874 ipv6_deleteaddr(ap); in ipv6_freedrop_addrs()
875 if (!(ap->iface->options->options & in ipv6_freedrop_addrs()
883 ipv6_freeaddr(ap); in ipv6_freedrop_addrs()
886 ipv6_freeaddr(ap); in ipv6_freedrop_addrs()
922 struct ipv6_addr *ap; in ipv6_handleifa() local
952 TAILQ_FOREACH(ap, &state->addrs, next) { in ipv6_handleifa()
953 if (IN6_ARE_ADDR_EQUAL(&ap->addr, addr)) in ipv6_handleifa()
959 if (ap) { in ipv6_handleifa()
960 TAILQ_REMOVE(&state->addrs, ap, next); in ipv6_handleifa()
961 ipv6_freeaddr(ap); in ipv6_handleifa()
965 if (ap == NULL) { in ipv6_handleifa()
969 ap = calloc(1, sizeof(*ap)); in ipv6_handleifa()
970 ap->iface = ifp; in ipv6_handleifa()
971 ap->addr = *addr; in ipv6_handleifa()
972 ap->prefix_len = prefix_len; in ipv6_handleifa()
973 ipv6_makeprefix(&ap->prefix, &ap->addr, in ipv6_handleifa()
974 ap->prefix_len); in ipv6_handleifa()
978 snprintf(ap->saddr, sizeof(ap->saddr), in ipv6_handleifa()
980 if (if_getlifetime6(ap) == -1) { in ipv6_handleifa()
989 ap->prefix_pltime = 0; in ipv6_handleifa()
990 ap->prefix_vltime = in ipv6_handleifa()
1003 ap->acquired = ap->created; in ipv6_handleifa()
1005 ap, next); in ipv6_handleifa()
1007 ap->addr_flags = flags; in ipv6_handleifa()
1009 if (ap->addr_flags & IN6_IFF_TEMPORARY) in ipv6_handleifa()
1010 ap->flags |= IPV6_AF_TEMPORARY; in ipv6_handleifa()
1012 if (IN6_IS_ADDR_LINKLOCAL(&ap->addr)) { in ipv6_handleifa()
1014 if (ap->addr_flags & IN6_IFF_TENTATIVE) { in ipv6_handleifa()
1019 ap->iface->ctx->eloop, in ipv6_handleifa()
1020 &tv, ipv6_checkaddrflags, ap); in ipv6_handleifa()
1025 if (!(ap->addr_flags & IN6_IFF_NOTUSEABLE)) { in ipv6_handleifa()
1048 const struct ipv6_addr *ap; in ipv6_iffindaddr() local
1052 TAILQ_FOREACH(ap, &state->addrs, next) { in ipv6_iffindaddr()
1054 if (IN6_IS_ADDR_LINKLOCAL(&ap->addr) && in ipv6_iffindaddr()
1055 !(ap->addr_flags & IN6_IFF_NOTUSEABLE)) in ipv6_iffindaddr()
1056 return ap; in ipv6_iffindaddr()
1058 if (IN6_ARE_ADDR_EQUAL(&ap->addr, addr) && in ipv6_iffindaddr()
1059 !(ap->addr_flags & IN6_IFF_TENTATIVE)) in ipv6_iffindaddr()
1060 return ap; in ipv6_iffindaddr()
1095 struct ipv6_addr *ap; in ipv6_newlinklocal() local
1097 ap = calloc(1, sizeof(*ap)); in ipv6_newlinklocal()
1098 if (ap != NULL) { in ipv6_newlinklocal()
1099 ap->iface = ifp; in ipv6_newlinklocal()
1100 ap->prefix.s6_addr32[0] = htonl(0xfe800000); in ipv6_newlinklocal()
1101 ap->prefix.s6_addr32[1] = 0; in ipv6_newlinklocal()
1102 ap->prefix_len = 64; in ipv6_newlinklocal()
1103 ap->dadcounter = 0; in ipv6_newlinklocal()
1104 ap->prefix_pltime = ND6_INFINITE_LIFETIME; in ipv6_newlinklocal()
1105 ap->prefix_vltime = ND6_INFINITE_LIFETIME; in ipv6_newlinklocal()
1106 ap->flags = IPV6_AF_NEW; in ipv6_newlinklocal()
1107 ap->addr_flags = IN6_IFF_TENTATIVE; in ipv6_newlinklocal()
1109 return ap; in ipv6_newlinklocal()
1120 struct ipv6_addr *ap, *ap2; in ipv6_addlinklocal() local
1149 ap = ipv6_newlinklocal(ifp); in ipv6_addlinklocal()
1150 if (ap == NULL) in ipv6_addlinklocal()
1156 if (ipv6_makestableprivate(&ap->addr, in ipv6_addlinklocal()
1157 &ap->prefix, ap->prefix_len, ifp, &dadcounter) == -1) in ipv6_addlinklocal()
1159 free(ap); in ipv6_addlinklocal()
1162 ap->dadcounter = dadcounter; in ipv6_addlinklocal()
1164 memcpy(ap->addr.s6_addr, ap->prefix.s6_addr, 8); in ipv6_addlinklocal()
1168 ap->addr.s6_addr[ 8] = ifp->hwaddr[0]; in ipv6_addlinklocal()
1169 ap->addr.s6_addr[ 9] = ifp->hwaddr[1]; in ipv6_addlinklocal()
1170 ap->addr.s6_addr[10] = ifp->hwaddr[2]; in ipv6_addlinklocal()
1171 ap->addr.s6_addr[11] = 0xff; in ipv6_addlinklocal()
1172 ap->addr.s6_addr[12] = 0xfe; in ipv6_addlinklocal()
1173 ap->addr.s6_addr[13] = ifp->hwaddr[3]; in ipv6_addlinklocal()
1174 ap->addr.s6_addr[14] = ifp->hwaddr[4]; in ipv6_addlinklocal()
1175 ap->addr.s6_addr[15] = ifp->hwaddr[5]; in ipv6_addlinklocal()
1177 memcpy(&ap->addr.s6_addr[8], ifp->hwaddr, 8); in ipv6_addlinklocal()
1179 free(ap); in ipv6_addlinklocal()
1187 if (EUI64_GROUP(&ap->addr)) { in ipv6_addlinklocal()
1188 free(ap); in ipv6_addlinklocal()
1192 EUI64_TO_IFID(&ap->addr); in ipv6_addlinklocal()
1197 if (IN6_ARE_ADDR_EQUAL(&ap->addr, &ap2->addr)) { in ipv6_addlinklocal()
1205 free(ap); in ipv6_addlinklocal()
1213 free(ap); in ipv6_addlinklocal()
1219 inet_ntop(AF_INET6, &ap->addr, ap->saddr, sizeof(ap->saddr)); in ipv6_addlinklocal()
1220 TAILQ_INSERT_TAIL(&state->addrs, ap, next); in ipv6_addlinklocal()
1221 ipv6_addaddr(ap, NULL); in ipv6_addlinklocal()
1230 const struct ipv6_addr *ap; in ipv6_start() local
1239 TAILQ_FOREACH(ap, &state->addrs, next) { in ipv6_start()
1240 if (IN6_IS_ADDR_LINKLOCAL(&ap->addr) && in ipv6_start()
1241 !(ap->addr_flags & IN6_IFF_DUPLICATED)) in ipv6_start()
1249 ap = NULL; in ipv6_start()
1251 if (ap == NULL && ipv6_addlinklocal(ifp) == -1) in ipv6_start()
1304 struct ipv6_addr *ap, *apn; in ipv6_handleifa_addrs() local
1309 TAILQ_FOREACH_SAFE(ap, addrs, next, apn) { in ipv6_handleifa_addrs()
1310 if (!IN6_ARE_ADDR_EQUAL(addr, &ap->addr)) { in ipv6_handleifa_addrs()
1311 if (ap->flags & IPV6_AF_ADDED && in ipv6_handleifa_addrs()
1312 !(ap->flags & IPV6_AF_DADCOMPLETED)) in ipv6_handleifa_addrs()
1318 if (ap->flags & IPV6_AF_ADDED) { in ipv6_handleifa_addrs()
1319 logger(ap->iface->ctx, LOG_INFO, in ipv6_handleifa_addrs()
1321 ap->iface->name, ap->saddr); in ipv6_handleifa_addrs()
1322 ap->flags &= ~IPV6_AF_ADDED; in ipv6_handleifa_addrs()
1329 if ((ap->flags & IPV6_AF_DADCOMPLETED) == 0) { in ipv6_handleifa_addrs()
1332 ap->flags |= IPV6_AF_DUPLICATED; in ipv6_handleifa_addrs()
1334 ap->flags &= ~IPV6_AF_DUPLICATED; in ipv6_handleifa_addrs()
1335 if (ap->dadcallback) in ipv6_handleifa_addrs()
1336 ap->dadcallback(ap); in ipv6_handleifa_addrs()
1339 ap->flags |= IPV6_AF_DADCOMPLETED; in ipv6_handleifa_addrs()
1491 const struct ipv6_addr *ap; in ipv6_createtempaddr() local
1529 TAILQ_FOREACH(ap, &cstate->addrs, next) { in ipv6_createtempaddr()
1530 if (IN6_ARE_ADDR_EQUAL(&ap->addr, &addr)) { in ipv6_createtempaddr()
1600 struct ipv6_addr *ap, *first; in ipv6_settemptime() local
1604 TAILQ_FOREACH_REVERSE(ap, &state->addrs, ipv6_addrhead, next) { in ipv6_settemptime()
1605 if (ap->flags & IPV6_AF_TEMPORARY && in ipv6_settemptime()
1606 ap->prefix_pltime && in ipv6_settemptime()
1607 IN6_ARE_ADDR_EQUAL(&ia->prefix, &ap->prefix)) in ipv6_settemptime()
1612 if (ap->prefix_pltime - in ipv6_settemptime()
1614 ap->acquired.tv_sec) in ipv6_settemptime()
1618 return ap; in ipv6_settemptime()
1621 if (!(ap->flags & IPV6_AF_ADDED)) in ipv6_settemptime()
1622 ap->flags |= IPV6_AF_NEW | IPV6_AF_AUTOCONF; in ipv6_settemptime()
1623 ap->flags &= ~IPV6_AF_STALE; in ipv6_settemptime()
1628 ap->prefix_pltime = 0; in ipv6_settemptime()
1633 ipv6_regen_desync(ap->iface, 0); in ipv6_settemptime()
1639 max = ap->created.tv_sec + in ipv6_settemptime()
1640 ip6_temp_preferred_lifetime(ap->iface->name) - in ipv6_settemptime()
1643 ap->prefix_pltime = ia->prefix_pltime; in ipv6_settemptime()
1645 ap->prefix_pltime = in ipv6_settemptime()
1650 max = ap->created.tv_sec + in ipv6_settemptime()
1651 ip6_temp_valid_lifetime(ap->iface->name); in ipv6_settemptime()
1653 ap->prefix_vltime = ia->prefix_vltime; in ipv6_settemptime()
1655 ap->prefix_vltime = in ipv6_settemptime()
1659 ap->acquired = ia->acquired; in ipv6_settemptime()
1666 return ap; in ipv6_settemptime()
1668 first = ap; in ipv6_settemptime()