On Mon, 2006-04-10 at 11:06 -0700, Stephen Hemminger wrote: > On Mon, 10 Apr 2006 19:28:39 +0200 > Ingo Oeser <[EMAIL PROTECTED]> wrote: > > > Hi Vlad, > > > > Vlad Drukker wrote: > > > diff --git a/net/core/dev.c b/net/core/dev.c > > > index 434220d..a351687 100644 > > > --- a/net/core/dev.c > > > +++ b/net/core/dev.c > > > @@ -1614,6 +1614,8 @@ static __inline__ int handle_bridge(stru > > > struct net_bridge_port *port; > > > > > > if ((*pskb)->pkt_type == PACKET_LOOPBACK || > > > + ((*pskb)->dev->priv_flags & IFF_MASTER_8023AD && > > > + (*pskb)->protocol == __constant_htons(ETH_P_SLOW)) || > > > (port = rcu_dereference((*pskb)->dev->br_port)) == NULL) > > > return 0; > > > > > > > Please use "htons(ETH_P_SLOW)", since the compiler will constant fold this > > and it is more readable this way. > > > > I still don't think it is correct to special case bonding this way. > The only way bonding frames would ever arrive at handle_bridge is > in the case of a bridge being added to a bonded device. nope. there _is_ other way when bonding frame (slow protcol multicast) arrive at handle_bridge when bond is part of bridge (as in your picture below). and that's exactly the problem.
> Bridge's should not be part of a bonded interface. Either the bonded device > should be added to the bridge: > > | br0 > +----------+ > | bridge | > +----------+ > | bond0 > +----------+ > | bonding | > +----------+ > |eth0 | eth1 > > In this case bonding driver should already the multicasts before passing up to > bridge. bonding driver cannot get mulicast before bridge, because it has registered protocol handler in ptype_base[] consider the flow: netif_receive_skb() { // occures on eth0 at your picture ... skb_bond() // changes dev to dev->master ... handle_bridge() // bridge got the frame ... deliver_skb() // ETH_P_SLOW bonding handler from ptype_base[] ... } notice that: netif_receive_skb() executes handle_bridge before protocol hadlers in ptype_base[] the alternative is to deliver_skb() (protocol handlers) in ptype_base[] before handle_bridge, which is also a bad idea ... > > Or for failover both eth0 and eth1 should be added to bridge (no bonding). > - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html