mirror of
https://github.com/openvswitch/ovs
synced 2025-08-30 22:05:19 +00:00
userspace TSO: Include UDP checksum offload.
Virtio doesn't expose flags to control which protocols checksum
offload needs to be enabled or disabled. This patch checks if the
NIC supports UDP checksum offload and active it when TSO is enabled.
Reported-by: Ilya Maximets <i.maximets@ovn.org>
Fixes: 29cf9c1b3b
("userspace: Add TCP Segmentation Offload support")
Signed-off-by: Flavio Leitner <fbl@sysclose.org>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
This commit is contained in:
committed by
Ilya Maximets
parent
514950d37d
commit
8c5163fe81
@@ -152,6 +152,14 @@ typedef uint16_t dpdk_port_t;
|
||||
|
||||
#define IF_NAME_SZ (PATH_MAX > IFNAMSIZ ? PATH_MAX : IFNAMSIZ)
|
||||
|
||||
/* List of required flags advertised by the hardware that will be
|
||||
* used if TSO is enabled. */
|
||||
#define DPDK_TX_TSO_OFFLOAD_FLAGS (DEV_TX_OFFLOAD_TCP_TSO \
|
||||
| DEV_TX_OFFLOAD_TCP_CKSUM \
|
||||
| DEV_TX_OFFLOAD_UDP_CKSUM \
|
||||
| DEV_TX_OFFLOAD_IPV4_CKSUM)
|
||||
|
||||
|
||||
static const struct rte_eth_conf port_conf = {
|
||||
.rxmode = {
|
||||
.mq_mode = ETH_MQ_RX_RSS,
|
||||
@@ -997,9 +1005,7 @@ dpdk_eth_dev_port_config(struct netdev_dpdk *dev, int n_rxq, int n_txq)
|
||||
}
|
||||
|
||||
if (dev->hw_ol_features & NETDEV_TX_TSO_OFFLOAD) {
|
||||
conf.txmode.offloads |= DEV_TX_OFFLOAD_TCP_TSO;
|
||||
conf.txmode.offloads |= DEV_TX_OFFLOAD_TCP_CKSUM;
|
||||
conf.txmode.offloads |= DEV_TX_OFFLOAD_IPV4_CKSUM;
|
||||
conf.txmode.offloads |= DPDK_TX_TSO_OFFLOAD_FLAGS;
|
||||
}
|
||||
|
||||
/* Limit configured rss hash functions to only those supported
|
||||
@@ -1100,12 +1106,10 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
|
||||
struct rte_ether_addr eth_addr;
|
||||
int diag;
|
||||
int n_rxq, n_txq;
|
||||
uint32_t tx_tso_offload_capa = DPDK_TX_TSO_OFFLOAD_FLAGS;
|
||||
uint32_t rx_chksm_offload_capa = DEV_RX_OFFLOAD_UDP_CKSUM |
|
||||
DEV_RX_OFFLOAD_TCP_CKSUM |
|
||||
DEV_RX_OFFLOAD_IPV4_CKSUM;
|
||||
uint32_t tx_tso_offload_capa = DEV_TX_OFFLOAD_TCP_TSO |
|
||||
DEV_TX_OFFLOAD_TCP_CKSUM |
|
||||
DEV_TX_OFFLOAD_IPV4_CKSUM;
|
||||
|
||||
rte_eth_dev_info_get(dev->port_id, &info);
|
||||
|
||||
@@ -5110,6 +5114,7 @@ netdev_dpdk_reconfigure(struct netdev *netdev)
|
||||
if (dev->hw_ol_features & NETDEV_TX_TSO_OFFLOAD) {
|
||||
netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_TSO;
|
||||
netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_CKSUM;
|
||||
netdev->ol_flags |= NETDEV_TX_OFFLOAD_UDP_CKSUM;
|
||||
netdev->ol_flags |= NETDEV_TX_OFFLOAD_IPV4_CKSUM;
|
||||
}
|
||||
|
||||
@@ -5252,6 +5257,7 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev *netdev)
|
||||
if (userspace_tso_enabled()) {
|
||||
netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_TSO;
|
||||
netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_CKSUM;
|
||||
netdev->ol_flags |= NETDEV_TX_OFFLOAD_UDP_CKSUM;
|
||||
netdev->ol_flags |= NETDEV_TX_OFFLOAD_IPV4_CKSUM;
|
||||
vhost_unsup_flags = 1ULL << VIRTIO_NET_F_HOST_ECN
|
||||
| 1ULL << VIRTIO_NET_F_HOST_UFO;
|
||||
|
Reference in New Issue
Block a user