fix 802.3ad multicast
Subsystems (2)
PATCH 1/1 fix 802.3ad multicast
Hi Stephen,
there was a bug in bridging bonds.
multicast packets needed for 802.3ad netif_carrier_ok() were dropped. attached patch works for me.
Cheers,
Vlad.
---
[BRIDGE] fix 802.3ad multicast frame handling
core netif code does handle_bridge before calling protocol handler for ETH_P_SLOW packet_type. when BR_STATE_DISABLED is set for bonded port, netif_carrier_ok() will always fail for 802.3ad bond, because 'partner' (multicast) packet has to be received via _disabled_ port, causing bond to stay in BR_STATE_DISABLED forever.
---
commit e78e0ecc216f934662ae0a10df61c9e2ade44647
tree d491d94f3f043fa698e25cde863b97adc34693b2
parent e77d1795d3eb2999e271cee8957240f161a5461c
author Vlad Drukker <[email protected]> Thu, 06 Apr 2006 18:56:51 +0300 committer Vlad Drukker <[email protected]> Thu, 06 Apr 2006 18:56:51 +0300
net/bridge/br_input.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
net/bridge/br_input.c +3 -1
@@ -125,7 +125,9 @@ int br_handle_frame(struct net_bridge_postruct sk_buff *skb = *pskb;const unsigned char *dest =eth_hdr (skb)->h_dest; -if (p->state ==BR_STATE_DISABLED ) +if (p->state ==BR_STATE_DISABLED + && !(skb->dev->priv_flags &IFF_MASTER_8023AD + && skb->protocol ==__constant_htons (ETH_P_SLOW ))) goto err;if (!is_valid_ether_addr (eth_hdr (skb)->h_source))
Quoted 11 lines · On Thu, 06 Apr 2006 19:15:06 +0300 Vlad Drukker <[email protected]> wrote:
Hi Stephen,
there was a bug in bridging bonds.
multicast packets needed for 802.3adnetif_carrier_ok()were dropped. attached patch works for me.Cheers,
Vlad.
Making a bonding specific hack like this seems wrong. The port could also be disabled during shutdown (for RCU removal), and in that case we need to drop the packet.
There must be a better solution.
Signature · 2 lines
Stephen Hemminger <[email protected]> OSDL http://developer.osdl.org/~shemminger
Quoted 15 lines · Stephen Hemminger
Quoted 11 lines · On Thu, 06 Apr 2006 19:15:06 +0300 Vlad Drukker <[email protected]> wrote:
Hi Stephen,
there was a bug in bridging bonds.
multicast packets needed for 802.3adnetif_carrier_ok()were dropped. attached patch works for me.Cheers,
Vlad.
Quoted 6 lines
Making a bonding specific hack like this seems wrong. The port could also be disabled during shutdown (for RCU removal), and in that case we need to drop the packet.
There must be a better solution.
you probably right,skb_bond() looks like a proper place for this, because netif_receive_skb() needs to call ETH_P_SLOW hadler instead of hadle_bridge hook.
the fix is moving to linux-net .