A Discrete-Event Network Simulator
API
tcp-rate-ops.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  */
18 #ifndef TCP_RATE_OPS_H
19 #define TCP_RATE_OPS_H
20 
21 #include "tcp-tx-item.h"
22 
23 #include "ns3/data-rate.h"
24 #include "ns3/object.h"
25 #include "ns3/traced-callback.h"
26 #include "ns3/traced-value.h"
27 
28 namespace ns3
29 {
30 
39 class TcpRateOps : public Object
40 {
41  public:
42  struct TcpRateSample;
43  struct TcpRateConnection;
44 
50  static TypeId GetTypeId();
61  virtual void SkbSent(TcpTxItem* skb, bool isStartOfTransmission) = 0;
62 
75  virtual void SkbDelivered(TcpTxItem* skb) = 0;
76 
90  virtual void CalculateAppLimited(uint32_t cWnd,
91  uint32_t in_flight,
92  uint32_t segmentSize,
93  const SequenceNumber32& tailSeq,
94  const SequenceNumber32& nextTx,
95  const uint32_t lostOut,
96  const uint32_t retransOut) = 0;
97 
116  virtual const TcpRateSample& GenerateSample(uint32_t delivered,
117  uint32_t lost,
118  bool is_sack_reneg,
119  uint32_t priorInFlight,
120  const Time& minRtt) = 0;
121 
126  virtual const TcpRateConnection& GetConnectionRate() = 0;
127 
140  {
142  bool m_isAppLimited{false};
144  int32_t m_delivered{
145  0};
146  uint32_t m_priorDelivered{0};
149  Seconds(0.0)};
151  Seconds(0.0)};
152  uint32_t m_bytesLoss{
153  0};
154  uint32_t m_priorInFlight{0};
155  uint32_t m_ackedSacked{0};
156 
161  bool IsValid() const
162  {
163  return (m_priorTime != Seconds(0.0) || m_interval != Seconds(0.0));
164  }
165  };
166 
174  {
175  uint64_t m_delivered{0};
178  Seconds(0)};
179  uint32_t m_appLimited{
180  0};
181  uint32_t m_txItemDelivered{0};
183  0};
185  Seconds(0)};
186  bool m_rateAppLimited{false};
187  };
188 };
189 
195 class TcpRateLinux : public TcpRateOps
196 {
197  public:
203  static TypeId GetTypeId();
204 
205  ~TcpRateLinux() override
206  {
207  }
208 
209  void SkbSent(TcpTxItem* skb, bool isStartOfTransmission) override;
210  void SkbDelivered(TcpTxItem* skb) override;
211  void CalculateAppLimited(uint32_t cWnd,
212  uint32_t in_flight,
213  uint32_t segmentSize,
214  const SequenceNumber32& tailSeq,
215  const SequenceNumber32& nextTx,
216  const uint32_t lostOut,
217  const uint32_t retransOut) override;
218  const TcpRateSample& GenerateSample(uint32_t delivered,
219  uint32_t lost,
220  bool is_sack_reneg,
221  uint32_t priorInFlight,
222  const Time& minRtt) override;
223 
225  {
226  return m_rate;
227  }
228 
236  typedef void (*TcpRateUpdated)(const TcpRateConnection& rate);
237 
246  typedef void (*TcpRateSampleUpdated)(const TcpRateSample& sample);
247 
248  private:
249  // Rate sample related variables
252 
255 };
256 
263 std::ostream& operator<<(std::ostream& os, const TcpRateOps::TcpRateSample& sample);
264 
271 std::ostream& operator<<(std::ostream& os, const TcpRateOps::TcpRateConnection& rate);
272 
280 
289 
290 } // namespace ns3
291 
292 #endif /* TCP_RATE_OPS_H */
Class for representing data rates.
Definition: data-rate.h:89
A base class which provides memory management and object aggregation.
Definition: object.h:89
Linux management and generation of Rate information for TCP.
Definition: tcp-rate-ops.h:196
TracedCallback< const TcpRateConnection & > m_rateTrace
Rate trace.
Definition: tcp-rate-ops.h:253
void(* TcpRateSampleUpdated)(const TcpRateSample &sample)
TracedCallback signature for tcp rate sample update events.
Definition: tcp-rate-ops.h:246
void SkbDelivered(TcpTxItem *skb) override
Update the Rate information after an item is received.
TracedCallback< const TcpRateSample & > m_rateSampleTrace
Rate Sample trace.
Definition: tcp-rate-ops.h:254
TcpRateSample m_rateSample
Rate sample (continuously updated)
Definition: tcp-rate-ops.h:251
void(* TcpRateUpdated)(const TcpRateConnection &rate)
TracedCallback signature for tcp rate update events.
Definition: tcp-rate-ops.h:236
TcpRateConnection m_rate
Rate information.
Definition: tcp-rate-ops.h:250
void SkbSent(TcpTxItem *skb, bool isStartOfTransmission) override
Put the rate information inside the sent skb.
const TcpRateSample & GenerateSample(uint32_t delivered, uint32_t lost, bool is_sack_reneg, uint32_t priorInFlight, const Time &minRtt) override
Generate a TcpRateSample to feed a congestion avoidance algorithm.
Definition: tcp-rate-ops.cc:57
const TcpRateConnection & GetConnectionRate() override
Definition: tcp-rate-ops.h:224
static TypeId GetTypeId()
Get the type ID.
Definition: tcp-rate-ops.cc:39
~TcpRateLinux() override
Definition: tcp-rate-ops.h:205
void CalculateAppLimited(uint32_t cWnd, uint32_t in_flight, uint32_t segmentSize, const SequenceNumber32 &tailSeq, const SequenceNumber32 &nextTx, const uint32_t lostOut, const uint32_t retransOut) override
If a gap is detected between sends, it means we are app-limited.
Interface for all operations that involve a Rate monitoring for TCP.
Definition: tcp-rate-ops.h:40
static TypeId GetTypeId()
Get the type ID.
Definition: tcp-rate-ops.cc:30
virtual void SkbSent(TcpTxItem *skb, bool isStartOfTransmission)=0
Put the rate information inside the sent skb.
virtual const TcpRateConnection & GetConnectionRate()=0
virtual void CalculateAppLimited(uint32_t cWnd, uint32_t in_flight, uint32_t segmentSize, const SequenceNumber32 &tailSeq, const SequenceNumber32 &nextTx, const uint32_t lostOut, const uint32_t retransOut)=0
If a gap is detected between sends, it means we are app-limited.
virtual const TcpRateSample & GenerateSample(uint32_t delivered, uint32_t lost, bool is_sack_reneg, uint32_t priorInFlight, const Time &minRtt)=0
Generate a TcpRateSample to feed a congestion avoidance algorithm.
virtual void SkbDelivered(TcpTxItem *skb)=0
Update the Rate information after an item is received.
Item that encloses the application packet and some flags for it.
Definition: tcp-tx-item.h:33
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
a unique identifier for an interface.
Definition: type-id.h:59
uint32_t segmentSize
void(* DataRate)(DataRate oldValue, DataRate newValue)
TracedValue callback signature for DataRate.
Definition: data-rate.h:327
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1326
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool operator==(const EventId &a, const EventId &b)
Definition: event-id.h:157
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:159
Information about the connection rate.
Definition: tcp-rate-ops.h:174
uint32_t m_txItemDelivered
The value of delivered when the acked item was sent.
Definition: tcp-rate-ops.h:181
Time m_deliveredTime
Simulator time when m_delivered was last updated.
Definition: tcp-rate-ops.h:176
int32_t m_rateDelivered
The amount of data delivered considered to calculate delivery rate.
Definition: tcp-rate-ops.h:182
uint64_t m_delivered
The total amount of data in bytes delivered so far.
Definition: tcp-rate-ops.h:175
uint32_t m_appLimited
The index of the last transmitted packet marked as application-limited.
Definition: tcp-rate-ops.h:179
bool m_rateAppLimited
Was sample was taken when data is app limited?
Definition: tcp-rate-ops.h:186
Time m_firstSentTime
The send time of the packet that was most recently marked as delivered.
Definition: tcp-rate-ops.h:177
Time m_rateInterval
The value of interval considered to calculate delivery rate.
Definition: tcp-rate-ops.h:184
Rate Sample structure.
Definition: tcp-rate-ops.h:140
Time m_ackElapsed
ACK time interval calculated from the most recent packet delivered.
Definition: tcp-rate-ops.h:150
bool IsValid() const
Is the sample valid?
Definition: tcp-rate-ops.h:161
bool m_isAppLimited
Indicates whether the rate sample is application-limited.
Definition: tcp-rate-ops.h:142
uint32_t m_ackedSacked
The amount of data acked and sacked in the last received ack.
Definition: tcp-rate-ops.h:155
DataRate m_deliveryRate
The delivery rate sample.
Definition: tcp-rate-ops.h:141
uint32_t m_priorInFlight
The value if bytes in flight prior to last received ack.
Definition: tcp-rate-ops.h:154
Time m_sendElapsed
Send time interval calculated from the most recent packet delivered.
Definition: tcp-rate-ops.h:148
Time m_interval
The length of the sampling interval.
Definition: tcp-rate-ops.h:143
uint32_t m_priorDelivered
The delivered count of the most recent packet delivered.
Definition: tcp-rate-ops.h:146
int32_t m_delivered
The amount of data marked as delivered over the sampling interval.
Definition: tcp-rate-ops.h:144
uint32_t m_bytesLoss
The amount of data marked as lost from the most recent ack received.
Definition: tcp-rate-ops.h:152
Time m_priorTime
The delivered time of the most recent packet delivered.
Definition: tcp-rate-ops.h:147