diff options
author | stephen hemminger <shemminger@vyatta.com> | 2011-11-02 08:11:53 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-04 17:39:32 -0400 |
commit | 729e72a10930ef765c11a5a35031ba47f18221c4 (patch) | |
tree | ae0bcc4d1b15ce6988bd5358c4e2beb9f3b5625e /drivers/net/macvlan.c | |
parent | 5ae7fa06bb90421bc63f1f1e56ab241b49bc7b91 (diff) |
macvlan: receive multicast with local address
When implementing VRRP v2 using macvlan several problems were
discovered. VRRP is weird in that all routers participating
in a redundant group use the same virtual MAC address.
Macvlan is a natural driver to use for this but it doesn't
work. The problem is that packets with a macvlan device's
source address are not received.
The problem is actually a regression that date back almost 2 years now.
The original problems started with:
commit 618e1b7482f7a8a4c6c6e8ccbe140e4c331df4e9
Author: Arnd Bergmann <arnd@arndb.de>
Date: Thu Nov 26 06:07:10 2009 +0000
macvlan: implement bridge, VEPA and private mode
This patches restores the original 2.6.32 behavior. Allowing multicast
packets received with the VRRP source address to be received.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/macvlan.c')
-rw-r--r-- | drivers/net/macvlan.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index a3ce3d4561ed..74134970b709 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -192,6 +192,13 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb) | |||
192 | */ | 192 | */ |
193 | macvlan_broadcast(skb, port, src->dev, | 193 | macvlan_broadcast(skb, port, src->dev, |
194 | MACVLAN_MODE_VEPA); | 194 | MACVLAN_MODE_VEPA); |
195 | else { | ||
196 | /* forward to original port. */ | ||
197 | vlan = src; | ||
198 | ret = macvlan_broadcast_one(skb, vlan, eth, 0); | ||
199 | goto out; | ||
200 | } | ||
201 | |||
195 | return RX_HANDLER_PASS; | 202 | return RX_HANDLER_PASS; |
196 | } | 203 | } |
197 | 204 | ||