commit fbe7a2edb44916b481515c1a777333c5df3c9f00 Author: Ryota Ozaki Date: Mon Jun 29 12:24:58 2015 +0900 Remove ifnet_addrs We can assume that ifp->if_dl is the same as ifnet_addrs[ifp->if_index] so we can replace ifnet_addrs[ifp->if_index] with ifp->if_dl and remove ifnet_addrs entirely. diff --git a/sys/net/if.c b/sys/net/if.c index dc69e5a..a8e9e7c 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -169,8 +169,6 @@ static uint64_t index_gen; static kmutex_t index_gen_mtx; static kmutex_t if_clone_mtx; -static struct ifaddr ** ifnet_addrs = NULL; - struct ifnet *lo0ifp; int ifqmaxlen = IFQ_MAXLEN; @@ -407,8 +405,7 @@ static void if_sadl_setrefs(struct ifnet *ifp, struct ifaddr *ifa) { const struct sockaddr_dl *sdl; - ifnet_addrs[ifp->if_index] = ifa; - ifaref(ifa); + ifp->if_dl = ifa; ifaref(ifa); sdl = satosdl(ifa->ifa_addr); @@ -452,8 +449,6 @@ if_deactivate_sadl(struct ifnet *ifp) ifp->if_sadl = NULL; - ifnet_addrs[ifp->if_index] = NULL; - ifafree(ifa); ifp->if_dl = NULL; ifafree(ifa); } @@ -484,15 +479,13 @@ if_free_sadl(struct ifnet *ifp) struct ifaddr *ifa; int s; - ifa = ifnet_addrs[ifp->if_index]; + ifa = ifp->if_dl; if (ifa == NULL) { KASSERT(ifp->if_sadl == NULL); - KASSERT(ifp->if_dl == NULL); return; } KASSERT(ifp->if_sadl != NULL); - KASSERT(ifp->if_dl != NULL); s = splnet(); rtinit(ifa, RTM_DELETE, 0); @@ -547,13 +540,10 @@ if_getindex(ifnet_t *ifp) } skip: /* - * We have some arrays that should be indexed by if_index. - * since if_index will grow dynamically, they should grow too. - * struct ifadd **ifnet_addrs - * struct ifnet **ifindex2ifnet + * ifindex2ifnet is indexed by if_index. Since if_index will + * grow dynamically, it should grow too. */ - if (ifnet_addrs == NULL || ifindex2ifnet == NULL || - ifp->if_index >= if_indexlim) { + if (ifindex2ifnet == NULL || ifp->if_index >= if_indexlim) { size_t m, n, oldlim; void *q; @@ -561,16 +551,6 @@ skip: while (ifp->if_index >= if_indexlim) if_indexlim <<= 1; - /* grow ifnet_addrs */ - m = oldlim * sizeof(struct ifaddr *); - n = if_indexlim * sizeof(struct ifaddr *); - q = malloc(n, M_IFADDR, M_WAITOK|M_ZERO); - if (ifnet_addrs != NULL) { - memcpy(q, ifnet_addrs, m); - free(ifnet_addrs, M_IFADDR); - } - ifnet_addrs = (struct ifaddr **)q; - /* grow ifindex2ifnet */ m = oldlim * sizeof(struct ifnet *); n = if_indexlim * sizeof(struct ifnet *); @@ -1260,8 +1240,9 @@ ifa_ifwithnet(const struct sockaddr *addr) sdl = satocsdl(addr); if (sdl->sdl_index && sdl->sdl_index < if_indexlim && ifindex2ifnet[sdl->sdl_index] && - ifindex2ifnet[sdl->sdl_index]->if_output != if_nulloutput) - return ifnet_addrs[sdl->sdl_index]; + ifindex2ifnet[sdl->sdl_index]->if_output != if_nulloutput) { + return ifindex2ifnet[sdl->sdl_index]->if_dl; + } } #ifdef NETATALK if (af == AF_APPLETALK) {