summaryrefslogtreecommitdiffstats
path: root/src/plugins/dpdk/device/device.c
diff options
context:
space:
mode:
authorChenmin Sun <chenmin.sun@intel.com>2019-07-17 22:29:44 +0800
committerDamjan Marion <dmarion@me.com>2019-08-19 09:41:08 +0000
commitde5ed58fdb72536ed928e12990a08104e1f89f51 (patch)
treee3eca3ec5afb52b613896cb2f1c52a89417230e2 /src/plugins/dpdk/device/device.c
parent4d843b9940a8fbcd0b54c8a66916b9ba66e4f2c9 (diff)
dpdk: add TSO support in dpdk plugin.
Type: feature You can enable tso in starup.conf like this: dev 0000:86:00.0{ tso on } TSO is disabled by default. Change-Id: Ifdbaf5322f768c384aa54e532d7bf45e810ca01c Signed-off-by: Chenmin Sun <chenmin.sun@intel.com>
Diffstat (limited to 'src/plugins/dpdk/device/device.c')
-rw-r--r--src/plugins/dpdk/device/device.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/plugins/dpdk/device/device.c b/src/plugins/dpdk/device/device.c
index 8778d71cd7a..cb0448fa503 100644
--- a/src/plugins/dpdk/device/device.c
+++ b/src/plugins/dpdk/device/device.c
@@ -226,10 +226,11 @@ dpdk_buffer_tx_offload (dpdk_device_t * xd, vlib_buffer_t * b,
u32 tcp_cksum = b->flags & VNET_BUFFER_F_OFFLOAD_TCP_CKSUM;
u32 udp_cksum = b->flags & VNET_BUFFER_F_OFFLOAD_UDP_CKSUM;
int is_ip4 = b->flags & VNET_BUFFER_F_IS_IP4;
+ u32 tso = b->flags & VNET_BUFFER_F_GSO;
u64 ol_flags;
/* Is there any work for us? */
- if (PREDICT_TRUE ((ip_cksum | tcp_cksum | udp_cksum) == 0))
+ if (PREDICT_TRUE ((ip_cksum | tcp_cksum | udp_cksum | tso) == 0))
return;
mb->l2_len = vnet_buffer (b)->l3_hdr_offset - b->current_data;
@@ -241,6 +242,14 @@ dpdk_buffer_tx_offload (dpdk_device_t * xd, vlib_buffer_t * b,
ol_flags |= ip_cksum ? PKT_TX_IP_CKSUM : 0;
ol_flags |= tcp_cksum ? PKT_TX_TCP_CKSUM : 0;
ol_flags |= udp_cksum ? PKT_TX_UDP_CKSUM : 0;
+ ol_flags |= tso ? (tcp_cksum ? PKT_TX_TCP_SEG : PKT_TX_UDP_SEG) : 0;
+
+ if (tso)
+ {
+ mb->l4_len = vnet_buffer2 (b)->gso_l4_hdr_sz;
+ mb->tso_segsz = vnet_buffer2 (b)->gso_size;
+ }
+
mb->ol_flags |= ol_flags;
/* we are trying to help compiler here by using local ol_flags with known