Search code examples
c++wifisimulationwirelessns-3

Create a Wireless Link between two nodes in ns3


I have to build a topology where 2 nodes are connected via the wifi network or cellular network.

In ns-3 I can't find examples to do so.

How could I build the topology ?


Solution

  • NS3 has only 4G network modules, WiMax and LTE. NS3 has no 2G or 3G modules.

    Here is the example to create topology of a source node sending UDP packet to a sink node with combination of cellular network and Wifi Network.

    LTE Network + Wifi Network

    #include "ns3/lte-helper.h"
    #include "ns3/epc-helper.h"
    
    #include "ns3/core-module.h"
    #include "ns3/point-to-point-module.h"
    #include "ns3/wifi-module.h"
    #include "ns3/csma-module.h"
    #include "ns3/network-module.h"
    #include "ns3/applications-module.h"
    #include "ns3/mobility-module.h"
    #include "ns3/config-store-module.h"
    #include "ns3/wimax-module.h"
    #include "ns3/internet-module.h"
    #include "ns3/global-route-manager.h"
    #include "ns3/ipcs-classifier-record.h"
    #include "ns3/service-flow.h"
    #include <iostream>
    #include "ns3/ipv4-global-routing-helper.h"
    #include "ns3/mobility-module.h"
    #include "ns3/lte-module.h"
    #include "ns3/point-to-point-helper.h"
    #include <iomanip>
    #include <string>
    #include <fstream>
    #include <vector>
    
    NS_LOG_COMPONENT_DEFINE ("WimaxSimpleExample");
    
    using namespace ns3;
    
    
    
    int main (int argc, char *argv[])
    {
    Config::SetDefault ("ns3::LteAmc::AmcModel", EnumValue (LteAmc::PiroEW2010));
      bool verbose = false;
    
      int duration = 500, schedType = 0;
    
    
      uint16_t numberOfUEs=2;               //Default number of ues attached to each eNodeB         
    
      Ptr<LteHelper> lteHelper;     //Define LTE    
      Ptr<EpcHelper>  epcHelper;    //Define EPC
    
      NodeContainer remoteHostContainer;            //Define the Remote Host
      NetDeviceContainer internetDevices;   //Define the Network Devices in the Connection between EPC and the remote host
    
      Ptr<Node> pgw;                                //Define the Packet Data Network Gateway(P-GW)  
      Ptr<Node> remoteHost;         //Define the node of remote Host
    
      InternetStackHelper internet;                 //Define the internet stack     
      PointToPointHelper p2ph;                              //Define Connection between EPC and the Remote Host
      Ipv4AddressHelper ipv4h;                              //Ipv4 address helper
      Ipv4StaticRoutingHelper ipv4RoutingHelper;    //Ipv4 static routing helper    
      Ptr<Ipv4StaticRouting> remoteHostStaticRouting;
    
      Ipv4InterfaceContainer internetIpIfaces;      //Ipv4 interfaces
    
    
    
    
      CommandLine cmd;
      cmd.AddValue ("scheduler", "type of scheduler to use with the network devices", schedType);
      cmd.AddValue ("duration", "duration of the simulation in seconds", duration);
      cmd.AddValue ("verbose", "turn on all WimaxNetDevice log components", verbose);
      cmd.Parse (argc, argv);
      LogComponentEnable ("UdpClient", LOG_LEVEL_INFO);
      LogComponentEnable ("UdpServer", LOG_LEVEL_INFO);
      //LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
      //LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
    
      NodeContainer ssNodes;
      NodeContainer bsNodes;
    
      ssNodes.Create (2);
      bsNodes.Create (1);
    
    
    uint32_t nCsma = 3;
    
      NodeContainer p2pNodes;
      p2pNodes.Create (2);
    
      PointToPointHelper pointToPoint;
      pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
      pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
    
      NetDeviceContainer p2pDevices;
      p2pDevices = pointToPoint.Install (p2pNodes);
    
      NodeContainer csmaNodes;
      csmaNodes.Add (p2pNodes.Get (1));
      csmaNodes.Create (nCsma);
    
      CsmaHelper csma;
      csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
      csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (6560)));
    
      NetDeviceContainer csmaDevices;
      csmaDevices = csma.Install (csmaNodes);
    
      NodeContainer wifiApNode = p2pNodes.Get (0);
    
      YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
      YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
      phy.SetChannel (channel.Create ());
    
      WifiHelper wifi = WifiHelper::Default ();
      wifi.SetRemoteStationManager ("ns3::AarfWifiManager");
    
      NqosWifiMacHelper mac = NqosWifiMacHelper::Default ();
    
      Ssid ssid = Ssid ("ns-3-ssid");
      mac.SetType ("ns3::StaWifiMac",
               "Ssid", SsidValue (ssid),
               "ActiveProbing", BooleanValue (false));
    
      NetDeviceContainer staDevices;
      staDevices = wifi.Install (phy, mac, ssNodes);
    
      mac.SetType ("ns3::ApWifiMac",
               "Ssid", SsidValue (ssid));
    
      NetDeviceContainer apDevices;
      apDevices = wifi.Install (phy, mac, wifiApNode);
    
      MobilityHelper mobility1;
    
      mobility1.SetPositionAllocator ("ns3::GridPositionAllocator",
                                 "MinX", DoubleValue (0.0),
                                 "MinY", DoubleValue (0.0),
                                 "DeltaX", DoubleValue (5.0),
                                 "DeltaY", DoubleValue (10.0),
                                 "GridWidth", UintegerValue (3),
                                 "LayoutType", StringValue ("RowFirst"));
    
    
    
    
      mobility1.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
      mobility1.Install (wifiApNode);
    (wifiApNode.Get(0) -> GetObject<ConstantPositionMobilityModel>()) -> SetPosition(Vector(100.0, 501.0, 0.0));
      InternetStackHelper stack1;
      stack1.Install (csmaNodes);
      stack1.Install (wifiApNode);
      stack1.Install (ssNodes);
    
      Ipv4AddressHelper address1;
    
      address1.SetBase ("11.1.1.0", "255.255.255.0");
      Ipv4InterfaceContainer p2pInterfaces;
      p2pInterfaces = address1.Assign (p2pDevices);
    
      address1.SetBase ("11.1.2.0", "255.255.255.0");
      Ipv4InterfaceContainer csmaInterfaces;
      csmaInterfaces = address1.Assign (csmaDevices);
    
      address1.SetBase ("11.1.3.0", "255.255.255.0");
      address1.Assign (staDevices);
      address1.Assign (apDevices);
    
      UdpEchoServerHelper echoServer (9);
    
      ApplicationContainer serverApps1 = echoServer.Install (csmaNodes.Get (nCsma));
      serverApps1.Start (Seconds (1.0));
      serverApps1.Stop (Seconds (duration+0.1));
    
      UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9);
      echoClient.SetAttribute ("MaxPackets", UintegerValue (1000));
      echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.)));
      echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
    
      ApplicationContainer clientApps1 = 
        echoClient.Install (ssNodes.Get (0));
      clientApps1.Start (Seconds (2.0));
      clientApps1.Stop (Seconds (duration+0.1));
    
      Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
    
    
      //pointToPoint.EnablePcapAll ("third");
      phy.EnablePcap ("third", apDevices.Get (0));
      //csma.EnablePcap ("third", csmaDevices.Get (0), true);
    
    
    
    
        lteHelper = CreateObject<LteHelper> ();
        epcHelper = CreateObject<EpcHelper> ();
    
        lteHelper->SetEpcHelper (epcHelper);
        lteHelper->SetSchedulerType("ns3::RrFfMacScheduler");
        lteHelper->SetAttribute ("PathlossModel",
                               StringValue ("ns3::FriisPropagationLossModel"));
          pgw = epcHelper->GetPgwNode ();
    
        remoteHostContainer.Create (1);
        remoteHost = remoteHostContainer.Get (0);
        internet.Install (remoteHostContainer);
    
          p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
          p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
          p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010))); 
          internetDevices = p2ph.Install (pgw, remoteHost);
    
          ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
          internetIpIfaces = ipv4h.Assign (internetDevices);
    
          remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
          remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
    
          std::cout << "2. Installing LTE+EPC+remotehost. Done!" << std::endl;
    
    
    MobilityHelper mobility;
      Ptr<ListPositionAllocator> positionAlloc;
      positionAlloc = CreateObject<ListPositionAllocator> ();
    
      positionAlloc->Add (Vector (0.0, 500.0, 0.0)); //STA
    
      mobility.SetPositionAllocator (positionAlloc);
      mobility.SetMobilityModel ("ns3::ConstantVelocityMobilityModel");  
      mobility.Install(ssNodes.Get(0));
    
      Ptr<ConstantVelocityMobilityModel> cvm = ssNodes.Get(0)->GetObject<ConstantVelocityMobilityModel>();
      cvm->SetVelocity(Vector (5, 0, 0)); //move to left to right 10.0m/s
    
      positionAlloc = CreateObject<ListPositionAllocator> ();
    
      positionAlloc->Add (Vector (0.0, 500.0, 10.0)); //MAG1AP
      positionAlloc->Add (Vector (0.0, 510.0, 0.0));  //MAG2AP
    
      mobility.SetPositionAllocator (positionAlloc);
      mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
    
      mobility.Install (NodeContainer(bsNodes.Get(0),ssNodes.Get(1)));
    
    
    
    
    
    NetDeviceContainer ssDevs, bsDevs;
    
                bsDevs = lteHelper->InstallEnbDevice (bsNodes);
                ssDevs=lteHelper->InstallUeDevice (ssNodes);
    
                for (uint16_t j=0; j < numberOfUEs; j++)
                {
                        lteHelper->Attach (ssDevs.Get(j), bsDevs.Get(0));  
                }
    
    
                Ipv4InterfaceContainer iueIpIface;
                iueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ssDevs));
    
      lteHelper->ActivateEpsBearer (ssDevs, EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT), EpcTft::Default ());
    
    
    
    UdpServerHelper udpServer;
      ApplicationContainer serverApps;
      UdpClientHelper udpClient;
      ApplicationContainer clientApps;
    
      udpServer = UdpServerHelper (100);
    
      serverApps = udpServer.Install (ssNodes.Get (0));
      serverApps.Start (Seconds (6));
      serverApps.Stop (Seconds (duration));
    
      udpClient = UdpClientHelper (iueIpIface.GetAddress (0), 100);
      udpClient.SetAttribute ("MaxPackets", UintegerValue (200000));
      udpClient.SetAttribute ("Interval", TimeValue (Seconds (0.004)));
      udpClient.SetAttribute ("PacketSize", UintegerValue (1024));
    
      clientApps = udpClient.Install (remoteHost);
      clientApps.Start (Seconds (6));
      clientApps.Stop (Seconds (duration));
        lteHelper->EnableTraces ();
    
    
    
    
      NS_LOG_INFO ("Starting simulation.....");
    Simulator::Stop(Seconds(duration));
    
      Simulator::Run ();
    
    
    
    
    
      Simulator::Destroy ();
      NS_LOG_INFO ("Done.");
    
      return 0;
    }
    

    WiMax Network + Wifi Network

    #include "ns3/core-module.h"
    #include "ns3/point-to-point-module.h"
    #include "ns3/wifi-module.h"
    #include "ns3/csma-module.h"
    #include "ns3/network-module.h"
    #include "ns3/applications-module.h"
    #include "ns3/mobility-module.h"
    #include "ns3/config-store-module.h"
    #include "ns3/wimax-module.h"
    #include "ns3/internet-module.h"
    #include "ns3/global-route-manager.h"
    #include "ns3/ipcs-classifier-record.h"
    #include "ns3/service-flow.h"
    #include <iostream>
    
    NS_LOG_COMPONENT_DEFINE ("WimaxSimpleExample");
    
    using namespace ns3;
    
    int main (int argc, char *argv[])
    {
      bool verbose = false;
    
      int duration = 1000, schedType = 0;
      WimaxHelper::SchedulerType scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
    
      CommandLine cmd;
      cmd.AddValue ("scheduler", "type of scheduler to use with the network devices", schedType);
      cmd.AddValue ("duration", "duration of the simulation in seconds", duration);
      cmd.AddValue ("verbose", "turn on all WimaxNetDevice log components", verbose);
      cmd.Parse (argc, argv);
      LogComponentEnable ("UdpClient", LOG_LEVEL_INFO);
      LogComponentEnable ("UdpServer", LOG_LEVEL_INFO);
      //LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
      //LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
    
      switch (schedType)
        {
        case 0:
          scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
          break;
        case 1:
          scheduler = WimaxHelper::SCHED_TYPE_MBQOS;
          break;
        case 2:
          scheduler = WimaxHelper::SCHED_TYPE_RTPS;
          break;
        default:
          scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
        }
    
      NodeContainer ssNodes;
      NodeContainer bsNodes;
    
      ssNodes.Create (2);
      bsNodes.Create (1);
    
    
    uint32_t nCsma = 3;
    
      NodeContainer p2pNodes;
      p2pNodes.Create (2);
    
      PointToPointHelper pointToPoint;
      pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
      pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
    
      NetDeviceContainer p2pDevices;
      p2pDevices = pointToPoint.Install (p2pNodes);
    
      NodeContainer csmaNodes;
      csmaNodes.Add (p2pNodes.Get (1));
      csmaNodes.Create (nCsma);
    
      CsmaHelper csma;
      csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
      csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (6560)));
    
      NetDeviceContainer csmaDevices;
      csmaDevices = csma.Install (csmaNodes);
    
      NodeContainer wifiApNode = p2pNodes.Get (0);
    
      YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
      YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
      phy.SetChannel (channel.Create ());
    
      WifiHelper wifi = WifiHelper::Default ();
      wifi.SetRemoteStationManager ("ns3::AarfWifiManager");
    
      NqosWifiMacHelper mac = NqosWifiMacHelper::Default ();
    
      Ssid ssid = Ssid ("ns-3-ssid");
      mac.SetType ("ns3::StaWifiMac",
               "Ssid", SsidValue (ssid),
               "ActiveProbing", BooleanValue (false));
    
      NetDeviceContainer staDevices;
      staDevices = wifi.Install (phy, mac, ssNodes);
    
      mac.SetType ("ns3::ApWifiMac",
               "Ssid", SsidValue (ssid));
    
      NetDeviceContainer apDevices;
      apDevices = wifi.Install (phy, mac, wifiApNode);
    
      MobilityHelper mobility1;
    
      mobility1.SetPositionAllocator ("ns3::GridPositionAllocator",
                                 "MinX", DoubleValue (0.0),
                                 "MinY", DoubleValue (0.0),
                                 "DeltaX", DoubleValue (5.0),
                                 "DeltaY", DoubleValue (10.0),
                                 "GridWidth", UintegerValue (3),
                                 "LayoutType", StringValue ("RowFirst"));
    
    
    
    
      mobility1.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
      mobility1.Install (wifiApNode);
    (wifiApNode.Get(0) -> GetObject<ConstantPositionMobilityModel>()) -> SetPosition(Vector(800.0, 0.0, 0.0));
      InternetStackHelper stack1;
      stack1.Install (csmaNodes);
      stack1.Install (wifiApNode);
      stack1.Install (ssNodes);
    
      Ipv4AddressHelper address1;
    
      address1.SetBase ("11.1.1.0", "255.255.255.0");
      Ipv4InterfaceContainer p2pInterfaces;
      p2pInterfaces = address1.Assign (p2pDevices);
    
      address1.SetBase ("11.1.2.0", "255.255.255.0");
      Ipv4InterfaceContainer csmaInterfaces;
      csmaInterfaces = address1.Assign (csmaDevices);
    
      address1.SetBase ("11.1.3.0", "255.255.255.0");
      address1.Assign (staDevices);
      address1.Assign (apDevices);
    
      UdpEchoServerHelper echoServer (9);
    
      ApplicationContainer serverApps1 = echoServer.Install (csmaNodes.Get (nCsma));
      serverApps1.Start (Seconds (1.0));
      serverApps1.Stop (Seconds (duration));
    
      UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9);
      echoClient.SetAttribute ("MaxPackets", UintegerValue (1000));
      echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.)));
      echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
    
      ApplicationContainer clientApps1 = 
        echoClient.Install (ssNodes.Get (0));
      clientApps1.Start (Seconds (2.0));
      clientApps1.Stop (Seconds (duration));
    
      Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
    
    
      //pointToPoint.EnablePcapAll ("third");
      phy.EnablePcap ("third", apDevices.Get (0));
      //csma.EnablePcap ("third", csmaDevices.Get (0), true);
    
    
    
    
      WimaxHelper wimax;
    
      NetDeviceContainer ssDevs, bsDevs;
    
      ssDevs = wimax.Install (ssNodes,
                          WimaxHelper::DEVICE_TYPE_SUBSCRIBER_STATION,
                          WimaxHelper::SIMPLE_PHY_TYPE_OFDM,
                          scheduler);
      bsDevs = wimax.Install (bsNodes, WimaxHelper::DEVICE_TYPE_BASE_STATION, WimaxHelper::SIMPLE_PHY_TYPE_OFDM, scheduler);
    
      wimax.EnableAscii ("bs-devices", bsDevs);
      wimax.EnableAscii ("ss-devices", ssDevs);
    
      Ptr<SubscriberStationNetDevice> ss[2];
    
      for (int i = 0; i < 2; i++)
        {
          ss[i] = ssDevs.Get (i)->GetObject<SubscriberStationNetDevice> ();
          ss[i]->SetModulationType (WimaxPhy::MODULATION_TYPE_QAM16_12);
        }
    
      Ptr<BaseStationNetDevice> bs;
    
      bs = bsDevs.Get (0)->GetObject<BaseStationNetDevice> ();
    
    
      MobilityHelper mobility;
      Ptr<ListPositionAllocator> positionAlloc;
      positionAlloc = CreateObject<ListPositionAllocator> ();
    
      positionAlloc->Add (Vector (-1061.0, 70.0, 0.0)); //STA
    
      mobility.SetPositionAllocator (positionAlloc);
      mobility.SetMobilityModel ("ns3::ConstantVelocityMobilityModel");  
      mobility.Install(ssNodes.Get(0));
    
      Ptr<ConstantVelocityMobilityModel> cvm = ssNodes.Get(0)->GetObject<ConstantVelocityMobilityModel>();
      cvm->SetVelocity(Vector (5, 0, 0)); //move to left to right 10.0m/s
    
      positionAlloc = CreateObject<ListPositionAllocator> ();
    
      positionAlloc->Add (Vector (-0.0, 40.0, 0.0)); //MAG1AP
      positionAlloc->Add (Vector (0.0, 40.0, 0.0));  //MAG2AP
    
      mobility.SetPositionAllocator (positionAlloc);
      mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
    
      mobility.Install (NodeContainer(bsNodes.Get(0),ssNodes.Get(1)));
    
    
      InternetStackHelper stack;
      stack.Install (bsNodes);
      //stack.Install (ssNodes);
    
      Ipv4AddressHelper address;
      address.SetBase ("10.1.1.0", "255.255.255.0");
    
      Ipv4InterfaceContainer SSinterfaces = address.Assign (ssDevs);
      Ipv4InterfaceContainer BSinterface = address.Assign (bsDevs);
    
      if (verbose)
        {
          wimax.EnableLogComponents ();  // Turn on all wimax logging
        }
      /*------------------------------*/
      UdpServerHelper udpServer;
      ApplicationContainer serverApps;
      UdpClientHelper udpClient;
      ApplicationContainer clientApps;
    
      udpServer = UdpServerHelper (100);
    
      serverApps = udpServer.Install (ssNodes.Get (0));
      serverApps.Start (Seconds (6));
      serverApps.Stop (Seconds (duration));
    
      udpClient = UdpClientHelper (SSinterfaces.GetAddress (0), 100);
      udpClient.SetAttribute ("MaxPackets", UintegerValue (1200));
      udpClient.SetAttribute ("Interval", TimeValue (Seconds (0.5)));
      udpClient.SetAttribute ("PacketSize", UintegerValue (1024));
    
      clientApps = udpClient.Install (ssNodes.Get (1));
      clientApps.Start (Seconds (6));
      clientApps.Stop (Seconds (duration));
    
      Simulator::Stop (Seconds (duration + 0.1));
    
      wimax.EnablePcap ("wimax-simple-ss0", ssNodes.Get (0)->GetId (), ss[0]->GetIfIndex ());
      wimax.EnablePcap ("wimax-simple-ss1", ssNodes.Get (1)->GetId (), ss[1]->GetIfIndex ());
      wimax.EnablePcap ("wimax-simple-bs0", bsNodes.Get (0)->GetId (), bs->GetIfIndex ());
    
      IpcsClassifierRecord DlClassifierUgs (Ipv4Address ("0.0.0.0"),
                                        Ipv4Mask ("0.0.0.0"),
                                        SSinterfaces.GetAddress (0),
                                        Ipv4Mask ("255.255.255.255"),
                                        0,
                                        65000,
                                        100,
                                        100,
                                        17,
                                        1);
      ServiceFlow DlServiceFlowUgs = wimax.CreateServiceFlow (ServiceFlow::SF_DIRECTION_DOWN,
                                                          ServiceFlow::SF_TYPE_RTPS,
                                                          DlClassifierUgs);
    
      IpcsClassifierRecord UlClassifierUgs (SSinterfaces.GetAddress (1),
                                        Ipv4Mask ("255.255.255.255"),
                                        Ipv4Address ("0.0.0.0"),
                                        Ipv4Mask ("0.0.0.0"),
                                        0,
                                        65000,
                                        100,
                                        100,
                                        17,
                                        1);
      ServiceFlow UlServiceFlowUgs = wimax.CreateServiceFlow (ServiceFlow::SF_DIRECTION_UP,
                                                          ServiceFlow::SF_TYPE_RTPS,
                                                          UlClassifierUgs);
      ss[0]->AddServiceFlow (DlServiceFlowUgs);
      ss[1]->AddServiceFlow (UlServiceFlowUgs);
    
    
    
      NS_LOG_INFO ("Starting simulation.....");
      Simulator::Run ();
    
      ss[0] = 0;
      ss[1] = 0;
      bs = 0;
    
      Simulator::Destroy ();
      NS_LOG_INFO ("Done.");
    
      return 0;
    }
    

    The codes is belong to these Author under GPL2 : https://code.google.com/p/tesis-ns3/source/browse/trunk/lena/scratch/?r=5