dcsctp: Specify an initial RTT

The RTT will quickly be updated whenever a DATA chunk is acked, but
the initial value was set to zero. In unit tests, which often are
short and rarely increase the simulated time between a DATA is sent,
and acked, the smoothed RTT would usually stay at 0, which causes
e.g. the rate limiting of FORWARD not to work.

Bug: None
Change-Id: Ieb515fe875ce88d001777b00d6efd9762565a09d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273900
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38013}
This commit is contained in:
Victor Boivie 2022-09-02 09:13:09 +00:00 committed by WebRTC LUCI CQ
parent 5625a86f5a
commit 9ce37ccf23
3 changed files with 7 additions and 1 deletions

View File

@ -21,6 +21,7 @@ RetransmissionTimeout::RetransmissionTimeout(const DcSctpOptions& options)
max_rto_(*options.rto_max), max_rto_(*options.rto_max),
max_rtt_(*options.rtt_max), max_rtt_(*options.rtt_max),
min_rtt_variance_(*options.min_rtt_variance), min_rtt_variance_(*options.min_rtt_variance),
scaled_srtt_(*options.rto_initial << kRttShift),
rto_(*options.rto_initial) {} rto_(*options.rto_initial) {}
void RetransmissionTimeout::ObserveRTT(DurationMs measured_rtt) { void RetransmissionTimeout::ObserveRTT(DurationMs measured_rtt) {

View File

@ -48,7 +48,7 @@ class RetransmissionTimeout {
// If this is the first measurement // If this is the first measurement
bool first_measurement_ = true; bool first_measurement_ = true;
// Smoothed Round-Trip Time, shifted by kRttShift // Smoothed Round-Trip Time, shifted by kRttShift
int32_t scaled_srtt_ = 0; int32_t scaled_srtt_;
// Round-Trip Time Variation, shifted by kRttVarShift // Round-Trip Time Variation, shifted by kRttVarShift
int32_t scaled_rtt_var_ = 0; int32_t scaled_rtt_var_ = 0;
// Retransmission Timeout // Retransmission Timeout

View File

@ -37,6 +37,11 @@ TEST(RetransmissionTimeoutTest, HasValidInitialRto) {
EXPECT_EQ(rto_.rto(), kInitialRto); EXPECT_EQ(rto_.rto(), kInitialRto);
} }
TEST(RetransmissionTimeoutTest, HasValidInitialSrtt) {
RetransmissionTimeout rto_(MakeOptions());
EXPECT_EQ(rto_.srtt(), kInitialRto);
}
TEST(RetransmissionTimeoutTest, NegativeValuesDoNotAffectRTO) { TEST(RetransmissionTimeoutTest, NegativeValuesDoNotAffectRTO) {
RetransmissionTimeout rto_(MakeOptions()); RetransmissionTimeout rto_(MakeOptions());
// Initial negative value // Initial negative value