diff options
Diffstat (limited to 'net/core/neighbour.c')
| -rw-r--r-- | net/core/neighbour.c | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index aa19d86937af..91592fceeaad 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -1180,6 +1180,12 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,  		lladdr = neigh->ha;  	} +	/* Update confirmed timestamp for neighbour entry after we +	 * received ARP packet even if it doesn't change IP to MAC binding. +	 */ +	if (new & NUD_CONNECTED) +		neigh->confirmed = jiffies; +  	/* If entry was valid and address is not changed,  	   do not change entry state, if new one is STALE.  	 */ @@ -1201,15 +1207,12 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,  		}  	} -	/* Update timestamps only once we know we will make a change to the +	/* Update timestamp only once we know we will make a change to the  	 * neighbour entry. Otherwise we risk to move the locktime window with  	 * noop updates and ignore relevant ARP updates.  	 */ -	if (new != old || lladdr != neigh->ha) { -		if (new & NUD_CONNECTED) -			neigh->confirmed = jiffies; +	if (new != old || lladdr != neigh->ha)  		neigh->updated = jiffies; -	}  	if (new != old) {  		neigh_del_timer(neigh);  |