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