MANET with AODV protocol simulation

355 views
Skip to first unread message

kiran Nath

unread,
Jan 10, 2018, 7:17:30 AM1/10/18
to ns-3-users
I am new to ns-3.Can any one help me to simulate a MANET with 50 nodes.When I googled it I got the below given code.When I executed that I could see a grid of fixed nodes which are communicating by some links on NetAnim.But What I actually want is a Manet with randomly moving nodes.Anyone please help me.

#include "ns3/aodv-module.h"
#include "ns3/core-module.h"
#include "ns3/internet-module.h"
#include "ns3/mobility-module.h"
#include "ns3/netanim-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/v4ping-helper.h"
#include "ns3/wifi-module.h"
#include <cmath>
#include <iostream>

using namespace ns3;

/**
* \brief Test script.
*
* This script creates 1-dimensional grid topology and then ping last node from
* the first one:
*
* [10.0.0.1] <-- step --> [10.0.0.2] <-- step --> [10.0.0.3] <-- step -->
* [10.0.0.4]
*
* ping 10.0.0.4
*/
class AodvExample {
public:
AodvExample();
/// Configure script parameters, \return true on successful configuration
bool Configure(int argc, char **argv);
/// Run simulation
void Run();
/// Report results
void Report(std::ostream &os);

private:
// parameters
/// Number of nodes
uint32_t size;
/// Distance between nodes, meters
double step;
/// Simulation time, seconds
double totalTime;
/// Write per-device PCAP traces if true
bool pcap;
/// Print routes if true
bool printRoutes;

// network
NodeContainer nodes;
NetDeviceContainer devices;
Ipv4InterfaceContainer interfaces;

private:
void CreateNodes();
void CreateDevices();
void InstallInternetStack();
void InstallApplications();
};

int main(int argc, char **argv) {
AodvExample test;
if (!test.Configure(argc, argv))
NS_FATAL_ERROR("Configuration failed. Aborted.");

test.Run();
test.Report(std::cout);
return 0;
}

//-----------------------------------------------------------------------------
AodvExample::AodvExample()
: size(50), step(100), totalTime(10), pcap(true), printRoutes(true) {}

bool AodvExample::Configure(int argc, char **argv) {
// Enable AODV logs by default. Comment this if too noisy
// LogComponentEnable("AodvRoutingProtocol", LOG_LEVEL_ALL);

SeedManager::SetSeed(12345);
CommandLine cmd;

cmd.AddValue("pcap", "Write PCAP traces.", pcap);
cmd.AddValue("printRoutes", "Print routing table dumps.", printRoutes);
cmd.AddValue("size", "Number of nodes.", size);
cmd.AddValue("time", "Simulation time, s.", totalTime);
cmd.AddValue("step", "Grid step, m", step);

cmd.Parse(argc, argv);
return true;
}

void AodvExample::Run() {
// Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
// UintegerValue (1)); // enable rts cts all the time.
CreateNodes();
CreateDevices();
InstallInternetStack();
InstallApplications();

std::cout << "Starting simulation for " << totalTime << " s ...\n";

Simulator::Stop(Seconds(totalTime));

AnimationInterface anim("scratch/artichoke/aodv.xml");

//uint32_t urlImage = anim.AddResource("/home/fox/workspace/ns-allinone-3.26/ns-3.26/scratch/artichoke/page1_pic1.png");
uint32_t urlImage = anim.AddResource("/home/neverhooda/ns3/ns-allinone-3.26/ns-3.26/scratch/artichoke/page1_pic1.png");

for (uint32_t i = 0; i < size; ++i) {
Ptr<MobilityModel> mob = nodes.Get(i)->GetObject<MobilityModel>();
Vector pos = mob->GetPosition();
std::cout << "Node: " << i << " is at (" << pos.x << ", " << pos.y << ", " << pos.z << ")\n";
anim.SetConstantPosition(nodes.Get(i), pos.x, pos.y);
uint32_t nodeId = nodes.Get(i)->GetId();
anim.UpdateNodeImage(nodeId, urlImage);
anim.UpdateNodeSize (nodeId, 80.0, 80.0);
}

Simulator::Run();
Simulator::Destroy();
}

void AodvExample::Report(std::ostream &) {}

void AodvExample::CreateNodes() {
std::cout << "Creating " << (unsigned)size << " nodes " << step
<< " m apart.\n";
nodes.Create(size);
// Name nodes
for (uint32_t i = 0; i < size; ++i) {
std::ostringstream os;
os << "node-" << i;
Names::Add(os.str(), nodes.Get(i));
}
// Create static grid
MobilityHelper mobility;
mobility.SetPositionAllocator(
"ns3::GridPositionAllocator", "MinX", DoubleValue(0.0), "MinY",
DoubleValue(0.0), "DeltaX", DoubleValue(step), "DeltaY",
DoubleValue(step), "GridWidth", UintegerValue(5), "LayoutType",
StringValue("ColumnFirst")); // RowFirst
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
mobility.Install(nodes);
}

void AodvExample::CreateDevices() {
WifiMacHelper wifiMac;
wifiMac.SetType("ns3::AdhocWifiMac");
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default();
YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default();
wifiPhy.SetChannel(wifiChannel.Create());
WifiHelper wifi;
wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager", "DataMode",
StringValue("OfdmRate6Mbps"), "RtsCtsThreshold",
UintegerValue(0));
devices = wifi.Install(wifiPhy, wifiMac, nodes);

if (pcap) {
wifiPhy.EnablePcapAll(std::string("aodv"));
}
}

void AodvExample::InstallInternetStack() {
AodvHelper aodv;
// you can configure AODV attributes here using aodv.Set(name, value)
InternetStackHelper stack;
stack.SetRoutingHelper(aodv); // has effect on the next Install ()
stack.Install(nodes);
Ipv4AddressHelper address;
address.SetBase("10.0.0.0", "255.0.0.0");
interfaces = address.Assign(devices);

if (printRoutes) {
Ptr<OutputStreamWrapper> routingStream =
Create<OutputStreamWrapper>("aodv.routes", std::ios::out);
aodv.PrintRoutingTableAllAt(Seconds(8), routingStream);
}
}

void AodvExample::InstallApplications() {
V4PingHelper ping(interfaces.GetAddress(size - 1));
ping.SetAttribute("Verbose", BooleanValue(true));

ApplicationContainer p = ping.Install(nodes.Get(0));
p.Start(Seconds(0));
p.Stop(Seconds(totalTime) - Seconds(0.001));

// move node away
Ptr<Node> node = nodes.Get(size / 2);
Ptr<MobilityModel> mob = node->GetObject<MobilityModel>();
Simulator::Schedule(Seconds(totalTime / 3), &MobilityModel::SetPosition, mob,
Vector(1e2, 1e2, 1e2));
}

pdbarnes

unread,
Jan 12, 2018, 7:12:46 PM1/12/18
to ns-3-users
Please work your way through the tutorial from the beginning. There is lots of material on setting up mobility.

Peter
(Also please read the posting guidelines, specifically about attaching, not pasting, scripts.)

Message has been deleted

kiran Nath

unread,
Jan 13, 2018, 12:40:48 AM1/13/18
to ns-3-users
Thank you sir for your valuable advice,I implemented a MANET with random moving nodes by changing the mobility model in the basic aodv sample code as you mentioned.The code for the same is attaching here.Now  i want to simulate Black hole and wormHole attack in this system.For that what should I do?what are the changes should i make on this code?please help me.
aodv-1.cc
Reply all
Reply to author
Forward
0 new messages