28 #include "ns3/data-rate.h"
29 #include "ns3/random-variable-stream.h"
30 #include "ns3/traced-value.h"
105 std::string
GetName()
const override;
Class for representing data rates.
Tests whether BBR sets correct value of pacing and cwnd gain based on different state.
BBR congestion control algorithm.
MaxBandwidthFilter_t m_maxBwFilter
Maximum bandwidth filter.
bool m_hasSeenRtt
Have we seen RTT sample yet?
double m_cWndGain
The dynamic congestion window gain factor.
void ModulateCwndForProbeRTT(Ptr< TcpSocketState > tcb)
Modulates congestion window in BBR_PROBE_RTT.
uint32_t m_nextRoundDelivered
Denotes the end of a packet-timed round trip.
BbrMode_t
BBR has the following 4 modes for deciding how fast to send:
@ BBR_PROBE_RTT
Cut inflight to min to probe min_rtt.
@ BBR_DRAIN
Drain any queue created during startup.
@ BBR_STARTUP
Ramp up sending rate rapidly to fill pipe.
@ BBR_PROBE_BW
Discover, share bw: pace around estimated bw.
uint32_t m_roundCount
Count of packet-timed round trips.
uint32_t m_priorCwnd
The last-known good congestion window.
uint32_t m_extraAckedWinRttLength
Window length of extra acked window.
virtual void SetStream(uint32_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
uint32_t m_extraAckedIdx
Current index in extra acked array.
Time m_probeRtPropStamp
The wall clock time at which the current BBR.RTProp sample was obtained.
std::string GetName() const override
Get the name of the congestion control algorithm.
void CongControl(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateConnection &rc, const TcpRateOps::TcpRateSample &rs) override
Called when packets are delivered to update cwnd and pacing rate.
bool m_rtPropExpired
A boolean recording whether the BBR.RTprop has expired.
void CwndEvent(Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCAEvent_t event) override
Trigger events/calculations on occurrence of congestion window event.
uint32_t GetSsThresh(Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight) override
Get the slow start threshold after a loss event.
uint32_t m_bandwidthWindowLength
A constant specifying the length of the BBR.BtlBw max filter window, default 10 packet-timed round tr...
double m_highGain
A constant specifying highest gain factor, default is 2.89.
Time m_probeRttDuration
A constant specifying the minimum duration for which ProbeRTT state, default 200 millisecs.
void CheckCyclePhase(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Checks whether to advance pacing gain in BBR_PROBE_BW state, and if allowed calls AdvanceCyclePhase (...
uint32_t AckAggregationCwnd()
Find Cwnd increment based on ack aggregation.
bool m_idleRestart
When restarting from idle, set it true.
Ptr< UniformRandomVariable > m_uv
Uniform Random Variable.
Time m_rtPropStamp
The wall clock time at which the current BBR.RTProp sample was obtained.
void UpdateBtlBw(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates maximum bottleneck.
static TypeId GetTypeId()
Get the type ID.
uint32_t m_minPipeCwnd
The minimal congestion window value BBR tries to target, default 4 Segment size.
Ptr< TcpCongestionOps > Fork() override
Copy the congestion control algorithm across sockets.
uint32_t GetBbrState()
Gets BBR state.
bool HasCongControl() const override
Returns true when Congestion Control Algorithm implements CongControl.
double GetCwndGain()
Gets current cwnd gain.
void UpdateRound(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates round counting related variables.
BbrMode_t m_state
Current state of BBR state machine.
bool m_roundStart
A boolean that BBR sets to true once per packet-timed round trip.
void AdvanceCyclePhase()
Advances pacing gain using cycle gain algorithm, while in BBR_PROBE_BW state.
void EnterProbeBW()
Updates variables specific to BBR_PROBE_BW state.
double GetPacingGain()
Gets current pacing gain.
uint64_t m_delivered
The total amount of data in bytes delivered so far.
void InitPacingRate(Ptr< TcpSocketState > tcb)
Initializes the pacing rate.
bool IsNextCyclePhase(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Checks whether to move to next value of pacing gain while in BBR_PROBE_BW.
bool m_isInitialized
Set to true after first time initializtion variables.
void RestoreCwnd(Ptr< TcpSocketState > tcb)
Helper to restore the last-known good congestion window.
bool ModulateCwndForRecovery(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Modulates congestion window in CA_RECOVERY.
double m_pacingGain
The dynamic pacing gain factor.
static const char *const BbrModeName[BBR_PROBE_RTT+1]
Literal names of BBR mode for use in log messages.
void UpdateRTprop(Ptr< TcpSocketState > tcb)
Updates minimum RTT.
void CheckDrain(Ptr< TcpSocketState > tcb)
Checks whether its time to enter BBR_DRAIN or BBR_PROBE_BW state.
void SetBbrState(BbrMode_t state)
Sets BBR state.
void HandleRestartFromIdle(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates pacing rate if socket is restarting from idle state.
static const double PACING_GAIN_CYCLE[]
BBR uses an eight-phase cycle with the given pacing_gain value in the BBR ProbeBW gain cycle.
WindowedFilter< DataRate, MaxFilter< DataRate >, uint32_t, uint32_t > MaxBandwidthFilter_t
Definition of max bandwidth filter.
bool m_isPipeFilled
A boolean that records whether BBR has filled the pipe.
void EnterStartup()
Updates variables specific to BBR_STARTUP state.
void InitRoundCounting()
Initializes the round counting related variables.
void InitFullPipe()
Initializes the full pipe estimator.
void UpdateAckAggregation(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Estimates max degree of aggregation.
uint32_t m_txItemDelivered
The number of bytes already delivered at the time of new packet transmission.
bool m_packetConservation
Enable/Disable packet conservation mode.
uint32_t InFlight(Ptr< TcpSocketState > tcb, double gain)
Estimates the target value for congestion window.
uint32_t m_extraAckedWinRtt
Age of extra acked in rtt.
void SetPacingRate(Ptr< TcpSocketState > tcb, double gain)
Updates pacing rate based on network model.
void SaveCwnd(Ptr< const TcpSocketState > tcb)
Helper to remember the last-known good congestion window or the latest congestion window unmodulated ...
void EnterDrain()
Updates variables specific to BBR_DRAIN state.
void CongestionStateSet(Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCongState_t newState) override
Trigger events/calculations specific to a congestion state.
Time m_probeRttDoneStamp
Time to exit from BBR_PROBE_RTT state.
uint32_t m_extraAcked[2]
Maximum excess data acked in epoch.
Time m_rtProp
Estimated two-way round-trip propagation delay of the path, estimated from the windowed minimum recen...
uint32_t m_appLimited
The index of the last transmitted packet marked as application-limited.
void UpdateModelAndState(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates BBR network model (Maximum bandwidth and minimum RTT).
void UpdateControlParameters(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates control parameters congestion windowm, pacing rate, send quantum.
Time m_ackEpochTime
Starting of ACK sampling epoch time.
Time m_cycleStamp
Last time gain cycle updated.
void CheckFullPipe(const TcpRateOps::TcpRateSample &rs)
Identifies whether pipe or BDP is already full.
void EnterProbeRTT()
Updates variables specific to BBR_PROBE_RTT state.
DataRate m_fullBandwidth
Value of full bandwidth recorded.
void HandleProbeRTT(Ptr< TcpSocketState > tcb)
Handles the steps for BBR_PROBE_RTT state.
Time m_rtPropFilterLen
A constant specifying the length of the RTProp min filter window, default 10 secs.
uint32_t m_targetCWnd
Target value for congestion window, adapted to the estimated BDP.
uint32_t m_sendQuantum
The maximum size of a data aggregate scheduled and transmitted together.
void SetSendQuantum(Ptr< TcpSocketState > tcb)
Updates send quantum based on the network model.
uint32_t m_ackEpochAckedResetThresh
Max allowed val for m_ackEpochAcked, after which sampling epoch is reset.
void ExitProbeRTT()
Called on exiting from BBR_PROBE_RTT state, it eithers invoke EnterProbeBW () or EnterStartup ()
bool m_probeRttRoundDone
True when it is time to exit BBR_PROBE_RTT.
uint32_t m_fullBandwidthCount
Count of full bandwidth recorded consistently.
void UpdateTargetCwnd(Ptr< TcpSocketState > tcb)
Updates target congestion window.
uint32_t m_cycleIndex
Current index of gain cycle.
uint32_t m_extraAckedGain
Gain factor for adding extra ack to cwnd.
void CheckProbeRTT(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
This method handles the steps related to the ProbeRTT state.
static const uint8_t GAIN_CYCLE_LENGTH
The number of phases in the BBR ProbeBW gain cycle.
void SetCwnd(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates congestion window based on the network model.
uint32_t m_ackEpochAcked
Bytes ACked in sampling epoch.
friend class TcpBbrCheckGainValuesTest
TcpBbrCheckGainValuesTest friend class (for tests).
Congestion control abstract class.
TcpCAEvent_t
Congestion avoidance events.
TcpCongState_t
Definition of the Congestion state machine.
Simulation virtual time values and global simulation resolution.
static Time Max()
Maximum representable Time Not to be confused with Max(Time,Time).
a unique identifier for an interface.
Construct a windowed filter.
void(* DataRate)(DataRate oldValue, DataRate newValue)
TracedValue callback signature for DataRate.
Time Seconds(double value)
Construct a Time in the indicated unit.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Information about the connection rate.