How to Start VLAN Trunking Protocol Projects Using NS3

To start VLAN Trunking Protocol (VTP) in NS3 which is utilized to handle and broadcasting the VLAN sets up over switches within a network. While NS3 environment doesn’t directly support Layer 2 switching or VLANs, we can be replicated the behaviour of VLAN to utilize the following structured method:

Steps to Start VLAN Trunking Protocol (VTP) Project in NS3

  1. Understand VLAN Trunking Protocol (VTP)
  • VTP Overview:
    • VTP broadcasts VLAN configurations dynamically over a switches network.
    • VLAN Trunks allow traffic from several VLANs passing through a single link.
    • VTP makes simpler VLAN management within large networks.
  • Applications:
    • To replicate the VLAN management and trunking.
    • Focus on the impacts of VLAN set up changes on network performance.
  1. Set Up NS3
  1. Install NS3:

sudo apt update

sudo apt install g++ python3 git cmake

git clone https://gitlab.com/nsnam/ns-3-dev.git

cd ns-3-dev

./waf configure

./waf build

  1. Verify Installation:

./waf –run scratch/my-first

  1. Simulate VLAN and VTP in NS3

NS3 functions on Layer 3, but VLAN and VTP simulation is not supported directly. Yet, we can be simulated the VLAN functionality by:

  1. Using Separate IP Subnets:
    • Allocate the unique subnets signifying VLANs.
  2. Using Tagged Traffic:
    • To replicate the VLAN tagging to utilize application-layer packet headers.
  3. Manually Configuring Trunk Links:
    • Signify VLAN trunks using shared links among the nodes.
  1. Example: VLAN and VTP Simulation

Topology:

  • Three VLANs: VLAN 10, VLAN 20, VLAN 30.
  • Three Switches: To use NS3 nodes, three switches are simulated.
  • Two End Hosts for each VLAN.

Code:

#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”

using namespace ns3;

int main() {

// Create nodes (Switches and Hosts)

NodeContainer switches, hostsVlan10, hostsVlan20, hostsVlan30;

switches.Create(3);       // 3 switches

hostsVlan10.Create(2);    // 2 hosts in VLAN 10

hostsVlan20.Create(2);    // 2 hosts in VLAN 20

hostsVlan30.Create(2);    // 2 hosts in VLAN 30

// Create point-to-point links (representing VLAN trunks)

PointToPointHelper pointToPoint;

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

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

// Connect switches (trunk links)

NetDeviceContainer link1 = pointToPoint.Install(switches.Get(0), switches.Get(1));

NetDeviceContainer link2 = pointToPoint.Install(switches.Get(1), switches.Get(2));

// Connect hosts to switches

NetDeviceContainer vlan10Links, vlan20Links, vlan30Links;

vlan10Links.Add(pointToPoint.Install(hostsVlan10.Get(0), switches.Get(0)));

vlan10Links.Add(pointToPoint.Install(hostsVlan10.Get(1), switches.Get(0)));

vlan20Links.Add(pointToPoint.Install(hostsVlan20.Get(0), switches.Get(1)));

vlan20Links.Add(pointToPoint.Install(hostsVlan20.Get(1), switches.Get(1)));

vlan30Links.Add(pointToPoint.Install(hostsVlan30.Get(0), switches.Get(2)));

vlan30Links.Add(pointToPoint.Install(hostsVlan30.Get(1), switches.Get(2)));

// Install Internet stack

InternetStackHelper stack;

stack.Install(switches);

stack.Install(hostsVlan10);

stack.Install(hostsVlan20);

stack.Install(hostsVlan30);

// Assign IP addresses for VLANs

Ipv4AddressHelper ipv4;

ipv4.SetBase(“10.1.1.0”, “255.255.255.0”); // VLAN 10

ipv4.Assign(vlan10Links);

ipv4.SetBase(“10.1.2.0”, “255.255.255.0”); // VLAN 20

ipv4.Assign(vlan20Links);

ipv4.SetBase(“10.1.3.0”, “255.255.255.0”); // VLAN 30

ipv4.Assign(vlan30Links);

// Configure trunk link between switches

ipv4.SetBase(“192.168.1.0”, “255.255.255.0”);

ipv4.Assign(link1);

ipv4.SetBase(“192.168.2.0”, “255.255.255.0”);

ipv4.Assign(link2);

// Simulate traffic within VLANs

uint16_t port = 9;

UdpEchoServerHelper echoServer(port);

ApplicationContainer serverAppsVlan10 = echoServer.Install(hostsVlan10.Get(1));

ApplicationContainer serverAppsVlan20 = echoServer.Install(hostsVlan20.Get(1));

ApplicationContainer serverAppsVlan30 = echoServer.Install(hostsVlan30.Get(1));

serverAppsVlan10.Start(Seconds(1.0));

serverAppsVlan20.Start(Seconds(1.0));

serverAppsVlan30.Start(Seconds(1.0));

serverAppsVlan10.Stop(Seconds(10.0));

serverAppsVlan20.Stop(Seconds(10.0));

serverAppsVlan30.Stop(Seconds(10.0));

UdpEchoClientHelper echoClientVlan10(Ipv4Address(“10.1.1.2”), port);

UdpEchoClientHelper echoClientVlan20(Ipv4Address(“10.1.2.2”), port);

UdpEchoClientHelper echoClientVlan30(Ipv4Address(“10.1.3.2”), port);

echoClientVlan10.SetAttribute(“MaxPackets”, UintegerValue(5));

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

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

echoClientVlan20.SetAttribute(“MaxPackets”, UintegerValue(5));

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

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

echoClientVlan30.SetAttribute(“MaxPackets”, UintegerValue(5));

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

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

ApplicationContainer clientAppsVlan10 = echoClientVlan10.Install(hostsVlan10.Get(0));

ApplicationContainer clientAppsVlan20 = echoClientVlan20.Install(hostsVlan20.Get(0));

ApplicationContainer clientAppsVlan30 = echoClientVlan30.Install(hostsVlan30.Get(0));

clientAppsVlan10.Start(Seconds(2.0));

clientAppsVlan20.Start(Seconds(2.0));

clientAppsVlan30.Start(Seconds(2.0));

clientAppsVlan10.Stop(Seconds(10.0));

clientAppsVlan20.Stop(Seconds(10.0));

clientAppsVlan30.Stop(Seconds(10.0));

// Run simulation

Simulator::Run();

Simulator::Destroy();

return 0;

}

  1. Key Features of the Simulation
  1. VLAN Isolation:
    • Nodes in various VLANs cannot directly interact.
    • VLAN trunks contain traffic among the switches.
  2. Traffic Control:
    • We need to experiment an inter-VLAN interaction by setting static routes or ACLs.
  3. VTP Simulation:
    • We can broadcast VLAN sets up by executing a basic message-passing mechanism among the switches.

In conclusion, we learned the overall detail that is a must to understand the VLAN Trunking Protocol (VTP) and their simulation using NS3 environment. We will provide the extra information of VTP in case you need.

Our team is here to help you kick off your VLAN Trunking Protocol Projects using NS3 with a comprehensive step-by-step guide, ensuring you can start and simulate your work efficiently. Reach out to us via email, and we will provide you with the latest project topics in this field. Let us handle your project performance, as our experts specialize in Layer 2 switching and VLANs, guaranteeing you the best results.