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

How to Implement Software Defined Wide Area Network in ns3

To implement a Software Defined wide Area Network (SD-WAN) in ns-3 to set-up a network in which the control plane is decoupled from the data plane, allowing for centralized management and dynamic configuration of the network. This involves a central controller which manages the network nodes (routers/switches) and helps in directing traffics based on predefined function. Below step-by-step given to guide on implementing SD-WAN in ns-3.

Step-by-Step Guide to Implement SD-WAN in ns-3

  1. Set Up Your Development Environment
  1. Install ns-3:
    • Follow the official ns-3 installation guide.
  2. Install Required Modules:
    • Ensure you have all necessary ns-3 modules installed, such as Internet, Point-to-Point, and Applications modules.
  1. Create a Basic SD-WAN Simulation Script

Here’s an example script to set up a basic SD-WAN scenario using ns-3:

#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/flow-monitor-module.h”

using namespace ns3;

NS_LOG_COMPONENT_DEFINE (“SdWanExample”);

 

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

{

  // Set simulation parameters

  double simTime = 20.0; // Simulation time in seconds

  uint32_t numBranches = 3;

  uint32_t numNodesPerBranch = 3;

  CommandLine cmd;

  cmd.AddValue(“simTime”, “Simulation time”, simTime);

  cmd.AddValue(“numBranches”, “Number of branch offices”, numBranches);

  cmd.AddValue(“numNodesPerBranch”, “Number of nodes per branch”, numNodesPerBranch);

  cmd.Parse(argc, argv);

  // Create central controller node

  NodeContainer controllerNode;

  controllerNode.Create(1);

  // Create branch nodes

  std::vector<NodeContainer> branchNodes(numBranches);

  for (uint32_t i = 0; i < numBranches; ++i)

  {

    branchNodes[i].Create(numNodesPerBranch);

  }

  // Create Point-to-Point links between branches and the controller

  PointToPointHelper pointToPoint;

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

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

  std::vector<NetDeviceContainer> branchDevices(numBranches);

  NetDeviceContainer controllerDevices;

  for (uint32_t i = 0; i < numBranches; ++i)

  {

    for (uint32_t j = 0; j < numNodesPerBranch; ++j)

    {

      NetDeviceContainerlink=pointToPoint.Install(branchNodes[i].Get(j), controllerNode.Get(0));

      branchDevices[i].Add(link.Get(0));

      controllerDevices.Add(link.Get(1));

    }

  }

  // Install the Internet stack on all nodes

  InternetStackHelper stack;

  stack.Install(controllerNode);

  for (uint32_t i = 0; i < numBranches; ++i)

  {

    stack.Install(branchNodes[i]);

  }

  // Assign IP addresses to devices

  Ipv4AddressHelper address;

  for (uint32_t i = 0; i < numBranches; ++i)

  {

    std::ostringstream subnet;

    subnet << “10.1.” << i + 1 << “.0”;

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

    address.Assign(branchDevices[i]);

  }

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

  address.Assign(controllerDevices);

  // Create applications

  uint16_t port = 8080;

  // Install a UDP echo server on the controller node

  UdpEchoServerHelper echoServer(port);

  ApplicationContainer serverApp = echoServer.Install(controllerNode.Get(0));

  serverApp.Start(Seconds(1.0));

  serverApp.Stop(Seconds(simTime));

  // Install a UDP echo client on each node in each branch

  for (uint32_t i = 0; i < numBranches; ++i)

  {

    for (uint32_t j = 0; j < numNodesPerBranch; ++j)

    {

      UdpEchoClientHelperechoClient(controllerNode.Get(0)->GetObject<Ipv4>()->GetAddress(1, 0).GetLocal(), port);

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

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

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

      ApplicationContainer clientApp = echoClient.Install(branchNodes[i].Get(j));

      clientApp.Start(Seconds(2.0));

      clientApp.Stop(Seconds(simTime));

    }

  }

  // Enable Flow Monitor

  FlowMonitorHelper flowmon;

  Ptr<FlowMonitor> monitor = flowmon.InstallAll();

  // Enable tracing

  pointToPoint.EnablePcapAll(“sd-wan-example”);

  // Run the simulation

  Simulator::Stop(Seconds(simTime));

  Simulator::Run();

  // Print flow monitor statistics

  monitor->SerializeToXmlFile(“sd-wan-flowmon.xml”, true, true);

  Simulator::Destroy();

  return 0;

}

Explanation of the Script

Here we have enlightened the basic steps of setting up SD-WAN in ns-3:

  1. Include Necessary Headers:
    • Include headers for ns-3 core, network, internet, point-to-point, applications, and flow monitor modules.
  2. Set Simulation Parameters:
    • Define the simulation time, number of branch offices, and number of nodes per branch.
  3. Create Nodes:
    • Create a central controller node and branch nodes using NodeContainer.
  4. Set Up Point-to-Point Links:
    • Configure the point-to-point links with a data rate and delay using PointToPointHelper.
    • Install the point-to-point devices on the nodes.
  5. Install Internet Stack:
    • Install the Internet stack on all nodes using InternetStackHelper.
  6. Assign IP Addresses:
    • Assign IP addresses to the devices using Ipv4AddressHelper.
  7. Create Applications:
    • Install a UDP echo server on the controller node.
    • Install UDP echo clients on each node in each branch to request services from the controller.
  8. Enable Flow Monitor:
    • Install and configure the Flow Monitor to collect and analyze network performance statistics.
  9. Enable Tracing:
    • Enable pcap tracing to capture packet traces for analysis.
  10. Run the Simulation:
    • Set the simulation stop time, run the simulation, print flow monitor statistics, and clean up using Simulator: Stop, Simulator: Run, and Simulator: Destroy.

Further Enhancements

  1. Dynamic Traffic Management:
    • Implement dynamic traffic management policies to direct traffic based on network conditions.
  2. Advanced Network Topologies:
    • Implement more intricate network topologies with multiple branches and inter-branch communication.
  3. Quality of Service (QoS):
    • Implement QoS mechanisms to prioritize traffic and ensure timely delivery.
  4. Network Performance Metrics:
    • Gather and analyze additional performance metrics such as throughput, latency, packet delivery ratio, and resource utilization.
  5. Security:
    • Implement security mechanisms to guard data and services within the SD-WAN.
  6. Fault Tolerance and Resilience:
    • We Implement and assess fault tolerance mechanisms and resilience strategies for SD-WAN.

      Finally, we have discussed about the process of implementing the SD-WAN in ns-3. Get all types of network nodes (routers/switches) carried on by our experts.