net: add new netdevice feature for offload of RX port for UDP tunnels
authorSabrina Dubroca <sd@queasysnail.net>
Fri, 21 Jul 2017 10:49:28 +0000 (12:49 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Jul 2017 20:52:59 +0000 (13:52 -0700)
This adds a new netdevice feature, so that the offloading of RX port for
UDP tunnels can be disabled by the administrator on some netdevices,
using the "rx-udp_tunnel-port-offload" feature in ethtool.

This feature is set for all devices that provide ndo_udp_tunnel_add.

Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdev_features.h
net/core/dev.c
net/core/ethtool.c

index ebd2736273349f8aad1e9e8d17b916feee52a5d8..dc8b4896b77b090e8329bdee9766033a6a3b95fb 100644 (file)
@@ -75,6 +75,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_RX_UDP_TUNNEL_PORT_BIT, /* Offload of RX port for UDP tunnels */
 
        /*
         * Add your fresh new feature above and remember to update
@@ -138,6 +139,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_RX_UDP_TUNNEL_PORT  __NETIF_F(RX_UDP_TUNNEL_PORT)
 
 #define for_each_netdev_feature(mask_addr, bit)        \
        for_each_set_bit(bit, (unsigned long *)mask_addr, NETDEV_FEATURE_COUNT)
index 509af6ce883135e846573957a9219ff51ae833d8..9081134adc0d279cdbbe5fa91cc3b5a494bb0917 100644 (file)
@@ -7530,6 +7530,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_RX_UDP_TUNNEL_PORT;
+               dev->hw_features |= NETIF_F_RX_UDP_TUNNEL_PORT;
+       }
+
        dev->wanted_features = dev->features & dev->hw_features;
 
        if (!(dev->flags & IFF_LOOPBACK))
index 78408ab77a10fd3faf25535ce19d669ed909e7d3..b987bc475fc8035900862990c2346cdc0341db6a 100644 (file)
@@ -105,6 +105,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_RX_UDP_TUNNEL_PORT_BIT] =       "rx-udp_tunnel-port-offload",
 };
 
 static const char