macvlan: receive multicast with local address
authorstephen hemminger <shemminger@vyatta.com>
Wed, 2 Nov 2011 12:11:53 +0000 (12:11 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 4 Nov 2011 21:39:32 +0000 (17:39 -0400)
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>
drivers/net/macvlan.c

index a3ce3d4561eda101d9f54168d03d383b991aeac3..74134970b7095c4faae3f9f627358bd69617353d 100644 (file)
@@ -192,6 +192,13 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
                         */
                        macvlan_broadcast(skb, port, src->dev,
                                          MACVLAN_MODE_VEPA);
+               else {
+                       /* forward to original port. */
+                       vlan = src;
+                       ret = macvlan_broadcast_one(skb, vlan, eth, 0);
+                       goto out;
+               }
+
                return RX_HANDLER_PASS;
        }