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 Ptr<Ipv4FlowProbe> probe =
90 }
91 Ptr<FlowClassifier> classifier6 = GetClassifier6();
92 Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol>();
93 if (ipv6)
94 {
95 Ptr<Ipv6FlowProbe> probe6 =
96 Create<Ipv6FlowProbe>(monitor, DynamicCast<Ipv6FlowClassifier>(classifier6), node);
97 }
98 return m_flowMonitor;
99}
100
103{
104 for (auto i = nodes.Begin(); i != nodes.End(); ++i)
105 {
106 Ptr<Node> node = *i;
107 if (node->GetObject<Ipv4L3Protocol>() || node->GetObject<Ipv6L3Protocol>())
108 {
109 Install(node);
110 }
111 }
112 return m_flowMonitor;
113}
114
117{
118 for (auto i = NodeList::Begin(); i != NodeList::End(); ++i)
119 {
120 Ptr<Node> node = *i;
121 if (node->GetObject<Ipv4L3Protocol>() || node->GetObject<Ipv6L3Protocol>())
122 {
123 Install(node);
124 }
125 }
126 return m_flowMonitor;
127}
128
129void
131 uint16_t indent,
132 bool enableHistograms,
133 bool enableProbes)
134{
135 if (m_flowMonitor)
136 {
137 m_flowMonitor->SerializeToXmlStream(os, indent, enableHistograms, enableProbes);
138 }
139}
140
141std::string
142FlowMonitorHelper::SerializeToXmlString(uint16_t indent, bool enableHistograms, bool enableProbes)
143{
144 std::ostringstream os;
145 if (m_flowMonitor)
146 {
147 m_flowMonitor->SerializeToXmlStream(os, indent, enableHistograms, enableProbes);
148 }
149 return os.str();
150}
151
152void
154 bool enableHistograms,
155 bool enableProbes)
156{
157 if (m_flowMonitor)
158 {
159 m_flowMonitor->SerializeToXmlFile(fileName, enableHistograms, enableProbes);
160 }
161}
162
163} // 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 > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:436
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:580