|
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 |
|