Connectx-6DX Flow Hardware Offload

Certainly, here’s a refined version of your text:


We recently purchased two Mellanox ConnectX-6 DX NICs specifically for their hardware offloading capabilities. We are utilizing NFtables with flowtable, and it’s my understanding that we can enable hardware offloading using the hw-tc-offload feature. The feature is enabled, and the kernel is configured to utilize it. However, we are encountering an issue where we receive the message “Operation not supported” from the driver.

Has anyone else experienced a similar issue and found a resolution?

When you are referring to the message “Operation not supported” from the driver", are you referring to our MLNX_OFED or MLNX_EN driver? (End-to-End Networking Solutions | NVIDIA) You can validate with modinfo mlx5_core, the mlx5_core OS Inbox driver is not from Nvidia and is directly handled by the OS vendor.

What led to the “operation not supported” notification?

Are you following any deployment guidelines from Nvidia?

Check that CONFIG_NFT_FLOW_OFFLOAD is enabled in the kernel.
Install MLNX_OFED or MLNX_EN driver.

The “Operation not Supported” came from nftables after try to load the config.

root@dus6:~# cat /boot/config-6.1.4-060104-generic | grep CONFIG_NFT_FLOW_OFFLOAD 
root@dus6:~# lsmod | grep offload
nft_flow_offload       20480  0
nf_flow_table          40960  2 nft_flow_offload,nf_flow_table_inet
nf_conntrack          180224  9 xt_conntrack,nf_nat,nft_flow_offload,nft_ct,xt_state,nft_nat,xt_nat,nf_conntrack_netlink,nf_flow_table
nf_tables             282624  127058 nft_flow_offload,nft_ct,nft_compat,nft_nat,nft_chain_nat,nf_flow_table_inet
root@dus6:~# modinfo mlx5_core
filename:       /lib/modules/6.1.4-060104-generic/updates/dkms/mlx5_core.ko
alias:          auxiliary:mlx5_core.eth-rep
alias:          auxiliary:mlx5_core.eth
basedon:        Korg 6.3-rc3
version:        23.10-1.1.9
license:        Dual BSD/GPL
description:    Mellanox 5th generation network adapters (ConnectX series) core driver
author:         Eli Cohen <>
srcversion:     7D45852F017C3505B1609EB
alias:          pci:v000015B3d0000A2DFsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2DCsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D6sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D3sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000A2D2sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001023sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001021sv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Fsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Esv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Dsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Csv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Bsv*sd*bc*sc*i*
alias:          pci:v000015B3d0000101Asv*sd*bc*sc*i*
alias:          pci:v000015B3d00001019sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001018sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001017sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001016sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001015sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001014sv*sd*bc*sc*i*
alias:          pci:v000015B3d00001013sv*sd*bc*sc*i*
alias:          auxiliary:mlx5_core.sf
depends:        mlx_compat,mlxdevm,psample,tls,pci-hyperv-intf,mlxfw
retpoline:      Y
name:           mlx5_core
vermagic:       6.1.4-060104-generic SMP preempt mod_unload modversions 
sig_id:         PKCS#7
signer:         dus6 Secure Boot Module Signature key
sig_key:        53:5E:59:3E:AA:B7:9D:49:54:1A:D2:22:4A:0C:B0:D7:E5:89:98:0A
sig_hashalgo:   sha512
signature:      11:CD:51:AB:4F:B2:EB:04:73:EC:AE:8D:F8:CD:4E:A0:8C:4D:CF:00:
parm:           num_of_groups:Eswitch offloads number of big groups in FDB table. Valid range 1 - 1024. Default 15 (uint)
parm:           debug_mask:debug mask: 1 = dump cmd data, 2 = dump cmd exec time, 3 = both. Default=0 (uint)
parm:           prof_sel:profile selector. Valid range 0 - 3 (uint)
parm:           probe_vf:probe VFs or not, 0 = not probe, 1 = probe. Default = 1 (bool)

What exactly are you loading, running (elaboration)?
So to understand the correlation with our driver & hw-tc-offload (which I am assuming your enabled via ethtool)

Do you have the full error message?

I try to load a single flowtable with:

table inet x {
        flowtable f {
                hook ingress priority 0; devices = { ens1f0np0, ens1f1np1 };
                flags offload;

And i get

root@dus6:~# nft -f /etc/nftables.conf 
/etc/nftables.conf:2:19-19: Error: Could not process rule: Operation not supported
        flowtable f {

If i remove “flags offload” it works but only in Software.
And of course hw-tc-offload is active