Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet6/in6.c
Show First 20 Lines • Show All 2,346 Lines • ▼ Show 20 Lines | in6_lltable_lookup(struct lltable *llt, u_int flags, | ||||
IF_AFDATA_LOCK_ASSERT(llt->llt_ifp); | IF_AFDATA_LOCK_ASSERT(llt->llt_ifp); | ||||
KASSERT(l3addr->sa_family == AF_INET6, | KASSERT(l3addr->sa_family == AF_INET6, | ||||
("sin_family %d", l3addr->sa_family)); | ("sin_family %d", l3addr->sa_family)); | ||||
KASSERT((flags & (LLE_UNLOCKED | LLE_EXCLUSIVE)) != | KASSERT((flags & (LLE_UNLOCKED | LLE_EXCLUSIVE)) != | ||||
(LLE_UNLOCKED | LLE_EXCLUSIVE), | (LLE_UNLOCKED | LLE_EXCLUSIVE), | ||||
("wrong lle request flags: %#x", flags)); | ("wrong lle request flags: %#x", flags)); | ||||
lle = in6_lltable_find_dst(llt, &sin6->sin6_addr); | lle = in6_lltable_find_dst(llt, &sin6->sin6_addr); | ||||
int family = flags >> 16; | |||||
if (__predict_false(family != AF_INET6)) | |||||
lle = llentry_lookup_family(lle, family); | |||||
if (lle == NULL) | if (lle == NULL) | ||||
return (NULL); | return (NULL); | ||||
if (flags & LLE_UNLOCKED) | if (flags & LLE_UNLOCKED) | ||||
return (lle); | return (lle); | ||||
if (flags & LLE_EXCLUSIVE) | if (flags & LLE_EXCLUSIVE) | ||||
LLE_WLOCK(lle); | LLE_WLOCK(lle); | ||||
else | else | ||||
▲ Show 20 Lines • Show All 235 Lines • Show Last 20 Lines |