[RFC] batman-adv: don't allow ECTP traffic on batman-adv

Message ID 1345399809-9177-1-git-send-email-siwu@hrz.tu-chemnitz.de (mailing list archive)
State Accepted, archived
Commit 05d0f6dc27c21b5b781db2a8706ed3c5b704f763
Headers

Commit Message

Simon Wunderlich Aug. 19, 2012, 6:10 p.m. UTC
  We have seen this to break networks when used with bridge loop
avoidance. As we can't see any benefit from sending these ancient frames
via our mesh, we just drop them.

Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
---
 soft-interface.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
  

Comments

Marek Lindner Aug. 24, 2012, 11:33 p.m. UTC | #1
On Sunday, August 19, 2012 20:10:09 Simon Wunderlich wrote:
> We have seen this to break networks when used with bridge loop
> avoidance. As we can't see any benefit from sending these ancient frames
> via our mesh, we just drop them.
> 
> Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
> ---
>  soft-interface.c |   12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)

Applied in revision 05d0f6d.

Thanks,
Marek
  

Patch

diff --git a/soft-interface.c b/soft-interface.c
index 1aee7db..f04a605 100644
--- a/soft-interface.c
+++ b/soft-interface.c
@@ -143,8 +143,10 @@  static int batadv_interface_tx(struct sk_buff *skb,
 	struct batadv_bcast_packet *bcast_packet;
 	struct vlan_ethhdr *vhdr;
 	__be16 ethertype = __constant_htons(BATADV_ETH_P_BATMAN);
-	static const uint8_t stp_addr[ETH_ALEN] = {0x01, 0x80, 0xC2, 0x00, 0x00,
-						   0x00};
+	static const uint8_t stp_addr[ETH_ALEN] = {0x01, 0x80, 0xC2, 0x00,
+						   0x00, 0x00};
+	static const uint8_t ectp_addr[ETH_ALEN] = {0xCF, 0x00, 0x00, 0x00,
+						    0x00, 0x00};
 	unsigned int header_len = 0;
 	int data_len = skb->len, ret;
 	short vid __maybe_unused = -1;
@@ -177,10 +179,16 @@  static int batadv_interface_tx(struct sk_buff *skb,
 
 	/* don't accept stp packets. STP does not help in meshes.
 	 * better use the bridge loop avoidance ...
+	 *
+	 * The same goes for ECTP sent at least by some Cisco Switches,
+	 * it might confuse the mesh when used with bridge loop avoidance.
 	 */
 	if (batadv_compare_eth(ethhdr->h_dest, stp_addr))
 		goto dropped;
 
+	if (batadv_compare_eth(ethhdr->h_dest, ectp_addr))
+		goto dropped;
+
 	if (is_multicast_ether_addr(ethhdr->h_dest)) {
 		do_bcast = true;