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
35namespace ns3 {
36
50class FlowMonitor : public Object
51{
52public:
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;
101
108
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
156 void Start (const Time &time);
160 void Stop (const Time &time);
162 void StartRightNow ();
164 void StopRightNow ();
165
166 // --- methods to be used by the FlowMonitorProbe's only ---
171 void AddProbe (Ptr<FlowProbe> probe);
172
181 void ReportFirstTx (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize);
195 void ReportLastRx (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId, uint32_t packetSize);
203 void ReportDrop (Ptr<FlowProbe> probe, FlowId flowId, FlowPacketId packetId,
204 uint32_t packetSize, uint32_t reasonCode);
205
207 void CheckForLostPackets ();
208
213 void CheckForLostPackets (Time maxDelay);
214
215 // --- methods to get the results ---
216
218 typedef std::map<FlowId, FlowStats> FlowStatsContainer;
220 typedef std::map<FlowId, FlowStats>::iterator FlowStatsContainerI;
222 typedef std::map<FlowId, FlowStats>::const_iterator FlowStatsContainerCI;
224 typedef std::vector< Ptr<FlowProbe> > FlowProbeContainer;
226 typedef std::vector< Ptr<FlowProbe> >::iterator FlowProbeContainerI;
228 typedef std::vector< Ptr<FlowProbe> >::const_iterator FlowProbeContainerCI;
229
235 const FlowStatsContainer& GetFlowStats () const;
236
239 const FlowProbeContainer& GetAllProbes () const;
240
246 void SerializeToXmlStream (std::ostream &os, uint16_t indent, bool enableHistograms, bool enableProbes);
247
253 std::string SerializeToXmlString (uint16_t indent, bool enableHistograms, bool enableProbes);
254
259 void SerializeToXmlFile (std::string fileName, bool enableHistograms, bool enableProbes);
260
261
262protected:
263
264 virtual void NotifyConstructionCompleted ();
265 virtual void DoDispose (void);
266
267private:
268
271 {
275 };
276
279
281 typedef std::map< std::pair<FlowId, FlowPacketId>, TrackedPacket> TrackedPacketMap;
285
286 // note: this is needed only for serialization
287 std::list<Ptr<FlowClassifier> > m_classifiers;
288
297
302
305};
306
307
308} // namespace ns3
309
310#endif /* FLOW_MONITOR_H */
311
An identifier for simulation events.
Definition: event-id.h:54
An object that monitors and reports back packet flows observed during a simulation.
Definition: flow-monitor.h:51
FlowStats & GetStatsForFlow(FlowId flowId)
Get the stats for a given flow.
FlowProbeContainer m_flowProbes
all the FlowProbes
Definition: flow-monitor.h:284
virtual TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object.
Definition: flow-monitor.cc:77
void StopRightNow()
End monitoring flows right now
const FlowProbeContainer & GetAllProbes() const
Get a list of all FlowProbe's associated with this FlowMonitor.
FlowStatsContainer m_flowStats
FlowId --> FlowStats.
Definition: flow-monitor.h:278
bool m_enabled
FlowMon is enabled.
Definition: flow-monitor.h:291
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::vector< Ptr< FlowProbe > > FlowProbeContainer
Container: FlowProbe.
Definition: flow-monitor.h:224
double m_flowInterruptionsBinWidth
Flow interruptions bin width (for histograms)
Definition: flow-monitor.h:295
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.
std::map< std::pair< FlowId, FlowPacketId >, TrackedPacket > TrackedPacketMap
(FlowId,PacketId) --> TrackedPacket
Definition: flow-monitor.h:281
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:289
std::list< Ptr< FlowClassifier > > m_classifiers
the FlowClassifiers
Definition: flow-monitor.h:287
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:296
std::map< FlowId, FlowStats >::iterator FlowStatsContainerI
Container Iterator: FlowId, FlowStats.
Definition: flow-monitor.h:220
std::map< FlowId, FlowStats > FlowStatsContainer
Container: FlowId, FlowStats.
Definition: flow-monitor.h:218
double m_jitterBinWidth
Jitter bin width (for histograms)
Definition: flow-monitor.h:293
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.
virtual void NotifyConstructionCompleted()
Notifier called once the ObjectBase is fully constructed.
double m_packetSizeBinWidth
packet size bin width (for histograms)
Definition: flow-monitor.h:294
Time m_maxPerHopDelay
Minimum per-hop delay.
Definition: flow-monitor.h:283
std::map< FlowId, FlowStats >::const_iterator FlowStatsContainerCI
Container Const Iterator: FlowId, FlowStats.
Definition: flow-monitor.h:222
const FlowStatsContainer & GetFlowStats() const
Retrieve all collected the flow statistics.
TrackedPacketMap m_trackedPackets
Tracked packets.
Definition: flow-monitor.h:282
double m_delayBinWidth
Delay bin width (for histograms)
Definition: flow-monitor.h:292
void StartRightNow()
Begin monitoring flows right now
virtual void DoDispose(void)
Destructor implementation.
Definition: flow-monitor.cc:89
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:290
std::vector< Ptr< FlowProbe > >::const_iterator FlowProbeContainerCI
Container Const Iterator: FlowProbe.
Definition: flow-monitor.h:228
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...
std::vector< Ptr< FlowProbe > >::iterator FlowProbeContainerI
Container Iterator: FlowProbe.
Definition: flow-monitor.h:226
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:88
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:74
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
a unique identifier for an interface.
Definition: type-id.h:59
def indent(source, debug, level)
Definition: check-style.py:432
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:137
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:136
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:132
Structure to represent a single tracked packet data.
Definition: flow-monitor.h:271
Time lastSeenTime
absolute time when the packet was last seen by a probe
Definition: flow-monitor.h:273
Time firstSeenTime
absolute time when the packet was first seen by a probe
Definition: flow-monitor.h:272
uint32_t timesForwarded
number of times the packet was reportedly forwarded
Definition: flow-monitor.h:274
static const uint32_t packetSize
Pcket size generated at the AP.