Prev: oom-kill: fix NUMA consraint check with nodemask v4.2
Next: BKL: Explicitly add BKL around get_sb/fill_super
From: Eric Dumazet on 18 Nov 2009 01:50 Arnd Bergmann a �crit : > This allows each macvlan slave device to be in one > of three modes, depending on the use case: > > MACVLAN_MODE_PRIVATE: > The device never communicates with any other device > on the same upper_dev. This even includes frames > coming back from a reflective relay, where supported > by the adjacent bridge. > > MACVLAN_MODE_VEPA: > The new Virtual Ethernet Port Aggregator (VEPA) mode, > we assume that the adjacent bridge returns all frames > where both source and destination are local to the > macvlan port, i.e. the bridge is set up as a reflective > relay. > Broadcast frames coming in from the upper_dev get > flooded to all macvlan interfaces in VEPA mode. > We never deliver any frames locally. > > MACVLAN_MODE_BRIDGE: > We provide the behavior of a simple bridge between > different macvlan interfaces on the same port. Frames > from one interface to another one get delivered directly > and are not sent out externally. Broadcast frames get > flooded to all other bridge ports and to the external > interface, but when they come back from a reflective > relay, we don't deliver them again. > Since we know all the MAC addresses, the macvlan bridge > mode does not require learning or STP like the bridge > module does. > > Signed-off-by: Arnd Bergmann <arnd(a)arndb.de> > --- > if (is_multicast_ether_addr(eth->h_dest)) { > - macvlan_broadcast(skb, port, NULL); > + src = macvlan_hash_lookup(port, eth->h_source); > + if (!src) > + /* frame comes from an external address */ > + macvlan_broadcast(skb, port, NULL, MACVLAN_MODE_VEPA > + | MACVLAN_MODE_VEPA | MACVLAN_MODE_BRIDGE); typo here, you probably meant MACVLAN_PRIVATE | MACVLAN_VEPA | MACVLAN_BRIDGE > + else if (src->mode == MACVLAN_MODE_VEPA) > + /* flood to everyone except source */ > + macvlan_broadcast(skb, port, src->dev, > + MACVLAN_MODE_VEPA | MACVLAN_MODE_BRIDGE); > + else if (src->mode == MACVLAN_MODE_BRIDGE) > + /* flood only to VEPA ports, bridge ports > + already saw the frame */ > + macvlan_broadcast(skb, port, src->dev, > + MACVLAN_MODE_VEPA); > return skb; > } > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Arnd Bergmann on 18 Nov 2009 04:50
On Wednesday 18 November 2009, Eric Dumazet wrote: > > + macvlan_broadcast(skb, port, NULL, MACVLAN_MODE_VEPA > > + | MACVLAN_MODE_VEPA | MACVLAN_MODE_BRIDGE); > > typo here, you probably meant MACVLAN_PRIVATE | MACVLAN_VEPA | MACVLAN_BRIDGE Well spotted. One last minute-change gone wrong. Thanks, Arnd <>< -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |