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

How to Implement Network Intent in ns3

To implement the network intent in ns3, we have to create a system that mechanically enforced and allows the high-level network policies and goals (intent) that are specified in the network. Depends on the goals, behavior of the network is altered in the Software-Defined Networking (SDN) environment. Here’s a step-by-step process on how to implement network intent in ns3:

Step-by-Step Implementation

  1. Install ns3: Make sure to install the latest version of ns3 on your system.
  2. Define Network Intents: you have to execute the specified high-level intents. The intents are prioritizing specific traffic types, ensuring minimum bandwidth, or enforcing security policies.
  3. Set Up Network Topology: In ns3, create a network that contains nodes, links and network configurations.
  4. Implement Intent Translation and Enforcement: we have to translate the high-level goals into certain configurations and actions by developing mechanisms and impose those actions inside the ns3 simulation.
  5. Test and Validate Intents: Lastly, to examine and verify the network intents execution by running the simulation.

Detailed Implementation

  1. Install ns3: Keep an eye on the installation process.
  2. Define Network Intents: In this instance, we are prioritizing UDP traffic over TCP traffic by determining the simple intent.
  3.  Set Up Network Topology: Create an ns3 script that replicates the network 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/traffic-control-module.h”

using namespace ns3;

NS_LOG_COMPONENT_DEFINE(“NetworkIntentExample”);

void EnqueueTrace(Ptr<const QueueItem> item) {

NS_LOG_UNCOND(“Packet enqueued: ” << item->GetPacket()->GetUid());

}

void DequeueTrace(Ptr<const QueueItem> item) {

NS_LOG_UNCOND(“Packet dequeued: ” << item->GetPacket()->GetUid());

}

void DroppedTrace(Ptr<const QueueItem> item) {

NS_LOG_UNCOND(“Packet dropped: ” << item->GetPacket()->GetUid());

}

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

CommandLine cmd;

cmd.Parse(argc, argv);

NodeContainer nodes;

nodes.Create(4);

PointToPointHelper pointToPoint;

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

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

NetDeviceContainer devices;

devices = pointToPoint.Install(nodes.Get(0), nodes.Get(1));

devices.Add(pointToPoint.Install(nodes.Get(1), nodes.Get(2)));

devices.Add(pointToPoint.Install(nodes.Get(2), nodes.Get(3)));

InternetStackHelper stack;

stack.Install(nodes);

Ipv4AddressHelper address;

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

address.Assign(devices);

UdpEchoServerHelper echoServer(9);

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

serverApps.Start(Seconds(1.0));

serverApps.Stop(Seconds(10.0));

UdpEchoClientHelper echoClient(address.GetAddress(3), 9);

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

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

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

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

clientApps.Start(Seconds(2.0));

clientApps.Stop(Seconds(10.0));

// Install Traffic Control on devices

TrafficControlHelper tch;

tch.SetRootQueueDisc(“ns3::PfifoFastQueueDisc”);

tch.Install(devices);

// Trace packet enqueue, dequeue, and drop events

Ptr<QueueDisc> q = devices.Get(0)->GetObject<QueueDisc>();

q->TraceConnectWithoutContext(“Enqueue”, MakeCallback(&EnqueueTrace));

q->TraceConnectWithoutContext(“Dequeue”, MakeCallback(&DequeueTrace));

q->TraceConnectWithoutContext(“Drop”, MakeCallback(&DroppedTrace));

Simulator::Run();

Simulator::Destroy();

return 0;

}

Implement Intent Translation and Enforcement: Translate high-level goals into certain configurations and actions by creating a mechanism. Develop a mechanism to translate high-level intents into specific configurations and actions. In this sample, we have to prioritize the UDP traffic above TCP traffic. We can amend the queue disciplines and packet classifiers.

#include “ns3/traffic-control-helper.h”

#include “ns3/traffic-control-module.h”

#include “ns3/udp-header.h”

#include “ns3/tcp-header.h”

class UdpTcpClassifier : public ns3::PacketFilter {

public:

static TypeId GetTypeId() {

static TypeId tid = TypeId(“UdpTcpClassifier”)

.SetParent<ns3::PacketFilter>()

.SetGroupName(“TrafficControl”)

.AddConstructor<UdpTcpClassifier>();

return tid;

}

virtual bool CheckProtocol(ns3::Ptr<ns3::Packet> packet) const {

ns3::Ipv4Header ipv4Header;

packet->PeekHeader(ipv4Header);

uint8_t protocol = ipv4Header.GetProtocol();

return (protocol == ns3::UdpL4Protocol::PROT_NUMBER || protocol == ns3::TcpL4Protocol::PROT_NUMBER);

}

virtual int32_t Classify(ns3::Ptr<ns3::QueueDiscItem> item) const {

ns3::Ptr<ns3::Packet> packet = item->GetPacket();

ns3::Ipv4Header ipv4Header;

packet->PeekHeader(ipv4Header);

uint8_t protocol = ipv4Header.GetProtocol();

if (protocol == ns3::UdpL4Protocol::PROT_NUMBER) {

return 0; // High priority queue

} else if (protocol == ns3::TcpL4Protocol::PROT_NUMBER) {

return 1; // Low priority queue

}

return -1; // Drop packet if it doesn’t match any class

}

};

void InstallTrafficControl(NodeContainer &nodes) {

TrafficControlHelper tch;

tch.SetRootQueueDisc(“ns3::MultiQueueDisc”, “NQueues”, UintegerValue(2));

tch.AddPacketFilter(“ns3::UdpTcpClassifier”);

tch.Install(nodes);

}

Test and Validate Intents: Using custom classifier, we have to upgrade the simulation which contains the installation of traffic control.

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

CommandLine cmd;

cmd.Parse(argc, argv);

NodeContainer nodes;

nodes.Create(4);

PointToPointHelper pointToPoint;

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

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

NetDeviceContainer devices;

devices = pointToPoint.Install(nodes.Get(0), nodes.Get(1));

devices.Add(pointToPoint.Install(nodes.Get(1), nodes.Get(2)));

devices.Add(pointToPoint.Install(nodes.Get(2), nodes.Get(3)));

InternetStackHelper stack;

stack.Install(nodes);

Ipv4AddressHelper address;

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

address.Assign(devices);

UdpEchoServerHelper echoServer(9);

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

serverApps.Start(Seconds(1.0));

serverApps.Stop(Seconds(10.0));

UdpEchoClientHelper echoClient(address.GetAddress(3), 9);

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

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

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

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

clientApps.Start(Seconds(2.0));

clientApps.Stop(Seconds(10.0));

// Install Traffic Control with custom classifier

InstallTrafficControl(devices);

Simulator::Run();

Simulator::Destroy();

return 0;

}

Finally, we completely go through the script to help us to implement network intent in ns3 tool and its step-by-step installation process. We can guide you through any other information regarding this topic, if needed.

We have worked on all Software-Defined Networking (SDN) environment so if you face difficulties in finding out new topics on Implementation Network Intent in ns3tool we will serve you right.