diff options
author | 2019-08-16 10:33:49 -0700 | |
---|---|---|
committer | 2019-09-20 21:35:19 +0000 | |
commit | 82df1eb9002cf0d9e06474626e864ae2ce8a34b6 (patch) | |
tree | d1509aab793c73524acfa19c32e284d3df738e6c /src | |
parent | bda2844c47d6cd363735f03d0ce1711bdee11557 (diff) |
tcp: allow cc algos to set pacing rate
Type: feature
Change-Id: Ie7f0f5d2a476d401ede567e422abb953b2bb4a78
Signed-off-by: Florin Coras <fcoras@cisco.com>
(cherry picked from commit d206724e78d99aee5d91d43fb0832d51d70eb57a)
Diffstat (limited to 'src')
-rw-r--r-- | src/vnet/tcp/tcp.c | 10 | ||||
-rw-r--r-- | src/vnet/tcp/tcp.h | 13 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c index 327703327aa..4628e4ba38d 100644 --- a/src/vnet/tcp/tcp.c +++ b/src/vnet/tcp/tcp.c @@ -1263,17 +1263,11 @@ const static transport_proto_vft_t tcp_proto = { void tcp_connection_tx_pacer_update (tcp_connection_t * tc) { - f64 srtt; - u64 rate; - if (!transport_connection_is_tx_paced (&tc->connection)) return; - srtt = clib_min ((f64) tc->srtt * TCP_TICK, tc->mrtt_us); - /* TODO should constrain to interface's max throughput but - * we don't have link speeds for sw ifs ..*/ - rate = tc->cwnd / srtt; - transport_connection_tx_pacer_update (&tc->connection, rate); + transport_connection_tx_pacer_update (&tc->connection, + tcp_cc_get_pacing_rate (tc)); } void diff --git a/src/vnet/tcp/tcp.h b/src/vnet/tcp/tcp.h index 753a1ca6996..81ce1d52bde 100644 --- a/src/vnet/tcp/tcp.h +++ b/src/vnet/tcp/tcp.h @@ -417,6 +417,7 @@ struct _tcp_cc_algorithm void (*recovered) (tcp_connection_t * tc); void (*undo_recovery) (tcp_connection_t * tc); void (*event) (tcp_connection_t *tc, tcp_cc_event_t evt); + u64 (*get_pacing_rate) (tcp_connection_t *tc); }; /* *INDENT-ON* */ @@ -1053,6 +1054,18 @@ tcp_cc_event (tcp_connection_t * tc, tcp_cc_event_t evt) tc->cc_algo->event (tc, evt); } +static inline u64 +tcp_cc_get_pacing_rate (tcp_connection_t * tc) +{ + if (tc->cc_algo->get_pacing_rate) + return tc->cc_algo->get_pacing_rate (tc); + + f64 srtt = clib_min ((f64) tc->srtt * TCP_TICK, tc->mrtt_us); + /* TODO should constrain to interface's max throughput but + * we don't have link speeds for sw ifs ..*/ + return (tc->cwnd / srtt); +} + always_inline void tcp_timer_set (tcp_connection_t * tc, u8 timer_id, u32 interval) { |