31 #include "ns3/core-module.h"
32 #include "ns3/network-module.h"
33 #include "ns3/applications-module.h"
34 #include "ns3/mobility-module.h"
35 #include "ns3/config-store-module.h"
36 #include "ns3/wifi-module.h"
37 #include "ns3/internet-module.h"
38 #include "ns3/dsdv-helper.h"
52 void CaseRun (uint32_t nWifis,
58 uint32_t periodicUpdateInterval,
59 uint32_t settlingTime,
62 std::string CSVfileName);
69 std::string m_phyMode;
71 uint32_t m_periodicUpdateInterval;
72 uint32_t m_settlingTime;
75 uint32_t packetsReceived;
77 std::string m_CSVfileName;
85 void CreateDevices (std::string tr_name);
86 void InstallInternetStack (std::string tr_name);
87 void InstallApplications ();
88 void SetupMobility ();
91 void CheckThroughput ();
95 int main (
int argc,
char **argv)
100 double totalTime = 100.0;
101 std::string rate (
"8kbps");
102 std::string phyMode (
"DsssRate11Mbps");
103 uint32_t nodeSpeed = 10;
104 std::string appl =
"all";
105 uint32_t periodicUpdateInterval = 15;
106 uint32_t settlingTime = 6;
107 double dataStart = 50.0;
108 bool printRoutingTable =
true;
109 std::string CSVfileName =
"DsdvManetExample.csv";
112 cmd.
AddValue (
"nWifis",
"Number of wifi nodes[Default:30]", nWifis);
113 cmd.
AddValue (
"nSinks",
"Number of wifi sink nodes[Default:10]", nSinks);
114 cmd.
AddValue (
"totalTime",
"Total Simulation time[Default:100]", totalTime);
115 cmd.
AddValue (
"phyMode",
"Wifi Phy mode[Default:DsssRate11Mbps]", phyMode);
116 cmd.
AddValue (
"rate",
"CBR traffic rate[Default:8kbps]", rate);
117 cmd.
AddValue (
"nodeSpeed",
"Node speed in RandomWayPoint model[Default:10]", nodeSpeed);
118 cmd.
AddValue (
"periodicUpdateInterval",
"Periodic Interval Time[Default=15]", periodicUpdateInterval);
119 cmd.
AddValue (
"settlingTime",
"Settling Time before sending out an update for changed metric[Default=6]", settlingTime);
120 cmd.
AddValue (
"dataStart",
"Time at which nodes start to transmit data[Default=50.0]", dataStart);
121 cmd.
AddValue (
"printRoutingTable",
"print routing table for nodes[Default:1]", printRoutingTable);
122 cmd.
AddValue (
"CSVfileName",
"The name of the CSV output file name[Default:DsdvManetExample.csv]", CSVfileName);
123 cmd.
Parse (argc, argv);
125 std::ofstream out (CSVfileName.c_str ());
126 out <<
"SimulationSecond," <<
128 "PacketsReceived," <<
141 test.CaseRun (nWifis, nSinks, totalTime, rate, phyMode, nodeSpeed, periodicUpdateInterval,
142 settlingTime, dataStart, printRoutingTable, CSVfileName);
147 DsdvManetExample::DsdvManetExample ()
156 NS_LOG_UNCOND (Simulator::Now ().GetSeconds () <<
" Received one packet!");
158 while ((packet = socket->
Recv ()))
160 bytesTotal += packet->
GetSize ();
161 packetsReceived += 1;
166 DsdvManetExample::CheckThroughput ()
168 double kbs = (bytesTotal * 8.0) / 1000;
171 std::ofstream out (m_CSVfileName.c_str (), std::ios::app);
173 out << (Simulator::Now ()).GetSeconds () <<
"," << kbs <<
"," << packetsReceived <<
"," << m_nSinks << std::endl;
177 Simulator::Schedule (Seconds (1.0), &DsdvManetExample::CheckThroughput,
this);
184 TypeId tid = TypeId::LookupByName (
"ns3::UdpSocketFactory");
194 DsdvManetExample::CaseRun (uint32_t nWifis, uint32_t nSinks,
double totalTime, std::string rate,
195 std::string phyMode, uint32_t nodeSpeed, uint32_t periodicUpdateInterval, uint32_t settlingTime,
196 double dataStart,
bool printRoutes, std::string CSVfileName)
200 m_totalTime = totalTime;
203 m_nodeSpeed = nodeSpeed;
204 m_periodicUpdateInterval = periodicUpdateInterval;
205 m_settlingTime = settlingTime;
206 m_dataStart = dataStart;
207 m_printRoutes = printRoutes;
208 m_CSVfileName = CSVfileName;
210 std::stringstream ss;
212 std::string t_nodes = ss.str ();
214 std::stringstream ss3;
216 std::string sTotalTime = ss3.str ();
218 std::string tr_name =
"Dsdv_Manet_" + t_nodes +
"Nodes_" + sTotalTime +
"SimTime";
219 std::cout <<
"Trace file generated is " << tr_name <<
".tr\n";
222 CreateDevices (tr_name);
224 InstallInternetStack (tr_name);
225 InstallApplications ();
227 std::cout <<
"\nStarting simulation for " << m_totalTime <<
" s ...\n";
231 Simulator::Stop (Seconds (m_totalTime));
233 Simulator::Destroy ();
237 DsdvManetExample::CreateNodes ()
239 std::cout <<
"Creating " << (unsigned) m_nWifis <<
" nodes.\n";
241 NS_ASSERT_MSG (m_nWifis > m_nSinks,
"Sinks must be less or equal to the number of nodes in network");
245 DsdvManetExample::SetupMobility ()
249 pos.
SetTypeId (
"ns3::RandomRectanglePositionAllocator");
250 pos.
Set (
"X",
StringValue (
"ns3::UniformRandomVariable[Min=0.0|Max=1000.0]"));
251 pos.
Set (
"Y",
StringValue (
"ns3::UniformRandomVariable[Min=0.0|Max=1000.0]"));
253 std::ostringstream speedConstantRandomVariableStream;
254 speedConstantRandomVariableStream <<
"ns3::ConstantRandomVariable[Constant="
260 "Pause",
StringValue (
"ns3::ConstantRandomVariable[Constant=2.0]"),
"PositionAllocator",
PointerValue (taPositionAlloc));
266 DsdvManetExample::CreateDevices (std::string tr_name)
269 wifiMac.
SetType (
"ns3::AdhocWifiMac");
279 devices = wifi.
Install (wifiPhy, wifiMac, nodes);
287 DsdvManetExample::InstallInternetStack (std::string tr_name)
290 dsdv.
Set (
"PeriodicUpdateInterval",
TimeValue (Seconds (m_periodicUpdateInterval)));
291 dsdv.
Set (
"SettlingTime",
TimeValue (Seconds (m_settlingTime)));
296 address.
SetBase (
"10.1.1.0",
"255.255.255.0");
297 interfaces = address.
Assign (devices);
306 DsdvManetExample::InstallApplications ()
308 for (uint32_t i = 0; i <= m_nSinks - 1; i++ )
312 Ptr<Socket> sink = SetupPacketReceive (nodeAddress, node);
315 for (uint32_t clientNode = 0; clientNode <= m_nWifis - 1; clientNode++ )
317 for (uint32_t j = 0; j <= m_nSinks - 1; j++ )
321 onoff1.SetAttribute (
"OffTime",
StringValue (
"ns3::ConstantRandomVariable[Constant=0.0]"));
327 apps1.
Start (Seconds (var->
GetValue (m_dataStart, m_dataStart + 1)));
328 apps1.
Stop (Seconds (m_totalTime));
void AddPropagationLoss(std::string name, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
holds a vector of ns3::Application pointers.
Manage ASCII trace files for device models.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ptr< YansWifiChannel > Create(void) const
void SetRemoteStationManager(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
hold variables of type string
Make it easy to create and manage PHY objects for the yans model.
void SetType(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
#define NS_LOG_COMPONENT_DEFINE(name)
void SetTypeId(TypeId tid)
aggregate IP/TCP/UDP functionality to existing Nodes.
uint32_t GetSize(void) const
Ptr< OutputStreamWrapper > CreateFileStream(std::string filename, std::ios::openmode filemode=std::ios::out)
Create and initialize an output stream object we'll use to write the traced bits. ...
helps to create WifiNetDevice objects
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer c) const
a polymophic address class
void SetChannel(Ptr< YansWifiChannel > channel)
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
void EnablePcapAll(std::string prefix, bool promiscuous=false)
Enable pcap output on each device (which is of the appropriate type) in the set of all nodes created ...
hold objects of type ns3::Time
Ptr< Object > Create(void) const
holds a vector of ns3::NetDevice pointers
void SetStandard(enum WifiPhyStandard standard)
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
create non QoS-enabled MAC layers for a ns3::WifiNetDevice.
parse command-line argumentsInstances of this class can be used to parse command-line arguments: user...
Access to the Ipv4 forwarding table, interfaces, and configuration.
void SetDefault(std::string name, const AttributeValue &value)
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket.
keep track of a set of node pointers.
hold objects of type Ptr<T>
void PrintRoutingTableAllAt(Time printTime, Ptr< OutputStreamWrapper > stream) const
prints the routing tables of all nodes at a particular time.
virtual Ptr< Packet > Recv(uint32_t maxSize, uint32_t flags)=0
Read data from the socket.
void SetMobilityModel(std::string type, std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
void Install(std::string nodeName) const
#define NS_LOG_UNCOND(msg)
void Set(std::string name, const AttributeValue &value)
manage and create wifi channel objects for the yans model.
static void SetSeed(uint32_t seed)
set the seed it will duplicate the seed value 6 times
#define NS_ASSERT_MSG(condition, message)
Helper class used to assign positions and mobility models to nodes.
instantiate subclasses of ns3::Object.
void Set(std::string name, const AttributeValue &value)
Ipv4 addresses are stored in host order in this class.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter...
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
void AddValue(const std::string &name, const std::string &help, T &value)
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
void Parse(int argc, char *argv[]) const
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void EnableAsciiAll(std::string prefix)
Enable ascii trace output on each device (which is of the appropriate type) in the set of all nodes c...
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void SetPropagationDelay(std::string name, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Helper class that adds DSDV routing to nodes.
Ptr< T > GetObject(void) const
a unique identifier for an interface.
void SetRoutingHelper(const Ipv4RoutingHelper &routing)
void SetAttribute(std::string name, const AttributeValue &value)
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
Allocate a set of positions. The allocation strategy is implemented in subclasses.