34 #include "ns3/core-module.h" 35 #include "ns3/network-module.h" 36 #include "ns3/applications-module.h" 37 #include "ns3/mobility-module.h" 38 #include "ns3/config-store-module.h" 39 #include "ns3/internet-module.h" 40 #include "ns3/dsdv-helper.h" 41 #include "ns3/yans-wifi-helper.h" 74 void CaseRun (uint32_t nWifis,
80 uint32_t periodicUpdateInterval,
81 uint32_t settlingTime,
84 std::string CSVfileName);
112 void CreateDevices (std::string tr_name);
117 void InstallInternetStack (std::string tr_name);
119 void InstallApplications ();
121 void SetupMobility ();
135 void CheckThroughput ();
139 int main (
int argc,
char **argv)
142 uint32_t nWifis = 30;
143 uint32_t nSinks = 10;
144 double totalTime = 100.0;
145 std::string rate (
"8kbps");
146 std::string phyMode (
"DsssRate11Mbps");
147 uint32_t nodeSpeed = 10;
148 std::string appl =
"all";
149 uint32_t periodicUpdateInterval = 15;
150 uint32_t settlingTime = 6;
151 double dataStart = 50.0;
152 bool printRoutingTable =
true;
153 std::string CSVfileName =
"DsdvManetExample.csv";
156 cmd.AddValue (
"nWifis",
"Number of wifi nodes[Default:30]", nWifis);
157 cmd.AddValue (
"nSinks",
"Number of wifi sink nodes[Default:10]", nSinks);
158 cmd.AddValue (
"totalTime",
"Total Simulation time[Default:100]", totalTime);
159 cmd.AddValue (
"phyMode",
"Wifi Phy mode[Default:DsssRate11Mbps]", phyMode);
160 cmd.AddValue (
"rate",
"CBR traffic rate[Default:8kbps]", rate);
161 cmd.AddValue (
"nodeSpeed",
"Node speed in RandomWayPoint model[Default:10]", nodeSpeed);
162 cmd.AddValue (
"periodicUpdateInterval",
"Periodic Interval Time[Default=15]", periodicUpdateInterval);
163 cmd.AddValue (
"settlingTime",
"Settling Time before sending out an update for changed metric[Default=6]", settlingTime);
164 cmd.AddValue (
"dataStart",
"Time at which nodes start to transmit data[Default=50.0]", dataStart);
165 cmd.AddValue (
"printRoutingTable",
"print routing table for nodes[Default:1]", printRoutingTable);
166 cmd.AddValue (
"CSVfileName",
"The name of the CSV output file name[Default:DsdvManetExample.csv]", CSVfileName);
167 cmd.Parse (argc, argv);
169 std::ofstream out (CSVfileName.c_str ());
170 out <<
"SimulationSecond," <<
172 "PacketsReceived," <<
185 test.CaseRun (nWifis, nSinks, totalTime, rate, phyMode, nodeSpeed, periodicUpdateInterval,
186 settlingTime, dataStart, printRoutingTable, CSVfileName);
202 while ((packet = socket->
Recv ()))
228 TypeId tid = TypeId::LookupByName (
"ns3::UdpSocketFactory");
239 std::string phyMode, uint32_t nodeSpeed, uint32_t periodicUpdateInterval, uint32_t settlingTime,
240 double dataStart,
bool printRoutes, std::string CSVfileName)
254 std::stringstream ss;
256 std::string t_nodes = ss.str ();
258 std::stringstream ss3;
260 std::string sTotalTime = ss3.str ();
262 std::string tr_name =
"Dsdv_Manet_" + t_nodes +
"Nodes_" + sTotalTime +
"SimTime";
263 std::cout <<
"Trace file generated is " << tr_name <<
".tr\n";
271 std::cout <<
"\nStarting simulation for " <<
m_totalTime <<
" s ...\n";
277 Simulator::Destroy ();
283 std::cout <<
"Creating " << (unsigned)
m_nWifis <<
" nodes.\n";
293 pos.
SetTypeId (
"ns3::RandomRectanglePositionAllocator");
294 pos.
Set (
"X",
StringValue (
"ns3::UniformRandomVariable[Min=0.0|Max=1000.0]"));
295 pos.
Set (
"Y",
StringValue (
"ns3::UniformRandomVariable[Min=0.0|Max=1000.0]"));
297 std::ostringstream speedConstantRandomVariableStream;
298 speedConstantRandomVariableStream <<
"ns3::ConstantRandomVariable[Constant=" 303 mobility.SetMobilityModel (
"ns3::RandomWaypointMobilityModel",
"Speed",
StringValue (speedConstantRandomVariableStream.str ()),
304 "Pause",
StringValue (
"ns3::ConstantRandomVariable[Constant=2.0]"),
"PositionAllocator",
PointerValue (taPositionAlloc));
305 mobility.SetPositionAllocator (taPositionAlloc);
313 wifiMac.
SetType (
"ns3::AdhocWifiMac");
337 stack.SetRoutingHelper (dsdv);
340 address.SetBase (
"10.1.1.0",
"255.255.255.0");
352 for (uint32_t i = 0; i <=
m_nSinks - 1; i++ )
359 for (uint32_t clientNode = 0; clientNode <=
m_nWifis - 1; clientNode++ )
361 for (uint32_t j = 0; j <=
m_nSinks - 1; j++ )
365 onoff1.SetAttribute (
"OffTime",
StringValue (
"ns3::ConstantRandomVariable[Constant=0.0]"));
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())
Ptr< Socket > SetupPacketReceive(Ipv4Address addr, Ptr< Node > node)
Setup packet receivers.
holds a vector of ns3::Application pointers.
Ipv4InterfaceContainer interfaces
the collection of interfaces
Manage ASCII trace files for device models.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
Hold variables of type string.
Make it easy to create and manage PHY objects for the yans model.
void CaseRun(uint32_t nWifis, uint32_t nSinks, double totalTime, std::string rate, std::string phyMode, uint32_t nodeSpeed, uint32_t periodicUpdateInterval, uint32_t settlingTime, double dataStart, bool printRoutes, std::string CSVfileName)
Run function.
uint32_t packetsReceived
total packets received by all nodes
void ReceivePacket(Ptr< Socket > socket)
void SetupMobility()
Setup mobility model.
std::string m_CSVfileName
CSV file name.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
double m_totalTime
total simulation time (in seconds)
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
aggregate IP/TCP/UDP functionality to existing Nodes.
void InstallApplications()
Create data sinks and sources.
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
double m_dataStart
time to start data transmissions (seconds)
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
a polymophic address class
Ptr< YansWifiChannel > Create(void) const
void CreateDevices(std::string tr_name)
Create and initialize all devices.
void ReceivePacket(Ptr< Socket > socket)
Packet receive function.
void SetChannel(Ptr< YansWifiChannel > channel)
uint32_t m_nodeSpeed
mobility speed
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 ...
AttributeValue implementation for Time.
Ptr< Object > Create(void) const
Create an Object instance of the configured TypeId.
NodeContainer nodes
the collection of nodes
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
std::string m_rate
network bandwidth
uint32_t m_settlingTime
routing setting time
holds a vector of ns3::NetDevice pointers
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
NetDeviceContainer devices
the collection of devices
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
Parse command-line arguments.
Access to the IPv4 forwarding table, interfaces, and configuration.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
uint32_t m_nSinks
number of receiver nodes
Ptr< Socket > SetupPacketReceive(Ptr< Node > node)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
Hold objects of type Ptr<T>.
uint32_t m_nWifis
total number of nodes
virtual Ptr< Packet > Recv(uint32_t maxSize, uint32_t flags)=0
Read data from the socket.
bool m_printRoutes
print routing table
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18)
#define NS_LOG_UNCOND(msg)
Output the requested message unconditionally.
uint32_t bytesTotal
total bytes received by all nodes
void Set(std::string name, const AttributeValue &value)
Set an attribute to be set during construction.
manage and create wifi channel objects for the yans model.
void InstallInternetStack(std::string tr_name)
Create network.
create MAC layers for a ns3::WifiNetDevice.
std::string m_phyMode
remote station manager data mode
void CreateNodes()
Create and initialize all nodes.
virtual 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(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue(), std::string n10="", const AttributeValue &v10=EmptyAttributeValue())
static void SetSeed(uint32_t seed)
Set the seed.
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...
uint32_t m_periodicUpdateInterval
routing update interval
Time Seconds(double value)
Construct a Time in the indicated unit.
void SetDefault(std::string name, const AttributeValue &value)
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
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())
Helper class that adds DSDV routing to nodes.
a unique identifier for an interface.
static void PrintRoutingTableAllAt(Time printTime, Ptr< OutputStreamWrapper > stream, Time::Unit unit=Time::S)
prints the routing tables of all nodes at a particular time.
void SetAttribute(std::string name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
Allocate a set of positions.
void CheckThroughput()
Check network throughput.