aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2018-09-27 09:19:29 -0700
committerFlorin Coras <fcoras@cisco.com>2018-09-27 09:47:26 -0700
commit45ca73f6af1584a44886d5a13702885be58df1b6 (patch)
tree1295b939acda6ae340230a794f7dbe1af53a5e0e /src/vnet
parent7d7b8c6dd7dc7a3efa89bb7b7c34742939b225fd (diff)
tcp: use scaled window for new connects
Change-Id: Idf83fce8ca176e57b323e3741034e3223f1d195a Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet')
-rw-r--r--src/vnet/tcp/tcp.c12
-rw-r--r--src/vnet/tcp/tcp.h1
-rw-r--r--src/vnet/tcp/tcp_input.c4
3 files changed, 12 insertions, 5 deletions
diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c
index d00f4abb118..30e5899577a 100644
--- a/src/vnet/tcp/tcp.c
+++ b/src/vnet/tcp/tcp.c
@@ -1017,8 +1017,8 @@ tcp_round_snd_space (tcp_connection_t * tc, u32 snd_space)
* @param tc tcp connection
* @return number of bytes session is allowed to write
*/
-static u32
-tcp_snd_space (tcp_connection_t * tc)
+static inline u32
+tcp_snd_space_inline (tcp_connection_t * tc)
{
int snd_space, snt_limited;
@@ -1066,11 +1066,17 @@ tcp_snd_space (tcp_connection_t * tc)
return 0;
}
+u32
+tcp_snd_space (tcp_connection_t * tc)
+{
+ return tcp_snd_space_inline (tc);
+}
+
static u32
tcp_session_send_space (transport_connection_t * trans_conn)
{
tcp_connection_t *tc = (tcp_connection_t *) trans_conn;
- return clib_min (tcp_snd_space (tc),
+ return clib_min (tcp_snd_space_inline (tc),
tc->snd_wnd - (tc->snd_nxt - tc->snd_una));
}
diff --git a/src/vnet/tcp/tcp.h b/src/vnet/tcp/tcp.h
index 37b4573cf25..165659b6d9f 100644
--- a/src/vnet/tcp/tcp.h
+++ b/src/vnet/tcp/tcp.h
@@ -658,6 +658,7 @@ tcp_is_lost_fin (tcp_connection_t * tc)
return 0;
}
+u32 tcp_snd_space (tcp_connection_t * tc);
void tcp_retransmit_first_unacked (tcp_connection_t * tc);
void tcp_fast_retransmit_no_sack (tcp_connection_t * tc);
void tcp_fast_retransmit_sack (tcp_connection_t * tc);
diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c
index b66e940a377..d297ee7ed3e 100644
--- a/src/vnet/tcp/tcp_input.c
+++ b/src/vnet/tcp/tcp_input.c
@@ -2282,8 +2282,8 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
if (tcp_opts_wscale (&new_tc0->rcv_opts))
new_tc0->snd_wscale = new_tc0->rcv_opts.wscale;
- /* RFC1323: SYN and SYN-ACK wnd not scaled */
- new_tc0->snd_wnd = clib_net_to_host_u16 (tcp0->window);
+ new_tc0->snd_wnd = clib_net_to_host_u16 (tcp0->window)
+ << new_tc0->snd_wscale;
new_tc0->snd_wl1 = seq0;
new_tc0->snd_wl2 = ack0;