A Discrete-Event Network Simulator
API
brite-test-topology.cc
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 #include <string>
19 #include "ns3/core-module.h"
20 #include "ns3/network-module.h"
21 #include "ns3/internet-module.h"
22 #include "ns3/point-to-point-module.h"
23 #include "ns3/packet-sink-helper.h"
24 #include "ns3/packet-sink.h"
25 #include "ns3/random-variable-stream.h"
26 #include "ns3/on-off-helper.h"
27 #include "ns3/brite-module.h"
28 #include "ns3/test.h"
29 #include <iostream>
30 #include <fstream>
31 
32 using namespace ns3;
33 
35 {
36 public:
39 
40 private:
41  virtual void DoRun (void);
42 
43 };
44 
46  : TestCase ("Test that two brite topologies created with same seed value produce same graph (not an exact test)")
47 {
48 }
49 
51 {
52 }
53 
55 {
56 
57  std::string confFile = "src/brite/test/test.conf";
58 
59  SeedManager::SetRun (1);
60  SeedManager::SetSeed (1);
61  BriteTopologyHelper bthA (confFile);
62  bthA.AssignStreams (1);
63 
64  SeedManager::SetRun (1);
65  SeedManager::SetSeed (1);
66  BriteTopologyHelper bthB (confFile);
67  bthB.AssignStreams (1);
68 
70 
73 
74  int numAsA = bthA.GetNAs ();
75  int numAsB = bthB.GetNAs ();
76 
77  //numAs should be 2 for the conf file in /src/brite/test/test.conf
78  NS_TEST_ASSERT_MSG_EQ (numAsA, 2, "Number of AS for this topology must be 2");
79  NS_TEST_ASSERT_MSG_EQ (numAsA, numAsB, "Number of AS should be same for both test topologies");
80  NS_TEST_ASSERT_MSG_EQ (bthA.GetNNodesTopology (), bthB.GetNNodesTopology (), "Total number of nodes for each topology should be equal");
81  NS_TEST_ASSERT_MSG_EQ (bthA.GetNEdgesTopology (), bthB.GetNEdgesTopology (), "Total number of edges for each topology should be equal");
82 
83  for (unsigned int i = 0; i < bthA.GetNAs (); ++i)
84  {
85  NS_TEST_ASSERT_MSG_EQ (bthA.GetNLeafNodesForAs (i), bthB.GetNLeafNodesForAs (i), "Total number of leaf nodes different for AS " << i);
86  }
87 }
88 
90 {
91 public:
94 
95 private:
96  virtual void DoRun (void);
97 
98 };
99 
101  : TestCase ("Test that packets can be send across a BRITE topology using UDP")
102 {
103 }
104 
106 {
107 }
108 
110 {
111 
112  std::string confFile = "src/brite/test/test.conf";
113  BriteTopologyHelper bth (confFile);
114 
115  PointToPointHelper p2p;
118 
119  address.SetBase ("10.0.0.0", "255.255.255.0");
120 
123 
124  NodeContainer source;
126 
127  source.Create (1);
128  stack.Install (source);
129 
130  //install source node on last leaf node of AS 0
131  int numNodesInAsZero = bth.GetNNodesForAs (0);
132  source.Add (bth.GetNodeForAs (0, numNodesInAsZero - 1));
133 
134  sink.Create (1);
135  stack.Install (sink);
136 
137  //install sink node on last leaf node on AS 1
138  int numNodesInAsOne = bth.GetNNodesForAs (1);
139  sink.Add (bth.GetNodeForAs (1, numNodesInAsOne - 1));
140 
141  p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
142  p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
143 
144  NetDeviceContainer p2pSourceDevices;
145  NetDeviceContainer p2pSinkDevices;
146 
147  p2pSourceDevices = p2p.Install (source);
148  p2pSinkDevices = p2p.Install (sink);
149 
150  address.SetBase ("10.1.0.0", "255.255.0.0");
151  Ipv4InterfaceContainer sourceInterfaces;
152  sourceInterfaces = address.Assign (p2pSourceDevices);
153 
154  address.SetBase ("10.2.0.0", "255.255.0.0");
155  Ipv4InterfaceContainer sinkInterfaces;
156  sinkInterfaces = address.Assign (p2pSinkDevices);
157 
158  uint16_t port = 9;
159 
160  OnOffHelper onOff ("ns3::UdpSocketFactory",
161  Address (InetSocketAddress (sinkInterfaces.GetAddress (0), port)));
162  onOff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
163  onOff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
164  onOff.SetAttribute ("DataRate", DataRateValue (DataRate (6000)));
165 
166  ApplicationContainer apps = onOff.Install (source.Get (0));
167 
168  apps.Start (Seconds (1.0));
169  apps.Stop (Seconds (10.0));
170 
171  PacketSinkHelper sinkHelper ("ns3::UdpSocketFactory",
172  Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
173  apps = sinkHelper.Install (sink.Get (0));
174 
175  apps.Start (Seconds (1.0));
176  apps.Stop (Seconds (10.0));
177 
178  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
179 
180  Simulator::Stop (Seconds (10.0));
181  Simulator::Run ();
182 
183  Ptr<PacketSink> sink1 = DynamicCast<PacketSink> (apps.Get (0));
184  //NS_TEST_ASSERT_MSG_EQ (sink1->GetTotalRx (), 6656, "Not all packets received from source");
185 
186  Simulator::Destroy ();
187 
188 }
189 
190 class BriteTestSuite : public TestSuite
191 {
192 public:
193  BriteTestSuite () : TestSuite ("brite-testing", UNIT)
194  {
195  AddTestCase (new BriteTopologyStructureTestCase, TestCase::QUICK);
196  AddTestCase (new BriteTopologyFunctionTestCase, TestCase::QUICK);
197  }
BriteTestSuite g_briteTestSuite
virtual void DoRun(void)
Implementation to actually run this TestCase.
virtual void DoRun(void)
Implementation to actually run this TestCase.
a polymophic address class
Definition: address.h:91
holds a vector of ns3::Application pointers.
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
Interface with BRITE, the Boston university Representative Internet Topology gEnerator.
uint32_t GetNAs(void) const
Returns the number of AS created in the topology.
void AssignStreams(int64_t streamNumber)
Assigns stream number to UniformRandomVariable used to generate brite seed file.
uint32_t GetNNodesTopology() const
Returns the number of nodes created within the topology.
void BuildBriteTopology(InternetStackHelper &stack)
Create NS3 topology using information generated from BRITE.
Ptr< Node > GetNodeForAs(uint32_t asNum, uint32_t nodeNum)
Returns a given router node for a given AS.
void AssignIpv4Addresses(Ipv4AddressHelper &address)
uint32_t GetNNodesForAs(uint32_t asNum)
Returns the total number of nodes for a given AS.
uint32_t GetNLeafNodesForAs(uint32_t asNum)
Returns the number of router leaf nodes for a given AS.
uint32_t GetNEdgesTopology() const
Returns the number of edges created within the topology.
Class for representing data rates.
Definition: data-rate.h:89
AttributeValue implementation for DataRate.
Definition: data-rate.h:298
an Inet address class
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
holds a vector of ns3::NetDevice pointers
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:43
ApplicationContainer Install(NodeContainer c) const
Install an ns3::OnOffApplication on each node of the input container configured with all the attribut...
void SetAttribute(std::string name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
Build a set of PointToPointNetDevice objects.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
NetDeviceContainer Install(NodeContainer c)
Hold variables of type string.
Definition: string.h:41
encapsulates test code
Definition: test.h:1154
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
A suite of tests to run.
Definition: test.h:1344
@ UNIT
This test suite implements a Unit Test.
Definition: test.h:1353
uint16_t port
Definition: dsdv-manet.cc:45
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:166
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1289
address
Definition: first.py:44
stack
Definition: first.py:41
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< PacketSink > sink
Definition: wifi-tcp.cc:56