From patchwork Thu Apr 10 07:44:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiawen Wu X-Patchwork-Id: 14046007 X-Patchwork-Delegate: kuba@kernel.org Received: from smtpbgau1.qq.com (smtpbgau1.qq.com [54.206.16.166]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A55931CEEB2 for ; Thu, 10 Apr 2025 07:19:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.206.16.166 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744269601; cv=none; b=W7t0CdSiIoDG+rwu/hgg6MbgHLgt+ccBAmyb8ZvWyI0+Ea9sCtYKrrV7QYOtxCdC9p/JsFWihcp8dbazrMbJEJEKK0unmmvMrVqPOH/Fws0aZhK05A9TkWI1an/w3+L3Hcw0SIVCUJT7z8Yxg/rP/41jnZVQ6nh4gHIDihDV+zE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744269601; c=relaxed/simple; bh=kTmE58ndy6K/bnlmL9jUzW6r76Cx/e1DVn1Feuzz0kE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aXTTDO0qQbt+ru2En3qbZ1QtfNESPLIqDGFuz7R3W5gdyM4MY2BIqxuH8inCeI7mXY0ayhgeVIK2Bq20Kz3sEhxmpJZgj7JSyTBM6rUVwfYYL/a9GAKqDgWr7ugTq0wvoFdXF1Q2N+CTcomjzYN0RtMsin4JXqCzGpVcKcSGXE4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=trustnetic.com; spf=pass smtp.mailfrom=trustnetic.com; arc=none smtp.client-ip=54.206.16.166 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=trustnetic.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=trustnetic.com X-QQ-mid: bizesmtp25t1744269561tcba7ca4 X-QQ-Originating-IP: MoPuc4KUxsoYlga7mdOcPTi6WA5Jz0Ry11j+tgc6ci8= Received: from wxdbg.localdomain.com ( [220.184.249.159]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 10 Apr 2025 15:19:19 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 593996941820147345 EX-QQ-RecipientCnt: 16 From: Jiawen Wu To: netdev@vger.kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, dlemoal@kernel.org, jdamato@fastly.com, saikrishnag@marvell.com, vadim.fedorenko@linux.dev, przemyslaw.kitszel@intel.com, ecree.xilinx@gmail.com, rmk+kernel@armlinux.org.uk Cc: mengyuanlou@net-swift.com, Jiawen Wu Subject: [PATCH net-next 1/2] net: txgbe: Support to set UDP tunnel port Date: Thu, 10 Apr 2025 15:44:55 +0800 Message-Id: <20250410074456.321847-2-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20250410074456.321847-1-jiawenwu@trustnetic.com> References: <20250410074456.321847-1-jiawenwu@trustnetic.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:trustnetic.com:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: ND42uzdxTIzr/c/Lyc+oOqI8jYSgj8FHiquEpnNVyCVWguPvKm1z2cB6 v6D3fo9+7gB1y/DRN0C8zp0eymS6EaY6l90btd8dQ5fw8rGVzsX768X8rsMtgX51CKEUr79 rOAQl0RjHy1eHg+Q9oM9TYQ58ZjQI0Xamm42o1/q0i1cRkJkMZBlsSpgwElWsqgBNABkHYP zGI7pdrw9IPFFI4EeIvAyvGTLeduqCxLgFA3u1ymfUWWLLzfUaZ2c6qwoeeNSgMWdl2UYDa T+zp36BiSUEgtBmN/4qwkXj8dFg4L3lSlcHdjC8rOF9XdVnoC/lAUTX1PyL9lo5O43RMb61 jxzgnAg1A+aK2/XiICY4ZXLCWj/oZmu1ah/EyagP6tbbVveBaxprgEHEK/lKpk4bEkeuRrz vlt3ZCl1F54pZB8cXOPk+R/4hKf3QYk5p9zdT/JHWH3yV1j239XMCiyteULaLGaKwqfKAOb M/yDIOvxNx2ZZ/4Zdjph+dLKPmREXXXXioBWdIF55Go/nMs+XD2MvJ3Sq9RkwXgoKCrjI37 43iw0gwxXMt0QrcgIvhW/bWYnZRr+IaOlpcpENRZ9vkH2vae1HwtV83dRshf75MqK8s0PyA f2ZQQs2rTWL6/sNOBjhR3S0ZE59lpAUMnGGhS9uowFiWlCRyDwpAzGcLqJesirLWjt01sEm HszYK5gDWi0/PopU5HSoozqlRwoylFwnyv4QVE5lZv4XM8C7O5Qee6i+1D5G5jY4EANBmwj KXQFnNZo3Y/LGU89VXGAnNg0HyKbrjU7Y/fxZ0FaXDvPHMvJURJqfAOx4tvmCpIqWPjofa5 syXIYQZAzrdGs6Rh9MMX0SFG8q2qmPmI6VhYXCEjj74hzmMZHB8Xy+ARFusphF7WuSlNu3h JP+nSZoNYNmwvTY+j2mwWAylZjXx7R3j/4XeN0RqWsBif/0Q9YtOvhkppGTLFSGxAG/7JnT hC07jHwRIhYQkZrQO+0DMCD5duSJy1HD8gidDPhICOmyH5hhl7hUF7cpb X-QQ-XMRINFO: OWPUhxQsoeAVDbp3OJHYyFg= X-QQ-RECHKSPAM: 0 X-Patchwork-Delegate: kuba@kernel.org Tunnel types VXLAN/VXLAN_GPE/GENEVE are supported for txgbe devices. The hardware supports to set only one port for each tunnel type. Signed-off-by: Jiawen Wu --- .../net/ethernet/wangxun/txgbe/txgbe_main.c | 113 ++++++++++++++++++ .../net/ethernet/wangxun/txgbe/txgbe_type.h | 8 ++ 2 files changed, 121 insertions(+) diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c index 6d9134a3ce4d..c984745504b4 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -392,6 +393,8 @@ static int txgbe_open(struct net_device *netdev) txgbe_up_complete(wx); + udp_tunnel_nic_reset_ntf(netdev); + return 0; err_free_irq: @@ -537,6 +540,114 @@ void txgbe_do_reset(struct net_device *netdev) txgbe_reset(wx); } +static int txgbe_udp_tunnel_set(struct net_device *dev, unsigned int table, + unsigned int entry, struct udp_tunnel_info *ti) +{ + struct wx *wx = netdev_priv(dev); + struct txgbe *txgbe = wx->priv; + + switch (ti->type) { + case UDP_TUNNEL_TYPE_VXLAN: + if (txgbe->vxlan_port == ti->port) + break; + + if (txgbe->vxlan_port) { + wx_err(wx, "VXLAN port %d set, not adding port %d\n", + txgbe->vxlan_port, ti->port); + return -EINVAL; + } + + txgbe->vxlan_port = ti->port; + wr32(wx, TXGBE_CFG_VXLAN, ntohs(ti->port)); + break; + case UDP_TUNNEL_TYPE_VXLAN_GPE: + if (txgbe->vxlan_gpe_port == ti->port) + break; + + if (txgbe->vxlan_gpe_port) { + wx_err(wx, "VXLAN-GPE port %d set, not adding port %d\n", + txgbe->vxlan_gpe_port, ti->port); + return -EINVAL; + } + + txgbe->vxlan_gpe_port = ti->port; + wr32(wx, TXGBE_CFG_VXLAN_GPE, ntohs(ti->port)); + break; + case UDP_TUNNEL_TYPE_GENEVE: + if (txgbe->geneve_port == ti->port) + break; + + if (txgbe->geneve_port) { + wx_err(wx, "GENEVE port %d set, not adding port %d\n", + txgbe->geneve_port, ti->port); + return -EINVAL; + } + + txgbe->geneve_port = ti->port; + wr32(wx, TXGBE_CFG_GENEVE, ntohs(ti->port)); + break; + default: + return -EINVAL; + } + + return 0; +} + +static int txgbe_udp_tunnel_unset(struct net_device *dev, + unsigned int table, unsigned int entry, + struct udp_tunnel_info *ti) +{ + struct wx *wx = netdev_priv(dev); + struct txgbe *txgbe = wx->priv; + + if (ti->type != UDP_TUNNEL_TYPE_VXLAN && + ti->type != UDP_TUNNEL_TYPE_VXLAN_GPE && + ti->type != UDP_TUNNEL_TYPE_GENEVE) + return -EINVAL; + + switch (ti->type) { + case UDP_TUNNEL_TYPE_VXLAN: + if (txgbe->vxlan_port != ti->port) { + wx_err(wx, "VXLAN port %d not found\n", ti->port); + return -EINVAL; + } + + txgbe->vxlan_port = 0; + break; + case UDP_TUNNEL_TYPE_VXLAN_GPE: + if (txgbe->vxlan_gpe_port != ti->port) { + wx_err(wx, "VXLAN-GPE port %d not found\n", ti->port); + return -EINVAL; + } + + txgbe->vxlan_gpe_port = 0; + break; + case UDP_TUNNEL_TYPE_GENEVE: + if (txgbe->geneve_port != ti->port) { + wx_err(wx, "GENEVE port %d not found\n", ti->port); + return -EINVAL; + } + + txgbe->geneve_port = 0; + break; + default: + return -EINVAL; + } + + return 0; +} + +static const struct udp_tunnel_nic_info txgbe_udp_tunnels = { + .set_port = txgbe_udp_tunnel_set, + .unset_port = txgbe_udp_tunnel_unset, + .flags = UDP_TUNNEL_NIC_INFO_MAY_SLEEP, + .tables = { + { .n_entries = 1, .tunnel_types = UDP_TUNNEL_TYPE_VXLAN, }, + { .n_entries = 1, .tunnel_types = UDP_TUNNEL_TYPE_VXLAN_GPE, }, + { .n_entries = 1, .tunnel_types = UDP_TUNNEL_TYPE_GENEVE, }, + }, +}; + static const struct net_device_ops txgbe_netdev_ops = { .ndo_open = txgbe_open, .ndo_stop = txgbe_close, @@ -632,6 +743,7 @@ static int txgbe_probe(struct pci_dev *pdev, wx->driver_name = txgbe_driver_name; txgbe_set_ethtool_ops(netdev); netdev->netdev_ops = &txgbe_netdev_ops; + netdev->udp_tunnel_nic_info = &txgbe_udp_tunnels; /* setup the private structure */ err = txgbe_sw_init(wx); @@ -677,6 +789,7 @@ static int txgbe_probe(struct pci_dev *pdev, netdev->features |= NETIF_F_HIGHDMA; netdev->hw_features |= NETIF_F_GRO; netdev->features |= NETIF_F_GRO; + netdev->features |= NETIF_F_RX_UDP_TUNNEL_PORT; netdev->priv_flags |= IFF_UNICAST_FLT; netdev->priv_flags |= IFF_SUPP_NOFCS; diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h b/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h index 5937cbc6bd05..67ea81dfe786 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h @@ -88,6 +88,9 @@ /* Port cfg registers */ #define TXGBE_CFG_PORT_ST 0x14404 #define TXGBE_CFG_PORT_ST_LINK_UP BIT(0) +#define TXGBE_CFG_VXLAN 0x14410 +#define TXGBE_CFG_VXLAN_GPE 0x14414 +#define TXGBE_CFG_GENEVE 0x14418 /* I2C registers */ #define TXGBE_I2C_BASE 0x14900 @@ -359,6 +362,11 @@ struct txgbe { union txgbe_atr_input fdir_mask; int fdir_filter_count; spinlock_t fdir_perfect_lock; /* spinlock for FDIR */ + + /* tunnel port */ + __be16 vxlan_port; + __be16 geneve_port; + __be16 vxlan_gpe_port; }; #endif /* _TXGBE_TYPE_H_ */ From patchwork Thu Apr 10 07:44:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiawen Wu X-Patchwork-Id: 14046009 X-Patchwork-Delegate: kuba@kernel.org Received: from smtpbgbr2.qq.com (smtpbgbr2.qq.com [54.207.22.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 889A820C490 for ; Thu, 10 Apr 2025 07:19:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.207.22.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744269604; cv=none; b=CjUjmVBW0Avd/Y8tKy/MNU514Ah0tqE0kcGCAECIraZJL/WIPCt0yMskqw77aIIceyokbKaYEeXQs7fxXnFCwO5plG25fZ/9fGSDDQcOZ8VNTZKYlG2YWJMTkEx/adK7JWRVVtWKdOTIRIrNTzAmBj6ckYCkP4/GFdfNmBJ2QZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744269604; c=relaxed/simple; bh=St7/BpFDPhZxrzxDDMFK+2EdbsTAi16LvLLVprbQ8ow=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=p/ZJQqChJg0l6GQvziN5yJwWjmFi7XNAq21yoOBWe7SvA9EhV68I+U2Iomxhp9D1Pufbp7w2+40XJr9wAZcxyEDDGaeCfGeEIK7kSzN/St8z1jG0h91Z1zf7N2rR2OdqH+8TybVX4TLG4aWAo4AVSLCdz1+UNoF2DVShwvaaql0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=trustnetic.com; spf=pass smtp.mailfrom=trustnetic.com; arc=none smtp.client-ip=54.207.22.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=trustnetic.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=trustnetic.com X-QQ-mid: bizesmtp25t1744269563tcab450c X-QQ-Originating-IP: vmTzg8RGk1gnd5v/wmI5VliyzIzyFRbHWZwzGjTVj0A= Received: from wxdbg.localdomain.com ( [220.184.249.159]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 10 Apr 2025 15:19:22 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 12800924943129427438 EX-QQ-RecipientCnt: 16 From: Jiawen Wu To: netdev@vger.kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, dlemoal@kernel.org, jdamato@fastly.com, saikrishnag@marvell.com, vadim.fedorenko@linux.dev, przemyslaw.kitszel@intel.com, ecree.xilinx@gmail.com, rmk+kernel@armlinux.org.uk Cc: mengyuanlou@net-swift.com, Jiawen Wu Subject: [PATCH net-next 2/2] net: wangxun: restrict feature flags for tunnel packets Date: Thu, 10 Apr 2025 15:44:56 +0800 Message-Id: <20250410074456.321847-3-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20250410074456.321847-1-jiawenwu@trustnetic.com> References: <20250410074456.321847-1-jiawenwu@trustnetic.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:trustnetic.com:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: MMKL56urm3zQCu8/kULort6YEOykZa6CbEY/5xWn8qw8xnS2cx7tvVtv jV2kTac2CF9F3HFjKUGS7H/P6XneIeUnkkEbmhskVbK97L8GHWYo5YnjSLGR2kUNELW8fJJ pRbppAEIsx5xrQK5WO8a7eKn4I+hm+O4usr6TBqyZHSGJ2nRT/QZ3tOFQ+GZsvo2UMkpN1j l7ZvwaLRGDlKORFDRZbZxZkDY+1Z684uNmGsoTXrtXy6DpoNAUbDg4BN02VF7yu5zIrOe6D gaWyWtw5rE3ZufVRL+QaPug/YxYWhVpDFAafhjYhVJfNTWSBohVn00CneNNFlxnPsG4SZF+ dVEtlUlkNIvndAMhjUmivB3+Ww8oVgwXhu0OZb1J2UM/mXClMprvxChMnsxw7/mC8wpg0+h fiaG6OV07HdD1/YAlTPGPU8+AnP6fkOYaTmp5OlQxIUPuy8OKozwlh2ite31+RTg2Hln3rn w0BRX0nUX+6FJ/tbsI1o6oziahwQ3jq+9ZnI+E2q1lE3CrSQjqvTkU8BiSKMeFYoosUWeHz zb+2wEFSTV3oFlYoRmEdw/A6ixWSoywNCsLVMT+ME44eXzAoejxs2w1U+OrA3RPtSAI9rbT oKJDsRrbW8DjplX8ZxI+VMlWqKX5sPdNO9bOuMYkSNzt2RtPEc2y1Od7FpLMG6OozH+vgRZ dFIFHjcV5SLgzjGBD+FUHRCiZx9W7FsTltQS1/pfvSoXqsbVViA+wzyaRnfqip51smja6ja QGEcm3NcwsD4s5x+Jq/ulV9ZHgS3RODBwj35xWmf+nTF6+H0MHrKe2rcG8Y2uD/r0l5dBpS FLuG/D1sFJGp/juyfDD7I3nrr1C63QQZuCeowK2QHvo5LieLcK7Ry0h5R1zse6gztIkvmI4 SHciInsGZdDRPPhAlevCfi9HYC/oCDkSK7ws0U/SeKHGG7PL94mD6qjh+d5n1vu82B8qYKA +MstOKbY4NY2e6NwYju/YPLCwVpE0AlCqBL9lgvltrsFlGR0RVLie1mxpvB9zdMrNip9FCO CTXNZA3A== X-QQ-XMRINFO: OD9hHCdaPRBwq3WW+NvGbIU= X-QQ-RECHKSPAM: 0 X-Patchwork-Delegate: kuba@kernel.org Implement ndo_features_check to restrict Tx checksum offload flags, since there are some inner layer length and protocols unsupported. Signed-off-by: Jiawen Wu Reviewed-by: Michal Kubiak --- drivers/net/ethernet/wangxun/libwx/wx_lib.c | 27 +++++++++++++++++++ drivers/net/ethernet/wangxun/libwx/wx_lib.h | 3 +++ drivers/net/ethernet/wangxun/ngbe/ngbe_main.c | 1 + .../net/ethernet/wangxun/txgbe/txgbe_main.c | 1 + 4 files changed, 32 insertions(+) diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.c b/drivers/net/ethernet/wangxun/libwx/wx_lib.c index 59d904f23764..a1f9d2287fdc 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_lib.c +++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.c @@ -2998,6 +2998,33 @@ netdev_features_t wx_fix_features(struct net_device *netdev, } EXPORT_SYMBOL(wx_fix_features); +#define WX_MAX_TUNNEL_HDR_LEN 80 +netdev_features_t wx_features_check(struct sk_buff *skb, + struct net_device *netdev, + netdev_features_t features) +{ + struct wx *wx = netdev_priv(netdev); + + if (!skb->encapsulation) + return features; + + if (wx->mac.type == wx_mac_em) + return features & ~NETIF_F_CSUM_MASK; + + if (unlikely(skb_inner_mac_header(skb) - skb_transport_header(skb) > + WX_MAX_TUNNEL_HDR_LEN)) + return features & ~NETIF_F_CSUM_MASK; + + if (skb->inner_protocol_type == ENCAP_TYPE_ETHER && + skb->inner_protocol != htons(ETH_P_IP) && + skb->inner_protocol != htons(ETH_P_IPV6) && + skb->inner_protocol != htons(ETH_P_TEB)) + return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK); + + return features; +} +EXPORT_SYMBOL(wx_features_check); + void wx_set_ring(struct wx *wx, u32 new_tx_count, u32 new_rx_count, struct wx_ring *temp_ring) { diff --git a/drivers/net/ethernet/wangxun/libwx/wx_lib.h b/drivers/net/ethernet/wangxun/libwx/wx_lib.h index fdeb0c315b75..919f49999308 100644 --- a/drivers/net/ethernet/wangxun/libwx/wx_lib.h +++ b/drivers/net/ethernet/wangxun/libwx/wx_lib.h @@ -33,6 +33,9 @@ void wx_get_stats64(struct net_device *netdev, int wx_set_features(struct net_device *netdev, netdev_features_t features); netdev_features_t wx_fix_features(struct net_device *netdev, netdev_features_t features); +netdev_features_t wx_features_check(struct sk_buff *skb, + struct net_device *netdev, + netdev_features_t features); void wx_set_ring(struct wx *wx, u32 new_tx_count, u32 new_rx_count, struct wx_ring *temp_ring); diff --git a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c index fd102078f5c9..82e27b9cfc9c 100644 --- a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c +++ b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c @@ -587,6 +587,7 @@ static const struct net_device_ops ngbe_netdev_ops = { .ndo_set_rx_mode = wx_set_rx_mode, .ndo_set_features = wx_set_features, .ndo_fix_features = wx_fix_features, + .ndo_features_check = wx_features_check, .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = wx_set_mac, .ndo_get_stats64 = wx_get_stats64, diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c index c984745504b4..0c5d0914e830 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_main.c @@ -656,6 +656,7 @@ static const struct net_device_ops txgbe_netdev_ops = { .ndo_set_rx_mode = wx_set_rx_mode, .ndo_set_features = wx_set_features, .ndo_fix_features = wx_fix_features, + .ndo_features_check = wx_features_check, .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = wx_set_mac, .ndo_get_stats64 = wx_get_stats64,