| From 440c562421ff37ac9e6c6a1d3b3e17e900134c68 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@c0d3.blue> |
| Date: Thu, 14 Feb 2019 16:52:43 +0100 |
| Subject: batman-adv: allow updating DAT entry timeouts on incoming ARP Replies |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| [ Upstream commit 099e6cc1582dc2903fecb898bbeae8f7cf4262c7 ] |
| |
| Currently incoming ARP Replies, for example via a DHT-PUT message, do |
| not update the timeout for an already existing DAT entry. These ARP |
| Replies are dropped instead. |
| |
| This however defeats the purpose of the DHCPACK snooping, for instance. |
| Right now, a DAT entry in the DHT will be purged every five minutes, |
| likely leading to a mesh-wide ARP Request broadcast after this timeout. |
| Which then recreates the entry. The idea of the DHCPACK snooping is to |
| be able to update an entry before a timeout happens, to avoid ARP Request |
| flooding. |
| |
| This patch fixes this issue by updating a DAT entry on incoming |
| ARP Replies even if a matching DAT entry already exists. While still |
| filtering the ARP Reply towards the soft-interface, to avoid duplicate |
| messages on the client device side. |
| |
| Signed-off-by: Linus LΓΌssing <linus.luessing@c0d3.blue> |
| Acked-by: Antonio Quartulli <a@unstable.cc> |
| Signed-off-by: Sven Eckelmann <sven@narfation.org> |
| Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/batman-adv/distributed-arp-table.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c |
| index 310a4f353008d..8d290da0d5967 100644 |
| --- a/net/batman-adv/distributed-arp-table.c |
| +++ b/net/batman-adv/distributed-arp-table.c |
| @@ -1444,7 +1444,6 @@ bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv, |
| hw_src, &ip_src, hw_dst, &ip_dst, |
| dat_entry->mac_addr, &dat_entry->ip); |
| dropped = true; |
| - goto out; |
| } |
| |
| /* Update our internal cache with both the IP addresses the node got |
| @@ -1453,6 +1452,9 @@ bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv, |
| batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); |
| batadv_dat_entry_add(bat_priv, ip_dst, hw_dst, vid); |
| |
| + if (dropped) |
| + goto out; |
| + |
| /* If BLA is enabled, only forward ARP replies if we have claimed the |
| * source of the ARP reply or if no one else of the same backbone has |
| * already claimed that client. This prevents that different gateways |
| -- |
| 2.20.1 |
| |