diff options
| author | Loic Guegan <manzerberdes@gmx.com> | 2019-04-12 14:48:47 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerberdes@gmx.com> | 2019-04-12 14:48:47 +0200 |
| commit | cb10ad2490706fc87f19ef556f36aee679887ad6 (patch) | |
| tree | a93d1ca9194eea7fb10633a315d177ef6e2d0ba4 | |
| parent | 927283437161307a23a954b42297412ba03a619c (diff) | |
Refactoring
| -rw-r--r-- | ns3-simulator/main.cc | 24 | ||||
| -rw-r--r-- | ns3-simulator/modules/energy.cc | 2 | ||||
| -rw-r--r-- | ns3-simulator/modules/modules.hpp | 39 | ||||
| -rw-r--r-- | ns3-simulator/modules/platform.cc | 30 | ||||
| -rwxr-xr-x | ns3-simulator/simulator | bin | 267088 -> 271232 bytes |
5 files changed, 56 insertions, 39 deletions
diff --git a/ns3-simulator/main.cc b/ns3-simulator/main.cc index 0c5c405..0e21632 100644 --- a/ns3-simulator/main.cc +++ b/ns3-simulator/main.cc @@ -3,6 +3,9 @@ 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; @@ -20,22 +23,19 @@ int main(int argc, char* argv[]){ //LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); //LogComponentEnable("PacketSink", LOG_LEVEL_INFO); - // Setup Simulations - CloudInfos cloud=buildEdgeAndCloud(nbHop); - Cell c=createCell(sensorsNumber,cloud.first.Get(0)); - applyScenarios(c,sensorsPktSize,sensorsFrequency,cloud); // Send data from Sensors to Cloud - // setupEnergy(c); - Ipv4GlobalRoutingHelper::PopulateRoutingTables (); - - + // ---------- Setup Simulations ---------- + CloudInfos cloud=createCloud(nbHop,5,2); // Create cloud P2P node chain o--o--o--o--o + 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 (); - // Run simulators + // Run Simulations Simulator::Stop (Seconds (20)); Simulator::Run (); - Simulator::Destroy (); // Destroy - + Simulator::Destroy (); - return(0); } diff --git a/ns3-simulator/modules/energy.cc b/ns3-simulator/modules/energy.cc index b07c835..9c91bf4 100644 --- a/ns3-simulator/modules/energy.cc +++ b/ns3-simulator/modules/energy.cc @@ -1,7 +1,7 @@ #include "modules.hpp" -void setupEnergy(Cell cell){ +void setupCellEnergy(Cell cell){ NodeContainer nodes(cell.first.first,cell.first.second); NetDeviceContainer nodesNetDev(cell.second.first,cell.second.second); diff --git a/ns3-simulator/modules/modules.hpp b/ns3-simulator/modules/modules.hpp index fa6a255..9423866 100644 --- a/ns3-simulator/modules/modules.hpp +++ b/ns3-simulator/modules/modules.hpp @@ -26,31 +26,48 @@ #include "ns3/point-to-point-helper.h" // C++ library -#include <iostream> -#include <utility> // To use std::pair -#include <iomanip> +#include <iostream> // Why not ? +#include <utility> // To use std::pair +#include <iomanip> // To use std::setw using namespace ns3; -// Data types +// ---------- Data types ---------- typedef std::pair<NodeContainer,NodeContainer> CellNodes; // Format (APNode, SensorsNodes) typedef std::pair<NetDeviceContainer,NetDeviceContainer> CellNetDevices; // Format (APNetDev, SensorsNetDev) typedef std::pair<CellNodes,CellNetDevices> Cell; typedef std::pair<Ipv4Address,int> EndPoint; // Format (IP,Port) typedef std::pair<NodeContainer,EndPoint> CloudInfos; // Format (CloudHops,CloudEndPoint), here data sent to CloudEndPoint - // via CloudHops.Get(0) will flow throw all hops until the reaching the cloud + // via CloudHops.Get(0) will flow throw all hops until the reaching the cloud -// Platform functions +// ---------- platform.cc ---------- +/** + * Create a WIFI cell paltform composed of nbSensors sensors and ap as an access point + */ Cell createCell(uint32_t nbSensors, Ptr<ns3::Node> ap); -CloudInfos buildEdgeAndCloud(int nbOp); -void applyScenarios(Cell cell,int sensorsPktSize, int sensorsSendInterval, CloudInfos cloudInfos); +/** + * Build P2P network composed of nbHop hops (to simulate edge->cloud communications) + * Note: Cloud Servers are not considered here and completely ignored ! + */ +CloudInfos createCloud(int nbHop, uint32_t bandwidth, uint32_t latency); +/** + * Setup simulation scenario on the platforms. Sensors in cell will send packets of sensorsPktSize size every + * sensorsSensInterval second to the cloud using cloudInfos. + */ +void setupScenario(Cell cell, CloudInfos cloudInfos, int sensorsPktSize, int sensorsSendInterval); -// Energy functions -void setupEnergy(Cell cell); +// ---------- energy.cc ---------- +/* + * Configure WIFI energy module for cell + */ +void setupCellEnergy(Cell cell); -// Callbacks + +// ---------- callbacks.cc ---------- void PktReceived(std::string nodeName,Ptr< const Packet > packet, const Address &address); void EnergyUpdated(std::string nodeName,double oldValue, double newValue); + + #endif diff --git a/ns3-simulator/modules/platform.cc b/ns3-simulator/modules/platform.cc index 81d53cb..82c293d 100644 --- a/ns3-simulator/modules/platform.cc +++ b/ns3-simulator/modules/platform.cc @@ -58,7 +58,7 @@ Cell createCell(uint32_t nbSensors, Ptr<ns3::Node> ap){ /** * Install network stack and applications */ -void applyScenarios(Cell cell,int sensorsPktSize, int sensorsSendInterval, CloudInfos cloudInfos){ +void setupScenario(Cell cell, CloudInfos cloudInfos, int sensorsPktSize, int sensorsSendInterval){ NodeContainer ap=cell.first.first; NodeContainer sensors=cell.first.second; NetDeviceContainer apNetDev= cell.second.first; @@ -69,7 +69,7 @@ void applyScenarios(Cell cell,int sensorsPktSize, int sensorsSendInterval, Cloud // internet.Install (ap); internet.Install (sensors); Ipv4AddressHelper ipv4; - ipv4.SetBase ("10.0.0.0", "255.255.255.0"); + ipv4.SetBase ("10.0.0.0", "255.255.0.0"); Ipv4InterfaceContainer apInt,sensorsInt; apInt=ipv4.Assign(apNetDev); sensorsInt=ipv4.Assign(sensorsNetDev); @@ -85,22 +85,22 @@ void applyScenarios(Cell cell,int sensorsPktSize, int sensorsSendInterval, Cloud echoClientHelper.Install (sensors); } -CloudInfos buildEdgeAndCloud(int nbOp){ - - NodeContainer OpNodes; - OpNodes.Create(nbOp); +CloudInfos createCloud(int nbHop, uint32_t bandwidth, uint32_t latency){ + + NodeContainer HopNodes; + HopNodes.Create(nbHop); InternetStackHelper stack; - stack.Install(OpNodes); + stack.Install(HopNodes); - Ipv4Address cloudIP; - int cloudPort=99; - for(int i=0;i<nbOp-1;i++){ - NodeContainer curNodes(OpNodes.Get(i),OpNodes.Get(i+1)); + Ipv4Address cloudIP; // Will be fill in the following for loop + int cloudPort=80; + for(int i=0;i<nbHop-1;i++){ + NodeContainer curNodes(HopNodes.Get(i),HopNodes.Get(i+1)); PointToPointHelper pointToPoint; - pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); - pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms")); + pointToPoint.SetDeviceAttribute ("DataRate", StringValue ((std::to_string(bandwidth)+"Mbps").c_str())); + pointToPoint.SetChannelAttribute ("Delay", StringValue ((std::to_string(latency)+"ms").c_str())); NetDeviceContainer p2pDevices; p2pDevices = pointToPoint.Install (curNodes); @@ -110,7 +110,7 @@ CloudInfos buildEdgeAndCloud(int nbOp){ Ipv4InterfaceContainer p2pInterfaces; p2pInterfaces = address.Assign (p2pDevices); - if(i==nbOp-2){ // If we are on the last FOR LOOP + if(i==nbHop-2){ // If we are on the last for loop (before last node) cloudIP=p2pInterfaces.GetAddress (1); // Get Last node interface PacketSinkHelper apSink("ns3::UdpSocketFactory",InetSocketAddress (Ipv4Address::GetAny (), cloudPort)); ApplicationContainer sinkApp=apSink.Install(curNodes.Get(1)); // Instal sink on last node @@ -119,6 +119,6 @@ CloudInfos buildEdgeAndCloud(int nbOp){ } } - return(std::make_pair(OpNodes,std::make_pair(cloudIP,cloudPort))); + return(std::make_pair(HopNodes,std::make_pair(cloudIP,cloudPort))); } diff --git a/ns3-simulator/simulator b/ns3-simulator/simulator Binary files differindex 8a6f8bd..0c7515e 100755 --- a/ns3-simulator/simulator +++ b/ns3-simulator/simulator |
