diff options
author | michele papalini <micpapal@cisco.com> | 2019-10-30 11:30:31 +0100 |
---|---|---|
committer | michele papalini <micpapal@cisco.com> | 2019-10-31 11:55:23 +0100 |
commit | af6553e2bea9dc7210fa11c7b7b0473e0c59de3d (patch) | |
tree | 034e6af646a5dabbb4a0c6894efa42e3de524307 /libtransport/src/hicn/transport/protocols/rtc.cc | |
parent | fc6dfe9f7ee02834ae1e6f56e0aaee36ac3e88dd (diff) |
[HICN-318] schedule rounds using timers in rtc conusmer
Signed-off-by: michele papalini <micpapal@cisco.com>
Change-Id: I2e52d002533706abdd82fbca5ebb80e81374de86
Diffstat (limited to 'libtransport/src/hicn/transport/protocols/rtc.cc')
-rw-r--r-- | libtransport/src/hicn/transport/protocols/rtc.cc | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/libtransport/src/hicn/transport/protocols/rtc.cc b/libtransport/src/hicn/transport/protocols/rtc.cc index f52494aba..3edd90725 100644 --- a/libtransport/src/hicn/transport/protocols/rtc.cc +++ b/libtransport/src/hicn/transport/protocols/rtc.cc @@ -34,6 +34,7 @@ RTCTransportProtocol::RTCTransportProtocol( rtx_timer_ = std::make_unique<asio::steady_timer>(portal_->getIoService()); probe_timer_ = std::make_unique<asio::steady_timer>(portal_->getIoService()); sentinel_timer_ = std::make_unique<asio::steady_timer>(portal_->getIoService()); + round_timer_ = std::make_unique<asio::steady_timer>(portal_->getIoService()); reset(); } @@ -45,6 +46,7 @@ RTCTransportProtocol::~RTCTransportProtocol() { int RTCTransportProtocol::start() { probeRtt(); + newRound(); return TransportProtocol::start(); } @@ -60,10 +62,10 @@ void RTCTransportProtocol::resume() { is_running_ = true; - lastRoundBegin_ = std::chrono::steady_clock::now(); inflightInterestsCount_ = 0; probeRtt(); + newRound(); scheduleNextInterests(); portal_->runEventsLoop(); @@ -75,7 +77,6 @@ void RTCTransportProtocol::resume() { void RTCTransportProtocol::reset() { portal_->setConsumerCallback(this); // controller var - lastRoundBegin_ = std::chrono::steady_clock::now(); currentState_ = HICN_RTC_SYNC_STATE; // cwin var @@ -143,15 +144,14 @@ uint32_t min(uint32_t a, uint32_t b) { return b; } -void RTCTransportProtocol::checkRound() { - uint32_t duration = - (uint32_t)std::chrono::duration_cast<std::chrono::milliseconds>( - std::chrono::steady_clock::now() - lastRoundBegin_) - .count(); - if (duration >= HICN_ROUND_LEN) { - lastRoundBegin_ = std::chrono::steady_clock::now(); - updateStats(duration); // update stats and window - } +void RTCTransportProtocol::newRound() { + round_timer_->expires_from_now(std::chrono::milliseconds( + HICN_ROUND_LEN)); + round_timer_->async_wait([this](std::error_code ec) { + if (ec) return; + updateStats(HICN_ROUND_LEN); + newRound(); + }); } void RTCTransportProtocol::updateDelayStats( @@ -449,7 +449,6 @@ void RTCTransportProtocol::sendInterest(Name *interest_name, bool rtx) { } void RTCTransportProtocol::scheduleNextInterests() { - checkRound(); if (!is_running_ && !is_first_) return; while (inflightInterestsCount_ < currentCWin_) { @@ -505,7 +504,6 @@ void RTCTransportProtocol::scheduleNextInterests() { actualSegment_ = (actualSegment_ + 1) % HICN_MIN_PROBE_SEQ; sendInterest(interest_name, false); - checkRound(); } } |