Lines 2325-2340
in6_lltable_lookup(struct lltable *llt, u_int flags,
Link Here
|
2325 |
IF_AFDATA_LOCK_ASSERT(llt->llt_ifp); |
2325 |
IF_AFDATA_LOCK_ASSERT(llt->llt_ifp); |
2326 |
KASSERT(l3addr->sa_family == AF_INET6, |
2326 |
KASSERT(l3addr->sa_family == AF_INET6, |
2327 |
("sin_family %d", l3addr->sa_family)); |
2327 |
("sin_family %d", l3addr->sa_family)); |
|
|
2328 |
KASSERT((flags & (LLE_UNLOCKED | LLE_EXCLUSIVE)) != |
2329 |
(LLE_UNLOCKED | LLE_EXCLUSIVE), |
2330 |
("wrong lle request flags: %#x", flags)); |
2328 |
|
2331 |
|
2329 |
lle = in6_lltable_find_dst(llt, &sin6->sin6_addr); |
2332 |
lle = in6_lltable_find_dst(llt, &sin6->sin6_addr); |
2330 |
|
|
|
2331 |
if (lle == NULL) |
2333 |
if (lle == NULL) |
2332 |
return (NULL); |
2334 |
return (NULL); |
2333 |
|
|
|
2334 |
KASSERT((flags & (LLE_UNLOCKED|LLE_EXCLUSIVE)) != |
2335 |
(LLE_UNLOCKED|LLE_EXCLUSIVE),("wrong lle request flags: 0x%X", |
2336 |
flags)); |
2337 |
|
2338 |
if (flags & LLE_UNLOCKED) |
2335 |
if (flags & LLE_UNLOCKED) |
2339 |
return (lle); |
2336 |
return (lle); |
2340 |
|
2337 |
|
Lines 2342-2347
in6_lltable_lookup(struct lltable *llt, u_int flags,
Link Here
|
2342 |
LLE_WLOCK(lle); |
2339 |
LLE_WLOCK(lle); |
2343 |
else |
2340 |
else |
2344 |
LLE_RLOCK(lle); |
2341 |
LLE_RLOCK(lle); |
|
|
2342 |
if (__predict_false((lle->la_flags & LLE_LINKED) == 0)) { |
2343 |
if (flags & LLE_EXCLUSIVE) |
2344 |
LLE_WUNLOCK(lle); |
2345 |
else |
2346 |
LLE_RUNLOCK(lle); |
2347 |
return (lle); |
2348 |
} |
2345 |
return (lle); |
2349 |
return (lle); |
2346 |
} |
2350 |
} |
2347 |
|
2351 |
|