The llentry_update() is used only by flowtable and the latter
always passes NULL pointer to it. Thus, code can be simplified and function renamed to llentry_alloc() to match rtalloc().
This commit is contained in:
parent
55897c521e
commit
34fe3f296a
@ -1258,7 +1258,7 @@ flowtable_lookup(struct flowtable *ft, struct sockaddr_storage *ssa,
|
||||
|
||||
else
|
||||
l3addr = (struct sockaddr_storage *)&ro->ro_dst;
|
||||
llentry_update(&lle, LLTABLE6(ifp), l3addr, ifp);
|
||||
lle = llentry_alloc(ifp, LLTABLE6(ifp), l3addr);
|
||||
}
|
||||
#endif
|
||||
#ifdef INET
|
||||
@ -1267,7 +1267,7 @@ flowtable_lookup(struct flowtable *ft, struct sockaddr_storage *ssa,
|
||||
l3addr = (struct sockaddr_storage *)rt->rt_gateway;
|
||||
else
|
||||
l3addr = (struct sockaddr_storage *)&ro->ro_dst;
|
||||
llentry_update(&lle, LLTABLE(ifp), l3addr, ifp);
|
||||
lle = llentry_alloc(ifp, LLTABLE(ifp), l3addr);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -129,42 +129,33 @@ llentry_free(struct llentry *lle)
|
||||
}
|
||||
|
||||
/*
|
||||
* Update an llentry for address dst (equivalent to rtalloc for new-arp)
|
||||
* Caller must pass in a valid struct llentry * (or NULL)
|
||||
* (al)locate an llentry for address dst (equivalent to rtalloc for new-arp).
|
||||
*
|
||||
* if found the llentry * is returned referenced and unlocked
|
||||
* If found the llentry * is returned referenced and unlocked.
|
||||
*/
|
||||
int
|
||||
llentry_update(struct llentry **llep, struct lltable *lt,
|
||||
struct sockaddr_storage *dst, struct ifnet *ifp)
|
||||
struct llentry *
|
||||
llentry_alloc(struct ifnet *ifp, struct lltable *lt,
|
||||
struct sockaddr_storage *dst)
|
||||
{
|
||||
struct llentry *la;
|
||||
|
||||
IF_AFDATA_RLOCK(ifp);
|
||||
la = lla_lookup(lt, LLE_EXCLUSIVE,
|
||||
(struct sockaddr *)dst);
|
||||
la = lla_lookup(lt, LLE_EXCLUSIVE, (struct sockaddr *)dst);
|
||||
IF_AFDATA_RUNLOCK(ifp);
|
||||
if ((la == NULL) &&
|
||||
(ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0) {
|
||||
IF_AFDATA_WLOCK(ifp);
|
||||
la = lla_lookup(lt,
|
||||
(LLE_CREATE | LLE_EXCLUSIVE),
|
||||
la = lla_lookup(lt, (LLE_CREATE | LLE_EXCLUSIVE),
|
||||
(struct sockaddr *)dst);
|
||||
IF_AFDATA_WUNLOCK(ifp);
|
||||
}
|
||||
if (la != NULL && (*llep != la)) {
|
||||
if (*llep != NULL)
|
||||
LLE_FREE(*llep);
|
||||
|
||||
if (la != NULL) {
|
||||
LLE_ADDREF(la);
|
||||
LLE_WUNLOCK(la);
|
||||
*llep = la;
|
||||
} else if (la != NULL)
|
||||
LLE_WUNLOCK(la);
|
||||
}
|
||||
|
||||
if (la == NULL)
|
||||
return (ENOENT);
|
||||
|
||||
return (0);
|
||||
return (la);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -189,8 +189,8 @@ void lltable_drain(int);
|
||||
int lltable_sysctl_dumparp(int, struct sysctl_req *);
|
||||
|
||||
size_t llentry_free(struct llentry *);
|
||||
int llentry_update(struct llentry **, struct lltable *,
|
||||
struct sockaddr_storage *, struct ifnet *);
|
||||
struct llentry *llentry_alloc(struct ifnet *, struct lltable *,
|
||||
struct sockaddr_storage *);
|
||||
|
||||
/*
|
||||
* Generic link layer address lookup function.
|
||||
|
Loading…
Reference in New Issue
Block a user