Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 289c79a4 authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller
Browse files

vlan: Use bitmask of feature flags instead of seperate feature bits



Herbert Xu points out that the use of seperate feature bits for features
to be propagated to VLAN devices is going to get messy real soon.
Replace the VLAN feature bits by a bitmask of feature flags to be
propagated and restore the old GSO_SHIFT/MASK values.

Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7bece815
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -514,12 +514,10 @@ struct net_device
#define NETIF_F_NETNS_LOCAL	8192	/* Does not change network namespaces */
#define NETIF_F_NETNS_LOCAL	8192	/* Does not change network namespaces */
#define NETIF_F_MULTI_QUEUE	16384	/* Has multiple TX/RX queues */
#define NETIF_F_MULTI_QUEUE	16384	/* Has multiple TX/RX queues */
#define NETIF_F_LRO		32768	/* large receive offload */
#define NETIF_F_LRO		32768	/* large receive offload */
#define NETIF_F_VLAN_TSO	65536	/* Supports TSO for VLANs */
#define NETIF_F_VLAN_CSUM	131072	/* Supports TX checksumming for VLANs */


	/* Segmentation offload features */
	/* Segmentation offload features */
#define NETIF_F_GSO_SHIFT	20
#define NETIF_F_GSO_SHIFT	16
#define NETIF_F_GSO_MASK	0xfff00000
#define NETIF_F_GSO_MASK	0xffff0000
#define NETIF_F_TSO		(SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT)
#define NETIF_F_TSO		(SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT)
#define NETIF_F_UFO		(SKB_GSO_UDP << NETIF_F_GSO_SHIFT)
#define NETIF_F_UFO		(SKB_GSO_UDP << NETIF_F_GSO_SHIFT)
#define NETIF_F_GSO_ROBUST	(SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)
#define NETIF_F_GSO_ROBUST	(SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)
@@ -747,6 +745,9 @@ struct net_device
	/* rtnetlink link ops */
	/* rtnetlink link ops */
	const struct rtnl_link_ops *rtnl_link_ops;
	const struct rtnl_link_ops *rtnl_link_ops;


	/* VLAN feature mask */
	unsigned long vlan_features;

	/* for setting kernel sock attribute on TCP connection setup */
	/* for setting kernel sock attribute on TCP connection setup */
#define GSO_MAX_SIZE		65536
#define GSO_MAX_SIZE		65536
	unsigned int		gso_max_size;
	unsigned int		gso_max_size;
+2 −8
Original line number Original line Diff line number Diff line
@@ -387,14 +387,8 @@ static void vlan_transfer_features(struct net_device *dev,
{
{
	unsigned long old_features = vlandev->features;
	unsigned long old_features = vlandev->features;


	if (dev->features & NETIF_F_VLAN_TSO) {
	vlandev->features &= ~dev->vlan_features;
		vlandev->features &= ~VLAN_TSO_FEATURES;
	vlandev->features |= dev->features & dev->vlan_features;
		vlandev->features |= dev->features & VLAN_TSO_FEATURES;
	}
	if (dev->features & NETIF_F_VLAN_CSUM) {
		vlandev->features &= ~NETIF_F_ALL_CSUM;
		vlandev->features |= dev->features & NETIF_F_ALL_CSUM;
	}


	if (old_features != vlandev->features)
	if (old_features != vlandev->features)
		netdev_features_change(vlandev);
		netdev_features_change(vlandev);
+0 −2
Original line number Original line Diff line number Diff line
@@ -7,8 +7,6 @@
#define VLAN_GRP_HASH_SIZE	(1 << VLAN_GRP_HASH_SHIFT)
#define VLAN_GRP_HASH_SIZE	(1 << VLAN_GRP_HASH_SHIFT)
#define VLAN_GRP_HASH_MASK	(VLAN_GRP_HASH_SIZE - 1)
#define VLAN_GRP_HASH_MASK	(VLAN_GRP_HASH_SIZE - 1)


#define VLAN_TSO_FEATURES	(NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG)

/*  Find a VLAN device by the MAC address of its Ethernet device, and
/*  Find a VLAN device by the MAC address of its Ethernet device, and
 *  it's VLAN ID.  The default configuration is to have VLAN's scope
 *  it's VLAN ID.  The default configuration is to have VLAN's scope
 *  to be box-wide, so the MAC will be ignored.  The mac will only be
 *  to be box-wide, so the MAC will be ignored.  The mac will only be
+1 −4
Original line number Original line Diff line number Diff line
@@ -663,10 +663,7 @@ static int vlan_dev_init(struct net_device *dev)
					  (1<<__LINK_STATE_DORMANT))) |
					  (1<<__LINK_STATE_DORMANT))) |
		      (1<<__LINK_STATE_PRESENT);
		      (1<<__LINK_STATE_PRESENT);


	if (real_dev->features & NETIF_F_VLAN_TSO)
	dev->features |= real_dev->features & real_dev->vlan_features;
		dev->features |= real_dev->features & VLAN_TSO_FEATURES;
	if (real_dev->features & NETIF_F_VLAN_CSUM)
		dev->features |= real_dev->features & NETIF_F_ALL_CSUM;


	/* ipv6 shared card related stuff */
	/* ipv6 shared card related stuff */
	dev->dev_id = real_dev->dev_id;
	dev->dev_id = real_dev->dev_id;