Commit b13ba1b8 authored by Jason Wang's avatar Jason Wang Committed by David S. Miller

macvlan: forbid L2 fowarding offload for macvtap

L2 fowarding offload will bypass the rx handler of real device. This will make
the packet could not be forwarded to macvtap device. Another problem is the
dev_hard_start_xmit() called for macvtap does not have any synchronization.

Fix this by forbidding L2 forwarding for macvtap.

Cc: John Fastabend <john.r.fastabend@intel.com>
Cc: Neil Horman <nhorman@tuxdriver.com>
Acked-by: default avatarNeil Horman <nhorman@tuxdriver.com>
Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
Acked-by: default avatarJohn Fastabend <john.r.fastabend@intel.com.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c4d70998
...@@ -338,6 +338,8 @@ static const struct header_ops macvlan_hard_header_ops = { ...@@ -338,6 +338,8 @@ static const struct header_ops macvlan_hard_header_ops = {
.cache_update = eth_header_cache_update, .cache_update = eth_header_cache_update,
}; };
static struct rtnl_link_ops macvlan_link_ops;
static int macvlan_open(struct net_device *dev) static int macvlan_open(struct net_device *dev)
{ {
struct macvlan_dev *vlan = netdev_priv(dev); struct macvlan_dev *vlan = netdev_priv(dev);
...@@ -353,7 +355,8 @@ static int macvlan_open(struct net_device *dev) ...@@ -353,7 +355,8 @@ static int macvlan_open(struct net_device *dev)
goto hash_add; goto hash_add;
} }
if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD) { if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD &&
dev->rtnl_link_ops == &macvlan_link_ops) {
vlan->fwd_priv = vlan->fwd_priv =
lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev); lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment