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

How to Implement Irregular Topology in ns3

To implement an irregular topology in ns3, by creating a network which does not follow any specific geometric or regular pattern like a grid or ring. In this topology nodes are connected in an arbitrary or irregular manner.

Here are the steps given below that will guide on how to implement irregular topology in ns3.

Step-by-step to implement Irregular Topology in ns3

Step 1: Install ns-3

Make sure ns3 is installed on the system

Step 2: Create a New Simulation Script

Create a new C++ script for the simulation.

Step 3: Include Necessary Headers

In the script, include the necessary ns3 headers:

Step 4: Set Up the Irregular Topology

Below an example given for setting up an irregular topology with six nodes:

using namespace ns3;

NS_LOG_COMPONENT_DEFINE (“IrregularTopology”);

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

{

// Configure command line parameters

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer nodes;

nodes.Create (6); // Create 6 nodes

// Create point-to-point links to form an irregular topology

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“1Gbps”));

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

NetDeviceContainer devices;

Ipv4AddressHelper address;

Ipv4InterfaceContainer interfaces;

// Manually connect nodes to form an irregular topology

// Connect node 0 to node 1 and node 4

NodeContainer pair01 (nodes.Get (0), nodes.Get (1));

devices.Add (pointToPoint.Install (pair01));

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

interfaces.Add (address.Assign (devices.Get (0)));

NodeContainer pair04 (nodes.Get (0), nodes.Get (4));

devices.Add (pointToPoint.Install (pair04));

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

interfaces.Add (address.Assign (devices.Get (2)));

// Connect node 1 to node 2 and node 5

NodeContainer pair12 (nodes.Get (1), nodes.Get (2));

devices.Add (pointToPoint.Install (pair12));

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

interfaces.Add (address.Assign (devices.Get (4)));

NodeContainer pair15 (nodes.Get (1), nodes.Get (5));

devices.Add (pointToPoint.Install (pair15));

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

interfaces.Add (address.Assign (devices.Get (6)));

// Connect node 2 to node 3

NodeContainer pair23 (nodes.Get (2), nodes.Get (3));

devices.Add (pointToPoint.Install (pair23));

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

interfaces.Add (address.Assign (devices.Get (8)));

// Connect node 3 to node 4

NodeContainer pair34 (nodes.Get (3), nodes.Get (4));

devices.Add (pointToPoint.Install (pair34));

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

interfaces.Add (address.Assign (devices.Get (10)));

 

// Install the internet stack

InternetStackHelper stack;

stack.Install (nodes);

// Assign IP addresses to devices

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

{

Ipv4AddressHelper ipv4;

std::ostringstream subnet;

subnet << “10.1.” << (i / 2 + 1) << “.0”;

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

ipv4.Assign (NetDeviceContainer (devices.Get (i), devices.Get (i + 1)));

}

// Set up mobility model (optional)

MobilityHelper mobility;

Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();

positionAlloc->Add (Vector (50.0, 50.0, 0.0)); // Node 0 position

positionAlloc->Add (Vector (100.0, 50.0, 0.0)); // Node 1 position

positionAlloc->Add (Vector (150.0, 50.0, 0.0)); // Node 2 position

positionAlloc->Add (Vector (150.0, 100.0, 0.0)); // Node 3 position

positionAlloc->Add (Vector (50.0, 100.0, 0.0)); // Node 4 position

positionAlloc->Add (Vector (100.0, 100.0, 0.0)); // Node 5 position

mobility.SetPositionAllocator (positionAlloc);

mobility.SetMobilityModel (“ns3::ConstantPositionMobilityModel”);

mobility.Install (nodes);

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

uint16_t port = 9; // Port number for applications

// Install UDP Echo Server on node 0

UdpEchoServerHelper echoServer (port);

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

serverApps.Start (Seconds (1.0));

serverApps.Stop (Seconds (10.0));

// Install UDP Echo Clients on other nodes to communicate with node 0

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

{

UdpEchoClientHelper echoClient (interfaces.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 (i));

clientApps.Start (Seconds (2.0 + i)); // Stagger start times

clientApps.Stop (Seconds (10.0));

}

// 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 irregular-topology.cc.
  2. Build the script using waf:

./waf configure –enable-examples

./waf build

  1. Run the simulation:

./waf –run scratch/irregular-topology

Explanation of the Script

  • Node Creation: Creates six nodes for the irregular topology.
  • Point-to-Point Links: Manually configures point-to-point links between nodes to form an irregular topology. The connections are made in a way that does not follow any regular pattern.
  • Internet Stack: Installs the internet stack on all nodes.
  • IP Addressing: Assigns IP addresses to each link using different subnets for each pair of connected nodes.
  • Mobility Model: (Optional) Sets the position of nodes in a specific layout using ListPositionAllocator and ConstantPositionMobilityModel.
  • Applications: Sets up a UDP echo server on node 0 and UDP echo clients on other nodes to demonstrate communication between nodes.

The above given scripts and steps completely explained about the implementation process of irregular topology in ns3 and also the explanation given for the script to know how does the each function works.

If you tell us all about your parameters, we can help you compare Irregular Topology networks in ns3.