diff options
| -rw-r--r-- | net/batman-adv/soft-interface.c | 12 |
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 | ||
