batman-adv: drop STP over batman
authorSimon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>
Sun, 22 Jan 2012 19:00:25 +0000 (20:00 +0100)
committerAntonio Quartulli <ordex@autistici.org>
Wed, 11 Apr 2012 12:28:59 +0000 (14:28 +0200)
Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
net/batman-adv/soft-interface.c

index 4d639b303bd71a48ab6b5cbde6279883c7e4ad11..10ab49aa568fa993a2434e99627d0c26d33f7dcc 100644 (file)
@@ -130,6 +130,8 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
        struct hard_iface *primary_if = NULL;
        struct bcast_packet *bcast_packet;
        struct vlan_ethhdr *vhdr;
+       static const uint8_t stp_addr[ETH_ALEN] = {0x01, 0x80, 0xC2, 0x00, 0x00,
+                                                  0x00};
        unsigned int header_len = 0;
        int data_len = skb->len, ret;
        short vid = -1;
@@ -159,6 +161,12 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
        /* Register the client MAC in the transtable */
        tt_local_add(soft_iface, ethhdr->h_source, skb->skb_iif);
 
+       /* don't accept stp packets. STP does not help in meshes.
+        * better use the bridge loop avoidance ...
+        */
+       if (compare_eth(ethhdr->h_dest, stp_addr))
+               goto dropped;
+
        if (is_multicast_ether_addr(ethhdr->h_dest)) {
                do_bcast = true;