| From foo@baz Wed Sep 26 13:12:43 CEST 2018 |
| From: Vasily Khoruzhick <vasilykh@arista.com> |
| Date: Thu, 13 Sep 2018 11:12:03 -0700 |
| Subject: neighbour: confirm neigh entries when ARP packet is received |
| |
| From: Vasily Khoruzhick <vasilykh@arista.com> |
| |
| [ Upstream commit f0e0d04413fcce9bc76388839099aee93cd0d33b ] |
| |
| 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: 77d7123342dc ("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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/core/neighbour.c | 13 ++++++++----- |
| 1 file changed, 8 insertions(+), 5 deletions(-) |
| |
| --- a/net/core/neighbour.c |
| +++ b/net/core/neighbour.c |
| @@ -1140,6 +1140,12 @@ int neigh_update(struct neighbour *neigh |
| 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. |
| */ |
| @@ -1163,15 +1169,12 @@ int neigh_update(struct neighbour *neigh |
| } |
| } |
| |
| - /* 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); |