• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/xnu-2782.1.97/bsd/netinet6/

Lines Matching refs:ifa

269 in6_ifloop_request(int cmd, struct ifaddr *ifa)
285 * (probably implicitly) set nd6_rtrequest() to ifa->ifa_rtrequest,
290 e = rtrequest_locked(cmd, ifa->ifa_addr, ifa->ifa_addr,
296 ip6_sprintf(&((struct in6_ifaddr *)ifa)->ia_addr.sin6_addr),
309 if (cmd == RTM_ADD && nrt && ifa != nrt->rt_ifa) {
310 rtsetifa(nrt, ifa);
320 rt_newaddrmsg(cmd, ifa, e, nrt);
341 in6_ifaddloop(struct ifaddr *ifa)
349 rt = rtalloc1(ifa->ifa_addr, 0, 0);
358 in6_ifloop_request(RTM_ADD, ifa);
370 in6_ifremloop(struct ifaddr *ifa)
387 * Delete the entry only if exact one ifa exists. More than one ifa
395 if (IN6_ARE_ADDR_EQUAL(IFA_IN6(ifa), &ia->ia_addr.sin6_addr)) {
416 rt = rtalloc1(ifa->ifa_addr, 0, 0);
423 in6_ifloop_request(RTM_DELETE, ifa);
1073 #define ifa2ia6(ifa) ((struct in6_ifaddr *)(void *)(ifa))
1788 struct ifaddr *ifa;
1795 ifa = &ia->ia_ifa;
1852 IFA_LOCK_SPIN(ifa);
1854 IFA_UNLOCK(ifa);
1908 IFA_LOCK_SPIN(ifa);
1910 IFA_UNLOCK(ifa);
1937 IFA_LOCK_SPIN(ifa);
1940 IFA_UNLOCK(ifa);
1982 IFA_LOCK(ifa);
1984 IFA_UNLOCK(ifa);
2005 IFA_LOCK_SPIN(ifa);
2006 if (in6if_do_dad(ifp) && ((ifa->ifa_flags & IN6_IFF_NODAD) == 0) &&
2011 IFA_UNLOCK(ifa);
2049 IFA_UNLOCK(ifa);
2076 struct ifaddr *ifa;
2085 ifa = NULL;
2139 ifa = &ia->ia_ifa;
2188 ifa = &ia->ia_ifa;
2203 IFA_ADDREF(ifa); /* for this and optionally for caller */
2204 ifa->ifa_addr = (struct sockaddr *)&ia->ia_addr;
2207 ifa->ifa_dstaddr = (struct sockaddr *)&ia->ia_dstaddr;
2208 ifa->ifa_netmask = (struct sockaddr *)&ia->ia_prefixmask;
2209 ifa->ifa_ifp = ifp;
2210 ifa->ifa_metric = ifp->if_metric;
2211 ifa->ifa_rtrequest = nd6_rtrequest;
2223 if (ifa->ifa_dstaddr != NULL) {
2243 IFA_LOCK_SPIN(ifa);
2244 if_attach_ifa(ifp, ifa); /* holds reference for ifnet link */
2245 IFA_UNLOCK(ifa);
2258 IFA_ADDREF(ifa); /* hold for in6_ifaddrs link */
2261 ifa = &ia->ia_ifa;
2265 VERIFY(ia != NULL && ifa == &ia->ia_ifa);
2266 IFA_LOCK(ifa);
2308 IFA_UNLOCK(ifa);
2328 VERIFY(ifa == &ia->ia_ifa);
2329 IFA_REMREF(ifa);
2339 in6_purgeaddr(struct ifaddr *ifa)
2341 struct ifnet *ifp = ifa->ifa_ifp;
2342 struct in6_ifaddr *ia = (struct in6_ifaddr *)ifa;
2348 nd6_dad_stop(ifa);
2354 IFA_LOCK(ifa);
2358 IFA_UNLOCK(ifa);
2369 IFA_LOCK_SPIN(ifa);
2372 IFA_UNLOCK(ifa);
2380 IFA_LOCK(ifa);
2383 IFA_UNLOCK(ifa);
2385 IFA_LOCK(ifa);
2387 IFA_UNLOCK(ifa);
2400 struct ifaddr *ifa;
2405 ifa = &ia->ia_ifa;
2406 IFA_ADDREF(ifa);
2409 IFA_LOCK(ifa);
2410 if (ifa->ifa_debug & IFD_ATTACHED)
2411 if_detach_ifa(ifp, ifa);
2412 IFA_UNLOCK(ifa);
2438 ifa = &oia->ia_ifa;
2439 IFA_LOCK(ifa);
2456 IFA_UNLOCK(ifa);
2462 IFA_UNLOCK(ifa);
2472 IFA_REMREF(ifa);
2475 IFA_REMREF(ifa);
2523 struct ifaddr *ifa;
2526 ifa = &ia->ia_ifa;
2542 IFA_LOCK(ifa);
2552 IFA_UNLOCK(ifa);
2553 error = rtinit(ifa, RTM_ADD, RTF_UP | RTF_HOST);
2556 IFA_LOCK(ifa);
2559 IFA_LOCK_ASSERT_HELD(ifa);
2567 IFA_UNLOCK(ifa);
2571 in6_ifaddloop(ifa);
2594 struct ifaddr *ifa;
2597 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
2599 IFA_LOCK_SPIN(ifa);
2600 if (ifa->ifa_addr->sa_family != AF_INET6) {
2601 IFA_UNLOCK(ifa);
2604 if (IN6_IS_ADDR_LINKLOCAL(IFA_IN6(ifa))) {
2605 if ((((struct in6_ifaddr *)ifa)->ia6_flags &
2607 IFA_UNLOCK(ifa);
2610 IFA_ADDREF_LOCKED(ifa); /* for caller */
2611 IFA_UNLOCK(ifa);
2614 IFA_UNLOCK(ifa);
2618 return ((struct in6_ifaddr *)ifa);
2629 struct ifaddr *ifa;
2632 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list)
2634 IFA_LOCK_SPIN(ifa);
2635 if (ifa->ifa_addr->sa_family != AF_INET6) {
2636 IFA_UNLOCK(ifa);
2639 if (IN6_ARE_ADDR_EQUAL(addr, IFA_IN6(ifa))) {
2640 IFA_ADDREF_LOCKED(ifa); /* for caller */
2641 IFA_UNLOCK(ifa);
2644 IFA_UNLOCK(ifa);
2648 return ((struct in6_ifaddr *)ifa);
2958 struct ifaddr *ifa;
2981 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
2984 IFA_LOCK(ifa);
2985 if (ifa->ifa_addr->sa_family != AF_INET6) {
2986 IFA_UNLOCK(ifa);
2989 src_scope = in6_addrscope(IFA_IN6(ifa));
2995 if (((struct in6_ifaddr *)ifa)->ia6_flags &
2997 IFA_UNLOCK(ifa);
3001 if (((struct in6_ifaddr *)ifa)->ia6_flags &
3003 IFA_UNLOCK(ifa);
3006 if (((struct in6_ifaddr *)ifa)->ia6_flags &
3008 IFA_UNLOCK(ifa);
3043 IFA_UNLOCK(ifa);
3052 if (((struct in6_ifaddr *)ifa)->ia6_flags &
3059 IFA_UNLOCK(ifa);
3068 IFA_UNLOCK(ifa);
3080 (((struct in6_ifaddr *)ifa)->ia6_flags &
3096 ifat = (struct in6_ifaddr *)ifa;
3111 IFA_UNLOCK(ifa);
3148 * interface, and the column "sI" means if the ifa
3173 IFA_UNLOCK(ifa);
3186 tlen = in6_matchlen(IFA_IN6(ifa), dst);
3190 IFA_UNLOCK(ifa);
3195 IFA_UNLOCK(ifa);
3203 IFA_UNLOCK(ifa);
3212 IFA_ADDREF_LOCKED(ifa); /* for ifa_best */
3214 in6_matchlen(IFA_IN6(ifa), dst);
3216 in6_addrscope(&ifa2ia6(ifa)->ia_addr.sin6_addr);
3217 IFA_UNLOCK(ifa);
3220 ifa_best = (struct in6_ifaddr *)ifa;
3257 struct ifaddr *ifa;
3270 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
3271 IFA_LOCK(ifa);
3272 if (ifa->ifa_addr->sa_family != AF_INET6) {
3273 IFA_UNLOCK(ifa);
3276 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_ANYCAST) {
3277 IFA_UNLOCK(ifa);
3280 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_NOTREADY) {
3281 IFA_UNLOCK(ifa);
3284 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_DETACHED) {
3285 IFA_UNLOCK(ifa);
3288 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_DEPRECATED) {
3290 IFA_ADDREF_LOCKED(ifa); /* for dep[0] */
3291 IFA_UNLOCK(ifa);
3294 dep[0] = (struct in6_ifaddr *)ifa;
3296 IFA_UNLOCK(ifa);
3301 if (dst_scope == in6_addrscope(IFA_IN6(ifa))) {
3307 IFA_UNLOCK(ifa);
3312 IFA_LOCK(ifa);
3314 tlen = in6_matchlen(IFA_IN6(ifa), dst);
3317 IFA_ADDREF_LOCKED(ifa); /* for besta */
3318 IFA_UNLOCK(ifa);
3320 besta = (struct in6_ifaddr *)ifa;
3322 IFA_UNLOCK(ifa);
3325 besta = (struct in6_ifaddr *)ifa;
3326 IFA_ADDREF_LOCKED(ifa); /* for besta */
3327 IFA_UNLOCK(ifa);
3330 IFA_UNLOCK(ifa);
3340 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
3341 IFA_LOCK(ifa);
3342 if (ifa->ifa_addr->sa_family != AF_INET6) {
3343 IFA_UNLOCK(ifa);
3346 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_ANYCAST) {
3347 IFA_UNLOCK(ifa);
3350 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_NOTREADY) {
3351 IFA_UNLOCK(ifa);
3354 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_DETACHED) {
3355 IFA_UNLOCK(ifa);
3358 if (ifa2ia6(ifa)->ia6_flags & IN6_IFF_DEPRECATED) {
3360 IFA_ADDREF_LOCKED(ifa); /* for dep[1] */
3361 IFA_UNLOCK(ifa);
3364 dep[1] = (struct in6_ifaddr *)ifa;
3366 IFA_UNLOCK(ifa);
3370 IFA_ADDREF_LOCKED(ifa); /* for caller */
3371 IFA_UNLOCK(ifa);
3377 return ((struct in6_ifaddr *)ifa);
3399 struct ifaddr *ifa;
3403 TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
3406 IFA_LOCK_SPIN(ifa);
3407 if (ifa->ifa_addr->sa_family != AF_INET6) {
3408 IFA_UNLOCK(ifa);
3411 ia6 = (struct in6_ifaddr *)ifa;
3414 IFA_UNLOCK(ifa);
3415 nd6_dad_start(ifa, &delay);
3417 IFA_UNLOCK(ifa);
3644 in6_post_msg(struct ifnet *ifp, u_int32_t event_code, struct in6_ifaddr *ifa,
3658 IFA_LOCK(&ifa->ia_ifa);
3659 in6_event_data.ia_addr = ifa->ia_addr;
3660 in6_event_data.ia_net = ifa->ia_net;
3661 in6_event_data.ia_dstaddr = ifa->ia_dstaddr;
3662 in6_event_data.ia_prefixmask = ifa->ia_prefixmask;
3663 in6_event_data.ia_plen = ifa->ia_plen;
3664 in6_event_data.ia6_flags = (u_int32_t)ifa->ia6_flags;
3667 in6ifa_getlifetime(ifa, &ia6_lt, 1);
3672 IFA_UNLOCK(&ifa->ia_ifa);
3746 in6_ifaddr_free(struct ifaddr *ifa)
3748 IFA_LOCK_ASSERT_HELD(ifa);
3750 if (ifa->ifa_refcnt != 0) {
3751 panic("%s: ifa %p bad ref cnt", __func__, ifa);
3753 } else if (!(ifa->ifa_debug & IFD_ALLOC)) {
3754 panic("%s: ifa %p cannot be freed", __func__, ifa);
3757 if (ifa->ifa_debug & IFD_DEBUG) {
3759 (struct in6_ifaddr_dbg *)ifa;
3763 if (ifa->ifa_debug & IFD_TRASHED) {
3765 IFA_CONVERT_LOCK(ifa);
3770 ifa->ifa_debug &= ~IFD_TRASHED;
3773 IFA_UNLOCK(ifa);
3774 ifa_lock_destroy(ifa);
3775 bzero(ifa, sizeof (struct in6_ifaddr));
3776 zfree(in6ifa_zone, ifa);
3780 in6_ifaddr_attached(struct ifaddr *ifa)
3782 struct in6_ifaddr_dbg *in6ifa_dbg = (struct in6_ifaddr_dbg *)ifa;
3784 IFA_LOCK_ASSERT_HELD(ifa);
3786 if (!(ifa->ifa_debug & IFD_DEBUG)) {
3787 panic("%s: ifa %p has no debug structure", __func__, ifa);
3790 if (ifa->ifa_debug & IFD_TRASHED) {
3792 IFA_CONVERT_LOCK(ifa);
3796 ifa->ifa_debug &= ~IFD_TRASHED;
3801 in6_ifaddr_detached(struct ifaddr *ifa)
3803 struct in6_ifaddr_dbg *in6ifa_dbg = (struct in6_ifaddr_dbg *)ifa;
3805 IFA_LOCK_ASSERT_HELD(ifa);
3807 if (!(ifa->ifa_debug & IFD_DEBUG)) {
3808 panic("%s: ifa %p has no debug structure", __func__, ifa);
3810 } else if (ifa->ifa_debug & IFD_TRASHED) {
3811 panic("%s: ifa %p is already in trash list", __func__, ifa);
3814 ifa->ifa_debug |= IFD_TRASHED;
3816 IFA_CONVERT_LOCK(ifa);
3823 in6_ifaddr_trace(struct ifaddr *ifa, int refhold)
3825 struct in6_ifaddr_dbg *in6ifa_dbg = (struct in6_ifaddr_dbg *)ifa;
3830 if (!(ifa->ifa_debug & IFD_DEBUG)) {
3831 panic("%s: ifa %p has no debug structure", __func__, ifa);