mirror of https://gitee.com/openkylin/linux.git
neighbour: confirm neigh entries when ARP packet is received
Update 'confirmed' timestamp when ARP packet is received. It shouldn't
affect locktime logic and anyway entry can be confirmed by any higher-layer
protocol. Thus it makes sense to confirm it when ARP packet is received.
Fixes: 77d7123342
("neighbour: update neigh timestamps iff update is effective")
Signed-off-by: Vasily Khoruzhick <vasilykh@arista.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
56a49d7048
commit
f0e0d04413
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue