Lines Matching refs:la

187     struct ifnet *ifp, int bridged, struct llentry *la);
188 static void arp_mark_lle_reachable(struct llentry *la, struct ifnet *ifp);
465 struct llentry *la = NULL, *la_tmp; in arpresolve_full() local
478 la = lla_lookup(LLTABLE(ifp), LLE_EXCLUSIVE, dst); in arpresolve_full()
479 if (la == NULL && (ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0) { in arpresolve_full()
480 la = lltable_alloc_entry(LLTABLE(ifp), 0, dst); in arpresolve_full()
481 if (la == NULL) { in arpresolve_full()
493 LLE_WLOCK(la); in arpresolve_full()
497 lltable_link_entry(LLTABLE(ifp), la); in arpresolve_full()
500 lltable_free_entry(LLTABLE(ifp), la); in arpresolve_full()
501 la = la_tmp; in arpresolve_full()
504 if (la == NULL) { in arpresolve_full()
509 if ((la->la_flags & LLE_VALID) && in arpresolve_full()
510 ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) { in arpresolve_full()
512 lladdr = la->ll_addr; in arpresolve_full()
515 lladdr = la->r_linkdata; in arpresolve_full()
516 ll_len = la->r_hdrlen; in arpresolve_full()
521 llentry_provide_feedback(la); in arpresolve_full()
523 *pflags = la->la_flags & (LLE_VALID|LLE_IFADDR); in arpresolve_full()
525 LLE_ADDREF(la); in arpresolve_full()
526 *plle = la; in arpresolve_full()
528 LLE_WUNLOCK(la); in arpresolve_full()
532 renew = (la->la_asked == 0 || la->la_expire != time_uptime); in arpresolve_full()
541 size_t dropped = lltable_append_entry_queue(la, m, V_arp_maxhold); in arpresolve_full()
551 if (la->la_asked < V_arp_maxtries) in arpresolve_full()
559 LLE_ADDREF(la); in arpresolve_full()
560 la->la_expire = time_uptime; in arpresolve_full()
561 canceled = callout_reset(&la->lle_timer, hz * V_arpt_down, in arpresolve_full()
562 arptimer, la); in arpresolve_full()
564 LLE_REMREF(la); in arpresolve_full()
565 la->la_asked++; in arpresolve_full()
566 LLE_WUNLOCK(la); in arpresolve_full()
577 LLE_WUNLOCK(la); in arpresolve_full()
602 struct llentry *la = NULL; in arpresolve() local
625 la = lla_lookup(LLTABLE(ifp), plle ? LLE_EXCLUSIVE : LLE_UNLOCKED, dst); in arpresolve()
626 if (la != NULL && (la->r_flags & RLLE_VALID) != 0) { in arpresolve()
628 bcopy(la->r_linkdata, desten, la->r_hdrlen); in arpresolve()
630 *pflags = LLE_VALID | (la->r_flags & RLLE_IFADDR); in arpresolve()
632 llentry_provide_feedback(la); in arpresolve()
634 LLE_ADDREF(la); in arpresolve()
635 *plle = la; in arpresolve()
636 LLE_WUNLOCK(la); in arpresolve()
640 if (plle && la) in arpresolve()
641 LLE_WUNLOCK(la); in arpresolve()
643 return (arpresolve_full(ifp, is_gw, la == NULL ? LLE_CREATE : 0, m, dst, in arpresolve()
771 struct llentry *la = NULL, *la_tmp; in in_arpinput() local
938 la = lla_lookup(LLTABLE(ifp), LLE_EXCLUSIVE, dst); in in_arpinput()
939 if (la != NULL) in in_arpinput()
940 arp_check_update_lle(ah, isaddr, ifp, bridged, la); in in_arpinput()
952 la = lltable_alloc_entry(LLTABLE(ifp), 0, dst); in in_arpinput()
953 if (la == NULL) { in in_arpinput()
962 lltable_set_entry_addr(ifp, la, linkhdr, linkhdrsize, in in_arpinput()
966 LLE_WLOCK(la); in in_arpinput()
986 lltable_link_entry(LLTABLE(ifp), la); in in_arpinput()
990 arp_mark_lle_reachable(la, ifp); in in_arpinput()
991 LLE_WUNLOCK(la); in in_arpinput()
994 lltable_free_entry(LLTABLE(ifp), la); in in_arpinput()
995 la = la_tmp; in in_arpinput()
997 arp_check_update_lle(ah, isaddr, ifp, bridged, la); in in_arpinput()
1000 la = NULL; in in_arpinput()
1127 arp_grab_holdchain(struct llentry *la) in arp_grab_holdchain() argument
1131 LLE_WLOCK_ASSERT(la); in arp_grab_holdchain()
1133 chain = la->la_hold; in arp_grab_holdchain()
1134 la->la_hold = NULL; in arp_grab_holdchain()
1135 la->la_numheld = 0; in arp_grab_holdchain()
1141 arp_flush_holdchain(struct ifnet *ifp, struct llentry *la, struct mbuf *chain) in arp_flush_holdchain() argument
1149 .ro_prepend = la->r_linkdata, in arp_flush_holdchain()
1150 .ro_plen = la->r_hdrlen, in arp_flush_holdchain()
1153 lltable_fill_sa_entry(la, (struct sockaddr *)&sin); in arp_flush_holdchain()
1170 int bridged, struct llentry *la) in arp_check_update_lle() argument
1177 LLE_WLOCK_ASSERT(la); in arp_check_update_lle()
1180 if (!bridged && la->lle_tbl->llt_ifp != ifp) { in arp_check_update_lle()
1185 la->lle_tbl->llt_ifp->if_xname, in arp_check_update_lle()
1188 LLE_WUNLOCK(la); in arp_check_update_lle()
1191 if ((la->la_flags & LLE_VALID) && in arp_check_update_lle()
1192 bcmp(ar_sha(ah), la->ll_addr, ifp->if_addrlen)) { in arp_check_update_lle()
1193 if (la->la_flags & LLE_STATIC) { in arp_check_update_lle()
1194 LLE_WUNLOCK(la); in arp_check_update_lle()
1210 (u_char *)la->ll_addr, ":", in arp_check_update_lle()
1220 LLE_WUNLOCK(la); in arp_check_update_lle()
1225 if (memcmp(la->r_linkdata, linkhdr, linkhdrsize) != 0 || in arp_check_update_lle()
1226 (la->la_flags & LLE_VALID) == 0) { in arp_check_update_lle()
1228 if (lltable_try_set_entry_addr(ifp, la, linkhdr, linkhdrsize, in arp_check_update_lle()
1230 LLE_WUNLOCK(la); in arp_check_update_lle()
1235 llentry_mark_used(la); in arp_check_update_lle()
1238 arp_mark_lle_reachable(la, ifp); in arp_check_update_lle()
1247 if (la->la_hold != NULL) { in arp_check_update_lle()
1250 chain = arp_grab_holdchain(la); in arp_check_update_lle()
1251 LLE_WUNLOCK(la); in arp_check_update_lle()
1252 arp_flush_holdchain(ifp, la, chain); in arp_check_update_lle()
1254 LLE_WUNLOCK(la); in arp_check_update_lle()
1258 arp_mark_lle_reachable(struct llentry *la, struct ifnet *ifp) in arp_mark_lle_reachable() argument
1262 LLE_WLOCK_ASSERT(la); in arp_mark_lle_reachable()
1264 la->ln_state = ARP_LLINFO_REACHABLE; in arp_mark_lle_reachable()
1265 EVENTHANDLER_INVOKE(lle_event, la, LLENTRY_RESOLVED); in arp_mark_lle_reachable()
1268 la->la_flags |= LLE_STATIC; in arp_mark_lle_reachable()
1270 if (!(la->la_flags & LLE_STATIC)) { in arp_mark_lle_reachable()
1271 LLE_ADDREF(la); in arp_mark_lle_reachable()
1272 la->la_expire = time_uptime + V_arpt_keep; in arp_mark_lle_reachable()
1276 canceled = callout_reset(&la->lle_timer, in arp_mark_lle_reachable()
1277 hz * wtime, arptimer, la); in arp_mark_lle_reachable()
1279 LLE_REMREF(la); in arp_mark_lle_reachable()
1281 la->la_asked = 0; in arp_mark_lle_reachable()
1282 la->la_preempt = V_arp_maxtries; in arp_mark_lle_reachable()