How to Develop Bellman Ford Routing Projects Using NS3

To develop Bellman-Ford Algorithm in NS3 platform which is a distance-vector routing protocol that frequently utilised for determining the shortest paths within a network. Different Dijkstra’s algorithm, Bellman-Ford will manage the negative weight edges and functions in distributed routing scenarios effectively.

Steps to Develop Bellman-Ford Routing Projects in NS3

  1. Install NS3

Before proceeding, we make sure that NS3 is installed on the computer

sudo apt update

sudo apt install git g++ python3 cmake make

git clone

cd ns-3-dev

./ns3 configure –enable-examples –enable-tests

./ns3 build

  1. Create Network Topology

We will design a basic network topology in which every single node executes the distance-vector routing for replicating the Bellman-Ford Routing.

Example: Creating a 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/ipv4-global-routing-helper.h”

using namespace ns3;

int main()

{

NodeContainer nodes;

nodes.Create(5); // Create 5 nodes

PointToPointHelper p2p;

p2p.SetDeviceAttribute(“DataRate”, StringValue(“1Mbps”));

p2p.SetChannelAttribute(“Delay”, StringValue(“5ms”));

NetDeviceContainer devices;

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

devices = p2p.Install(nodes.Get(1), nodes.Get(2));

devices = p2p.Install(nodes.Get(2), nodes.Get(3));

devices = p2p.Install(nodes.Get(3), nodes.Get(4));

InternetStackHelper stack;

stack.Install(nodes);

Ipv4AddressHelper address;

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

address.Assign(devices);

// Enable Global Routing (Bellman-Ford works with distance vector routing)

Ipv4GlobalRoutingHelper::PopulateRoutingTables();

Simulator::Run();

Simulator::Destroy();

return 0;

}

  1. Implement Bellman-Ford Algorithm

Bellman-Ford Algorithm Implementation

#include <iostream>

#include <vector>

#include <limits>

#define INF std::numeric_limits<int>::max()

struct Edge

{

int src, dest, weight;

};

void bellmanFord(std::vector<Edge> &edges, int numNodes, int src)

{

std::vector<int> dist(numNodes, INF);

dist[src] = 0;

for (int i = 0; i < numNodes – 1; i++)

{

for (auto edge : edges)

{

if (dist[edge.src] != INF && dist[edge.src] + edge.weight < dist[edge.dest])

{

dist[edge.dest] = dist[edge.src] + edge.weight;

}

}

}

// Detect Negative Cycles

for (auto edge : edges)

{

if (dist[edge.src] != INF && dist[edge.src] + edge.weight < dist[edge.dest])

{

std::cout << “Negative weight cycle detected!” << std::endl;

return;

}

}

std::cout << “Node\tDistance from Source\n”;

for (int i = 0; i < numNodes; i++)

{

std::cout << i << “\t” << dist[i] << std::endl;

}

}

int main()

{

std::vector<Edge> edges = {

{0, 1, 6}, {0, 2, 7}, {1, 2, 8}, {1, 3, 5},

{1, 4, -4}, {2, 3, -3}, {3, 1, -2}, {4, 3, 9}};

int source = 0;

bellmanFord(edges, 5, source);

return 0;

}

  1. Use Bellman-Ford in NS3

We can utilize the RIP (Routing Information Protocol) in NS3 for allowing distance-vector routing such as Bellman-Ford.

Enable RIP Routing in NS3

#include “ns3/rip-helper.h”

RipHelper rip;

stack.SetRoutingHelper(rip);

stack.Install(nodes);

  1. Run the Simulation

Subsequently, we need to build the simulation script and run it in NS3:

./ns3 run bellman-ford-routing

  1. Performance Analysis

Examine the network performance with metrics like Throughput, Packet Delivery Ratio (PDR), and Delay using FlowMonitor:

#include “ns3/flow-monitor-module.h”

FlowMonitorHelper flowmon;

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

Simulator::Stop(Seconds(10.0));

Simulator::Run();

monitor->SerializeToXmlFile(“bellman_ford_results.xml”, true, true);

Simulator::Destroy();

  1. Advantages of Bellman-Ford Routing

✅ This routing effectively functions for distributed distance-vector routing

It processes negative weight edges

✅ Appropriate for dynamic networks such as MANETs

The above procedure will guide you through the entire information of Bellman Ford Routing projects and how to develop and examine it in the NS3 simulator with code snippets. We will offer anything regarding this implementation based on the requirements.