Ns3 Projects for B.E/B.Tech M.E/M.Tech PhD Scholars.  Phone-Number:9790238391   E-mail: ns3simulation@gmail.com

How to Implement Logical Topology in ns3

To implement a logical topology in ns3, we need to follow several steps. Because, this logical topology shows that how the nodes logically interact, despite of their physical connections. So, we have to set up a virtual network but on the top it shows like an existing physical network. The following steps will guide on how to implement logical topology in ns3.

Step-by-step to implement logical topology in ns3

Step 1: Install ns3

Make sure ns3 is installed on the system.

Step 2: Create a New Simulation Script

Create a new C++ script for your simulation.

Step 3: Include Necessary Headers

In the script, include the necessary ns3 headers:

#include “ns3/core-module.h”

#include “ns3/network-module.h”

#include “ns3/internet-module.h”

#include “ns3/point-to-point-module.h”

#include “ns3/applications-module.h”

#include “ns3/csma-module.h”

Step 4: Set Up the Physical Topology

Here is an example of setting up a physical topology with point-to-point links:

using namespace ns3;

NS_LOG_COMPONENT_DEFINE (“LogicalTopology”);

int main (int argc, char *argv[])

{

// Configure command line parameters

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer nodes;

nodes.Create (4); // Create 4 nodes for the physical network

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“5Mbps”));

pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”));

NetDeviceContainer devices;

Ipv4AddressHelper address;

for (uint32_t i = 0; i < nodes.GetN (); ++i)

{

for (uint32_t j = i + 1; j < nodes.GetN (); ++j)

{

NodeContainer pair (nodes.Get (i), nodes.Get (j));

NetDeviceContainer devicePair = pointToPoint.Install (pair);

devices.Add (devicePair);

std::ostringstream subnet;

subnet << “10.” << i << “.” << j << “.0”;

address.SetBase (subnet.str ().c_str (), “255.255.255.0”);

address.Assign (devicePair);

}

}

// Install the internet stack

InternetStackHelper stack;

stack.Install (nodes);

// Assign IP addresses

Ipv4AddressHelper ipv4;

for (uint32_t i = 0; i < nodes.GetN (); ++i)

{

for (uint32_t j = i + 1; j < nodes.GetN (); ++j)

{

std::ostringstream subnet;

subnet << “10.” << i << “.” << j << “.0”;

ipv4.SetBase (subnet.str ().c_str (), “255.255.255.0”);

ipv4.Assign (devices.Get (i * (nodes.GetN () – 1) + (j – 1)));

}

}

// Run simulation

Simulator::Stop (Seconds (10.0));

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

Step 5: Build and Run the Simulation

  1. Save the script as logical-topology.cc.
  2. Build the script using waf:

./waf configure –enable-examples

./waf build

  1. Run the simulation:

./waf –run scratch/logical-topology

Explanation of the Script

  • Node Creation: Creates four nodes for the physical network.
  • Point-to-Point Links: Configures point-to-point links for the physical network.
  • Network Configuration: Assigns IP addresses to the physical network.

Step 6: Implement Logical Topology

Here we need to define logical connections on top of the physical topology to implement logical topology. The given below example detaily explained about how to extend this using CSMA links for implementing logical topology.

#include “ns3/core-module.h”

#include “ns3/network-module.h”

#include “ns3/internet-module.h”

#include “ns3/point-to-point-module.h”

#include “ns3/applications-module.h”

#include “ns3/csma-module.h”

using namespace ns3;

NS_LOG_COMPONENT_DEFINE (“LogicalTopology”);

int main (int argc, char *argv[])

{

// Configure command line parameters

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer nodes;

nodes.Create (4); // Create 4 nodes for the physical network

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“5Mbps”));

pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”));

NetDeviceContainer p2pDevices;

Ipv4AddressHelper address;

for (uint32_t i = 0; i < nodes.GetN (); ++i)

{

for (uint32_t j = i + 1; j < nodes.GetN (); ++j)

{

NodeContainer pair (nodes.Get (i), nodes.Get (j));

NetDeviceContainer devicePair = pointToPoint.Install (pair);

p2pDevices.Add (devicePair);

std::ostringstream subnet;

subnet << “10.” << i << “.” << j << “.0”;

address.SetBase (subnet.str ().c_str (), “255.255.255.0”);

address.Assign (devicePair);

}

}

// Install the internet stack

InternetStackHelper stack;

stack.Install (nodes);

// Assign IP addresses

Ipv4AddressHelper ipv4;

for (uint32_t i = 0; i < nodes.GetN (); ++i)

{

for (uint32_t j = i + 1; j < nodes.GetN (); ++j)

{

std::ostringstream subnet;

subnet << “10.” << i << “.” << j << “.0”;

ipv4.SetBase (subnet.str ().c_str (), “255.255.255.0”);

ipv4.Assign (p2pDevices.Get (i * (nodes.GetN () – 1) + (j – 1)));

}

}

// Create logical (overlay) topology using CSMA links

CsmaHelper csma;

csma.SetChannelAttribute (“DataRate”, StringValue (“10Mbps”));

csma.SetChannelAttribute (“Delay”, TimeValue (NanoSeconds (6560)));

NetDeviceContainer overlayDevices;

overlayDevices = csma.Install (nodes);

// Assign IP addresses to the overlay network

address.SetBase (“10.1.1.0”, “255.255.255.0”);

Ipv4InterfaceContainer overlayInterfaces = address.Assign (overlayDevices);

// Set up applications (e.g., UDP echo server and client) on overlay network

uint16_t port = 9; // Port number for applications

// Install UDP Echo Server on node 0 (overlay)

UdpEchoServerHelper echoServer (port);

ApplicationContainer serverApps = echoServer.Install (nodes.Get (0));

serverApps.Start (Seconds (1.0));

serverApps.Stop (Seconds (10.0));

// Install UDP Echo Client on node 1 (overlay) to communicate with node 0

UdpEchoClientHelper echoClient (overlayInterfaces.GetAddress (0), port);

echoClient.SetAttribute (“MaxPackets”, UintegerValue (1));

echoClient.SetAttribute (“Interval”, TimeValue (Seconds (1.0)));

echoClient.SetAttribute (“PacketSize”, UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install (nodes.Get (1));

clientApps.Start (Seconds (2.0));

clientApps.Stop (Seconds (10.0));

// Run simulation

Simulator::Stop (Seconds (10.0));

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

Step 7: Build and Run the Extended Simulation

  1. Save the extended script as logical-topology.cc.
  2. Build the script using waf:

./waf configure –enable-examples

./waf build

  1. Run the simulation:

./waf –run scratch/logical-topology

Explanation of the Extended Script

  • Logical Topology: Uses CSMA links to create a logical overlay network on top of the physical point-to-point network.
  • IP Addressing: Assigns a separate IP address space for the logical network.
  • Applications: Sets up a UDP echo server and client on the logical network to demonstrate communication between overlay nodes.

The provided details completely covered the implementation process of logical topology and the example script guide to set up a simple logical topology using CSMA links.

Kindly furnish us with the specifics of your parameters, and we will aid you in conducting a comparative analysis of networking logical topologies in ns3.