diff options
| author | Loic Guegan <manzerberdes@gmx.com> | 2019-05-22 11:24:17 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerberdes@gmx.com> | 2019-05-22 11:24:17 +0200 |
| commit | 8bdcd37ac44fe96d2c59424a24752f87f0444e36 (patch) | |
| tree | e31a0fe38c01bc6814a0b35474875fe538ea87c2 /src/ns3/nix/simulator/main.cc | |
| parent | 5a77b67d6baae0414310d29cab6f240963866062 (diff) | |
Update paper
Diffstat (limited to 'src/ns3/nix/simulator/main.cc')
| -rw-r--r-- | src/ns3/nix/simulator/main.cc | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/ns3/nix/simulator/main.cc b/src/ns3/nix/simulator/main.cc new file mode 100644 index 0000000..8857414 --- /dev/null +++ b/src/ns3/nix/simulator/main.cc @@ -0,0 +1,85 @@ +#include "modules/modules.hpp" +#ifndef NS3_VERSION +#define NS3_VERSION "unknown" +#endif + +NS_LOG_COMPONENT_DEFINE ("WIFISensorsSimulator"); + + +/** + * To get more details about functions please have a look at modules/modules.hpp + */ +int main(int argc, char* argv[]){ + + uint32_t sensorsFrequency=1; // One pkt every second + uint32_t sensorsPktSize=192; // 128 bits for sensors id and 32 bit for the temperature (an arbitrary Integer) and a timestamp (32bits) + uint32_t sensorsNumber=5; + uint32_t nbHop=10; + uint32_t linksBandwidth=10000; + uint32_t linksLatency=11; // 10 hops => 9 links => 11.1ms of latency => end-to-end latency==100ms + uint32_t positionSeed=5; // arbitrary + + CommandLine cmd; + cmd.AddValue ("sensorsSendInterval", "Number of sensors measurement per second", sensorsFrequency); + cmd.AddValue ("sensorsPktSize", "Sensors packet size (bytes)", sensorsPktSize); + cmd.AddValue ("sensorsNumber", "Number of sensors connected to AP", sensorsNumber); + cmd.AddValue ("nbHop", "Number of hop between AP and Cloud", nbHop); + cmd.AddValue ("linksBandwidth", "Links bandwidth between AP and Cloud", linksBandwidth); + cmd.AddValue ("linksLatency", "Links latency between AP and Cloud", linksLatency); + cmd.AddValue ("positionSeed", "RandomRectangle Sensors placement seed", positionSeed); + cmd.Parse (argc, argv); + + // Check sensors frequency + if(sensorsFrequency<1){ + NS_LOG_UNCOND("SensorsSendInterval too small: " << sensorsFrequency << " (it should be >1)." ); + exit(1); + } + + //LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); + //LogComponentEnable("PacketSink", LOG_LEVEL_INFO); + + // ---------- Setup Simulations ---------- + CloudInfos cloud=createCloud(nbHop,linksBandwidth,linksLatency); // Create cloud P2P node chain o--o--o--o--o + setupCloudEnergy(cloud); // DO IT JUST AFTER createCloud !!!!! Otherwise you will be in trouble + Cell cell=createCell(sensorsNumber,cloud.first.Get(0),positionSeed); // Use first cloud node as Access Point + setupScenario(cell,cloud,sensorsPktSize,sensorsFrequency); // Send data from Sensors to Cloud + DeviceEnergyModelContainer wifi=setupCellEnergy(cell); + + // Don't forget the following + Ipv4GlobalRoutingHelper::PopulateRoutingTables (); + + // Setup Logs + uint32_t nNode=ns3::NodeList::GetNNodes(); + FlowMonitorHelper flowmon; + Ptr<FlowMonitor> monitor = flowmon.InstallAll(); + Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier> (flowmon.GetClassifier ()); + + // Run Simulations + Simulator::Stop (Seconds (SIM_TIME)); + Simulator::Run (); + + // Print logs + NS_LOG_UNCOND("NS-3 Version " << NS3_VERSION); + NS_LOG_UNCOND("Simulation used "<< nNode << " nodes"); + std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats (); + for (std::map< FlowId, FlowMonitor::FlowStats>::iterator flow=stats.begin(); flow!=stats.end(); flow++) + { + Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow(flow->first); + NS_LOG_UNCOND("Flow " <<t.sourceAddress<< " -> "<< t.destinationAddress << " delay = " <<flow->second.delaySum.GetSeconds()); + } + + + // Trace + DeviceEnergyModelContainer::Iterator it=wifi.Begin(); + int i=0; // Note that node 0 is the AP + while(it!=wifi.End()){ + NS_LOG_UNCOND ("Node " << i << " consumes " <<(*it)->GetTotalEnergyConsumption()); + it++; + i--; // Edge device will have id < 0 and ap will have id 0 + } + + + // Finish + Simulator::Destroy (); + return(0); +} |
