A Discrete-Event Network Simulator
API
flow-monitor.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2009 INESC Porto
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 // Author: Gustavo J. A. M. Carneiro <gjc@inescporto.pt> <gjcarneiro@gmail.com>
18 //
19 
20 #ifndef FLOW_MONITOR_H
21 #define FLOW_MONITOR_H
22 
23 #include "flow-classifier.h"
24 #include "flow-probe.h"
25 
26 #include "ns3/event-id.h"
27 #include "ns3/histogram.h"
28 #include "ns3/nstime.h"
29 #include "ns3/object.h"
30 #include "ns3/ptr.h"
31 
32 #include <map>
33 #include <vector>
34 
35 namespace ns3
36 {
37 
51 class FlowMonitor : public Object
52 {
53  public:
55  struct FlowStats
56  {
61 
66 
71 
75 
78  Time delaySum; // delayCount == rxPackets
79 
87  Time jitterSum; // jitterCount == rxPackets - 1
88 
92 
94  uint64_t txBytes;
96  uint64_t rxBytes;
98  uint32_t txPackets;
100  uint32_t rxPackets;
101 
107  uint32_t lostPackets;
108 
111  uint32_t timesForwarded;
112 
119 
132  std::vector<uint32_t>
133  packetsDropped; // packetsDropped[reasonCode] => number of dropped packets
134 
137  std::vector<uint64_t> bytesDropped; // bytesDropped[reasonCode] => number of dropped bytes
139  };
140 
141  // --- basic methods ---
146  static TypeId GetTypeId();
147  TypeId GetInstanceTypeId() const override;
148  FlowMonitor();
149 
152  void AddFlowClassifier(Ptr<FlowClassifier> classifier);
153 
157  void Start(const Time& time);
161  void Stop(const Time& time);
163  void StartRightNow();
165  void StopRightNow();
166 
167  // --- methods to be used by the FlowMonitorProbe's only ---
172  void AddProbe(Ptr<FlowProbe> probe);
173 
182  void ReportFirstTx(Ptr<FlowProbe> probe,
183  FlowId flowId,
184  FlowPacketId packetId,
185  uint32_t packetSize);
192  void ReportForwarding(Ptr<FlowProbe> probe,
193  FlowId flowId,
194  FlowPacketId packetId,
195  uint32_t packetSize);
202  void ReportLastRx(Ptr<FlowProbe> probe,
203  FlowId flowId,
204  FlowPacketId packetId,
205  uint32_t packetSize);
213  void ReportDrop(Ptr<FlowProbe> probe,
214  FlowId flowId,
215  FlowPacketId packetId,
216  uint32_t packetSize,
217  uint32_t reasonCode);
218 
220  void CheckForLostPackets();
221 
226  void CheckForLostPackets(Time maxDelay);
227 
228  // --- methods to get the results ---
229 
231  typedef std::map<FlowId, FlowStats> FlowStatsContainer;
233  typedef std::map<FlowId, FlowStats>::iterator FlowStatsContainerI;
235  typedef std::map<FlowId, FlowStats>::const_iterator FlowStatsContainerCI;
237  typedef std::vector<Ptr<FlowProbe>> FlowProbeContainer;
239  typedef std::vector<Ptr<FlowProbe>>::iterator FlowProbeContainerI;
241  typedef std::vector<Ptr<FlowProbe>>::const_iterator FlowProbeContainerCI;
242 
248  const FlowStatsContainer& GetFlowStats() const;
249 
252  const FlowProbeContainer& GetAllProbes() const;
253 
259  void SerializeToXmlStream(std::ostream& os,
260  uint16_t indent,
261  bool enableHistograms,
262  bool enableProbes);
263 
269  std::string SerializeToXmlString(uint16_t indent, bool enableHistograms, bool enableProbes);
270 
275  void SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes);
276 
278  void ResetAllStats();
279 
280  protected:
281  void NotifyConstructionCompleted() override;
282  void DoDispose() override;
283 
284  private:
287  {
290  uint32_t timesForwarded;
291  };
292 
295 
297  typedef std::map<std::pair<FlowId, FlowPacketId>, TrackedPacket> TrackedPacketMap;
301 
302  // note: this is needed only for serialization
303  std::list<Ptr<FlowClassifier>> m_classifiers;
304 
307  bool m_enabled;
313 
318 
321 };
322 
323 } // namespace ns3
324 
325 #endif /* FLOW_MONITOR_H */
An identifier for simulation events.
Definition: event-id.h:55
An object that monitors and reports back packet flows observed during a simulation.
Definition: flow-monitor.h:52
FlowStats & GetStatsForFlow(FlowId flowId)
Get the stats for a given flow.
FlowProbeContainer m_flowProbes
all the FlowProbes
Definition: flow-monitor.h:300
void StopRightNow()
End monitoring flows right now
void ResetAllStats()
Reset all the statistics.
const FlowProbeContainer & GetAllProbes() const
Get a list of all FlowProbe's associated with this FlowMonitor.
std::vector< Ptr< FlowProbe > >::const_iterator FlowProbeContainerCI
Container Const Iterator: FlowProbe.
Definition: flow-monitor.h:241
std::vector< Ptr< FlowProbe > > FlowProbeContainer
Container: FlowProbe.
Definition: flow-monitor.h:237
FlowStatsContainer m_flowStats
FlowId --> FlowStats.
Definition: flow-monitor.h:294
bool m_enabled
FlowMon is enabled.
Definition: flow-monitor.h:307
void CheckForLostPackets()
Check right now for packets that appear to be lost.
void Start(const Time &time)
Set the time, counting from the current time, from which to start monitoring flows.
std::map< std::pair< FlowId, FlowPacketId >, TrackedPacket > TrackedPacketMap
(FlowId,PacketId) --> TrackedPacket
Definition: flow-monitor.h:297
double m_flowInterruptionsBinWidth
Flow interruptions bin width (for histograms)
Definition: flow-monitor.h:311
void SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes)
Same as SerializeToXmlStream, but writes to a file instead.
void AddFlowClassifier(Ptr< FlowClassifier > classifier)
Add a FlowClassifier to be used by the flow monitor.
void ReportLastRx(Ptr< FlowProbe > probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize)
FlowProbe implementations are supposed to call this method to report that a known packet is being rec...
EventId m_startEvent
Start event.
Definition: flow-monitor.h:305
std::list< Ptr< FlowClassifier > > m_classifiers
the FlowClassifiers
Definition: flow-monitor.h:303
void AddProbe(Ptr< FlowProbe > probe)
Register a new FlowProbe that will begin monitoring and report events to this monitor.
void ReportForwarding(Ptr< FlowProbe > probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize)
FlowProbe implementations are supposed to call this method to report that a known packet is being for...
Time m_flowInterruptionsMinTime
Flow interruptions minimum time.
Definition: flow-monitor.h:312
std::vector< Ptr< FlowProbe > >::iterator FlowProbeContainerI
Container Iterator: FlowProbe.
Definition: flow-monitor.h:239
std::map< FlowId, FlowStats > FlowStatsContainer
Container: FlowId, FlowStats.
Definition: flow-monitor.h:231
double m_jitterBinWidth
Jitter bin width (for histograms)
Definition: flow-monitor.h:309
std::map< FlowId, FlowStats >::const_iterator FlowStatsContainerCI
Container Const Iterator: FlowId, FlowStats.
Definition: flow-monitor.h:235
std::string SerializeToXmlString(uint16_t indent, bool enableHistograms, bool enableProbes)
Same as SerializeToXmlStream, but returns the output as a std::string.
void Stop(const Time &time)
Set the time, counting from the current time, from which to stop monitoring flows.
void PeriodicCheckForLostPackets()
Periodic function to check for lost packets and prune statistics.
double m_packetSizeBinWidth
packet size bin width (for histograms)
Definition: flow-monitor.h:310
Time m_maxPerHopDelay
Minimum per-hop delay.
Definition: flow-monitor.h:299
void DoDispose() override
Destructor implementation.
std::map< FlowId, FlowStats >::iterator FlowStatsContainerI
Container Iterator: FlowId, FlowStats.
Definition: flow-monitor.h:233
void NotifyConstructionCompleted() override
Notifier called once the ObjectBase is fully constructed.
const FlowStatsContainer & GetFlowStats() const
Retrieve all collected the flow statistics.
TrackedPacketMap m_trackedPackets
Tracked packets.
Definition: flow-monitor.h:298
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
Definition: flow-monitor.cc:88
double m_delayBinWidth
Delay bin width (for histograms)
Definition: flow-monitor.h:308
void StartRightNow()
Begin monitoring flows right now
void ReportFirstTx(Ptr< FlowProbe > probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize)
FlowProbe implementations are supposed to call this method to report that a new packet was transmitte...
void SerializeToXmlStream(std::ostream &os, uint16_t indent, bool enableHistograms, bool enableProbes)
Serializes the results to an std::ostream in XML format.
EventId m_stopEvent
Stop event.
Definition: flow-monitor.h:306
static TypeId GetTypeId()
Get the type ID.
Definition: flow-monitor.cc:39
void ReportDrop(Ptr< FlowProbe > probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize, uint32_t reasonCode)
FlowProbe implementations are supposed to call this method to report that a known packet is being dro...
Class used to store data and make an histogram of the data frequency.
Definition: histogram.h:46
A base class which provides memory management and object aggregation.
Definition: object.h:89
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
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 FlowId
Abstract identifier of a packet flow.
uint32_t FlowPacketId
Abstract identifier of a packet within a flow.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Structure that represents the measured metrics of an individual packet flow.
Definition: flow-monitor.h:56
uint32_t rxPackets
Total number of received packets for the flow.
Definition: flow-monitor.h:100
Histogram packetSizeHistogram
Histogram of the packet sizes.
Definition: flow-monitor.h:118
Time timeLastTxPacket
Contains the absolute time when the last packet in the flow was transmitted, i.e.
Definition: flow-monitor.h:70
uint32_t lostPackets
Total number of packets that are assumed to be lost, i.e.
Definition: flow-monitor.h:107
Histogram jitterHistogram
Histogram of the packet jitters.
Definition: flow-monitor.h:116
Time lastDelay
Contains the last measured delay of a packet It is stored to measure the packet's Jitter.
Definition: flow-monitor.h:91
Time timeLastRxPacket
Contains the absolute time when the last packet in the flow was received, i.e.
Definition: flow-monitor.h:74
Histogram flowInterruptionsHistogram
histogram of durations of flow interruptions
Definition: flow-monitor.h:138
uint64_t rxBytes
Total number of received bytes for the flow.
Definition: flow-monitor.h:96
Time delaySum
Contains the sum of all end-to-end delays for all received packets of the flow.
Definition: flow-monitor.h:78
Time timeFirstRxPacket
Contains the absolute time when the first packet in the flow was received by an end node,...
Definition: flow-monitor.h:65
uint32_t timesForwarded
Contains the number of times a packet has been reportedly forwarded, summed for all received packets ...
Definition: flow-monitor.h:111
uint32_t txPackets
Total number of transmitted packets for the flow.
Definition: flow-monitor.h:98
uint64_t txBytes
Total number of transmitted bytes for the flow.
Definition: flow-monitor.h:94
Histogram delayHistogram
Histogram of the packet delays.
Definition: flow-monitor.h:114
Time jitterSum
Contains the sum of all end-to-end delay jitter (delay variation) values for all received packets of ...
Definition: flow-monitor.h:87
std::vector< uint64_t > bytesDropped
This attribute also tracks the number of lost bytes.
Definition: flow-monitor.h:137
Time timeFirstTxPacket
Contains the absolute time when the first packet in the flow was transmitted, i.e.
Definition: flow-monitor.h:60
std::vector< uint32_t > packetsDropped
This attribute also tracks the number of lost packets and bytes, but discriminates the losses by a re...
Definition: flow-monitor.h:133
Structure to represent a single tracked packet data.
Definition: flow-monitor.h:287
Time lastSeenTime
absolute time when the packet was last seen by a probe
Definition: flow-monitor.h:289
Time firstSeenTime
absolute time when the packet was first seen by a probe
Definition: flow-monitor.h:288
uint32_t timesForwarded
number of times the packet was reportedly forwarded
Definition: flow-monitor.h:290
static const uint32_t packetSize
Packet size generated at the AP.