bridge: Always flood broadcast packets
[sfrench/cifs-2.6.git] / net / bridge / br_input.c
index 0c7badad62af07ab3e983c0871311a9212c481a3..f06ee39c73fd64dfe958e6f94e735e60e3ba0b78 100644 (file)
@@ -60,7 +60,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
        br = p->br;
        br_fdb_update(br, p, eth_hdr(skb)->h_source);
 
-       if (is_multicast_ether_addr(dest) &&
+       if (!is_broadcast_ether_addr(dest) && is_multicast_ether_addr(dest) &&
            br_multicast_rcv(br, p, skb))
                goto drop;
 
@@ -77,7 +77,9 @@ int br_handle_frame_finish(struct sk_buff *skb)
 
        dst = NULL;
 
-       if (is_multicast_ether_addr(dest)) {
+       if (is_broadcast_ether_addr(dest))
+               skb2 = skb;
+       else if (is_multicast_ether_addr(dest)) {
                mdst = br_mdb_get(br, skb);
                if (mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) {
                        if ((mdst && mdst->mglist) ||
@@ -98,9 +100,10 @@ int br_handle_frame_finish(struct sk_buff *skb)
        }
 
        if (skb) {
-               if (dst)
+               if (dst) {
+                       dst->used = jiffies;
                        br_forward(dst->dst, skb, skb2);
-               else
+               else
                        br_flood_forward(br, skb, skb2);
        }