A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
tcp-bbr.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 NITK Surathkal
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Authors: Vivek Jain <jain.vivek.anand@gmail.com>
7 * Viyom Mittal <viyommittal@gmail.com>
8 * Mohit P. Tahiliani <tahiliani@nitk.edu.in>
9 */
10
11#ifndef TCPBBR_H
12#define TCPBBR_H
13
14#include "tcp-congestion-ops.h"
15#include "windowed-filter.h"
16
17#include "ns3/data-rate.h"
18#include "ns3/random-variable-stream.h"
19#include "ns3/traced-value.h"
20
21class TcpBbrCheckGainValuesTest;
22
23namespace ns3
24{
25
26/**
27 * \ingroup congestionOps
28 *
29 * \brief BBR congestion control algorithm
30 *
31 * This class implement the BBR (Bottleneck Bandwidth and Round-trip propagation time)
32 * congestion control type.
33 */
35{
36 public:
37 /**
38 * \brief The number of phases in the BBR ProbeBW gain cycle.
39 */
40 static const uint8_t GAIN_CYCLE_LENGTH = 8;
41
42 /**
43 * \brief BBR uses an eight-phase cycle with the given pacing_gain value
44 * in the BBR ProbeBW gain cycle.
45 */
46 const static double PACING_GAIN_CYCLE[];
47 /**
48 * \brief Get the type ID.
49 * \return the object TypeId
50 */
51 static TypeId GetTypeId();
52
53 /**
54 * \brief Constructor
55 */
56 TcpBbr();
57
58 /**
59 * Copy constructor.
60 * \param sock The socket to copy from.
61 */
62 TcpBbr(const TcpBbr& sock);
63
64 /**
65 * \brief BBR has the following 4 modes for deciding how fast to send:
66 */
68 {
69 BBR_STARTUP, /**< Ramp up sending rate rapidly to fill pipe */
70 BBR_DRAIN, /**< Drain any queue created during startup */
71 BBR_PROBE_BW, /**< Discover, share bw: pace around estimated bw */
72 BBR_PROBE_RTT, /**< Cut inflight to min to probe min_rtt */
73 };
74
79 MaxBandwidthFilter_t; //!< Definition of max bandwidth filter.
80
81 /**
82 * \brief Literal names of BBR mode for use in log messages
83 */
84 static const char* const BbrModeName[BBR_PROBE_RTT + 1];
85
86 /**
87 * Assign a fixed random variable stream number to the random variables
88 * used by this model.
89 *
90 * \param stream first stream index to use
91 */
92 virtual void SetStream(uint32_t stream);
93
94 std::string GetName() const override;
95 bool HasCongControl() const override;
98 const TcpRateOps::TcpRateSample& rs) override;
100 const TcpSocketState::TcpCongState_t newState) override;
101 void CwndEvent(Ptr<TcpSocketState> tcb, const TcpSocketState::TcpCAEvent_t event) override;
102 uint32_t GetSsThresh(Ptr<const TcpSocketState> tcb, uint32_t bytesInFlight) override;
103 Ptr<TcpCongestionOps> Fork() override;
104
105 protected:
106 /**
107 * \brief TcpBbrCheckGainValuesTest friend class (for tests).
108 * \relates TcpBbrCheckGainValuesTest
109 */
111
112 /**
113 * \brief Advances pacing gain using cycle gain algorithm, while in BBR_PROBE_BW state
114 */
115 void AdvanceCyclePhase();
116
117 /**
118 * \brief Checks whether to advance pacing gain in BBR_PROBE_BW state,
119 * and if allowed calls AdvanceCyclePhase ()
120 * \param tcb the socket state.
121 * \param rs rate sample.
122 */
124
125 /**
126 * \brief Checks whether its time to enter BBR_DRAIN or BBR_PROBE_BW state
127 * \param tcb the socket state.
128 */
130
131 /**
132 * \brief Identifies whether pipe or BDP is already full
133 * \param rs rate sample.
134 */
136
137 /**
138 * \brief This method handles the steps related to the ProbeRTT state
139 * \param tcb the socket state.
140 * \param rs rate sample.
141 */
143
144 /**
145 * \brief Updates variables specific to BBR_DRAIN state
146 */
147 void EnterDrain();
148
149 /**
150 * \brief Updates variables specific to BBR_PROBE_BW state
151 */
152 void EnterProbeBW();
153
154 /**
155 * \brief Updates variables specific to BBR_PROBE_RTT state
156 */
157 void EnterProbeRTT();
158
159 /**
160 * \brief Updates variables specific to BBR_STARTUP state
161 */
162 void EnterStartup();
163
164 /**
165 * \brief Called on exiting from BBR_PROBE_RTT state, it eithers invoke EnterProbeBW () or
166 * EnterStartup ()
167 */
168 void ExitProbeRTT();
169
170 /**
171 * \brief Gets BBR state.
172 * \return returns BBR state.
173 */
175
176 /**
177 * \brief Gets current pacing gain.
178 * \return returns current pacing gain.
179 */
180 double GetPacingGain();
181
182 /**
183 * \brief Gets current cwnd gain.
184 * \return returns current cwnd gain.
185 */
186 double GetCwndGain();
187
188 /**
189 * \brief Handles the steps for BBR_PROBE_RTT state.
190 * \param tcb the socket state.
191 */
193
194 /**
195 * \brief Updates pacing rate if socket is restarting from idle state.
196 * \param tcb the socket state.
197 * \param rs rate sample.
198 */
200
201 /**
202 * \brief Estimates the target value for congestion window
203 * \param tcb the socket state.
204 * \param gain cwnd gain.
205 * \return returns congestion window based on max bandwidth and min RTT.
206 */
207 uint32_t InFlight(Ptr<TcpSocketState> tcb, double gain);
208
209 /**
210 * \brief Initializes the full pipe estimator.
211 */
212 void InitFullPipe();
213
214 /**
215 * \brief Initializes the pacing rate.
216 * \param tcb the socket state.
217 */
219
220 /**
221 * \brief Initializes the round counting related variables.
222 */
223 void InitRoundCounting();
224
225 /**
226 * \brief Checks whether to move to next value of pacing gain while in BBR_PROBE_BW.
227 * \param tcb the socket state.
228 * \param rs rate sample.
229 * \returns true if want to move to next value otherwise false.
230 */
232
233 /**
234 * \brief Modulates congestion window in BBR_PROBE_RTT.
235 * \param tcb the socket state.
236 */
238
239 /**
240 * \brief Modulates congestion window in CA_RECOVERY.
241 * \param tcb the socket state.
242 * \param rs rate sample.
243 * \return true if congestion window is updated in CA_RECOVERY.
244 */
246
247 /**
248 * \brief Helper to restore the last-known good congestion window
249 * \param tcb the socket state.
250 */
252
253 /**
254 * \brief Helper to remember the last-known good congestion window or
255 * the latest congestion window unmodulated by loss recovery or ProbeRTT.
256 * \param tcb the socket state.
257 */
259
260 /**
261 * \brief Updates congestion window based on the network model.
262 * \param tcb the socket state.
263 * \param rs rate sample
264 */
266
267 /**
268 * \brief Updates pacing rate based on network model.
269 * \param tcb the socket state.
270 * \param gain pacing gain.
271 */
272 void SetPacingRate(Ptr<TcpSocketState> tcb, double gain);
273
274 /**
275 * \brief Updates send quantum based on the network model.
276 * \param tcb the socket state.
277 */
279
280 /**
281 * \brief Updates maximum bottleneck.
282 * \param tcb the socket state.
283 * \param rs rate sample.
284 */
286
287 /**
288 * \brief Updates control parameters congestion windowm, pacing rate, send quantum.
289 * \param tcb the socket state.
290 * \param rs rate sample.
291 */
293
294 /**
295 * \brief Updates BBR network model (Maximum bandwidth and minimum RTT).
296 * \param tcb the socket state.
297 * \param rs rate sample.
298 */
300
301 /**
302 * \brief Updates round counting related variables.
303 * \param tcb the socket state.
304 * \param rs rate sample.
305 */
307
308 /**
309 * \brief Updates minimum RTT.
310 * \param tcb the socket state.
311 */
313
314 /**
315 * \brief Updates target congestion window.
316 * \param tcb the socket state.
317 */
319
320 /**
321 * \brief Sets BBR state.
322 * \param state BBR state.
323 */
324 void SetBbrState(BbrMode_t state);
325
326 /**
327 * \brief Find Cwnd increment based on ack aggregation.
328 * \return uint32_t aggregate cwnd.
329 */
331
332 /**
333 * \brief Estimates max degree of aggregation.
334 * \param tcb the socket state.
335 * \param rs rate sample.
336 */
338
339 private:
340 BbrMode_t m_state{BbrMode_t::BBR_STARTUP}; //!< Current state of BBR state machine
341 MaxBandwidthFilter_t m_maxBwFilter; //!< Maximum bandwidth filter
342 uint32_t m_bandwidthWindowLength{0}; //!< A constant specifying the length of the BBR.BtlBw max
343 //!< filter window, default 10 packet-timed round trips.
344 TracedValue<double> m_pacingGain{0}; //!< The dynamic pacing gain factor
345 TracedValue<double> m_cWndGain{0}; //!< The dynamic congestion window gain factor
346 double m_highGain{0}; //!< A constant specifying highest gain factor, default is 2.89
347 bool m_isPipeFilled{false}; //!< A boolean that records whether BBR has filled the pipe
349 0}; //!< The minimal congestion window value BBR tries to target, default 4 Segment size
350 uint32_t m_roundCount{0}; //!< Count of packet-timed round trips
351 bool m_roundStart{false}; //!< A boolean that BBR sets to true once per packet-timed round trip
352 uint32_t m_nextRoundDelivered{0}; //!< Denotes the end of a packet-timed round trip
353 Time m_probeRttDuration{MilliSeconds(200)}; //!< A constant specifying the minimum duration for
354 //!< which ProbeRTT state, default 200 millisecs
356 Seconds(0)}; //!< The wall clock time at which the current BBR.RTProp sample was obtained.
357 Time m_probeRttDoneStamp{Seconds(0)}; //!< Time to exit from BBR_PROBE_RTT state
358 bool m_probeRttRoundDone{false}; //!< True when it is time to exit BBR_PROBE_RTT
359 bool m_packetConservation{false}; //!< Enable/Disable packet conservation mode
360 uint32_t m_priorCwnd{0}; //!< The last-known good congestion window
361 bool m_idleRestart{false}; //!< When restarting from idle, set it true
362 uint32_t m_targetCWnd{0}; //!< Target value for congestion window, adapted to the estimated BDP
363 DataRate m_fullBandwidth{0}; //!< Value of full bandwidth recorded
364 uint32_t m_fullBandwidthCount{0}; //!< Count of full bandwidth recorded consistently
366 Time::Max()}; //!< Estimated two-way round-trip propagation delay of the path, estimated
367 //!< from the windowed minimum recent round-trip delay sample.
369 0}; //!< The maximum size of a data aggregate scheduled and transmitted together
370 Time m_cycleStamp{Seconds(0)}; //!< Last time gain cycle updated
371 uint32_t m_cycleIndex{0}; //!< Current index of gain cycle
372 bool m_minRttExpired{false}; //!< A boolean recording whether the BBR.RTprop has expired
373 Time m_minRttFilterLen{Seconds(10)}; //!< A constant specifying the length of the RTProp min
374 //!< filter window, default 10 secs.
376 Seconds(0)}; //!< The wall clock time at which the current BBR.RTProp sample was obtained
377 bool m_isInitialized{false}; //!< Set to true after first time initialization variables
378 Ptr<UniformRandomVariable> m_uv{nullptr}; //!< Uniform Random Variable
379 uint64_t m_delivered{0}; //!< The total amount of data in bytes delivered so far
381 0}; //!< The index of the last transmitted packet marked as application-limited
382 uint32_t m_extraAckedGain{1}; //!< Gain factor for adding extra ack to cwnd
383 uint32_t m_extraAcked[2]{0, 0}; //!< Maximum excess data acked in epoch
384 uint32_t m_extraAckedWinRtt{0}; //!< Age of extra acked in rtt
385 uint32_t m_extraAckedWinRttLength{5}; //!< Window length of extra acked window
387 1 << 17}; //!< Max allowed val for m_ackEpochAcked, after which sampling epoch is reset
388 uint32_t m_extraAckedIdx{0}; //!< Current index in extra acked array
389 Time m_ackEpochTime{Seconds(0)}; //!< Starting of ACK sampling epoch time
390 uint32_t m_ackEpochAcked{0}; //!< Bytes ACked in sampling epoch
391 bool m_hasSeenRtt{false}; //!< Have we seen RTT sample yet?
392 double m_pacingMargin{0.01}; //!< BBR intentionally reduces the pacing rate by 1% to drain any
393 //!< standing queues. See `bbr_rate_bytes_per_sec` in Linux.
394};
395
396} // namespace ns3
397#endif // TCPBBR_H
Class for representing data rates.
Definition data-rate.h:78
Smart pointer class similar to boost::intrusive_ptr.
Tests whether BBR sets correct value of pacing and cwnd gain based on different state.
BBR congestion control algorithm.
Definition tcp-bbr.h:35
MaxBandwidthFilter_t m_maxBwFilter
Maximum bandwidth filter.
Definition tcp-bbr.h:341
bool m_hasSeenRtt
Have we seen RTT sample yet?
Definition tcp-bbr.h:391
Time m_minRttFilterLen
A constant specifying the length of the RTProp min filter window, default 10 secs.
Definition tcp-bbr.h:373
void ModulateCwndForProbeRTT(Ptr< TcpSocketState > tcb)
Modulates congestion window in BBR_PROBE_RTT.
Definition tcp-bbr.cc:558
uint32_t m_nextRoundDelivered
Denotes the end of a packet-timed round trip.
Definition tcp-bbr.h:352
BbrMode_t
BBR has the following 4 modes for deciding how fast to send:
Definition tcp-bbr.h:68
@ BBR_PROBE_RTT
Cut inflight to min to probe min_rtt.
Definition tcp-bbr.h:72
@ BBR_DRAIN
Drain any queue created during startup.
Definition tcp-bbr.h:70
@ BBR_STARTUP
Ramp up sending rate rapidly to fill pipe.
Definition tcp-bbr.h:69
@ BBR_PROBE_BW
Discover, share bw: pace around estimated bw.
Definition tcp-bbr.h:71
uint32_t m_roundCount
Count of packet-timed round trips.
Definition tcp-bbr.h:350
uint32_t m_priorCwnd
The last-known good congestion window.
Definition tcp-bbr.h:360
uint32_t m_extraAckedWinRttLength
Window length of extra acked window.
Definition tcp-bbr.h:385
bool m_minRttExpired
A boolean recording whether the BBR.RTprop has expired.
Definition tcp-bbr.h:372
virtual void SetStream(uint32_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
Definition tcp-bbr.cc:143
TcpBbr()
Constructor.
Definition tcp-bbr.cc:84
uint32_t m_extraAckedIdx
Current index in extra acked array.
Definition tcp-bbr.h:388
Time m_probeRtPropStamp
The wall clock time at which the current BBR.RTProp sample was obtained.
Definition tcp-bbr.h:355
std::string GetName() const override
Get the name of the congestion control algorithm.
Definition tcp-bbr.cc:690
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.
Definition tcp-bbr.cc:703
void CwndEvent(Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCAEvent_t event) override
Trigger events/calculations on occurrence of congestion window event.
Definition tcp-bbr.cc:757
uint32_t GetSsThresh(Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight) override
Get the slow start threshold after a loss event.
Definition tcp-bbr.cc:789
uint32_t m_bandwidthWindowLength
A constant specifying the length of the BBR.BtlBw max filter window, default 10 packet-timed round tr...
Definition tcp-bbr.h:342
double m_highGain
A constant specifying highest gain factor, default is 2.89.
Definition tcp-bbr.h:346
Time m_probeRttDuration
A constant specifying the minimum duration for which ProbeRTT state, default 200 millisecs.
Definition tcp-bbr.h:353
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 (...
Definition tcp-bbr.cc:287
uint32_t AckAggregationCwnd()
Find Cwnd increment based on ack aggregation.
Definition tcp-bbr.cc:479
bool m_idleRestart
When restarting from idle, set it true.
Definition tcp-bbr.h:361
Ptr< UniformRandomVariable > m_uv
Uniform Random Variable.
Definition tcp-bbr.h:378
static TypeId GetTypeId()
Get the type ID.
Definition tcp-bbr.cc:25
uint32_t m_minPipeCwnd
The minimal congestion window value BBR tries to target, default 4 Segment size.
Definition tcp-bbr.h:348
Ptr< TcpCongestionOps > Fork() override
Copy the congestion control algorithm across sockets.
Definition tcp-bbr.cc:797
uint32_t GetBbrState()
Gets BBR state.
Definition tcp-bbr.cc:669
bool HasCongControl() const override
Returns true when Congestion Control Algorithm implements CongControl.
Definition tcp-bbr.cc:696
TracedValue< double > m_cWndGain
The dynamic congestion window gain factor.
Definition tcp-bbr.h:345
double GetCwndGain()
Gets current cwnd gain.
Definition tcp-bbr.cc:676
void UpdateRound(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates round counting related variables.
Definition tcp-bbr.cc:603
BbrMode_t m_state
Current state of BBR state machine.
Definition tcp-bbr.h:340
bool m_roundStart
A boolean that BBR sets to true once per packet-timed round trip.
Definition tcp-bbr.h:351
void AdvanceCyclePhase()
Advances pacing gain using cycle gain algorithm, while in BBR_PROBE_BW state.
Definition tcp-bbr.cc:258
double m_pacingMargin
BBR intentionally reduces the pacing rate by 1% to drain any standing queues.
Definition tcp-bbr.h:392
void EnterProbeBW()
Updates variables specific to BBR_PROBE_BW state.
Definition tcp-bbr.cc:331
double GetPacingGain()
Gets current pacing gain.
Definition tcp-bbr.cc:683
uint64_t m_delivered
The total amount of data in bytes delivered so far.
Definition tcp-bbr.h:379
void InitPacingRate(Ptr< TcpSocketState > tcb)
Initializes the pacing rate.
Definition tcp-bbr.cc:168
bool IsNextCyclePhase(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Checks whether to move to next value of pacing gain while in BBR_PROBE_BW.
Definition tcp-bbr.cc:267
bool m_isInitialized
Set to true after first time initialization variables.
Definition tcp-bbr.h:377
void RestoreCwnd(Ptr< TcpSocketState > tcb)
Helper to restore the last-known good congestion window.
Definition tcp-bbr.cc:393
bool ModulateCwndForRecovery(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Modulates congestion window in CA_RECOVERY.
Definition tcp-bbr.cc:540
static const char *const BbrModeName[BBR_PROBE_RTT+1]
Literal names of BBR mode for use in log messages.
Definition tcp-bbr.h:84
void UpdateRTprop(Ptr< TcpSocketState > tcb)
Updates minimum RTT.
Definition tcp-bbr.cc:358
void CheckDrain(Ptr< TcpSocketState > tcb)
Checks whether its time to enter BBR_DRAIN or BBR_PROBE_BW state.
Definition tcp-bbr.cc:342
void SetBbrState(BbrMode_t state)
Sets BBR state.
Definition tcp-bbr.cc:660
void UpdateBottleneckBandwidth(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates maximum bottleneck.
Definition tcp-bbr.cc:620
void HandleRestartFromIdle(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates pacing rate if socket is restarting from idle state.
Definition tcp-bbr.cc:206
static const double PACING_GAIN_CYCLE[]
BBR uses an eight-phase cycle with the given pacing_gain value in the BBR ProbeBW gain cycle.
Definition tcp-bbr.h:46
WindowedFilter< DataRate, MaxFilter< DataRate >, uint32_t, uint32_t > MaxBandwidthFilter_t
Definition of max bandwidth filter.
Definition tcp-bbr.h:79
bool m_isPipeFilled
A boolean that records whether BBR has filled the pipe.
Definition tcp-bbr.h:347
void EnterStartup()
Updates variables specific to BBR_STARTUP state.
Definition tcp-bbr.cc:197
void InitRoundCounting()
Initializes the round counting related variables.
Definition tcp-bbr.cc:150
void InitFullPipe()
Initializes the full pipe estimator.
Definition tcp-bbr.cc:159
void UpdateAckAggregation(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Estimates max degree of aggregation.
Definition tcp-bbr.cc:495
bool m_packetConservation
Enable/Disable packet conservation mode.
Definition tcp-bbr.h:359
uint32_t InFlight(Ptr< TcpSocketState > tcb, double gain)
Estimates the target value for congestion window.
Definition tcp-bbr.cc:240
uint32_t m_extraAckedWinRtt
Age of extra acked in rtt.
Definition tcp-bbr.h:384
void SetPacingRate(Ptr< TcpSocketState > tcb, double gain)
Updates pacing rate based on network model.
Definition tcp-bbr.cc:220
void SaveCwnd(Ptr< const TcpSocketState > tcb)
Helper to remember the last-known good congestion window or the latest congestion window unmodulated ...
Definition tcp-bbr.cc:379
void EnterDrain()
Updates variables specific to BBR_DRAIN state.
Definition tcp-bbr.cc:322
void CongestionStateSet(Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCongState_t newState) override
Trigger events/calculations specific to a congestion state.
Definition tcp-bbr.cc:714
Time m_probeRttDoneStamp
Time to exit from BBR_PROBE_RTT state.
Definition tcp-bbr.h:357
uint32_t m_extraAcked[2]
Maximum excess data acked in epoch.
Definition tcp-bbr.h:383
uint32_t m_appLimited
The index of the last transmitted packet marked as application-limited.
Definition tcp-bbr.h:380
void UpdateModelAndState(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates BBR network model (Maximum bandwidth and minimum RTT).
Definition tcp-bbr.cc:638
Time m_minRttStamp
The wall clock time at which the current BBR.RTProp sample was obtained.
Definition tcp-bbr.h:375
void UpdateControlParameters(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates control parameters congestion windowm, pacing rate, send quantum.
Definition tcp-bbr.cc:651
Time m_ackEpochTime
Starting of ACK sampling epoch time.
Definition tcp-bbr.h:389
Time m_cycleStamp
Last time gain cycle updated.
Definition tcp-bbr.h:370
void CheckFullPipe(const TcpRateOps::TcpRateSample &rs)
Identifies whether pipe or BDP is already full.
Definition tcp-bbr.cc:297
TracedValue< Time > m_minRtt
Estimated two-way round-trip propagation delay of the path, estimated from the windowed minimum recen...
Definition tcp-bbr.h:365
void EnterProbeRTT()
Updates variables specific to BBR_PROBE_RTT state.
Definition tcp-bbr.cc:370
DataRate m_fullBandwidth
Value of full bandwidth recorded.
Definition tcp-bbr.h:363
void HandleProbeRTT(Ptr< TcpSocketState > tcb)
Handles the steps for BBR_PROBE_RTT state.
Definition tcp-bbr.cc:414
uint32_t m_targetCWnd
Target value for congestion window, adapted to the estimated BDP.
Definition tcp-bbr.h:362
uint32_t m_sendQuantum
The maximum size of a data aggregate scheduled and transmitted together.
Definition tcp-bbr.h:368
void SetSendQuantum(Ptr< TcpSocketState > tcb)
Updates send quantum based on the network model.
Definition tcp-bbr.cc:465
uint32_t m_ackEpochAckedResetThresh
Max allowed val for m_ackEpochAcked, after which sampling epoch is reset.
Definition tcp-bbr.h:386
void ExitProbeRTT()
Called on exiting from BBR_PROBE_RTT state, it eithers invoke EnterProbeBW () or EnterStartup ()
Definition tcp-bbr.cc:400
bool m_probeRttRoundDone
True when it is time to exit BBR_PROBE_RTT.
Definition tcp-bbr.h:358
uint32_t m_fullBandwidthCount
Count of full bandwidth recorded consistently.
Definition tcp-bbr.h:364
void UpdateTargetCwnd(Ptr< TcpSocketState > tcb)
Updates target congestion window.
Definition tcp-bbr.cc:472
uint32_t m_cycleIndex
Current index of gain cycle.
Definition tcp-bbr.h:371
uint32_t m_extraAckedGain
Gain factor for adding extra ack to cwnd.
Definition tcp-bbr.h:382
void CheckProbeRTT(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
This method handles the steps related to the ProbeRTT state.
Definition tcp-bbr.cc:443
static const uint8_t GAIN_CYCLE_LENGTH
The number of phases in the BBR ProbeBW gain cycle.
Definition tcp-bbr.h:40
void SetCwnd(Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateSample &rs)
Updates congestion window based on the network model.
Definition tcp-bbr.cc:568
TracedValue< double > m_pacingGain
The dynamic pacing gain factor.
Definition tcp-bbr.h:344
uint32_t m_ackEpochAcked
Bytes ACked in sampling epoch.
Definition tcp-bbr.h:390
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.
Definition nstime.h:94
static Time Max()
Maximum representable Time Not to be confused with Max(Time,Time).
Definition nstime.h:286
Trace classes with value semantics.
a unique identifier for an interface.
Definition type-id.h:48
Construct a windowed filter.
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition nstime.h:1308
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition nstime.h:1320
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Compares two values.
Information about the connection rate.
Rate Sample structure.