#include "modules/modules.hpp" 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; uint32_t sensorsPktSize=150; uint32_t sensorsNumber=2; uint32_t nbHop=5; uint32_t linksBandwidth=5; uint32_t linksLatency=2; 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", sensorsNumber); cmd.AddValue ("linksBandwidth", "Links bandwidth between AP and Cloud", linksBandwidth); cmd.AddValue ("linksLatency", "Links latency between AP and Cloud", linksLatency); cmd.Parse (argc, argv); //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)); // Use first cloud node as Access Point setupScenario(cell,cloud,sensorsPktSize,sensorsFrequency); // Send data from Sensors to Cloud setupCellEnergy(cell); // Don't forget the following Ipv4GlobalRoutingHelper::PopulateRoutingTables (); // Setup Logs uint32_t nNode=ns3::NodeList::GetNNodes(); FlowMonitorHelper flowmon; Ptr monitor = flowmon.InstallAll(); Ptr classifier = DynamicCast (flowmon.GetClassifier ()); // Run Simulations Simulator::Stop (Seconds (30)); Simulator::Run (); // Print logs NS_LOG_UNCOND("NS-3 Version " << NS3_VERSION); NS_LOG_UNCOND("Simulation used "<< nNode << " nodes"); std::map 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.destinationAddress << " delay = " <second.delaySum.GetSeconds()); } // Finish Simulator::Destroy (); return(0); }