27 tc->cwnd = tc->ssthresh;
35 tc->cwnd +=
clib_min (tc->snd_mss, tc->bytes_acked);
40 tc->cwnd +=
clib_max ((tc->snd_mss * tc->snd_mss) / tc->cwnd, 1);
50 tc->cwnd += tc->snd_mss;
66 tc->cwnd = (tc->cwnd > tc->bytes_acked) ?
67 tc->cwnd - tc->bytes_acked : 0;
68 if (tc->bytes_acked > tc->snd_mss)
69 tc->cwnd += tc->snd_mss;
77 tc->ssthresh = tc->snd_wnd;
void newreno_recovered(tcp_connection_t *tc)
struct _tcp_connection tcp_connection_t
void newreno_conn_init(tcp_connection_t *tc)
#define VLIB_INIT_FUNCTION(x)
#define tcp_in_slowstart(tc)
void newreno_rcv_ack(tcp_connection_t *tc)
static u32 tcp_flight_size(const tcp_connection_t *tc)
Our estimate of the number of bytes in flight (pipe size)
enum _tcp_cc_ack_t tcp_cc_ack_t
clib_error_t * newreno_init(vlib_main_t *vm)
void newreno_rcv_cong_ack(tcp_connection_t *tc, tcp_cc_ack_t ack_type)
struct _tcp_cc_algorithm tcp_cc_algorithm_t
static u32 tcp_initial_cwnd(const tcp_connection_t *tc)
Initial cwnd as per RFC5681.
static const tcp_cc_algorithm_t tcp_newreno
static void tcp_cc_algo_register(tcp_cc_algorithm_type_e type, const tcp_cc_algorithm_t *vft)
void newreno_congestion(tcp_connection_t *tc)
#define tcp_opts_sack_permitted(_to)