summaryrefslogtreecommitdiff
path: root/batman-adv/patches/0006-batman-adv-don-t-add-loop-detect-macs-to-TT.patch
diff options
context:
space:
mode:
Diffstat (limited to 'batman-adv/patches/0006-batman-adv-don-t-add-loop-detect-macs-to-TT.patch')
-rw-r--r--batman-adv/patches/0006-batman-adv-don-t-add-loop-detect-macs-to-TT.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/batman-adv/patches/0006-batman-adv-don-t-add-loop-detect-macs-to-TT.patch b/batman-adv/patches/0006-batman-adv-don-t-add-loop-detect-macs-to-TT.patch
new file mode 100644
index 0000000..d2ced52
--- /dev/null
+++ b/batman-adv/patches/0006-batman-adv-don-t-add-loop-detect-macs-to-TT.patch
@@ -0,0 +1,67 @@
+From: Simon Wunderlich <simon.wunderlich@open-mesh.com>
+Date: Thu, 24 Nov 2016 16:11:01 +0100
+Subject: [PATCH] batman-adv: don't add loop detect macs to TT
+
+The bridge loop avoidance (BLA) feature of batman-adv sends packets to
+probe for Mesh/LAN packet loops. Those packets are not sent by real
+clients and should therefore not be added to the translation table (TT).
+
+Signed-off-by: Simon Wunderlich <simon.wunderlich@open-mesh.com>
+Signed-off-by: Sven Eckelmann <sven@narfation.org>
+
+Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/447df986b83630a92ca9d33903023b7e1b2917f3
+---
+ net/batman-adv/bridge_loop_avoidance.h | 18 ++++++++++++++++++
+ net/batman-adv/soft-interface.c | 3 ++-
+ 2 files changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/net/batman-adv/bridge_loop_avoidance.h b/net/batman-adv/bridge_loop_avoidance.h
+index 1ae93e46fb98498c00082728ca91216d78e13298..2827cd3c13d2a35a3b296340a0aa123dbd032926 100644
+--- a/net/batman-adv/bridge_loop_avoidance.h
++++ b/net/batman-adv/bridge_loop_avoidance.h
+@@ -20,6 +20,8 @@
+
+ #include "main.h"
+
++#include <linux/compiler.h>
++#include <linux/stddef.h>
+ #include <linux/types.h>
+
+ struct net_device;
+@@ -27,6 +29,22 @@ struct netlink_callback;
+ struct seq_file;
+ struct sk_buff;
+
++/**
++ * batadv_bla_is_loopdetect_mac - check if the mac address is from a loop detect
++ * frame sent by bridge loop avoidance
++ * @mac: mac address to check
++ *
++ * Return: true if the it looks like a loop detect frame
++ * (mac starts with BA:BE), false otherwise
++ */
++static inline bool batadv_bla_is_loopdetect_mac(const uint8_t *mac)
++{
++ if (mac[0] == 0xba && mac[1] == 0xbe)
++ return true;
++
++ return false;
++}
++
+ #ifdef CONFIG_BATMAN_ADV_BLA
+ bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb,
+ unsigned short vid, bool is_bcast);
+diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
+index 60516bbb7e8391f3063ba1e48c81288ffc7bef49..4e447bf17332c191dda694b9b3e49e06073814fc 100644
+--- a/net/batman-adv/soft-interface.c
++++ b/net/batman-adv/soft-interface.c
+@@ -258,7 +258,8 @@ static int batadv_interface_tx(struct sk_buff *skb,
+ ethhdr = eth_hdr(skb);
+
+ /* Register the client MAC in the transtable */
+- if (!is_multicast_ether_addr(ethhdr->h_source)) {
++ if (!is_multicast_ether_addr(ethhdr->h_source) &&
++ !batadv_bla_is_loopdetect_mac(ethhdr->h_source)) {
+ client_added = batadv_tt_local_add(soft_iface, ethhdr->h_source,
+ vid, skb->skb_iif,
+ skb->mark);