A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
flow-monitor-helper.cc
Go to the documentation of this file.
1//
2// Copyright (c) 2009 INESC Porto
3//
4// SPDX-License-Identifier: GPL-2.0-only
5//
6// Author: Gustavo J. A. M. Carneiro <gjc@inescporto.pt> <gjcarneiro@gmail.com>
7//
8
10
11#include "ns3/flow-monitor.h"
12#include "ns3/ipv4-flow-classifier.h"
13#include "ns3/ipv4-flow-probe.h"
14#include "ns3/ipv4-l3-protocol.h"
15#include "ns3/ipv6-flow-classifier.h"
16#include "ns3/ipv6-flow-probe.h"
17#include "ns3/ipv6-l3-protocol.h"
18#include "ns3/node-list.h"
19#include "ns3/node.h"
20
21namespace ns3
22{
23
28
30{
31 if (m_flowMonitor)
32 {
33 m_flowMonitor->Dispose();
34 m_flowMonitor = nullptr;
35 m_flowClassifier4 = nullptr;
36 m_flowClassifier6 = nullptr;
37 }
38}
39
40void
42{
43 m_monitorFactory.Set(n1, v1);
44}
45
59
69
79
82{
83 Ptr<FlowMonitor> monitor = GetMonitor();
85 Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol>();
86 if (ipv4)
87 {
88 auto probe =
90 }
91 Ptr<FlowClassifier> classifier6 = GetClassifier6();
92 Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol>();
93 if (ipv6)
94 {
95 auto probe6 = CreateObject<Ipv6FlowProbe>(monitor,
97 node);
98 }
99 return m_flowMonitor;
100}
101
104{
105 for (auto i = nodes.Begin(); i != nodes.End(); ++i)
106 {
107 Ptr<Node> node = *i;
108 if (node->GetObject<Ipv4L3Protocol>() || node->GetObject<Ipv6L3Protocol>())
109 {
110 Install(node);
111 }
112 }
113 return m_flowMonitor;
114}
115
118{
119 for (auto i = NodeList::Begin(); i != NodeList::End(); ++i)
120 {
121 Ptr<Node> node = *i;
122 if (node->GetObject<Ipv4L3Protocol>() || node->GetObject<Ipv6L3Protocol>())
123 {
124 Install(node);
125 }
126 }
127 return m_flowMonitor;
128}
129
130void
132 uint16_t indent,
133 bool enableHistograms,
134 bool enableProbes)
135{
136 if (m_flowMonitor)
137 {
138 m_flowMonitor->SerializeToXmlStream(os, indent, enableHistograms, enableProbes);
139 }
140}
141
142std::string
143FlowMonitorHelper::SerializeToXmlString(uint16_t indent, bool enableHistograms, bool enableProbes)
144{
145 std::ostringstream os;
146 if (m_flowMonitor)
147 {
148 m_flowMonitor->SerializeToXmlStream(os, indent, enableHistograms, enableProbes);
149 }
150 return os.str();
151}
152
153void
155 bool enableHistograms,
156 bool enableProbes)
157{
158 if (m_flowMonitor)
159 {
160 m_flowMonitor->SerializeToXmlFile(fileName, enableHistograms, enableProbes);
161 }
162}
163
164} // namespace ns3
Hold a value for an Attribute.
Definition attribute.h:59
Ptr< FlowClassifier > m_flowClassifier6
the FlowClassifier object for IPv6
std::string SerializeToXmlString(uint16_t indent, bool enableHistograms, bool enableProbes)
Same as SerializeToXmlStream, but returns the output as a std::string.
Ptr< FlowClassifier > GetClassifier6()
Retrieve the FlowClassifier object for IPv6 created by the Install* methods.
Ptr< FlowClassifier > GetClassifier()
Retrieve the FlowClassifier object for IPv4 created by the Install* methods.
void SetMonitorAttribute(std::string n1, const AttributeValue &v1)
Set an attribute for the to-be-created FlowMonitor object.
Ptr< FlowMonitor > InstallAll()
Enable flow monitoring on all nodes.
void SerializeToXmlStream(std::ostream &os, uint16_t indent, bool enableHistograms, bool enableProbes)
Serializes the results to an std::ostream in XML format.
Ptr< FlowMonitor > GetMonitor()
Retrieve the FlowMonitor object created by the Install* methods.
Ptr< FlowClassifier > m_flowClassifier4
the FlowClassifier object for IPv4
Ptr< FlowMonitor > Install(NodeContainer nodes)
Enable flow monitoring on a set of nodes.
ObjectFactory m_monitorFactory
Object factory.
void SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes)
Same as SerializeToXmlStream, but writes to a file instead.
Ptr< FlowMonitor > m_flowMonitor
the FlowMonitor object
An object that monitors and reports back packet flows observed during a simulation.
Implement the IPv4 layer.
IPv6 layer implementation.
keep track of a set of node pointers.
static Iterator Begin()
Definition node-list.cc:226
static Iterator End()
Definition node-list.cc:233
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void Set(const std::string &name, const AttributeValue &value, Args &&... args)
Set an attribute to be set during construction.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
Smart pointer class similar to boost::intrusive_ptr.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Definition object.h:619
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:439
NodeContainer nodes
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.
Definition ptr.h:585