|
@@ -146,8 +146,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;
|
|
@@ -180,10 +182,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;
|
|
|
|