Lines Matching refs:ifa

239 in6_ifloop_request(int cmd, struct ifaddr *ifa)
255 * (probably implicitly) set nd6_rtrequest() to ifa->ifa_rtrequest,
260 e = rtrequest_locked(cmd, ifa->ifa_addr, ifa->ifa_addr,
267 ip6_sprintf(&((struct in6_ifaddr *)ifa)->ia_addr.sin6_addr),
280 if (cmd == RTM_ADD && nrt && ifa != nrt->rt_ifa) {
281 rtsetifa(nrt, ifa);
291 rt_newaddrmsg(cmd, ifa, e, nrt);
312 in6_ifaddloop(struct ifaddr *ifa)
320 rt = rtalloc1(ifa->ifa_addr, 0, 0);
329 in6_ifloop_request(RTM_ADD, ifa);
341 in6_ifremloop(struct ifaddr *ifa)
358 * Delete the entry only if exact one ifa exists. More than one ifa
366 if (IN6_ARE_ADDR_EQUAL(IFA_IN6(ifa), &ia->ia_addr.sin6_addr)) {
387 rt = rtalloc1(ifa->ifa_addr, 0, 0);
394 in6_ifloop_request(RTM_DELETE, ifa);
504 #define ifa2ia6(ifa) ((struct in6_ifaddr *)(void *)(ifa))
1457 struct ifaddr *ifa = NULL;
1641 ifa = &ia->ia_ifa;
1642 IFA_LOCK(ifa);
1661 IFA_UNLOCK(ifa);
1677 IFA_UNLOCK(ifa);
1685 IFA_LOCK(ifa);
1689 IFA_LOCK_ASSERT_HELD(ifa);
1712 IFA_UNLOCK(ifa);
1717 IFA_LOCK(ifa);
1750 IFA_UNLOCK(ifa);
1752 IFA_REMREF(ifa);
1759 IFA_LOCK_ASSERT_HELD(ifa);
1765 IFA_UNLOCK(ifa);
1800 IFA_REMREF(ifa);
1807 IFA_LOCK_SPIN(ifa);
1809 IFA_UNLOCK(ifa);
1864 IFA_LOCK_SPIN(ifa);
1866 IFA_UNLOCK(ifa);
1893 IFA_LOCK_SPIN(ifa);
1896 IFA_UNLOCK(ifa);
1939 IFA_LOCK(ifa);
1944 IFA_LOCK_ASSERT_HELD(ifa);
1966 IFA_UNLOCK(ifa);
1996 IFA_UNLOCK(ifa);
2000 if (ifa != NULL)
2001 IFA_REMREF(ifa);
2022 in6_purgeaddr(struct ifaddr *ifa)
2024 struct ifnet *ifp = ifa->ifa_ifp;
2025 struct in6_ifaddr *ia = (struct in6_ifaddr *) ifa;
2031 nd6_dad_stop(ifa);
2037 IFA_LOCK(ifa);
2041 IFA_UNLOCK(ifa);
2051 IFA_LOCK_SPIN(ifa);
2053 IFA_UNLOCK(ifa);
2056 IFA_UNLOCK(ifa);
2058 IFA_LOCK_ASSERT_NOTHELD(ifa);
2066 IFA_LOCK(ifa);
2069 IFA_UNLOCK(ifa);
2071 IFA_LOCK(ifa);
2073 IFA_UNLOCK(ifa);
2084 struct ifaddr *ifa;
2089 ifa = &ia->ia_ifa;
2090 IFA_ADDREF(ifa);
2093 IFA_LOCK(ifa);
2094 if (ifa->ifa_debug & IFD_ATTACHED)
2095 if_detach_ifa(ifp, ifa);
2096 IFA_UNLOCK(ifa);
2122 ifa = &oia->ia_ifa;
2123 IFA_LOCK(ifa);
2139 IFA_UNLOCK(ifa);
2145 IFA_UNLOCK(ifa);
2155 IFA_REMREF(ifa);
2158 IFA_REMREF(ifa);
2223 struct ifaddr *ifa = NULL;
2277 ifa = (struct ifaddr *)in6ifa_ifpforlinklocal(ifp, 0);
2278 if (!ifa)
2280 IFA_LOCK_SPIN(ifa);
2281 hostaddr = *IFA_IN6(ifa);
2282 IFA_UNLOCK(ifa);
2284 IFA_REMREF(ifa);
2285 ifa = NULL;
2401 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
2403 IFA_LOCK(ifa);
2404 if (ifa->ifa_addr->sa_family != AF_INET6) {
2405 IFA_UNLOCK(ifa);
2409 IFA_UNLOCK(ifa);
2413 bcopy(IFA_IN6(ifa), &candidate, sizeof(candidate));
2414 IFA_UNLOCK(ifa);
2429 if (ifa != NULL)
2430 IFA_ADDREF(ifa);
2432 if (!ifa)
2434 ia = ifa2ia6(ifa);
2439 IFA_LOCK(ifa);
2466 IFA_UNLOCK(ifa);
2467 IFA_REMREF(ifa);
2477 IFA_LOCK(ifa);
2491 IFA_UNLOCK(ifa);
2492 IFA_REMREF(ifa);
2552 struct ifaddr *ifa;
2560 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
2562 IFA_LOCK_SPIN(ifa);
2563 if (ifa->ifa_addr->sa_family != AF_INET6) {
2564 IFA_UNLOCK(ifa);
2568 IFA_UNLOCK(ifa);
2572 ifa = &ia->ia_ifa;
2573 IFA_LOCK_SPIN(ifa);
2575 IFA_UNLOCK(ifa);
2590 IFA_LOCK(ifa);
2603 IFA_UNLOCK(ifa);
2607 IFA_LOCK(ifa);
2610 IFA_LOCK_ASSERT_HELD(ifa);
2622 IFA_UNLOCK(ifa);
2625 IFA_UNLOCK(ifa);
2645 struct ifaddr *ifa;
2648 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
2650 IFA_LOCK_SPIN(ifa);
2651 if (ifa->ifa_addr->sa_family != AF_INET6) {
2652 IFA_UNLOCK(ifa);
2655 if (IN6_IS_ADDR_LINKLOCAL(IFA_IN6(ifa))) {
2656 if ((((struct in6_ifaddr *)ifa)->ia6_flags &
2658 IFA_UNLOCK(ifa);
2661 IFA_ADDREF_LOCKED(ifa); /* for caller */
2662 IFA_UNLOCK(ifa);
2665 IFA_UNLOCK(ifa);
2669 return((struct in6_ifaddr *)ifa);
2680 struct ifaddr *ifa;
2683 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
2685 IFA_LOCK_SPIN(ifa);
2686 if (ifa->ifa_addr->sa_family != AF_INET6) {
2687 IFA_UNLOCK(ifa);
2690 if (IN6_ARE_ADDR_EQUAL(addr, IFA_IN6(ifa))) {
2691 IFA_ADDREF_LOCKED(ifa); /* for caller */
2692 IFA_UNLOCK(ifa);
2695 IFA_UNLOCK(ifa);
2699 return((struct in6_ifaddr *)ifa);
2940 struct ifaddr *ifa;
2963 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
2967 IFA_LOCK(ifa);
2968 if (ifa->ifa_addr->sa_family != AF_INET6) {
2969 IFA_UNLOCK(ifa);
2972 src_scope = in6_addrscope(IFA_IN6(ifa));
2978 if (((struct in6_ifaddr *)ifa)->ia6_flags &
2980 IFA_UNLOCK(ifa);
2984 if (((struct in6_ifaddr *)ifa)->ia6_flags &
2986 IFA_UNLOCK(ifa);
2989 if (((struct in6_ifaddr *)ifa)->ia6_flags &
2991 IFA_UNLOCK(ifa);
3026 IFA_UNLOCK(ifa);
3035 if (((struct in6_ifaddr *)ifa)->ia6_flags &
3042 IFA_UNLOCK(ifa);
3051 IFA_UNLOCK(ifa);
3063 (((struct in6_ifaddr *)ifa)->ia6_flags &
3079 ifat = (struct in6_ifaddr *)ifa;
3094 IFA_UNLOCK(ifa);
3131 * interface, and the column "sI" means if the ifa
3156 IFA_UNLOCK(ifa);
3169 tlen = in6_matchlen(IFA_IN6(ifa), dst);
3173 IFA_UNLOCK(ifa);
3178 IFA_UNLOCK(ifa);
3186 IFA_UNLOCK(ifa);
3195 IFA_ADDREF_LOCKED(ifa); /* for ifa_best */
3197 in6_matchlen(IFA_IN6(ifa), dst);
3198 best_scope = in6_addrscope(&ifa2ia6(ifa)->ia_addr.sin6_addr);
3199 IFA_UNLOCK(ifa);
3202 ifa_best = (struct in6_ifaddr *)ifa;
3241 struct ifaddr *ifa;
3254 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
3256 IFA_LOCK(ifa);
3257 if (ifa->ifa_addr->sa_family != AF_INET6) {
3258 IFA_UNLOCK(ifa);
3261 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_ANYCAST) {
3262 IFA_UNLOCK(ifa);
3265 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_NOTREADY) {
3266 IFA_UNLOCK(ifa);
3269 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_DETACHED) {
3270 IFA_UNLOCK(ifa);
3273 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_DEPRECATED) {
3275 IFA_ADDREF_LOCKED(ifa); /* for dep[0] */
3276 IFA_UNLOCK(ifa);
3279 dep[0] = (struct in6_ifaddr *)ifa;
3281 IFA_UNLOCK(ifa);
3286 if (dst_scope == in6_addrscope(IFA_IN6(ifa))) {
3292 IFA_UNLOCK(ifa);
3296 IFA_LOCK(ifa);
3298 tlen = in6_matchlen(IFA_IN6(ifa), dst);
3301 IFA_ADDREF_LOCKED(ifa); /* for besta */
3302 IFA_UNLOCK(ifa);
3304 besta = (struct in6_ifaddr *)ifa;
3306 IFA_UNLOCK(ifa);
3309 besta = (struct in6_ifaddr *)ifa;
3310 IFA_ADDREF_LOCKED(ifa); /* for besta */
3311 IFA_UNLOCK(ifa);
3314 IFA_UNLOCK(ifa);
3324 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
3326 IFA_LOCK(ifa);
3327 if (ifa->ifa_addr->sa_family != AF_INET6) {
3328 IFA_UNLOCK(ifa);
3331 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_ANYCAST) {
3332 IFA_UNLOCK(ifa);
3335 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_NOTREADY) {
3336 IFA_UNLOCK(ifa);
3339 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_DETACHED) {
3340 IFA_UNLOCK(ifa);
3343 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_DEPRECATED) {
3345 IFA_ADDREF_LOCKED(ifa); /* for dep[1] */
3346 IFA_UNLOCK(ifa);
3349 dep[1] = (struct in6_ifaddr *)ifa;
3351 IFA_UNLOCK(ifa);
3355 IFA_ADDREF_LOCKED(ifa); /* for caller */
3356 IFA_UNLOCK(ifa);
3362 return (struct in6_ifaddr *)ifa;
3386 struct ifaddr *ifa;
3401 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
3403 IFA_LOCK_SPIN(ifa);
3404 if (ifa->ifa_addr->sa_family != AF_INET6) {
3405 IFA_UNLOCK(ifa);
3408 ia = (struct in6_ifaddr *)ifa;
3410 IFA_UNLOCK(ifa);
3411 nd6_dad_start(ifa, &dad_delay);
3413 IFA_UNLOCK(ifa);
3642 in6_post_msg(struct ifnet *ifp, u_int32_t event_code, struct in6_ifaddr *ifa)
3654 IFA_LOCK(&ifa->ia_ifa);
3655 in6_event_data.ia_addr = ifa->ia_addr;
3656 in6_event_data.ia_net = ifa->ia_net;
3657 in6_event_data.ia_dstaddr = ifa->ia_dstaddr;
3658 in6_event_data.ia_prefixmask = ifa->ia_prefixmask;
3659 in6_event_data.ia_plen = ifa->ia_plen;
3660 in6_event_data.ia6_flags = (u_int32_t)ifa->ia6_flags;
3663 ifa->ia6_lifetime.ia6t_expire;
3665 ifa->ia6_lifetime.ia6t_preferred;
3667 ifa->ia6_lifetime.ia6t_vltime;
3669 ifa->ia6_lifetime.ia6t_pltime;
3670 IFA_UNLOCK(&ifa->ia_ifa);
3738 in6_ifaddr_free(struct ifaddr *ifa)
3740 IFA_LOCK_ASSERT_HELD(ifa);
3742 if (ifa->ifa_refcnt != 0) {
3743 panic("%s: ifa %p bad ref cnt", __func__, ifa);
3745 } else if (!(ifa->ifa_debug & IFD_ALLOC)) {
3746 panic("%s: ifa %p cannot be freed", __func__, ifa);
3749 if (ifa->ifa_debug & IFD_DEBUG) {
3751 (struct in6_ifaddr_dbg *)ifa;
3755 if (ifa->ifa_debug & IFD_TRASHED) {
3757 IFA_CONVERT_LOCK(ifa);
3762 ifa->ifa_debug &= ~IFD_TRASHED;
3765 IFA_UNLOCK(ifa);
3766 ifa_lock_destroy(ifa);
3767 bzero(ifa, sizeof (struct in6_ifaddr));
3768 zfree(in6ifa_zone, ifa);
3772 in6_ifaddr_attached(struct ifaddr *ifa)
3774 struct in6_ifaddr_dbg *in6ifa_dbg = (struct in6_ifaddr_dbg *)ifa;
3776 IFA_LOCK_ASSERT_HELD(ifa);
3778 if (!(ifa->ifa_debug & IFD_DEBUG)) {
3779 panic("%s: ifa %p has no debug structure", __func__, ifa);
3782 if (ifa->ifa_debug & IFD_TRASHED) {
3784 IFA_CONVERT_LOCK(ifa);
3788 ifa->ifa_debug &= ~IFD_TRASHED;
3793 in6_ifaddr_detached(struct ifaddr *ifa)
3795 struct in6_ifaddr_dbg *in6ifa_dbg = (struct in6_ifaddr_dbg *)ifa;
3797 IFA_LOCK_ASSERT_HELD(ifa);
3799 if (!(ifa->ifa_debug & IFD_DEBUG)) {
3800 panic("%s: ifa %p has no debug structure", __func__, ifa);
3802 } else if (ifa->ifa_debug & IFD_TRASHED) {
3803 panic("%s: ifa %p is already in trash list", __func__, ifa);
3806 ifa->ifa_debug |= IFD_TRASHED;
3808 IFA_CONVERT_LOCK(ifa);
3815 in6_ifaddr_trace(struct ifaddr *ifa, int refhold)
3817 struct in6_ifaddr_dbg *in6ifa_dbg = (struct in6_ifaddr_dbg *)ifa;
3822 if (!(ifa->ifa_debug & IFD_DEBUG)) {
3823 panic("%s: ifa %p has no debug structure", __func__, ifa);