tcp: send rwnd update only if wnd is large enough
Type: feature Change-Id: I3e97e05a31806afb6b2e84ecf05fb96d285db92e Signed-off-by: Florin Coras <fcoras@cisco.com>
This commit is contained in:

committed by
Dave Barach

parent
baf1c7ccc1
commit
017dc45243
@ -1587,6 +1587,7 @@ tcp_configuration_init (void)
|
||||
tcp_cfg.initial_cwnd_multiplier = 0;
|
||||
tcp_cfg.enable_tx_pacing = 1;
|
||||
tcp_cfg.cc_algo = TCP_CC_NEWRENO;
|
||||
tcp_cfg.rwnd_min_update_ack = 1;
|
||||
|
||||
/* Time constants defined as timer tick (100ms) multiples */
|
||||
tcp_cfg.delack_time = 1; /* 0.1s */
|
||||
@ -1698,6 +1699,9 @@ tcp_config_fn (vlib_main_t * vm, unformat_input_t * input)
|
||||
tcp_cfg.min_rx_fifo = memory_size;
|
||||
else if (unformat (input, "mtu %u", &tcp_cfg.default_mtu))
|
||||
;
|
||||
else if (unformat (input, "rwnd-min-update-ack %d",
|
||||
&tcp_cfg.rwnd_min_update_ack))
|
||||
;
|
||||
else if (unformat (input, "initial-cwnd-multiplier %u",
|
||||
&tcp_cfg.initial_cwnd_multiplier))
|
||||
;
|
||||
|
@ -524,6 +524,10 @@ typedef struct tcp_configuration_
|
||||
/** Default congestion control algorithm type */
|
||||
tcp_cc_algorithm_type_e cc_algo;
|
||||
|
||||
/** Min rwnd, as number of snd_mss segments, for update ack to be sent after
|
||||
* a zero rwnd advertisement */
|
||||
u32 rwnd_min_update_ack;
|
||||
|
||||
/** Delayed ack time (disabled) */
|
||||
u16 delack_time;
|
||||
|
||||
|
@ -1185,19 +1185,19 @@ tcp_timer_delack_handler (u32 index)
|
||||
}
|
||||
|
||||
/**
|
||||
* Send Window Update ACK,
|
||||
* ensuring that it will be sent once, if RWND became non-zero,
|
||||
* after zero RWND has been advertised in ACK before
|
||||
* Send window update ack
|
||||
*
|
||||
* Ensures that it will be sent only once, after a zero rwnd has been
|
||||
* advertised in a previous ack, and only if rwnd has grown beyond a
|
||||
* configurable value.
|
||||
*/
|
||||
void
|
||||
tcp_send_window_update_ack (tcp_connection_t * tc)
|
||||
{
|
||||
u32 win;
|
||||
|
||||
if (tcp_zero_rwnd_sent (tc))
|
||||
{
|
||||
win = tcp_window_to_advertise (tc, tc->state);
|
||||
if (win > 0)
|
||||
tcp_update_rcv_wnd (tc);
|
||||
if (tc->rcv_wnd >= tcp_cfg.rwnd_min_update_ack * tc->snd_mss)
|
||||
{
|
||||
tcp_zero_rwnd_sent_off (tc);
|
||||
tcp_program_ack (tc);
|
||||
|
Reference in New Issue
Block a user