Message ID | 20110705235833.GA5599@gondor.apana.org.au |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Herbert Xu <herbert@gondor.hengli.com.au> Date: Wed, 6 Jul 2011 07:58:33 +0800 > bridge: Always flood broadcast packets > > As is_multicast_ether_addr returns true on broadcast packets as > well, we need to explicitly exclude broadcast packets so that > they're always flooded. This wasn't an issue before as broadcast > packets were considered to be an unregistered multicast group, > which were always flooded. However, as we now only flood such > packets to router ports, this is no longer acceptable. > > Reported-by: Michael Guntsche <mike@it-loops.com> > Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Applied. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 05 Jul 2011 18:40:44 -0700 (PDT) David Miller <davem@davemloft.net> wrote: > From: Herbert Xu <herbert@gondor.hengli.com.au> > Date: Wed, 6 Jul 2011 07:58:33 +0800 > > > bridge: Always flood broadcast packets > > > > As is_multicast_ether_addr returns true on broadcast packets as > > well, we need to explicitly exclude broadcast packets so that > > they're always flooded. This wasn't an issue before as broadcast > > packets were considered to be an unregistered multicast group, > > which were always flooded. However, as we now only flood such > > packets to router ports, this is no longer acceptable. > > > > Reported-by: Michael Guntsche <mike@it-loops.com> > > Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> > > Applied. Obviously needs to go to stable as well. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jul 05, 2011 at 10:06:36PM -0700, Stephen Hemminger wrote: > On Tue, 05 Jul 2011 18:40:44 -0700 (PDT) > David Miller <davem@davemloft.net> wrote: > > > From: Herbert Xu <herbert@gondor.hengli.com.au> > > Date: Wed, 6 Jul 2011 07:58:33 +0800 > > > > > bridge: Always flood broadcast packets > > > > > > As is_multicast_ether_addr returns true on broadcast packets as > > > well, we need to explicitly exclude broadcast packets so that > > > they're always flooded. This wasn't an issue before as broadcast > > > packets were considered to be an unregistered multicast group, > > > which were always flooded. However, as we now only flood such > > > packets to router ports, this is no longer acceptable. > > > > > > Reported-by: Michael Guntsche <mike@it-loops.com> > > > Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> > > > > Applied. > > Obviously needs to go to stable as well. I don't think the buggy patch has made it to a release kernel yet. Thanks,
On 06 Jul 11 07:58, Herbert Xu wrote: > Michael Guntsche <mike@it-loops.com> wrote: > > > > Looking at the changes between rc5 and rc6 I noticed commit > > > > bd4265fe365c0f3945d: bridge: Only flood unregistered groups to routers > > Oops, that was definitely my fault. This patch should fix your > problem. Good morning, I can confirm that this fixes the issues I am seeing. The Bridge sees the DHCP packets again. Thank you very much for the quick fix, Michael -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index c188c80..32b8f9f 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -49,7 +49,9 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) skb_pull(skb, ETH_HLEN); rcu_read_lock(); - if (is_multicast_ether_addr(dest)) { + if (is_broadcast_ether_addr(dest)) + br_flood_deliver(br, skb); + else if (is_multicast_ether_addr(dest)) { if (unlikely(netpoll_tx_running(dev))) { br_flood_deliver(br, skb); goto out; diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index f3ac1e8..f06ee39 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c @@ -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) ||