This adds a new netdevice feature, so that tunnel offloading can be
disabled by the administrator on some netdevices, using the
"tunnel-offload" ethtool feature.

This feature is set for all devices that provide ndo_udp_tunnel_add.

Signed-off-by: Sabrina Dubroca <s...@queasysnail.net>
---
 include/linux/netdev_features.h | 2 ++
 net/core/dev.c                  | 6 ++++++
 net/core/ethtool.c              | 1 +
 3 files changed, 9 insertions(+)

diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h
index 1d4737cffc71..40a098e40d5d 100644
--- a/include/linux/netdev_features.h
+++ b/include/linux/netdev_features.h
@@ -76,6 +76,7 @@ enum {
        NETIF_F_HW_TC_BIT,              /* Offload TC infrastructure */
        NETIF_F_HW_ESP_BIT,             /* Hardware ESP transformation offload 
*/
        NETIF_F_HW_ESP_TX_CSUM_BIT,     /* ESP with TX checksum offload */
+       NETIF_F_TUNNEL_OFFLOAD_BIT,     /* Tunnel offloads */
 
        /*
         * Add your fresh new feature above and remember to update
@@ -140,6 +141,7 @@ enum {
 #define NETIF_F_HW_TC          __NETIF_F(HW_TC)
 #define NETIF_F_HW_ESP         __NETIF_F(HW_ESP)
 #define NETIF_F_HW_ESP_TX_CSUM __NETIF_F(HW_ESP_TX_CSUM)
+#define        NETIF_F_TUNNEL_OFFLOAD  __NETIF_F(TUNNEL_OFFLOAD)
 
 #define for_each_netdev_feature(mask_addr, bit)        \
        for_each_set_bit(bit, (unsigned long *)mask_addr, NETDEV_FEATURE_COUNT)
diff --git a/net/core/dev.c b/net/core/dev.c
index a91572aa73d5..d97f7b39df23 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -7505,6 +7505,12 @@ int register_netdevice(struct net_device *dev)
         */
        dev->hw_features |= NETIF_F_SOFT_FEATURES;
        dev->features |= NETIF_F_SOFT_FEATURES;
+
+       if (dev->netdev_ops->ndo_udp_tunnel_add) {
+               dev->features |= NETIF_F_TUNNEL_OFFLOAD;
+               dev->hw_features |= NETIF_F_TUNNEL_OFFLOAD;
+       }
+
        dev->wanted_features = dev->features & dev->hw_features;
 
        if (!(dev->flags & IFF_LOOPBACK))
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index 03111a2d6653..b693421d5d71 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -106,6 +106,7 @@ static const char 
netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN]
        [NETIF_F_HW_TC_BIT] =            "hw-tc-offload",
        [NETIF_F_HW_ESP_BIT] =           "esp-hw-offload",
        [NETIF_F_HW_ESP_TX_CSUM_BIT] =   "esp-tx-csum-hw-offload",
+       [NETIF_F_TUNNEL_OFFLOAD_BIT] =   "tunnel-offload",
 };
 
 static const char
-- 
2.13.2

Reply via email to