tcp: allow custom mss on connects

Type: feature

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ie4bd68a387f706b3e6868bece2ec4c8c1d92a9c3
diff --git a/src/vnet/session/transport_types.h b/src/vnet/session/transport_types.h
index 214a638..459fb0c 100644
--- a/src/vnet/session/transport_types.h
+++ b/src/vnet/session/transport_types.h
@@ -184,6 +184,7 @@
 #define foreach_transport_endpoint_cfg_fields				\
   foreach_transport_endpoint_fields					\
   _(transport_endpoint_t, peer)						\
+  _(u16, mss)								\
 
 typedef struct transport_endpoint_pair_
 {
diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c
index f24ddb3..2823176 100644
--- a/src/vnet/tcp/tcp.c
+++ b/src/vnet/tcp/tcp.c
@@ -599,6 +599,10 @@
 {
   u8 ip_hdr_len;
 
+  /* Already provided at connection init time */
+  if (tc->mss)
+    return;
+
   ip_hdr_len = tc->c_is_ip4 ? sizeof (ip4_header_t) : sizeof (ip6_header_t);
   tc->mss = tcp_cfg.default_mtu - sizeof (tcp_header_t) - ip_hdr_len;
 }
@@ -763,6 +767,7 @@
   tc->cc_algo = tcp_cc_algo_get (tcp_cfg.cc_algo);
   /* The other connection vars will be initialized after SYN ACK */
   tcp_connection_timers_init (tc);
+  tc->mss = rmt->mss;
 
   TCP_EVT (TCP_EVT_OPEN, tc);
   tc->state = TCP_STATE_SYN_SENT;