summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vnet/session/transport_types.h1
-rw-r--r--src/vnet/tcp/tcp.c5
2 files changed, 6 insertions, 0 deletions
diff --git a/src/vnet/session/transport_types.h b/src/vnet/session/transport_types.h
index 214a6380d88..459fb0c5833 100644
--- a/src/vnet/session/transport_types.h
+++ b/src/vnet/session/transport_types.h
@@ -184,6 +184,7 @@ typedef struct transport_endpoint_
#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 f24ddb3a879..28231763da1 100644
--- a/src/vnet/tcp/tcp.c
+++ b/src/vnet/tcp/tcp.c
@@ -599,6 +599,10 @@ tcp_init_rcv_mss (tcp_connection_t * tc)
{
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 @@ tcp_session_open (transport_endpoint_cfg_t * rmt)
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;