Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet6/nd6.c
Show First 20 Lines • Show All 692 Lines • ▼ Show 20 Lines | nd6_llinfo_setstate(struct llentry *lle, int newstate) | ||||
remtime = 0; | remtime = 0; | ||||
switch (newstate) { | switch (newstate) { | ||||
case ND6_LLINFO_INCOMPLETE: | case ND6_LLINFO_INCOMPLETE: | ||||
ifp = lle->lle_tbl->llt_ifp; | ifp = lle->lle_tbl->llt_ifp; | ||||
delay = (long)ND_IFINFO(ifp)->retrans * hz / 1000; | delay = (long)ND_IFINFO(ifp)->retrans * hz / 1000; | ||||
break; | break; | ||||
case ND6_LLINFO_REACHABLE: | case ND6_LLINFO_REACHABLE: | ||||
if (!ND6_LLINFO_PERMANENT(lle)) { | |||||
ifp = lle->lle_tbl->llt_ifp; | ifp = lle->lle_tbl->llt_ifp; | ||||
if (!ND6_LLINFO_PERMANENT(lle)) | |||||
delay = (long)ND_IFINFO(ifp)->reachable * hz; | delay = (long)ND_IFINFO(ifp)->reachable * hz; | ||||
} | nhops_stop_feedback(ifp, AF_INET6, lle); | ||||
break; | break; | ||||
case ND6_LLINFO_STALE: | case ND6_LLINFO_STALE: | ||||
llentry_request_feedback(lle); | llentry_request_feedback(lle); | ||||
nd_delay = V_nd6_delay; | nd_delay = V_nd6_delay; | ||||
nd_gctimer = V_nd6_gctimer; | nd_gctimer = V_nd6_gctimer; | ||||
delay = (long)(MIN(nd_gctimer, nd_delay)) * hz; | delay = (long)(MIN(nd_gctimer, nd_delay)) * hz; | ||||
▲ Show 20 Lines • Show All 702 Lines • ▼ Show 20 Lines | nd6_try_set_entry_addr_locked(struct ifnet *ifp, struct llentry *lle, char *lladdr) | ||||
size_t sz; | size_t sz; | ||||
sz = sizeof(buf); | sz = sizeof(buf); | ||||
if (lltable_calc_llheader(ifp, AF_INET6, lladdr, buf, &sz, &off) != 0) | if (lltable_calc_llheader(ifp, AF_INET6, lladdr, buf, &sz, &off) != 0) | ||||
return (false); | return (false); | ||||
/* Update data */ | /* Update data */ | ||||
lltable_set_entry_addr(ifp, lle, buf, sz, off); | lltable_set_entry_addr(ifp, lle, buf, sz, off); | ||||
nhops_update_neigh(ifp, AF_INET6, lle); | |||||
struct llentry *child_lle; | struct llentry *child_lle; | ||||
CK_SLIST_FOREACH(child_lle, &lle->lle_children, lle_child_next) { | CK_SLIST_FOREACH(child_lle, &lle->lle_children, lle_child_next) { | ||||
LLE_WLOCK(child_lle); | LLE_WLOCK(child_lle); | ||||
fam = child_lle->r_family; | fam = child_lle->r_family; | ||||
sz = sizeof(buf); | sz = sizeof(buf); | ||||
if (lltable_calc_llheader(ifp, fam, lladdr, buf, &sz, &off) == 0) { | if (lltable_calc_llheader(ifp, fam, lladdr, buf, &sz, &off) == 0) { | ||||
/* success */ | /* success */ | ||||
lltable_set_entry_addr(ifp, child_lle, buf, sz, off); | lltable_set_entry_addr(ifp, child_lle, buf, sz, off); | ||||
nhops_update_neigh(ifp, AF_INET6, child_lle); | |||||
child_lle->ln_state = ND6_LLINFO_REACHABLE; | child_lle->ln_state = ND6_LLINFO_REACHABLE; | ||||
} | } | ||||
LLE_WUNLOCK(child_lle); | LLE_WUNLOCK(child_lle); | ||||
} | } | ||||
return (true); | return (true); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 607 Lines • ▼ Show 20 Lines | if (ln == NULL) { | ||||
/* Prefer any existing lle over newly-created one */ | /* Prefer any existing lle over newly-created one */ | ||||
ln_tmp = nd6_lookup(from, LLE_SF(AF_INET6, LLE_EXCLUSIVE), ifp); | ln_tmp = nd6_lookup(from, LLE_SF(AF_INET6, LLE_EXCLUSIVE), ifp); | ||||
if (ln_tmp == NULL) | if (ln_tmp == NULL) | ||||
lltable_link_entry(LLTABLE6(ifp), ln); | lltable_link_entry(LLTABLE6(ifp), ln); | ||||
IF_AFDATA_WUNLOCK(ifp); | IF_AFDATA_WUNLOCK(ifp); | ||||
if (ln_tmp == NULL) { | if (ln_tmp == NULL) { | ||||
/* No existing lle, mark as new entry (6,7) */ | /* No existing lle, mark as new entry (6,7) */ | ||||
is_newentry = 1; | is_newentry = 1; | ||||
nhops_update_neigh(ifp, AF_INET6, ln); | |||||
if (lladdr != NULL) { /* (7) */ | if (lladdr != NULL) { /* (7) */ | ||||
nd6_llinfo_setstate(ln, ND6_LLINFO_STALE); | nd6_llinfo_setstate(ln, ND6_LLINFO_STALE); | ||||
EVENTHANDLER_INVOKE(lle_event, ln, | EVENTHANDLER_INVOKE(lle_event, ln, | ||||
LLENTRY_RESOLVED); | LLENTRY_RESOLVED); | ||||
} | } | ||||
} else { | } else { | ||||
lltable_free_entry(LLTABLE6(ifp), ln); | lltable_free_entry(LLTABLE6(ifp), ln); | ||||
ln = ln_tmp; | ln = ln_tmp; | ||||
▲ Show 20 Lines • Show All 732 Lines • Show Last 20 Lines |