Reduce timer churn in NUD

PiperOrigin-RevId: 438852403
This commit is contained in:
Tamir Duberstein
2022-04-01 10:20:04 -07:00
committed by gVisor bot
parent eb7434349c
commit f48ef67985
+6 -6
View File
@@ -592,13 +592,13 @@ func (e *neighborEntry) handleConfirmationLocked(linkAddr tcpip.LinkAddress, fla
// Precondition: e.mu MUST be locked.
func (e *neighborEntry) handleUpperLevelConfirmationLocked() {
switch e.mu.neigh.State {
case Reachable, Stale, Delay, Probe:
wasReachable := e.mu.neigh.State == Reachable
// Set state to Reachable again to refresh timers.
case Stale, Delay, Probe:
e.setStateLocked(Reachable)
if !wasReachable {
e.dispatchChangeEventLocked()
}
e.dispatchChangeEventLocked()
case Reachable:
// Avoid setStateLocked; Timer.Reset is cheaper.
e.mu.timer.timer.Reset(e.nudState.ReachableTime())
case Unknown, Incomplete, Unreachable, Static:
// Do nothing