summaryrefslogtreecommitdiff
path: root/shared
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-01-27 13:50:48 +0100
committerThomas Haller <thaller@redhat.com>2021-02-08 15:11:11 +0100
commitf72278eff7cde9685eb60e467880ca8e5e8039be (patch)
tree49628a9d4db1e16cd65e695edcc113b5ee82323e /shared
parent4f9a7f883e4db58d68510b2a7e42a08c7fd3e4ff (diff)
downloadNetworkManager-f72278eff7cde9685eb60e467880ca8e5e8039be.tar.gz
ethtool: add more offload features that kernel supports
New features: - ethtool.feature-macsec-hw-offload - ethtool.feature-rx-gro-list - ethtool.feature-rx-udp-gro-forwarding - ethtool.feature-tls-hw-rx-offload - ethtool.feature-tx-gso-list - ethtool.feature-tx-tunnel-remcsum-segmentation https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/735
Diffstat (limited to 'shared')
-rw-r--r--shared/nm-base/nm-base.h6
-rw-r--r--shared/nm-base/nm-ethtool-base.c12
-rw-r--r--shared/nm-platform/nm-platform-utils.c18
3 files changed, 34 insertions, 2 deletions
diff --git a/shared/nm-base/nm-base.h b/shared/nm-base/nm-base.h
index 1db21aebc1..105d1783e7 100644
--- a/shared/nm-base/nm-base.h
+++ b/shared/nm-base/nm-base.h
@@ -54,6 +54,7 @@ typedef enum {
NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_LOOPBACK,
NM_ETHTOOL_ID_FEATURE_LRO,
+ NM_ETHTOOL_ID_FEATURE_MACSEC_HW_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_NTUPLE,
NM_ETHTOOL_ID_FEATURE_RX,
NM_ETHTOOL_ID_FEATURE_RXHASH,
@@ -61,12 +62,15 @@ typedef enum {
NM_ETHTOOL_ID_FEATURE_RX_ALL,
NM_ETHTOOL_ID_FEATURE_RX_FCS,
NM_ETHTOOL_ID_FEATURE_RX_GRO_HW,
+ NM_ETHTOOL_ID_FEATURE_RX_GRO_LIST,
+ NM_ETHTOOL_ID_FEATURE_RX_UDP_GRO_FORWARDING,
NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER,
NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER,
NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_HW_PARSE,
NM_ETHTOOL_ID_FEATURE_SG,
NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD,
+ NM_ETHTOOL_ID_FEATURE_TLS_HW_RX_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_TSO,
NM_ETHTOOL_ID_FEATURE_TX,
@@ -80,6 +84,7 @@ typedef enum {
NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION,
+ NM_ETHTOOL_ID_FEATURE_TX_GSO_LIST,
NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL,
NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST,
NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION,
@@ -92,6 +97,7 @@ typedef enum {
NM_ETHTOOL_ID_FEATURE_TX_TCP_ECN_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION,
+ NM_ETHTOOL_ID_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION,
diff --git a/shared/nm-base/nm-ethtool-base.c b/shared/nm-base/nm-ethtool-base.c
index 9934aa06c1..a2f662769d 100644
--- a/shared/nm-base/nm-ethtool-base.c
+++ b/shared/nm-base/nm-ethtool-base.c
@@ -51,6 +51,7 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = {
ETHT_DATA(FEATURE_L2_FWD_OFFLOAD),
ETHT_DATA(FEATURE_LOOPBACK),
ETHT_DATA(FEATURE_LRO),
+ ETHT_DATA(FEATURE_MACSEC_HW_OFFLOAD),
ETHT_DATA(FEATURE_NTUPLE),
ETHT_DATA(FEATURE_RX),
ETHT_DATA(FEATURE_RXHASH),
@@ -58,12 +59,15 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = {
ETHT_DATA(FEATURE_RX_ALL),
ETHT_DATA(FEATURE_RX_FCS),
ETHT_DATA(FEATURE_RX_GRO_HW),
+ ETHT_DATA(FEATURE_RX_GRO_LIST),
+ ETHT_DATA(FEATURE_RX_UDP_GRO_FORWARDING),
ETHT_DATA(FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD),
ETHT_DATA(FEATURE_RX_VLAN_FILTER),
ETHT_DATA(FEATURE_RX_VLAN_STAG_FILTER),
ETHT_DATA(FEATURE_RX_VLAN_STAG_HW_PARSE),
ETHT_DATA(FEATURE_SG),
ETHT_DATA(FEATURE_TLS_HW_RECORD),
+ ETHT_DATA(FEATURE_TLS_HW_RX_OFFLOAD),
ETHT_DATA(FEATURE_TLS_HW_TX_OFFLOAD),
ETHT_DATA(FEATURE_TSO),
ETHT_DATA(FEATURE_TX),
@@ -77,6 +81,7 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = {
ETHT_DATA(FEATURE_TX_FCOE_SEGMENTATION),
ETHT_DATA(FEATURE_TX_GRE_CSUM_SEGMENTATION),
ETHT_DATA(FEATURE_TX_GRE_SEGMENTATION),
+ ETHT_DATA(FEATURE_TX_GSO_LIST),
ETHT_DATA(FEATURE_TX_GSO_PARTIAL),
ETHT_DATA(FEATURE_TX_GSO_ROBUST),
ETHT_DATA(FEATURE_TX_IPXIP4_SEGMENTATION),
@@ -89,6 +94,7 @@ const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = {
ETHT_DATA(FEATURE_TX_TCP_ECN_SEGMENTATION),
ETHT_DATA(FEATURE_TX_TCP_MANGLEID_SEGMENTATION),
ETHT_DATA(FEATURE_TX_TCP_SEGMENTATION),
+ ETHT_DATA(FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION),
ETHT_DATA(FEATURE_TX_UDP_SEGMENTATION),
ETHT_DATA(FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION),
ETHT_DATA(FEATURE_TX_UDP_TNL_SEGMENTATION),
@@ -134,11 +140,14 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = {
NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_LOOPBACK,
NM_ETHTOOL_ID_FEATURE_LRO,
+ NM_ETHTOOL_ID_FEATURE_MACSEC_HW_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_NTUPLE,
NM_ETHTOOL_ID_FEATURE_RX,
NM_ETHTOOL_ID_FEATURE_RX_ALL,
NM_ETHTOOL_ID_FEATURE_RX_FCS,
NM_ETHTOOL_ID_FEATURE_RX_GRO_HW,
+ NM_ETHTOOL_ID_FEATURE_RX_GRO_LIST,
+ NM_ETHTOOL_ID_FEATURE_RX_UDP_GRO_FORWARDING,
NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER,
NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER,
@@ -147,6 +156,7 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = {
NM_ETHTOOL_ID_FEATURE_RXVLAN,
NM_ETHTOOL_ID_FEATURE_SG,
NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD,
+ NM_ETHTOOL_ID_FEATURE_TLS_HW_RX_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD,
NM_ETHTOOL_ID_FEATURE_TSO,
NM_ETHTOOL_ID_FEATURE_TX,
@@ -159,6 +169,7 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = {
NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION,
+ NM_ETHTOOL_ID_FEATURE_TX_GSO_LIST,
NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL,
NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST,
NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION,
@@ -171,6 +182,7 @@ static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = {
NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION,
+ NM_ETHTOOL_ID_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION,
NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION,
diff --git a/shared/nm-platform/nm-platform-utils.c b/shared/nm-platform/nm-platform-utils.c
index 59e4a24491..53ef2746bf 100644
--- a/shared/nm-platform/nm-platform-utils.c
+++ b/shared/nm-platform/nm-platform-utils.c
@@ -468,14 +468,18 @@ static const NMEthtoolFeatureInfo _ethtool_feature_infos[_NM_ETHTOOL_ID_FEATURE_
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_HW_TC_OFFLOAD, "hw-tc-offload"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD, "l2-fwd-offload"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_LOOPBACK, "loopback"),
+ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_MACSEC_HW_OFFLOAD, "macsec-hw-offload"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_ALL, "rx-all"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_FCS, "rx-fcs"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_GRO_HW, "rx-gro-hw"),
+ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_GRO_LIST, "rx-gro-list"),
+ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_UDP_GRO_FORWARDING, "rx-udp-gro-forwarding"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD, "rx-udp_tunnel-port-offload"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER, "rx-vlan-filter"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER, "rx-vlan-stag-filter"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_HW_PARSE, "rx-vlan-stag-hw-parse"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD, "tls-hw-record"),
+ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TLS_HW_RX_OFFLOAD, "tls-hw-rx-offload"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD, "tls-hw-tx-offload"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_FCOE_CRC, "tx-checksum-fcoe-crc"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV4, "tx-checksum-ipv4"),
@@ -486,6 +490,7 @@ static const NMEthtoolFeatureInfo _ethtool_feature_infos[_NM_ETHTOOL_ID_FEATURE_
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION, "tx-fcoe-segmentation"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION, "tx-gre-csum-segmentation"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION, "tx-gre-segmentation"),
+ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GSO_LIST, "tx-gso-list"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL, "tx-gso-partial"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST, "tx-gso-robust"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION, "tx-ipxip4-segmentation"),
@@ -498,6 +503,8 @@ static const NMEthtoolFeatureInfo _ethtool_feature_infos[_NM_ETHTOOL_ID_FEATURE_
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_TCP_ECN_SEGMENTATION, "tx-tcp-ecn-segmentation"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION, "tx-tcp-mangleid-segmentation"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION, "tx-tcp-segmentation"),
+ ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_TUNNEL_REMCSUM_SEGMENTATION,
+ "tx-tunnel-remcsum-segmentation"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION, "tx-udp-segmentation"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION, "tx-udp_tnl-csum-segmentation"),
ETHT_FEAT(NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION, "tx-udp_tnl-segmentation"),
@@ -539,8 +546,15 @@ _ASSERT_ethtool_feature_infos(void)
n += inf->n_kernel_names;
for (k = 0; k < inf->n_kernel_names; k++) {
- g_assert(nm_utils_strv_find_first((char **) inf->kernel_names, k, inf->kernel_names[k])
- < 0);
+ const char *name = inf->kernel_names[k];
+
+ g_assert(nm_utils_strv_find_first((char **) inf->kernel_names, k, name) < 0);
+
+ /* these offload features are only informational and cannot be set from user-space
+ * (NETIF_F_NEVER_CHANGE). We should not track them in _ethtool_feature_infos. */
+ g_assert(!nm_streq(name, "netns-local"));
+ g_assert(!nm_streq(name, "tx-lockless"));
+ g_assert(!nm_streq(name, "vlan-challenged"));
}
}