Skip to content

Commit

Permalink
vlan: Use bitmask of feature flags instead of seperate feature bits
Browse files Browse the repository at this point in the history
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: Patrick McHardy <kaber@trash.net>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Patrick McHardy authored and David S. Miller committed May 23, 2008
1 parent 7bece81 commit 289c79a
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 18 deletions.
9 changes: 5 additions & 4 deletions include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -514,12 +514,10 @@ struct net_device
#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_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 */
#define NETIF_F_GSO_SHIFT 20
#define NETIF_F_GSO_MASK 0xfff00000
#define NETIF_F_GSO_SHIFT 16
#define NETIF_F_GSO_MASK 0xffff0000
#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_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)
Expand Down Expand Up @@ -747,6 +745,9 @@ struct net_device
/* rtnetlink 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 */
#define GSO_MAX_SIZE 65536
unsigned int gso_max_size;
Expand Down
10 changes: 2 additions & 8 deletions net/8021q/vlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -387,14 +387,8 @@ static void vlan_transfer_features(struct net_device *dev,
{
unsigned long old_features = vlandev->features;

if (dev->features & NETIF_F_VLAN_TSO) {
vlandev->features &= ~VLAN_TSO_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;
}
vlandev->features &= ~dev->vlan_features;
vlandev->features |= dev->features & dev->vlan_features;

if (old_features != vlandev->features)
netdev_features_change(vlandev);
Expand Down
2 changes: 0 additions & 2 deletions net/8021q/vlan.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
#define VLAN_GRP_HASH_SIZE (1 << VLAN_GRP_HASH_SHIFT)
#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
* 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
Expand Down
5 changes: 1 addition & 4 deletions net/8021q/vlan_dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -663,10 +663,7 @@ static int vlan_dev_init(struct net_device *dev)
(1<<__LINK_STATE_DORMANT))) |
(1<<__LINK_STATE_PRESENT);

if (real_dev->features & NETIF_F_VLAN_TSO)
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;
dev->features |= real_dev->features & real_dev->vlan_features;

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

0 comments on commit 289c79a

Please sign in to comment.