A Discrete-Event Network Simulator
API
flow-monitor.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 //
3 // Copyright (c) 2009 INESC Porto
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License version 2 as
7 // published by the Free Software Foundation;
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 //
18 // Author: Gustavo J. A. M. Carneiro <gjc@inescporto.pt> <gjcarneiro@gmail.com>
19 //
20 
21 #ifndef FLOW_MONITOR_H
22 #define FLOW_MONITOR_H
23 
24 #include <vector>
25 #include <map>
26 
27 #include "ns3/ptr.h"
28 #include "ns3/object.h"
29 #include "ns3/flow-probe.h"
30 #include "ns3/flow-classifier.h"
31 #include "ns3/histogram.h"
32 #include "ns3/nstime.h"
33 #include "ns3/event-id.h"
34 
35 namespace ns3 {
36 
50 class FlowMonitor : public Object
51 {
52 public:
53 
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> packetsDropped; // packetsDropped[reasonCode] => number of dropped packets
133 
136  std::vector<uint64_t> bytesDropped; // bytesDropped[reasonCode] => number of dropped bytes
138  };
139 
140  // --- basic methods ---
145  static TypeId GetTypeId ();
146  virtual TypeId GetInstanceTypeId () const;
147  FlowMonitor ();
148 
151  void AddFlowClassifier (Ptr<FlowClassifier> classifier);
152 
155  void Start (const Time &time);
158  void Stop (const Time &time);
160  void StartRightNow ();
162  void StopRightNow ();
163 
164  // --- methods to be used by the FlowMonitorProbe's only ---
169  void AddProbe (Ptr<FlowProbe> probe);
170 
179  void ReportFirstTx (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize);
186  void ReportForwarding (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize);
193  void ReportLastRx (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize);
201  void ReportDrop (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId,
202  uint32_t packetSize, uint32_t reasonCode);
203 
205  void CheckForLostPackets ();
206 
211  void CheckForLostPackets (Time maxDelay);
212 
213  // --- methods to get the results ---
214 
216  typedef std::map<FlowId, FlowStats> FlowStatsContainer;
218  typedef std::map<FlowId, FlowStats>::iterator FlowStatsContainerI;
220  typedef std::map<FlowId, FlowStats>::const_iterator FlowStatsContainerCI;
222  typedef std::vector< Ptr<FlowProbe> > FlowProbeContainer;
224  typedef std::vector< Ptr<FlowProbe> >::iterator FlowProbeContainerI;
226  typedef std::vector< Ptr<FlowProbe> >::const_iterator FlowProbeContainerCI;
227 
233  const FlowStatsContainer& GetFlowStats () const;
234 
237  const FlowProbeContainer& GetAllProbes () const;
238 
244  void SerializeToXmlStream (std::ostream &os, uint16_t indent, bool enableHistograms, bool enableProbes);
245 
251  std::string SerializeToXmlString (uint16_t indent, bool enableHistograms, bool enableProbes);
252 
257  void SerializeToXmlFile (std::string fileName, bool enableHistograms, bool enableProbes);
258 
259 
260 protected:
261 
262  virtual void NotifyConstructionCompleted ();
263  virtual void DoDispose (void);
264 
265 private:
266 
269  {
272  uint32_t timesForwarded;
273  };
274 
276  FlowStatsContainer m_flowStats;
277 
279  typedef std::map< std::pair<FlowId, FlowPacketId>, TrackedPacket> TrackedPacketMap;
280  TrackedPacketMap m_trackedPackets;
282  FlowProbeContainer m_flowProbes;
283 
284  // note: this is needed only for serialization
285  std::list<Ptr<FlowClassifier> > m_classifiers;
286 
289  bool m_enabled;
295 
299  FlowStats& GetStatsForFlow (FlowId flowId);
300 
303 };
304 
305 
306 } // namespace ns3
307 
308 #endif /* FLOW_MONITOR_H */
309 
uint32_t FlowPacketId
Abstract identifier of a packet within a flow.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
const FlowStatsContainer & GetFlowStats() const
Retrieve all collected the flow statistics.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
void CheckForLostPackets()
Check right now for packets that appear to be lost.
void StartRightNow()
Begin monitoring flows right now
uint32_t lostPackets
Total number of packets that are assumed to be lost, i.e.
Definition: flow-monitor.h:107
uint32_t rxPackets
Total number of received packets for the flow.
Definition: flow-monitor.h:100
uint32_t txPackets
Total number of transmitted packets for the flow.
Definition: flow-monitor.h:98
Time m_maxPerHopDelay
Minimum per-hop delay.
Definition: flow-monitor.h:281
static TypeId GetTypeId()
Get the type ID.
Definition: flow-monitor.cc:37
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...
Time delaySum
Contains the sum of all end-to-end delays for all received packets of the flow.
Definition: flow-monitor.h:78
std::vector< uint64_t > bytesDropped
This attribute also tracks the number of lost bytes.
Definition: flow-monitor.h:136
std::vector< Ptr< FlowProbe > >::const_iterator FlowProbeContainerCI
Container Const Iterator: FlowProbe.
Definition: flow-monitor.h:226
std::string SerializeToXmlString(uint16_t indent, bool enableHistograms, bool enableProbes)
Same as SerializeToXmlStream, but returns the output as a std::string.
Time m_flowInterruptionsMinTime
Flow interruptions minimum time.
Definition: flow-monitor.h:294
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...
TrackedPacketMap m_trackedPackets
Tracked packets.
Definition: flow-monitor.h:280
FlowStatsContainer m_flowStats
FlowId –> FlowStats.
Definition: flow-monitor.h:276
Time lastDelay
Contains the last measured delay of a packet It is stored to measure the packet's Jitter...
Definition: flow-monitor.h:91
def indent(source, debug, level)
Definition: check-style.py:424
std::map< FlowId, FlowStats > FlowStatsContainer
Container: FlowId, FlowStats.
Definition: flow-monitor.h:216
Time firstSeenTime
absolute time when the packet was first seen by a probe
Definition: flow-monitor.h:270
std::list< Ptr< FlowClassifier > > m_classifiers
the FlowClassifiers
Definition: flow-monitor.h:285
std::map< std::pair< FlowId, FlowPacketId >, TrackedPacket > TrackedPacketMap
(FlowId,PacketId) –> TrackedPacket
Definition: flow-monitor.h:279
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
bool m_enabled
FlowMon is enabled.
Definition: flow-monitor.h:289
Time timeFirstTxPacket
Contains the absolute time when the first packet in the flow was transmitted, i.e.
Definition: flow-monitor.h:60
double m_packetSizeBinWidth
packet size bin width (for histograms)
Definition: flow-monitor.h:292
FlowStats & GetStatsForFlow(FlowId flowId)
Get the stats for a given flow.
double m_jitterBinWidth
Jitter bin width (for histograms)
Definition: flow-monitor.h:291
EventId m_stopEvent
Stop event.
Definition: flow-monitor.h:288
std::map< FlowId, FlowStats >::const_iterator FlowStatsContainerCI
Container Const Iterator: FlowId, FlowStats.
Definition: flow-monitor.h:220
Time lastSeenTime
absolute time when the packet was last seen by a probe
Definition: flow-monitor.h:271
double m_delayBinWidth
Delay bin width (for histograms)
Definition: flow-monitor.h:290
Every class exported by the ns3 library is enclosed in the ns3 namespace.
const FlowProbeContainer & GetAllProbes() const
Get a list of all FlowProbe's associated with this FlowMonitor.
virtual void NotifyConstructionCompleted()
Notifier called once the ObjectBase is fully constructed.
void Stop(const Time &time)
Set the time, counting from the current time, from which to stop monitoring flows.
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
std::map< FlowId, FlowStats >::iterator FlowStatsContainerI
Container Iterator: FlowId, FlowStats.
Definition: flow-monitor.h:218
Time timeLastRxPacket
Contains the absolute time when the last packet in the flow was received, i.e.
Definition: flow-monitor.h:74
void AddFlowClassifier(Ptr< FlowClassifier > classifier)
Add a FlowClassifier to be used by the flow monitor.
void StopRightNow()
End monitoring flows right now
An identifier for simulation events.
Definition: event-id.h:53
Histogram delayHistogram
Histogram of the packet delays.
Definition: flow-monitor.h:114
void SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes)
Same as SerializeToXmlStream, but writes to a file instead.
virtual void DoDispose(void)
Destructor implementation.
Definition: flow-monitor.cc:89
Histogram flowInterruptionsHistogram
histogram of durations of flow interruptions
Definition: flow-monitor.h:137
uint64_t txBytes
Total number of transmitted bytes for the flow.
Definition: flow-monitor.h:94
Structure that represents the measured metrics of an individual packet flow.
Definition: flow-monitor.h:55
double m_flowInterruptionsBinWidth
Flow interruptions bin width (for histograms)
Definition: flow-monitor.h:293
std::vector< Ptr< FlowProbe > >::iterator FlowProbeContainerI
Container Iterator: FlowProbe.
Definition: flow-monitor.h:224
Structure to represent a single tracked packet data.
Definition: flow-monitor.h:268
static const uint32_t packetSize
Histogram jitterHistogram
Histogram of the packet jitters.
Definition: flow-monitor.h:116
A base class which provides memory management and object aggregation.
Definition: object.h:87
EventId m_startEvent
Start event.
Definition: flow-monitor.h:287
void Start(const Time &time)
Set the time, counting from the current time, from which to start monitoring flows.
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...
uint64_t rxBytes
Total number of received bytes for the flow.
Definition: flow-monitor.h:96
void PeriodicCheckForLostPackets()
Periodic function to check for lost packets and prune statistics.
uint32_t timesForwarded
number of times the packet was reportedly forwarded
Definition: flow-monitor.h:272
An object that monitors and reports back packet flows observed during a simulation.
Definition: flow-monitor.h:50
void AddProbe(Ptr< FlowProbe > probe)
Register a new FlowProbe that will begin monitoring and report events to this monitor.
a unique identifier for an interface.
Definition: type-id.h:58
std::vector< Ptr< FlowProbe > > FlowProbeContainer
Container: FlowProbe.
Definition: flow-monitor.h:222
Time timeLastTxPacket
Contains the absolute time when the last packet in the flow was transmitted, i.e. ...
Definition: flow-monitor.h:70
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...
Histogram packetSizeHistogram
Histogram of the packet sizes.
Definition: flow-monitor.h:118
FlowProbeContainer m_flowProbes
all the FlowProbes
Definition: flow-monitor.h:282
virtual TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object.
Definition: flow-monitor.cc:77
Class used to store data and make an histogram of the data frequency.
Definition: histogram.h:45
void SerializeToXmlStream(std::ostream &os, uint16_t indent, bool enableHistograms, bool enableProbes)
Serializes the results to an std::ostream in XML format.
uint32_t FlowId
Abstract identifier of a packet flow.
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:132