A Discrete-Event Network Simulator
API
brite-topology-helper.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 as
5  * published by the Free Software Foundation;
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15  *
16  */
17 
18 #ifndef BRITE_TOPOLOGY_HELPER_H
19 #define BRITE_TOPOLOGY_HELPER_H
20 
21 #include <string>
22 #include <vector>
23 
24 #include "ns3/channel.h"
25 #include "ns3/node-container.h"
26 #include "ns3/node-list.h"
27 #include "ns3/point-to-point-helper.h"
28 #include "ns3/internet-stack-helper.h"
29 #include "ns3/ipv6-address-helper.h"
30 #include "ns3/random-variable-stream.h"
31 
32 //located in BRITE source directory
33 #include "Brite.h"
34 
35 namespace ns3 {
36 
37 class PointToPointHelper;
38 
60 {
61 public:
69  BriteTopologyHelper (std::string confFile,
70  std::string seedFile,
71  std::string newseedFile);
72 
78  BriteTopologyHelper (std::string confFile);
79 
81 
89  void AssignStreams (int64_t streamNumber);
90 
97 
105  void BuildBriteTopology (InternetStackHelper& stack, const uint32_t systemCount);
106 
114  uint32_t GetNLeafNodesForAs (uint32_t asNum);
115 
123  Ptr<Node> GetLeafNodeForAs (uint32_t asNum, uint32_t leafNum);
124 
131  uint32_t GetNNodesForAs (uint32_t asNum);
132 
140  Ptr<Node> GetNodeForAs (uint32_t asNum, uint32_t nodeNum);
141 
147  uint32_t GetNAs (void) const;
148 
156  uint32_t GetSystemNumberForAs (uint32_t asNum) const;
157 
164 
171 
178  uint32_t GetNNodesTopology () const;
179 
186  uint32_t GetNEdgesTopology () const;
187 
188 private:
189  //brite values are unitless however all examples provided use mbps to specify rate
190  //this constant value is used to convert the mbps provided by brite to bps.
191  static const int mbpsToBps = 1000000;
192 
201  {
202  int nodeId;
203  double xCoordinate;
204  double yCoordinate;
205  int inDegree;
207  int asId;
208  std::string type;
209  };
210 
219  {
220  int edgeId;
221  int srcId;
222  int destId;
223  double length;
224  double delay;
225  double bandwidth;
226  int asFrom;
227  int asTo;
228  std::string type;
229  };
230 
231  //stores all of the nodes used in the BRITE generated topology
233 
234  void BuildBriteNodeInfoList (void);
235  void BuildBriteEdgeInfoList (void);
236  void ConstructTopology (void);
237  void GenerateBriteTopology (void);
238 
240  std::string m_confFile;
241 
243  std::string m_seedFile;
244 
246  std::string m_newSeedFile;
247 
249  uint32_t m_numAs;
250 
252  std::vector<NetDeviceContainer*> m_netDevices;
253 
255  std::vector<NodeContainer*> m_asLeafNodes;
256 
258  std::vector<NodeContainer*> m_nodesByAs;
259 
261  std::vector<int> m_systemForAs;
262 
264  brite::Topology* m_topology;
265 
267  uint32_t m_numNodes;
268 
270  uint32_t m_numEdges;
271 
278  typedef std::vector<BriteNodeInfo> BriteNodeInfoList;
279  typedef std::vector<BriteEdgeInfo> BriteEdgeInfoList;
280 
287 
290 };
291 
292 } // namespace ns3
293 
294 #endif /* BRITE_TOPOLOGY_HELPER_H */
ns3::BriteTopologyHelper::BriteEdgeInfo::asFrom
int asFrom
Definition: brite-topology-helper.h:226
ns3::BriteTopologyHelper::m_nodes
NodeContainer m_nodes
Definition: brite-topology-helper.h:232
ns3::BriteTopologyHelper::m_netDevices
std::vector< NetDeviceContainer * > m_netDevices
stores the netdevices created for each AS
Definition: brite-topology-helper.h:252
ns3::BriteTopologyHelper::BriteEdgeInfo::asTo
int asTo
Definition: brite-topology-helper.h:227
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::BriteTopologyHelper::m_asLeafNodes
std::vector< NodeContainer * > m_asLeafNodes
stores the leaf router nodes for each AS
Definition: brite-topology-helper.h:255
ns3::BriteTopologyHelper::mbpsToBps
static const int mbpsToBps
Definition: brite-topology-helper.h:191
ns3::BriteTopologyHelper::BriteNodeInfo::asId
int asId
Definition: brite-topology-helper.h:207
ns3::Ipv4AddressHelper
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
Definition: ipv4-address-helper.h:48
ns3::BriteTopologyHelper::m_confFile
std::string m_confFile
brite configuration file to use
Definition: brite-topology-helper.h:240
ns3::BriteTopologyHelper::BriteEdgeInfo::delay
double delay
Definition: brite-topology-helper.h:224
ns3::BriteTopologyHelper::BriteNodeInfo::type
std::string type
Definition: brite-topology-helper.h:208
ns3::BriteTopologyHelper::BriteEdgeInfo::bandwidth
double bandwidth
Definition: brite-topology-helper.h:225
ns3::BriteTopologyHelper::GetNEdgesTopology
uint32_t GetNEdgesTopology() const
Returns the number of edges created within the topology.
Definition: brite-topology-helper.cc:301
ns3::BriteTopologyHelper::GetNNodesTopology
uint32_t GetNNodesTopology() const
Returns the number of nodes created within the topology.
Definition: brite-topology-helper.cc:295
ns3::BriteTopologyHelper::BriteNodeInfo::outDegree
int outDegree
Definition: brite-topology-helper.h:206
ns3::BriteTopologyHelper::m_numNodes
uint32_t m_numNodes
stores the number of nodes created in the BRITE topology
Definition: brite-topology-helper.h:267
ns3::BriteTopologyHelper
Interface with BRITE, the Boston university Representative Internet Topology gEnerator.
Definition: brite-topology-helper.h:60
ns3::Ipv6AddressHelper
Helper class to auto-assign global IPv6 unicast addresses.
Definition: ipv6-address-helper.h:83
ns3::BriteTopologyHelper::GetNAs
uint32_t GetNAs(void) const
Returns the number of AS created in the topology.
Definition: brite-topology-helper.cc:307
ns3::BriteTopologyHelper::GetNLeafNodesForAs
uint32_t GetNLeafNodesForAs(uint32_t asNum)
Returns the number of router leaf nodes for a given AS.
Definition: brite-topology-helper.cc:289
ns3::BriteTopologyHelper::BriteEdgeInfoList
std::vector< BriteEdgeInfo > BriteEdgeInfoList
The BRITE code generates multiple nodes and edges.
Definition: brite-topology-helper.h:279
ns3::Ptr< Node >
ns3::BriteTopologyHelper::BriteEdgeInfo
Edge information from BRITE.
Definition: brite-topology-helper.h:219
ns3::BriteTopologyHelper::m_nodesByAs
std::vector< NodeContainer * > m_nodesByAs
stores all of the nodes in the brite topology by AS number
Definition: brite-topology-helper.h:258
ns3::BriteTopologyHelper::GetLeafNodeForAs
Ptr< Node > GetLeafNodeForAs(uint32_t asNum, uint32_t leafNum)
Returns a given router leaf node from a given AS.
Definition: brite-topology-helper.cc:271
ns3::BriteTopologyHelper::BriteNodeInfo::yCoordinate
double yCoordinate
Definition: brite-topology-helper.h:204
ns3::BriteTopologyHelper::m_seedFile
std::string m_seedFile
brite seed file to use
Definition: brite-topology-helper.h:243
first.stack
stack
Definition: first.py:41
ns3::BriteTopologyHelper::m_uv
Ptr< UniformRandomVariable > m_uv
random variable stream for brite seed file
Definition: brite-topology-helper.h:289
ns3::BriteTopologyHelper::m_briteEdgeInfoList
BriteEdgeInfoList m_briteEdgeInfoList
The BRITE code generates multiple nodes and edges.
Definition: brite-topology-helper.h:282
ns3::BriteTopologyHelper::BuildBriteNodeInfoList
void BuildBriteNodeInfoList(void)
Definition: brite-topology-helper.cc:98
ns3::BriteTopologyHelper::AssignIpv6Addresses
void AssignIpv6Addresses(Ipv6AddressHelper &address)
Definition: brite-topology-helper.cc:433
first.address
address
Definition: first.py:44
ns3::BriteTopologyHelper::BriteNodeInfo::inDegree
int inDegree
Definition: brite-topology-helper.h:205
ns3::BriteTopologyHelper::BriteEdgeInfo::type
std::string type
Definition: brite-topology-helper.h:228
ns3::BriteTopologyHelper::m_numEdges
uint32_t m_numEdges
stores the number of edges created in the BRITE topology
Definition: brite-topology-helper.h:270
ns3::BriteTopologyHelper::GetSystemNumberForAs
uint32_t GetSystemNumberForAs(uint32_t asNum) const
Returns the system number for the MPI instance that this AS is assigned to.
Definition: brite-topology-helper.cc:313
ns3::BriteTopologyHelper::m_systemForAs
std::vector< int > m_systemForAs
stores the MPI system number each AS assigned to. All assigned to 0 if MPI not used.
Definition: brite-topology-helper.h:261
ns3::BriteTopologyHelper::m_topology
brite::Topology * m_topology
the Brite topology
Definition: brite-topology-helper.h:264
ns3::BriteTopologyHelper::BriteEdgeInfo::destId
int destId
Definition: brite-topology-helper.h:222
ns3::BriteTopologyHelper::BriteEdgeInfo::edgeId
int edgeId
Definition: brite-topology-helper.h:220
ns3::BriteTopologyHelper::GetNNodesForAs
uint32_t GetNNodesForAs(uint32_t asNum)
Returns the total number of nodes for a given AS.
Definition: brite-topology-helper.cc:283
ns3::BriteTopologyHelper::BriteNodeInfoList
std::vector< BriteNodeInfo > BriteNodeInfoList
The BRITE code generates multiple nodes and edges.
Definition: brite-topology-helper.h:278
ns3::BriteTopologyHelper::AssignIpv4Addresses
void AssignIpv4Addresses(Ipv4AddressHelper &address)
Definition: brite-topology-helper.cc:421
ns3::BriteTopologyHelper::m_briteNodeInfoList
BriteNodeInfoList m_briteNodeInfoList
The BRITE code generates multiple nodes and edges.
Definition: brite-topology-helper.h:281
ns3::PointToPointHelper
Build a set of PointToPointNetDevice objects.
Definition: point-to-point-helper.h:45
ns3::NodeContainer
keep track of a set of node pointers.
Definition: node-container.h:39
ns3::BriteTopologyHelper::BriteNodeInfo::xCoordinate
double xCoordinate
Definition: brite-topology-helper.h:203
ns3::BriteTopologyHelper::BuildBriteTopology
void BuildBriteTopology(InternetStackHelper &stack)
Create NS3 topology using information generated from BRITE.
Definition: brite-topology-helper.cc:366
ns3::BriteTopologyHelper::m_newSeedFile
std::string m_newSeedFile
brite seed file to generate for next run
Definition: brite-topology-helper.h:246
ns3::BriteTopologyHelper::GenerateBriteTopology
void GenerateBriteTopology(void)
Definition: brite-topology-helper.cc:318
ns3::BriteTopologyHelper::ConstructTopology
void ConstructTopology(void)
Definition: brite-topology-helper.cc:445
ns3::BriteTopologyHelper::BriteTopologyHelper
BriteTopologyHelper(std::string confFile, std::string seedFile, std::string newseedFile)
Construct a BriteTopologyHelper.
Definition: brite-topology-helper.cc:37
ns3::InternetStackHelper
aggregate IP/TCP/UDP functionality to existing Nodes.
Definition: internet-stack-helper.h:88
ns3::BriteTopologyHelper::AssignStreams
void AssignStreams(int64_t streamNumber)
Assigns stream number to UniformRandomVariable used to generate brite seed file.
Definition: brite-topology-helper.cc:92
ns3::BriteTopologyHelper::BriteEdgeInfo::length
double length
Definition: brite-topology-helper.h:223
ns3::BriteTopologyHelper::m_numAs
uint32_t m_numAs
stores the number of AS in the BRITE generated topology
Definition: brite-topology-helper.h:249
ns3::BriteTopologyHelper::m_britePointToPointHelper
PointToPointHelper m_britePointToPointHelper
used to create the links within the topology
Definition: brite-topology-helper.h:286
ns3::BriteTopologyHelper::BuildBriteEdgeInfoList
void BuildBriteEdgeInfoList(void)
Definition: brite-topology-helper.cc:183
ns3::BriteTopologyHelper::BriteNodeInfo::nodeId
int nodeId
Definition: brite-topology-helper.h:202
ns3::BriteTopologyHelper::BriteEdgeInfo::srcId
int srcId
Definition: brite-topology-helper.h:221
ns3::BriteTopologyHelper::BriteNodeInfo
Node information from BRITE.
Definition: brite-topology-helper.h:201
ns3::BriteTopologyHelper::GetNodeForAs
Ptr< Node > GetNodeForAs(uint32_t asNum, uint32_t nodeNum)
Returns a given router node for a given AS.
Definition: brite-topology-helper.cc:277
ns3::BriteTopologyHelper::~BriteTopologyHelper
~BriteTopologyHelper()
Definition: brite-topology-helper.cc:67