To Implement VANET (Vehicular Ad-hoc Network) protocols in ns-3, network topology has to be set, should configure the mobility models specific to vehicles. ns3 also supports ad-hoc routing protocols like AODV and DSR for simulation process. So, we have to select an appropriate routing protocol for simulating VANET.
Below given steps will help in setting VANET simulation in ns3 using AODV protocol:
Step-by-Step Guide to Implementing VANET Protocols in ns3:
- Set Up Your Environment
Ensure that ns3 is installed.
- Create a New ns-3 Script
Create a new simulation script in the scratch directory of your ns-3 installation. For example, create a file named vanet-simulation.cc.
cd ns-3.xx
cd scratch
touch vanet-simulation.cc
3. Include Necessary Headers
In your vanet-simulation.cc file, include the necessary headers for your simulation.
#include “ns3/core-module.h”
#include “ns3/network-module.h”
#include “ns3/internet-module.h”
#include “ns3/mobility-module.h”
#include “ns3/wifi-module.h”
#include “ns3/aodv-module.h”
#include “ns3/applications-module.h”
using namespace ns3;
4. Set Up the Network Topology
Define the network topology. We will create a basic topology with several vehicles (nodes) using a mobility model suitable for VANETs and use AODV as the routing protocol.
int main (int argc, char *argv[])
{
CommandLine cmd;
cmd.Parse (argc, argv);
NodeContainer vehicles;
vehicles.Create (10);
// Set up WiFi
WifiHelper wifi;
wifi.SetStandard (WIFI_PHY_STANDARD_80211p);
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
wifiPhy.SetChannel (wifiChannel.Create ());
NqosWaveMacHelper wifiMac = NqosWaveMacHelper::Default ();
NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, vehicles);
// Set up mobility model
MobilityHelper mobility;
Ptr<UniformRandomVariable> random = CreateObject<UniformRandomVariable> ();
mobility.SetMobilityModel (“ns3::RandomWaypointMobilityModel”,
“Speed”, StringValue (“ns3::ConstantRandomVariable[Constant=20.0]”),
“Pause”, StringValue (“ns3::ConstantRandomVariable[Constant=0.0]”),
“PositionAllocator”,StringValue (“ns3::RandomRectanglePositionAllocator[MinX=0.0|MinY=0.0|MaxX=500.0|MaxY=500.0]”));
mobility.Install (vehicles);
// Install the internet stack on vehicles
InternetStackHelper stack;
AodvHelper aodv;
stack.SetRoutingHelper (aodv);
stack.Install (vehicles);
// Assign IP addresses to the devices
Ipv4AddressHelper address;
address.SetBase (“10.1.1.0”, “255.255.255.0”);
Ipv4InterfaceContainer interfaces = address.Assign (devices);
// Set up applications (e.g., a UDP echo server and client)
UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (vehicles.Get (9));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (20.0));
UdpEchoClientHelper echoClient (interfaces.GetAddress (9), 9);
echoClient.SetAttribute (“MaxPackets”, UintegerValue (1));
echoClient.SetAttribute (“Interval”, TimeValue (Seconds (1.0)));
echoClient.SetAttribute (“PacketSize”, UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (vehicles.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (20.0));
// Enable tracing
AsciiTraceHelper ascii;
wifiPhy.EnableAsciiAll (ascii.CreateFileStream (“vanet-simulation.tr”));
wifiPhy.EnablePcapAll (“vanet-simulation”);
// Run the simulation
Simulator::Run ();
Simulator::Destroy ();
return 0;
}
5. Build and Run the Simulation
After writing your script, you need to build and run it.
./waf build
./waf –run scratch/vanet-simulation
6. Analyze the Results
After running the simulation, you can analyze the results using the generated trace files (vanet-simulation.tr and vanet-simulation-0-0.pcap).
Complete Example Script for VANET with AODV
Here’s a complete example script for reference:
#include “ns3/core-module.h”
#include “ns3/network-module.h”
#include “ns3/internet-module.h”
#include “ns3/mobility-module.h”
#include “ns3/wifi-module.h”
#include “ns3/aodv-module.h”
#include “ns3/applications-module.h”
using namespace ns3;
int main (int argc, char *argv[])
{
CommandLine cmd;
cmd.Parse (argc, argv);
NodeContainer vehicles;
vehicles.Create (10);
// Set up WiFi
WifiHelper wifi;
wifi.SetStandard (WIFI_PHY_STANDARD_80211p);
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
wifiPhy.SetChannel (wifiChannel.Create ());
NqosWaveMacHelper wifiMac = NqosWaveMacHelper::Default ();
NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, vehicles);
// Set up mobility model
MobilityHelper mobility;
Ptr<UniformRandomVariable> random = CreateObject<UniformRandomVariable> ();
mobility.SetMobilityModel (“ns3::RandomWaypointMobilityModel”,
“Speed”, StringValue (“ns3::ConstantRandomVariable[Constant=20.0]”),
“Pause”, StringValue (“ns3::ConstantRandomVariable[Constant=0.0]”),
“PositionAllocator”,StringValue (“ns3::RandomRectanglePositionAllocator[MinX=0.0|MinY=0.0|MaxX=500.0|MaxY=500.0]”));
mobility.Install (vehicles);
// Install the internet stack on vehicles
InternetStackHelper stack;
AodvHelper aodv;
stack.SetRoutingHelper (aodv);
stack.Install (vehicles);
// Assign IP addresses to the devices
Ipv4AddressHelper address;
address.SetBase (“10.1.1.0”, “255.255.255.0”);
Ipv4InterfaceContainer interfaces = address.Assign (devices);
// Set up applications (e.g., a UDP echo server and client)
UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (vehicles.Get (9));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (20.0));
UdpEchoClientHelper echoClient (interfaces.GetAddress (9), 9);
echoClient.SetAttribute (“MaxPackets”, UintegerValue (1));
echoClient.SetAttribute (“Interval”, TimeValue (Seconds (1.0)));
echoClient.SetAttribute (“PacketSize”, UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (vehicles.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (20.0));
// Enable tracing
AsciiTraceHelper ascii;
wifiPhy.EnableAsciiAll (ascii.CreateFileStream (“vanet-simulation.tr”));
wifiPhy.EnablePcapAll (“vanet-simulation”);
// Run the simulation
Simulator::Run ();
Simulator::Destroy ();
return 0;
}
Finally, we had successfully set up the VANET protocol by configuring the mobility models specifically to vehicles and using the AODV routing protocol for the simulation process in ns3.We carry out all types of projects with coding support for VANET protocol.