#include "congestion_control.hpp" #include "VpnPeer.hpp" CongestionController::CongestionController(const VpnPeer& peer): _peer(peer) { _last_seqno = _peer.get_loss_logger().get_cur_seqno(); _loss_based.bandwidth = 3e5; // 300kBps seems a good value to start with } void CongestionController::update_lossbased() { const VpnPeer::LossReports& loss_rep = _peer.get_loss_reports(); uint32_t delta_seqno = loss_rep.last_seqno - loss_rep.prev_seqno; unsigned int delta_losses = loss_rep.last_losses - loss_rep.prev_losses; double loss_rate = (double)delta_losses / (double)delta_seqno; if(loss_rate < 0.02) // FIXME only if the bandwidth is used _loss_based.bandwidth *= 1.05; else if(loss_rate >= 0.1) _loss_based.bandwidth *= (1 - 0.5 * loss_rate); } uint64_t CongestionController::get_bandwidth() const { return _loss_based.bandwidth; }