aboutsummaryrefslogtreecommitdiffstats
path: root/net/batman-adv/soft-interface.c
diff options
context:
space:
mode:
authorSimon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>2012-08-19 14:10:09 -0400
committerAntonio Quartulli <ordex@autistici.org>2012-10-29 04:42:40 -0400
commit4934ab951b742f7a7bbe7089f1b3d8e4a387e596 (patch)
tree9f85c7c28404abdc18754a8073f8772361a9e5a1 /net/batman-adv/soft-interface.c
parentfe3f4cfe8ef8b4f0979a0dd61f60de832848664a (diff)
batman-adv: don't allow ECTP traffic on batman-adv
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> Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Diffstat (limited to 'net/batman-adv/soft-interface.c')
-rw-r--r--net/batman-adv/soft-interface.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 948860a2a576..22bc65102370 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -146,8 +146,10 @@ static int batadv_interface_tx(struct sk_buff *skb,
146 struct batadv_bcast_packet *bcast_packet; 146 struct batadv_bcast_packet *bcast_packet;
147 struct vlan_ethhdr *vhdr; 147 struct vlan_ethhdr *vhdr;
148 __be16 ethertype = __constant_htons(BATADV_ETH_P_BATMAN); 148 __be16 ethertype = __constant_htons(BATADV_ETH_P_BATMAN);
149 static const uint8_t stp_addr[ETH_ALEN] = {0x01, 0x80, 0xC2, 0x00, 0x00, 149 static const uint8_t stp_addr[ETH_ALEN] = {0x01, 0x80, 0xC2, 0x00,
150 0x00}; 150 0x00, 0x00};
151 static const uint8_t ectp_addr[ETH_ALEN] = {0xCF, 0x00, 0x00, 0x00,
152 0x00, 0x00};
151 unsigned int header_len = 0; 153 unsigned int header_len = 0;
152 int data_len = skb->len, ret; 154 int data_len = skb->len, ret;
153 short vid __maybe_unused = -1; 155 short vid __maybe_unused = -1;
@@ -180,10 +182,16 @@ static int batadv_interface_tx(struct sk_buff *skb,
180 182
181 /* don't accept stp packets. STP does not help in meshes. 183 /* don't accept stp packets. STP does not help in meshes.
182 * better use the bridge loop avoidance ... 184 * better use the bridge loop avoidance ...
185 *
186 * The same goes for ECTP sent at least by some Cisco Switches,
187 * it might confuse the mesh when used with bridge loop avoidance.
183 */ 188 */
184 if (batadv_compare_eth(ethhdr->h_dest, stp_addr)) 189 if (batadv_compare_eth(ethhdr->h_dest, stp_addr))
185 goto dropped; 190 goto dropped;
186 191
192 if (batadv_compare_eth(ethhdr->h_dest, ectp_addr))
193 goto dropped;
194
187 if (is_multicast_ether_addr(ethhdr->h_dest)) { 195 if (is_multicast_ether_addr(ethhdr->h_dest)) {
188 do_bcast = true; 196 do_bcast = true;
189 197