vlan: allow TSO setting on vlan interfaces
[linux-2.6.git] / net / 8021q / vlan_dev.c
index 7865a4c..a1b8171 100644 (file)
@@ -836,12 +836,32 @@ static struct rtnl_link_stats64 *vlan_dev_get_stats64(struct net_device *dev, st
        return stats;
 }
 
+static int vlan_ethtool_set_tso(struct net_device *dev, u32 data)
+{
+       if (data) {
+               struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
+
+               /* Underlying device must support TSO for VLAN-tagged packets
+                * and must have TSO enabled now.
+                */
+               if (!(real_dev->vlan_features & NETIF_F_TSO))
+                       return -EOPNOTSUPP;
+               if (!(real_dev->features & NETIF_F_TSO))
+                       return -EINVAL;
+               dev->features |= NETIF_F_TSO;
+       } else {
+               dev->features &= ~NETIF_F_TSO;
+       }
+       return 0;
+}
+
 static const struct ethtool_ops vlan_ethtool_ops = {
        .get_settings           = vlan_ethtool_get_settings,
        .get_drvinfo            = vlan_ethtool_get_drvinfo,
        .get_link               = ethtool_op_get_link,
        .get_rx_csum            = vlan_ethtool_get_rx_csum,
        .get_flags              = vlan_ethtool_get_flags,
+       .set_tso                = vlan_ethtool_set_tso,
 };
 
 static const struct net_device_ops vlan_netdev_ops = {