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

Lines Matching refs:ifa

278 if_attach_ifa(struct ifnet *ifp, struct ifaddr *ifa)
280 if_attach_ifa_common(ifp, ifa, 0);
284 if_attach_link_ifa(struct ifnet *ifp, struct ifaddr *ifa)
286 if_attach_ifa_common(ifp, ifa, 1);
290 if_attach_ifa_common(struct ifnet *ifp, struct ifaddr *ifa, int link)
293 IFA_LOCK_ASSERT_HELD(ifa);
295 if (ifa->ifa_ifp != ifp) {
297 ifa->ifa_ifp, ifp);
299 } else if (ifa->ifa_debug & IFD_ATTACHED) {
300 panic("%s: Attempt to attach an already attached ifa=%p",
301 __func__, ifa);
303 } else if (link && !(ifa->ifa_debug & IFD_LINK)) {
304 panic("%s: Unexpected non-link address ifa=%p", __func__, ifa);
306 } else if (!link && (ifa->ifa_debug & IFD_LINK)) {
307 panic("%s: Unexpected link address ifa=%p", __func__, ifa);
310 IFA_ADDREF_LOCKED(ifa);
311 ifa->ifa_debug |= IFD_ATTACHED;
313 TAILQ_INSERT_HEAD(&ifp->if_addrhead, ifa, ifa_link);
315 TAILQ_INSERT_TAIL(&ifp->if_addrhead, ifa, ifa_link);
317 if (ifa->ifa_attached != NULL)
318 (*ifa->ifa_attached)(ifa);
322 if_detach_ifa(struct ifnet *ifp, struct ifaddr *ifa)
324 if_detach_ifa_common(ifp, ifa, 0);
328 if_detach_link_ifa(struct ifnet *ifp, struct ifaddr *ifa)
330 if_detach_ifa_common(ifp, ifa, 1);
334 if_detach_ifa_common(struct ifnet *ifp, struct ifaddr *ifa, int link)
337 IFA_LOCK_ASSERT_HELD(ifa);
339 if (link && !(ifa->ifa_debug & IFD_LINK)) {
340 panic("%s: Unexpected non-link address ifa=%p", __func__, ifa);
342 } else if (link && ifa != TAILQ_FIRST(&ifp->if_addrhead)) {
343 panic("%s: Link address ifa=%p not first", __func__, ifa);
345 } else if (!link && (ifa->ifa_debug & IFD_LINK)) {
346 panic("%s: Unexpected link address ifa=%p", __func__, ifa);
348 } else if (!(ifa->ifa_debug & IFD_ATTACHED)) {
349 panic("%s: Attempt to detach an unattached address ifa=%p",
350 __func__, ifa);
352 } else if (ifa->ifa_ifp != ifp) {
354 ifa->ifa_ifp, ifp);
356 } else if (ifa->ifa_debug & IFD_DEBUG) {
359 if (ifa2 == ifa)
362 if (ifa2 != ifa) {
363 panic("%s: Attempt to detach a stray address ifa=%p",
364 __func__, ifa);
368 TAILQ_REMOVE(&ifp->if_addrhead, ifa, ifa_link);
370 if (IFA_REMREF_LOCKED(ifa) == NULL) {
371 panic("%s: unexpected (missing) refcnt ifa=%p", __func__, ifa);
374 ifa->ifa_debug &= ~IFD_ATTACHED;
376 if (ifa->ifa_detached != NULL)
377 (*ifa->ifa_detached)(ifa);
767 struct ifaddr *ifa;
770 TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
771 IFA_LOCK_SPIN(ifa);
772 if (ifa->ifa_addr->sa_family == family) {
773 IFA_ADDREF_LOCKED(ifa); /* for caller */
774 IFA_UNLOCK(ifa);
777 IFA_UNLOCK(ifa);
781 return (ifa);
792 struct ifaddr *ifa;
803 for (ifa = ifp->if_addrhead.tqh_first; ifa;
804 ifa = ifa->ifa_link.tqe_next) {
805 IFA_LOCK_SPIN(ifa);
806 if (ifa->ifa_addr->sa_family != addr->sa_family) {
807 IFA_UNLOCK(ifa);
810 if (equal(addr, ifa->ifa_addr)) {
811 result = ifa;
812 IFA_ADDREF_LOCKED(ifa); /* for caller */
813 IFA_UNLOCK(ifa);
817 ifa->ifa_broadaddr != NULL &&
819 ifa->ifa_broadaddr->sa_len != 0 &&
820 equal(ifa->ifa_broadaddr, addr)) {
821 result = ifa;
822 IFA_ADDREF_LOCKED(ifa); /* for caller */
823 IFA_UNLOCK(ifa);
826 IFA_UNLOCK(ifa);
842 struct ifaddr *ifa;
850 for (ifa = ifp->if_addrhead.tqh_first; ifa;
851 ifa = ifa->ifa_link.tqe_next) {
852 IFA_LOCK_SPIN(ifa);
853 if (ifa->ifa_addr->sa_family !=
855 IFA_UNLOCK(ifa);
858 if (ifa->ifa_dstaddr &&
859 equal(addr, ifa->ifa_dstaddr)) {
860 result = ifa;
861 IFA_ADDREF_LOCKED(ifa); /* for caller */
862 IFA_UNLOCK(ifa);
865 IFA_UNLOCK(ifa);
894 struct ifaddr *ifa = NULL;
902 for (ifa = ifp->if_addrhead.tqh_first; ifa != NULL;
903 ifa = ifa->ifa_link.tqe_next) {
904 IFA_LOCK_SPIN(ifa);
905 if (ifa->ifa_addr->sa_family != addr->sa_family) {
906 IFA_UNLOCK(ifa);
909 if (equal(addr, ifa->ifa_addr)) {
910 result = ifa;
911 IFA_ADDREF_LOCKED(ifa); /* for caller */
912 IFA_UNLOCK(ifa);
916 ifa->ifa_broadaddr != NULL &&
918 ifa->ifa_broadaddr->sa_len != 0 &&
919 equal(ifa->ifa_broadaddr, addr)) {
920 result = ifa;
921 IFA_ADDREF_LOCKED(ifa); /* for caller */
922 IFA_UNLOCK(ifa);
925 IFA_UNLOCK(ifa);
954 struct ifaddr *ifa = NULL;
977 ifa = ifnet_addrs[sdl->sdl_index - 1];
978 if (ifa != NULL)
979 IFA_ADDREF(ifa);
982 return (ifa);
992 for (ifa = ifp->if_addrhead.tqh_first; ifa;
993 ifa = ifa->ifa_link.tqe_next) {
996 IFA_LOCK(ifa);
997 if (ifa->ifa_addr == NULL ||
998 ifa->ifa_addr->sa_family != af) {
1000 IFA_UNLOCK(ifa);
1009 IFA_UNLOCK(ifa);
1014 * Scan all the bits in the ifa's address.
1020 if (ifa->ifa_netmask == 0) {
1021 IFA_UNLOCK(ifa);
1025 cp2 = ifa->ifa_addr->sa_data;
1026 cp3 = ifa->ifa_netmask->sa_data;
1027 cplim = ifa->ifa_netmask->sa_len +
1028 (char *)ifa->ifa_netmask;
1040 rn_refines((caddr_t)ifa->ifa_netmask,
1042 IFA_ADDREF_LOCKED(ifa); /* ifa_maybe */
1043 IFA_UNLOCK(ifa);
1046 ifa_maybe = ifa;
1048 IFA_UNLOCK(ifa);
1050 IFA_LOCK_ASSERT_NOTHELD(ifa);
1054 if (ifa != NULL)
1059 if (ifa == NULL)
1060 ifa = ifa_maybe;
1064 return (ifa);
1074 struct ifaddr *ifa = NULL;
1085 for (ifa = ifp->if_addrhead.tqh_first; ifa;
1086 ifa = ifa->ifa_link.tqe_next) {
1087 IFA_LOCK(ifa);
1088 if (ifa->ifa_addr->sa_family != af) {
1089 IFA_UNLOCK(ifa);
1093 IFA_ADDREF_LOCKED(ifa); /* for ifa_maybe */
1094 ifa_maybe = ifa;
1096 if (ifa->ifa_netmask == 0) {
1097 if (equal(addr, ifa->ifa_addr) || (ifa->ifa_dstaddr &&
1098 equal(addr, ifa->ifa_dstaddr))) {
1099 IFA_ADDREF_LOCKED(ifa); /* for caller */
1100 IFA_UNLOCK(ifa);
1103 IFA_UNLOCK(ifa);
1107 if (ifa->ifa_dstaddr && equal(addr, ifa->ifa_dstaddr)) {
1108 IFA_ADDREF_LOCKED(ifa); /* for caller */
1109 IFA_UNLOCK(ifa);
1113 if (equal(addr, ifa->ifa_addr)) {
1115 IFA_ADDREF_LOCKED(ifa); /* for caller */
1116 IFA_UNLOCK(ifa);
1120 cp2 = ifa->ifa_addr->sa_data;
1121 cp3 = ifa->ifa_netmask->sa_data;
1122 cplim = ifa->ifa_netmask->sa_len +
1123 (char *)ifa->ifa_netmask;
1131 IFA_ADDREF_LOCKED(ifa);
1132 better_ifa_maybe = ifa;
1136 IFA_UNLOCK(ifa);
1139 if (ifa == NULL) {
1141 ifa = better_ifa_maybe;
1144 ifa = ifa_maybe;
1156 return (ifa);
1163 * Lookup an appropriate real ifa to point to.
1169 struct ifaddr *ifa;
1177 if (cmd != RTM_ADD || ((ifa = rt->rt_ifa) == 0) ||
1178 ((ifp = ifa->ifa_ifp) == 0) || ((dst = rt_key(rt)) == 0))
1184 ifa = ifaof_ifpforaddr(dst, ifp);
1185 if (ifa) {
1186 rtsetifa(rt, ifa);
1187 IFA_LOCK_SPIN(ifa);
1188 ifa_rtrequest = ifa->ifa_rtrequest;
1189 IFA_UNLOCK(ifa);
1192 IFA_REMREF(ifa);
1213 struct ifaddr **ifa;
1247 if (ifnet_get_address_list(ifp, &ifa) == 0) {
1248 for (i = 0; ifa[i] != 0; i++) {
1249 pfctlinput(up ? PRC_IFUP : PRC_IFDOWN, ifa[i]->ifa_addr);
1251 ifnet_free_address_list(ifa);
2583 struct ifaddr *ifa;
2616 ifa = ifp->if_addrhead.tqh_first;
2617 for (; space > sizeof (ifr) && ifa;
2618 ifa = ifa->ifa_link.tqe_next) {
2632 IFA_LOCK(ifa);
2633 sa = ifa->ifa_addr;
2636 if (ifa == ifp->if_lladdr) {
2639 IFA_UNLOCK(ifa);
2642 IFA_LOCK(ifa);
2662 IFA_UNLOCK(ifa);
2676 IFA_UNLOCK(ifa);
3768 ifa_remref(struct ifaddr *ifa, int locked)
3771 IFA_LOCK_SPIN(ifa);
3773 IFA_LOCK_ASSERT_HELD(ifa);
3775 if (ifa->ifa_refcnt == 0)
3776 panic("%s: ifa %p negative refcnt\n", __func__, ifa);
3777 else if (ifa->ifa_trace != NULL)
3778 (*ifa->ifa_trace)(ifa, FALSE);
3779 if (--ifa->ifa_refcnt == 0) {
3780 if (ifa->ifa_debug & IFD_ATTACHED)
3781 panic("ifa %p attached to ifp is being freed\n", ifa);
3788 if (ifa->ifa_debug & IFD_ALLOC) {
3789 if (ifa->ifa_free == NULL) {
3790 IFA_UNLOCK(ifa);
3791 FREE(ifa, M_IFADDR);
3794 IFA_CONVERT_LOCK(ifa);
3796 (*ifa->ifa_free)(ifa);
3799 IFA_UNLOCK(ifa);
3801 ifa = NULL;
3804 if (!locked && ifa != NULL)
3805 IFA_UNLOCK(ifa);
3807 return (ifa);
3811 ifa_addref(struct ifaddr *ifa, int locked)
3814 IFA_LOCK_SPIN(ifa);
3816 IFA_LOCK_ASSERT_HELD(ifa);
3818 if (++ifa->ifa_refcnt == 0) {
3819 panic("%s: ifa %p wraparound refcnt\n", __func__, ifa);
3821 } else if (ifa->ifa_trace != NULL) {
3822 (*ifa->ifa_trace)(ifa, TRUE);
3825 IFA_UNLOCK(ifa);
3829 ifa_lock_init(struct ifaddr *ifa)
3831 lck_mtx_init(&ifa->ifa_lock, ifa_mtx_grp, ifa_mtx_attr);
3835 ifa_lock_destroy(struct ifaddr *ifa)
3837 IFA_LOCK_ASSERT_NOTHELD(ifa);
3838 lck_mtx_destroy(&ifa->ifa_lock, ifa_mtx_grp);