MCPcopy Create free account
hub / github.com/F-Stack/f-stack / toe_lle_event

Function toe_lle_event

freebsd/netinet/toecore.c:404–455  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

402}
403
404static void
405toe_lle_event(void *arg __unused, struct llentry *lle, int evt)
406{
407 struct toedev *tod;
408 struct ifnet *ifp;
409 struct sockaddr *sa;
410 uint8_t *lladdr;
411 uint16_t vid, pcp;
412 int family;
413 struct sockaddr_in6 sin6;
414
415 LLE_WLOCK_ASSERT(lle);
416
417 ifp = lltable_get_ifp(lle->lle_tbl);
418 family = lltable_get_af(lle->lle_tbl);
419
420 if (family != AF_INET && family != AF_INET6)
421 return;
422 /*
423 * Not interested if the interface's TOE capability is not enabled.
424 */
425 if ((family == AF_INET && !(ifp->if_capenable & IFCAP_TOE4)) ||
426 (family == AF_INET6 && !(ifp->if_capenable & IFCAP_TOE6)))
427 return;
428
429 tod = TOEDEV(ifp);
430 if (tod == NULL)
431 return;
432
433 sa = (struct sockaddr *)&sin6;
434 lltable_fill_sa_entry(lle, sa);
435
436 vid = 0xfff;
437 pcp = 0;
438 if (evt != LLENTRY_RESOLVED) {
439 /*
440 * LLENTRY_TIMEDOUT, LLENTRY_DELETED, LLENTRY_EXPIRED all mean
441 * this entry is going to be deleted.
442 */
443
444 lladdr = NULL;
445 } else {
446 KASSERT(lle->la_flags & LLE_VALID,
447 ("%s: %p resolved but not valid?", __func__, lle));
448
449 lladdr = (uint8_t *)lle->ll_addr;
450 VLAN_TAG(ifp, &vid);
451 VLAN_PCP(ifp, &pcp);
452 }
453
454 tod->tod_l2_update(tod, ifp, sa, lladdr, EVL_MAKETAG(vid, pcp, 0));
455}
456
457/*
458 * Returns 0 or EWOULDBLOCK on success (any other value is an error). 0 means

Callers

nothing calls this directly

Calls 3

lltable_get_ifpFunction · 0.85
lltable_get_afFunction · 0.85
lltable_fill_sa_entryFunction · 0.85

Tested by

no test coverage detected