Lines Matching refs:la

175     struct ifnet *ifp, int bridged, struct llentry *la);
176 static void arp_mark_lle_reachable(struct llentry *la);
447 struct llentry *la = NULL, *la_tmp;
461 la = lla_lookup(LLTABLE(ifp), LLE_EXCLUSIVE, dst);
464 if (la == NULL && (ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0) {
465 la = lltable_alloc_entry(LLTABLE(ifp), 0, dst);
466 if (la == NULL) {
478 LLE_WLOCK(la);
482 lltable_link_entry(LLTABLE(ifp), la);
485 lltable_free_entry(LLTABLE(ifp), la);
486 la = la_tmp;
489 if (la == NULL) {
494 if ((la->la_flags & LLE_VALID) &&
495 ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) {
497 lladdr = la->ll_addr;
500 lladdr = la->r_linkdata;
501 ll_len = la->r_hdrlen;
506 llentry_mark_used(la);
508 *pflags = la->la_flags & (LLE_VALID|LLE_IFADDR);
510 LLE_ADDREF(la);
511 *plle = la;
513 LLE_WUNLOCK(la);
517 renew = (la->la_asked == 0 || la->la_expire != time_uptime);
525 if (la->la_numheld >= V_arp_maxhold) {
526 if (la->la_hold != NULL) {
527 next = la->la_hold->m_nextpkt;
528 m_freem(la->la_hold);
529 la->la_hold = next;
530 la->la_numheld--;
534 if (la->la_hold != NULL) {
535 curr = la->la_hold;
540 la->la_hold = m;
541 la->la_numheld++;
549 if (la->la_asked < V_arp_maxtries)
557 LLE_ADDREF(la);
558 la->la_expire = time_uptime;
559 canceled = callout_reset(&la->lle_timer, hz * V_arpt_down,
560 arptimer, la);
562 LLE_REMREF(la);
563 la->la_asked++;
564 LLE_WUNLOCK(la);
569 LLE_WUNLOCK(la);
609 struct llentry *la = NULL;
631 la = lla_lookup(LLTABLE(ifp), plle ? LLE_EXCLUSIVE : LLE_UNLOCKED, dst);
632 if (la != NULL && (la->r_flags & RLLE_VALID) != 0) {
634 bcopy(la->r_linkdata, desten, la->r_hdrlen);
636 *pflags = LLE_VALID | (la->r_flags & RLLE_IFADDR);
638 llentry_mark_used(la);
640 LLE_ADDREF(la);
641 *plle = la;
642 LLE_WUNLOCK(la);
647 if (plle && la)
648 LLE_WUNLOCK(la);
651 return (arpresolve_full(ifp, is_gw, la == NULL ? LLE_CREATE : 0, m, dst,
784 struct llentry *la = NULL, *la_tmp;
962 la = lla_lookup(LLTABLE(ifp), LLE_EXCLUSIVE, dst);
964 if (la != NULL)
965 arp_check_update_lle(ah, isaddr, ifp, bridged, la);
977 la = lltable_alloc_entry(LLTABLE(ifp), 0, dst);
978 if (la == NULL) {
988 lltable_set_entry_addr(ifp, la, linkhdr, linkhdrsize,
992 LLE_WLOCK(la);
1012 lltable_link_entry(LLTABLE(ifp), la);
1016 arp_mark_lle_reachable(la);
1017 LLE_WUNLOCK(la);
1020 lltable_free_entry(LLTABLE(ifp), la);
1021 la = la_tmp;
1023 arp_check_update_lle(ah, isaddr, ifp, bridged, la);
1024 /* arp_check_update_lle() returns @la unlocked */
1026 la = NULL;
1151 * Checks received arp data against existing @la.
1156 int bridged, struct llentry *la)
1165 LLE_WLOCK_ASSERT(la);
1168 if (!bridged && la->lle_tbl->llt_ifp != ifp) {
1173 la->lle_tbl->llt_ifp->if_xname,
1176 LLE_WUNLOCK(la);
1179 if ((la->la_flags & LLE_VALID) &&
1180 bcmp(ar_sha(ah), la->ll_addr, ifp->if_addrlen)) {
1181 if (la->la_flags & LLE_STATIC) {
1182 LLE_WUNLOCK(la);
1198 (u_char *)la->ll_addr, ":",
1211 if (memcmp(la->r_linkdata, linkhdr, linkhdrsize) != 0 ||
1212 (la->la_flags & LLE_VALID) == 0) {
1214 if (lltable_try_set_entry_addr(ifp, la, linkhdr, linkhdrsize,
1219 la->r_skip_req = 0;
1222 arp_mark_lle_reachable(la);
1231 if (la->la_hold != NULL) {
1232 m_hold = la->la_hold;
1233 la->la_hold = NULL;
1234 la->la_numheld = 0;
1235 lltable_fill_sa_entry(la, &sa);
1236 LLE_WUNLOCK(la);
1245 LLE_WUNLOCK(la);
1249 arp_mark_lle_reachable(struct llentry *la)
1253 LLE_WLOCK_ASSERT(la);
1255 la->ln_state = ARP_LLINFO_REACHABLE;
1256 EVENTHANDLER_INVOKE(lle_event, la, LLENTRY_RESOLVED);
1258 if (!(la->la_flags & LLE_STATIC)) {
1259 LLE_ADDREF(la);
1260 la->la_expire = time_uptime + V_arpt_keep;
1264 canceled = callout_reset(&la->lle_timer,
1265 hz * wtime, arptimer, la);
1267 LLE_REMREF(la);
1269 la->la_asked = 0;
1270 la->la_preempt = V_arp_maxtries;