summaryrefslogtreecommitdiffstats
path: root/src/vnet/tcp/tcp.c
diff options
context:
space:
mode:
authorSimon Zhang <yuwei1.zhang@intel.com>2019-09-02 22:54:00 +0800
committerAndrew Yourtchenko <ayourtch@gmail.com>2019-09-29 16:32:26 +0000
commit6f3621d772d0dafa745081b32a8769b4c42af059 (patch)
tree5d10459d038e89a1d591f126b3ec33cd840b7854 /src/vnet/tcp/tcp.c
parent56f1938ee26993c9777f42c1d7589999ac266cbe (diff)
tcp: enable gso in tcp hoststack
Type: feature Change-Id: If68d07fbe8c6f7fffd2f93c7e854367082927e4f Signed-off-by: Simon Zhang <yuwei1.zhang@intel.com> (cherry picked from commit 1146ff4bcd336d8efc19405f1d83914e6115a01f)
Diffstat (limited to 'src/vnet/tcp/tcp.c')
-rw-r--r--src/vnet/tcp/tcp.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c
index d060654a037..cbb95777820 100644
--- a/src/vnet/tcp/tcp.c
+++ b/src/vnet/tcp/tcp.c
@@ -1175,6 +1175,17 @@ tcp_half_open_session_get_transport (u32 conn_index)
return &tc->connection;
}
+static u16
+tcp_session_cal_goal_size (tcp_connection_t * tc)
+{
+ u16 goal_size = tc->snd_mss;
+
+ goal_size = TCP_MAX_GSO_SZ - tc->snd_mss % TCP_MAX_GSO_SZ;
+ goal_size = clib_min (goal_size, tc->snd_wnd / 2);
+
+ return goal_size;
+}
+
/**
* Compute maximum segment size for session layer.
*
@@ -1192,6 +1203,11 @@ tcp_session_send_mss (transport_connection_t * trans_conn)
* the current state of the connection. */
tcp_update_burst_snd_vars (tc);
+ if (PREDICT_FALSE (tc->is_tso))
+ {
+ return tcp_session_cal_goal_size (tc);
+ }
+
return tc->snd_mss;
}