18 #include <hicn/transport/portability/c_portability.h>
30 virtual void notifyStats(
double throughput) = 0;
31 virtual void notifyDownloadTime(
double downloadTime) = 0;
37 static constexpr
double default_alpha = 0.7;
50 bytes_FEC_received_(0),
52 definitely_lost_data_(0),
56 avg_pending_pkt_(0.0),
60 TRANSPORT_ALWAYS_INLINE
void updateRetxCount(uint64_t retx) {
64 TRANSPORT_ALWAYS_INLINE
void updateBytesRecv(uint64_t bytes) {
65 bytes_received_ += bytes;
68 TRANSPORT_ALWAYS_INLINE
void updateAverageRtt(uint64_t rtt) {
69 average_rtt_ = (alpha_ * average_rtt_) + ((1. - alpha_) * double(rtt));
72 TRANSPORT_ALWAYS_INLINE
void updateAverageWindowSize(
double current_window) {
74 (alpha_ * avg_window_size_) + ((1. - alpha_) * current_window);
77 TRANSPORT_ALWAYS_INLINE
void updateInterestTx(uint64_t int_tx) {
78 interest_tx_ += int_tx;
81 TRANSPORT_ALWAYS_INLINE
void updateLossRatio(
double loss_ratio) {
82 loss_ratio_ = loss_ratio;
85 TRANSPORT_ALWAYS_INLINE
void updateQueuingDelay(
double queuing_delay) {
86 queuing_delay_ = queuing_delay;
89 TRANSPORT_ALWAYS_INLINE
void updateInterestFecTx(uint64_t int_tx) {
90 interest_FEC_tx_ += int_tx;
93 TRANSPORT_ALWAYS_INLINE
void updateBytesFecRecv(uint64_t bytes) {
94 bytes_FEC_received_ += bytes;
97 TRANSPORT_ALWAYS_INLINE
void updateLostData(uint64_t pkt) {
101 TRANSPORT_ALWAYS_INLINE
void updateDefinitelyLostData(uint64_t pkt) {
102 definitely_lost_data_ += pkt;
105 TRANSPORT_ALWAYS_INLINE
void updateRecoveredData(uint64_t bytes) {
106 recovered_data_ += bytes;
109 TRANSPORT_ALWAYS_INLINE
void updateCCState(
int status) { status_ = status; }
111 TRANSPORT_ALWAYS_INLINE
void updateAveragePendingPktCount(
double pkt) {
112 avg_pending_pkt_ = (alpha_ * avg_pending_pkt_) + ((1. - alpha_) * pkt);
115 TRANSPORT_ALWAYS_INLINE
void updateReceivedNacks(uint32_t nacks) {
116 received_nacks_ += nacks;
119 TRANSPORT_ALWAYS_INLINE
void updateReceivedFEC(uint32_t pkt) {
120 received_fec_ += pkt;
123 TRANSPORT_ALWAYS_INLINE uint64_t getRetxCount()
const {
return retx_count_; }
125 TRANSPORT_ALWAYS_INLINE uint64_t getBytesRecv()
const {
126 return bytes_received_;
129 TRANSPORT_ALWAYS_INLINE
double getAverageRtt()
const {
return average_rtt_; }
131 TRANSPORT_ALWAYS_INLINE
double getAverageWindowSize()
const {
132 return avg_window_size_;
135 TRANSPORT_ALWAYS_INLINE uint64_t getInterestTx()
const {
139 TRANSPORT_ALWAYS_INLINE
double getLossRatio()
const {
return loss_ratio_; }
141 TRANSPORT_ALWAYS_INLINE
double getQueuingDelay()
const {
142 return queuing_delay_;
145 TRANSPORT_ALWAYS_INLINE uint64_t getInterestFecTxCount()
const {
146 return interest_FEC_tx_;
149 TRANSPORT_ALWAYS_INLINE uint64_t getBytesFecRecv()
const {
150 return bytes_FEC_received_;
153 TRANSPORT_ALWAYS_INLINE uint64_t getLostData()
const {
return lost_data_; }
155 TRANSPORT_ALWAYS_INLINE uint64_t getDefinitelyLostData()
const {
156 return definitely_lost_data_;
159 TRANSPORT_ALWAYS_INLINE uint64_t getBytesRecoveredData()
const {
160 return recovered_data_;
163 TRANSPORT_ALWAYS_INLINE
int getCCStatus()
const {
return status_; }
165 TRANSPORT_ALWAYS_INLINE
double getAveragePendingPktCount()
const {
166 return avg_pending_pkt_;
169 TRANSPORT_ALWAYS_INLINE uint32_t getReceivedNacks()
const {
170 return received_nacks_;
173 TRANSPORT_ALWAYS_INLINE uint32_t getReceivedFEC()
const {
174 return received_fec_;
177 TRANSPORT_ALWAYS_INLINE
void setAlpha(
double val) { alpha_ = val; }
179 TRANSPORT_ALWAYS_INLINE
void reset() {
183 avg_window_size_ = 0;
186 interest_FEC_tx_ = 0;
187 bytes_FEC_received_ = 0;
189 definitely_lost_data_ = 0;
193 avg_pending_pkt_ = 0;
199 uint64_t retx_count_;
200 uint64_t bytes_received_;
202 double avg_window_size_;
203 uint64_t interest_tx_;
206 double queuing_delay_;
207 uint64_t interest_FEC_tx_;
208 uint64_t bytes_FEC_received_;
210 uint64_t definitely_lost_data_;
211 uint64_t recovered_data_;
213 double avg_pending_pkt_;
214 uint32_t received_nacks_;
215 uint32_t received_fec_;