Lines Matching defs:ifa
338 ifa_psref_class = psref_class_create("ifa", IPL_SOFTNET);
462 struct ifaddr *ifa;
467 ifa = ifp->if_dl;
468 sdl = satosdl(ifa->ifa_addr);
485 struct ifaddr *ifa;
491 ifasize = sizeof(*ifa) + 2 * socksize;
492 ifa = malloc(ifasize, M_IFADDR, M_WAITOK | M_ZERO);
494 sdl = (struct sockaddr_dl *)(ifa + 1);
502 ifa->ifa_rtrequest = link_rtrequest;
503 ifa->ifa_addr = (struct sockaddr *)sdl;
504 ifa->ifa_netmask = (struct sockaddr *)mask;
505 ifa_psref_init(ifa);
509 return ifa;
513 if_sadl_setrefs(struct ifnet *ifp, struct ifaddr *ifa)
517 ifp->if_dl = ifa;
518 ifaref(ifa);
519 sdl = satosdl(ifa->ifa_addr);
532 struct ifaddr *ifa;
543 ifa = if_dl_create(ifp, &sdl);
545 ifa_insert(ifp, ifa);
546 if_sadl_setrefs(ifp, ifa);
552 struct ifaddr *ifa;
556 ifa = ifp->if_dl;
561 ifafree(ifa);
565 if_replace_sadl(struct ifnet *ifp, struct ifaddr *ifa)
573 ifaref(ifa);
575 ifp->if_dl = ifa;
576 ifp->if_sadl = satosdl(ifa->ifa_addr);
585 struct ifaddr *ifa;
595 IFADDR_READER_FOREACH(ifa, ifp) {
597 ifa_acquire(ifa, &psref);
600 rtinit(ifa, RTM_LLINFO_UPD, 0);
603 ifa_release(ifa, &psref);
618 struct ifaddr *ifa;
621 ifa = ifp->if_hwdl;
623 ifafree(ifa);
626 ifa = ifp->if_dl;
627 if (ifa == NULL) {
635 KASSERT(ifa->ifa_addr->sa_family == AF_LINK);
636 ifa_remove(ifp, ifa);
1234 struct ifaddr *ifa, *nifa;
1238 for (ifa = IFADDR_READER_FIRST(ifp); ifa; ifa = nifa) {
1239 nifa = IFADDR_READER_NEXT(ifa);
1240 if (ifa->ifa_addr->sa_family != family)
1244 (*purgeaddr)(ifa);
1259 struct ifaddr *ifa;
1265 IFADDR_READER_FOREACH(ifa, ifp)
1268 ifa_list = kmem_alloc(sizeof(*ifa) * ifa_list_size, KM_SLEEP);
1270 IFADDR_READER_FOREACH(ifa, ifp) {
1271 ifa_list[i++] = ifa;
1272 ifaref(ifa);
1280 struct ifaddr *ifa;
1288 ifa = ifa_list[i];
1289 sockaddr_format(ifa->ifa_addr, buf, sizeof(buf));
1290 if (ifa->ifa_refcnt > 1) {
1292 "ifa(%s) still referenced (refcnt=%d)\n",
1293 buf, ifa->ifa_refcnt - 1);
1296 "ifa(%s) not referenced (refcnt=%d)\n",
1297 buf, ifa->ifa_refcnt - 1);
1298 ifafree(ifa);
1301 kmem_free(ifa_list, sizeof(*ifa) * ifa_list_size);
1318 struct ifaddr *ifa;
1419 * from the list, including our "cursor", ifa. For safety,
1429 * At this point, no other one tries to remove ifa in the list,
1434 IFADDR_WRITER_FOREACH(ifa, ifp) {
1435 family = ifa->ifa_addr->sa_family;
1438 ifa, family, ifa->ifa_refcnt);
1439 if (last_ifa != NULL && ifa == last_ifa)
1441 last_ifa = ifa;
1470 ifa_remove(ifp, ifa);
1478 IFADDR_WRITER_FOREACH(ifa, ifp) {
1479 family = ifa->ifa_addr->sa_family;
1481 ifa_remove(ifp, ifa);
1782 ifa_psref_init(struct ifaddr *ifa)
1785 psref_target_init(&ifa->ifa_psref, ifa_psref_class);
1789 ifaref(struct ifaddr *ifa)
1792 atomic_inc_uint(&ifa->ifa_refcnt);
1796 ifafree(struct ifaddr *ifa)
1798 KASSERT(ifa != NULL);
1799 KASSERTMSG(ifa->ifa_refcnt > 0, "ifa_refcnt=%d", ifa->ifa_refcnt);
1802 if (atomic_dec_uint_nv(&ifa->ifa_refcnt) != 0)
1805 free(ifa, M_IFADDR);
1809 ifa_is_destroying(struct ifaddr *ifa)
1812 return ISSET(ifa->ifa_flags, IFA_DESTROYING);
1816 ifa_insert(struct ifnet *ifp, struct ifaddr *ifa)
1819 ifa->ifa_ifp = ifp;
1831 TAILQ_INSERT_TAIL(&ifp->if_addrlist, ifa, ifa_list);
1832 IFADDR_ENTRY_INIT(ifa);
1833 IFADDR_WRITER_INSERT_TAIL(ifp, ifa);
1835 ifaref(ifa);
1839 ifa_remove(struct ifnet *ifp, struct ifaddr *ifa)
1842 KASSERT(ifa->ifa_ifp == ifp);
1851 TAILQ_REMOVE(&ifp->if_addrlist, ifa, ifa_list);
1852 IFADDR_WRITER_REMOVE(ifa);
1860 psref_target_destroy(&ifa->ifa_psref, ifa_psref_class);
1862 IFADDR_ENTRY_DESTROY(ifa);
1863 ifafree(ifa);
1867 ifa_acquire(struct ifaddr *ifa, struct psref *psref)
1871 psref_acquire(psref, &ifa->ifa_psref, ifa_psref_class);
1875 ifa_release(struct ifaddr *ifa, struct psref *psref)
1878 if (ifa == NULL)
1881 psref_release(psref, &ifa->ifa_psref, ifa_psref_class);
1885 ifa_held(struct ifaddr *ifa)
1888 return psref_held(&ifa->ifa_psref, ifa_psref_class);
1906 struct ifaddr *ifa;
1911 IFADDR_READER_FOREACH(ifa, ifp) {
1912 if (ifa->ifa_addr->sa_family != addr->sa_family)
1914 if (equal(addr, ifa->ifa_addr))
1915 return ifa;
1917 ifa->ifa_broadaddr &&
1919 ifa->ifa_broadaddr->sa_len != 0 &&
1920 equal(ifa->ifa_broadaddr, addr))
1921 return ifa;
1930 struct ifaddr *ifa;
1933 ifa = ifa_ifwithaddr(addr);
1934 if (ifa != NULL)
1935 ifa_acquire(ifa, psref);
1938 return ifa;
1949 struct ifaddr *ifa;
1956 IFADDR_READER_FOREACH(ifa, ifp) {
1957 if (ifa->ifa_addr->sa_family != addr->sa_family ||
1958 ifa->ifa_dstaddr == NULL)
1960 if (equal(addr, ifa->ifa_dstaddr))
1961 return ifa;
1971 struct ifaddr *ifa;
1975 ifa = ifa_ifwithdstaddr(addr);
1976 if (ifa != NULL)
1977 ifa_acquire(ifa, psref);
1980 return ifa;
1991 struct ifaddr *ifa, *ifa_maybe = NULL;
2011 ifa = at_ifawithnet((const struct sockaddr_at *)addr,
2013 if (ifa == NULL)
2015 sat2 = (struct sockaddr_at *)ifa->ifa_addr;
2017 return ifa; /* exact match */
2020 ifa_maybe = ifa;
2029 IFADDR_READER_FOREACH(ifa, ifp) {
2032 if (ifa->ifa_addr->sa_family != af ||
2033 ifa->ifa_netmask == NULL)
2036 cp2 = ifa->ifa_addr->sa_data;
2037 cp3 = ifa->ifa_netmask->sa_data;
2038 cplim = (const char *)ifa->ifa_netmask +
2039 ifa->ifa_netmask->sa_len;
2047 rt_refines(ifa->ifa_netmask,
2049 ifa_maybe = ifa;
2058 struct ifaddr *ifa;
2062 ifa = ifa_ifwithnet(addr);
2063 if (ifa != NULL)
2064 ifa_acquire(ifa, psref);
2067 return ifa;
2087 struct ifaddr *ifa;
2091 ifa = ifa_ifwithladdr(addr);
2092 if (ifa != NULL)
2093 ifa_acquire(ifa, psref);
2096 return ifa;
2106 struct ifaddr *ifa = NULL;
2113 IFADDR_READER_FOREACH(ifa, ifp) {
2114 if (ifa->ifa_addr->sa_family == af)
2120 return ifa;
2130 struct ifaddr *ifa;
2142 IFADDR_READER_FOREACH(ifa, ifp) {
2143 if (ifa->ifa_addr->sa_family != af)
2145 ifa_maybe = ifa;
2146 if (ifa->ifa_netmask == NULL) {
2147 if (equal(addr, ifa->ifa_addr) ||
2148 (ifa->ifa_dstaddr &&
2149 equal(addr, ifa->ifa_dstaddr)))
2150 return ifa;
2154 cp2 = ifa->ifa_addr->sa_data;
2155 cp3 = ifa->ifa_netmask->sa_data;
2156 cplim = ifa->ifa_netmask->sa_len + (char *)ifa->ifa_netmask;
2162 return ifa;
2171 struct ifaddr *ifa;
2175 ifa = ifaof_ifpforaddr(addr, ifp);
2176 if (ifa != NULL)
2177 ifa_acquire(ifa, psref);
2180 return ifa;
2185 * Lookup an appropriate real ifa to point to.
2191 struct ifaddr *ifa;
2200 if ((ifa = ifaof_ifpforaddr_psref(dst, ifp, &psref)) != NULL) {
2201 rt_replace_ifa(rt, ifa);
2202 if (ifa->ifa_rtrequest && ifa->ifa_rtrequest != link_rtrequest)
2203 ifa->ifa_rtrequest(cmd, rt, info);
2204 ifa_release(ifa, &psref);
2484 struct ifaddr *ifa, *lo0ifa;
2497 IFADDR_READER_FOREACH(ifa, ifp) {
2498 if (equal(rt_getkey(rt), ifa->ifa_addr))
2501 if (ifa == NULL)
2509 ifa->ifa_addr->sa_family)
2520 if (ifa != rt->rt_ifa)
2521 rt_replace_ifa(rt, ifa);
2533 struct ifaddr *ifa;
2542 IFADDR_READER_FOREACH(ifa, ifp) {
2543 ifa_acquire(ifa, &psref);
2546 pfctlinput(PRC_IFDOWN, ifa->ifa_addr);
2549 ifa_release(ifa, &psref);
2603 struct ifaddr *ifa;
2614 IFADDR_READER_FOREACH(ifa, ifp)
2615 pfctlinput(PRC_IFUP, ifa->ifa_addr);
3375 struct ifaddr *ifa;
3414 IFADDR_READER_FOREACH(ifa, ifp) {
3415 if (ifa->ifa_addr->sa_family != sa->sa_family)
3417 sockaddr_externalize(&u.sa, sizeof(u.ss), ifa->ifa_addr);
3421 if (ifa == NULL) {
3428 ifa->ifa_preference = ifap->ifap_preference;
3433 sizeof(ifap->ifap_addr), ifa->ifa_addr);
3434 ifap->ifap_preference = ifa->ifa_preference;
3651 struct ifaddr *ifa;
3696 IFADDR_READER_FOREACH(ifa, ifp) {
3697 struct sockaddr *sa = ifa->ifa_addr;
3868 if_addr_init(ifnet_t *ifp, struct ifaddr *ifa, const bool src)
3874 rc = (*ifp->if_initaddr)(ifp, ifa, src);
3875 else if (src || (rc = if_ioctl(ifp, SIOCSIFDSTADDR, ifa)) == ENOTTY)
3876 rc = if_ioctl(ifp, SIOCINITIFADDR, ifa);