diff options
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.patch | 67 |
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); |
