vlan: Set correct source MAC address with TX VLAN offload enabled
authorPeter Boström <peter.bostrom@netrounds.com>
Mon, 10 Mar 2014 15:17:15 +0000 (16:17 +0100)
committerJiri Slaby <jslaby@suse.cz>
Fri, 18 Apr 2014 09:07:01 +0000 (11:07 +0200)
[ Upstream commit dd38743b4cc2f86be250eaf156cf113ba3dd531a ]

With TX VLAN offload enabled the source MAC address for frames sent using the
VLAN interface is currently set to the address of the real interface. This is
wrong since the VLAN interface may be configured with a different address.

The bug was introduced in commit 2205369a314e12fcec4781cc73ac9c08fc2b47de
("vlan: Fix header ops passthru when doing TX VLAN offload.").

This patch sets the source address before calling the create function of the
real interface.

Signed-off-by: Peter Boström <peter.bostrom@netrounds.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
net/8021q/vlan_dev.c

index edf44d079da7a7c026e2228909cf1cbfd0b8ae5e..dc7d8da441ddc5c6cf7eb14d7a0a8bd6b7bdbc92 100644 (file)
@@ -557,6 +557,9 @@ static int vlan_passthru_hard_header(struct sk_buff *skb, struct net_device *dev
        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
        struct net_device *real_dev = vlan->real_dev;
 
+       if (saddr == NULL)
+               saddr = dev->dev_addr;
+
        return dev_hard_header(skb, real_dev, type, daddr, saddr, len);
 }