Lines Matching refs:la

186     struct ifnet *ifp, int bridged, struct llentry *la);
187 static void arp_mark_lle_reachable(struct llentry *la, struct ifnet *ifp);
464 struct llentry *la = NULL, *la_tmp; in arpresolve_full() local
477 la = lla_lookup(LLTABLE(ifp), LLE_EXCLUSIVE, dst); in arpresolve_full()
478 if (la == NULL && (ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0) { in arpresolve_full()
479 la = lltable_alloc_entry(LLTABLE(ifp), 0, dst); in arpresolve_full()
480 if (la == NULL) { in arpresolve_full()
492 LLE_WLOCK(la); in arpresolve_full()
496 lltable_link_entry(LLTABLE(ifp), la); in arpresolve_full()
499 lltable_free_entry(LLTABLE(ifp), la); in arpresolve_full()
500 la = la_tmp; in arpresolve_full()
503 if (la == NULL) { in arpresolve_full()
508 if ((la->la_flags & LLE_VALID) && in arpresolve_full()
509 ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) { in arpresolve_full()
511 lladdr = la->ll_addr; in arpresolve_full()
514 lladdr = la->r_linkdata; in arpresolve_full()
515 ll_len = la->r_hdrlen; in arpresolve_full()
520 llentry_provide_feedback(la); in arpresolve_full()
522 *pflags = la->la_flags & (LLE_VALID|LLE_IFADDR); in arpresolve_full()
524 LLE_ADDREF(la); in arpresolve_full()
525 *plle = la; in arpresolve_full()
527 LLE_WUNLOCK(la); in arpresolve_full()
531 renew = (la->la_asked == 0 || la->la_expire != time_uptime); in arpresolve_full()
540 size_t dropped = lltable_append_entry_queue(la, m, V_arp_maxhold); in arpresolve_full()
550 if (la->la_asked < V_arp_maxtries) in arpresolve_full()
558 LLE_ADDREF(la); in arpresolve_full()
559 la->la_expire = time_uptime; in arpresolve_full()
560 canceled = callout_reset(&la->lle_timer, hz * V_arpt_down, in arpresolve_full()
561 arptimer, la); in arpresolve_full()
563 LLE_REMREF(la); in arpresolve_full()
564 la->la_asked++; in arpresolve_full()
565 LLE_WUNLOCK(la); in arpresolve_full()
576 LLE_WUNLOCK(la); in arpresolve_full()
601 struct llentry *la = NULL; in arpresolve() local
624 la = lla_lookup(LLTABLE(ifp), plle ? LLE_EXCLUSIVE : LLE_UNLOCKED, dst); in arpresolve()
625 if (la != NULL && (la->r_flags & RLLE_VALID) != 0) { in arpresolve()
627 bcopy(la->r_linkdata, desten, la->r_hdrlen); in arpresolve()
629 *pflags = LLE_VALID | (la->r_flags & RLLE_IFADDR); in arpresolve()
631 llentry_provide_feedback(la); in arpresolve()
633 LLE_ADDREF(la); in arpresolve()
634 *plle = la; in arpresolve()
635 LLE_WUNLOCK(la); in arpresolve()
639 if (plle && la) in arpresolve()
640 LLE_WUNLOCK(la); in arpresolve()
642 return (arpresolve_full(ifp, is_gw, la == NULL ? LLE_CREATE : 0, m, dst, in arpresolve()
770 struct llentry *la = NULL, *la_tmp; in in_arpinput() local
937 la = lla_lookup(LLTABLE(ifp), LLE_EXCLUSIVE, dst); in in_arpinput()
938 if (la != NULL) in in_arpinput()
939 arp_check_update_lle(ah, isaddr, ifp, bridged, la); in in_arpinput()
951 la = lltable_alloc_entry(LLTABLE(ifp), 0, dst); in in_arpinput()
952 if (la == NULL) { in in_arpinput()
961 lltable_set_entry_addr(ifp, la, linkhdr, linkhdrsize, in in_arpinput()
965 LLE_WLOCK(la); in in_arpinput()
985 lltable_link_entry(LLTABLE(ifp), la); in in_arpinput()
989 arp_mark_lle_reachable(la, ifp); in in_arpinput()
990 LLE_WUNLOCK(la); in in_arpinput()
993 lltable_free_entry(LLTABLE(ifp), la); in in_arpinput()
994 la = la_tmp; in in_arpinput()
996 arp_check_update_lle(ah, isaddr, ifp, bridged, la); in in_arpinput()
999 la = NULL; in in_arpinput()
1126 arp_grab_holdchain(struct llentry *la) in arp_grab_holdchain() argument
1130 LLE_WLOCK_ASSERT(la); in arp_grab_holdchain()
1132 chain = la->la_hold; in arp_grab_holdchain()
1133 la->la_hold = NULL; in arp_grab_holdchain()
1134 la->la_numheld = 0; in arp_grab_holdchain()
1140 arp_flush_holdchain(struct ifnet *ifp, struct llentry *la, struct mbuf *chain) in arp_flush_holdchain() argument
1148 .ro_prepend = la->r_linkdata, in arp_flush_holdchain()
1149 .ro_plen = la->r_hdrlen, in arp_flush_holdchain()
1152 lltable_fill_sa_entry(la, (struct sockaddr *)&sin); in arp_flush_holdchain()
1169 int bridged, struct llentry *la) in arp_check_update_lle() argument
1176 LLE_WLOCK_ASSERT(la); in arp_check_update_lle()
1179 if (!bridged && la->lle_tbl->llt_ifp != ifp) { in arp_check_update_lle()
1184 la->lle_tbl->llt_ifp->if_xname, in arp_check_update_lle()
1187 LLE_WUNLOCK(la); in arp_check_update_lle()
1190 if ((la->la_flags & LLE_VALID) && in arp_check_update_lle()
1191 bcmp(ar_sha(ah), la->ll_addr, ifp->if_addrlen)) { in arp_check_update_lle()
1192 if (la->la_flags & LLE_STATIC) { in arp_check_update_lle()
1193 LLE_WUNLOCK(la); in arp_check_update_lle()
1209 (u_char *)la->ll_addr, ":", in arp_check_update_lle()
1219 LLE_WUNLOCK(la); in arp_check_update_lle()
1224 if (memcmp(la->r_linkdata, linkhdr, linkhdrsize) != 0 || in arp_check_update_lle()
1225 (la->la_flags & LLE_VALID) == 0) { in arp_check_update_lle()
1227 if (lltable_try_set_entry_addr(ifp, la, linkhdr, linkhdrsize, in arp_check_update_lle()
1229 LLE_WUNLOCK(la); in arp_check_update_lle()
1234 llentry_mark_used(la); in arp_check_update_lle()
1237 arp_mark_lle_reachable(la, ifp); in arp_check_update_lle()
1246 if (la->la_hold != NULL) { in arp_check_update_lle()
1249 chain = arp_grab_holdchain(la); in arp_check_update_lle()
1250 LLE_WUNLOCK(la); in arp_check_update_lle()
1251 arp_flush_holdchain(ifp, la, chain); in arp_check_update_lle()
1253 LLE_WUNLOCK(la); in arp_check_update_lle()
1257 arp_mark_lle_reachable(struct llentry *la, struct ifnet *ifp) in arp_mark_lle_reachable() argument
1261 LLE_WLOCK_ASSERT(la); in arp_mark_lle_reachable()
1263 la->ln_state = ARP_LLINFO_REACHABLE; in arp_mark_lle_reachable()
1264 EVENTHANDLER_INVOKE(lle_event, la, LLENTRY_RESOLVED); in arp_mark_lle_reachable()
1267 la->la_flags |= LLE_STATIC; in arp_mark_lle_reachable()
1269 if (!(la->la_flags & LLE_STATIC)) { in arp_mark_lle_reachable()
1270 LLE_ADDREF(la); in arp_mark_lle_reachable()
1271 la->la_expire = time_uptime + V_arpt_keep; in arp_mark_lle_reachable()
1275 canceled = callout_reset(&la->lle_timer, in arp_mark_lle_reachable()
1276 hz * wtime, arptimer, la); in arp_mark_lle_reachable()
1278 LLE_REMREF(la); in arp_mark_lle_reachable()
1280 la->la_asked = 0; in arp_mark_lle_reachable()
1281 la->la_preempt = V_arp_maxtries; in arp_mark_lle_reachable()