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