diff options
author | Vlad Yasevich <vyasevic@redhat.com> | 2014-03-27 22:14:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-03-28 17:16:51 -0400 |
commit | 2adb956b084d6d49f519541a4b5f9947e96f8ef7 (patch) | |
tree | 1761471976beb97edab677ab211326b62a2809ad | |
parent | 3f8c707b9a83cd956af65796081b6c8cb8716089 (diff) | |
download | op-kernel-dev-2adb956b084d6d49f519541a4b5f9947e96f8ef7.zip op-kernel-dev-2adb956b084d6d49f519541a4b5f9947e96f8ef7.tar.gz |
vlan: Warn the user if lowerdev has bad vlan features.
Some drivers incorrectly assign vlan acceleration features to
vlan_features thus causing issues for Q-in-Q vlan configurations.
Warn the user of such cases.
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/netdev_features.h | 7 | ||||
-rw-r--r-- | net/8021q/vlan_dev.c | 3 |
2 files changed, 10 insertions, 0 deletions
diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h index 1005ebf..5a09a48 100644 --- a/include/linux/netdev_features.h +++ b/include/linux/netdev_features.h @@ -163,4 +163,11 @@ enum { /* changeable features with no special hardware requirements */ #define NETIF_F_SOFT_FEATURES (NETIF_F_GSO | NETIF_F_GRO) +#define NETIF_F_VLAN_FEATURES (NETIF_F_HW_VLAN_CTAG_FILTER | \ + NETIF_F_HW_VLAN_CTAG_RX | \ + NETIF_F_HW_VLAN_CTAG_TX | \ + NETIF_F_HW_VLAN_STAG_FILTER | \ + NETIF_F_HW_VLAN_STAG_RX | \ + NETIF_F_HW_VLAN_STAG_TX) + #endif /* _LINUX_NETDEV_FEATURES_H */ diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index a9591ff..27bfe2f 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -578,6 +578,9 @@ static int vlan_dev_init(struct net_device *dev) dev->features |= real_dev->vlan_features | NETIF_F_LLTX; dev->gso_max_size = real_dev->gso_max_size; + if (dev->features & NETIF_F_VLAN_FEATURES) + netdev_warn(real_dev, "VLAN features are set incorrectly. Q-in-Q configurations may not work correctly.\n"); + /* ipv6 shared card related stuff */ dev->dev_id = real_dev->dev_id; |