assignment 3.pdf

15
Department of Electrical Engineering Sharif University of Technology Data Networks Dr. M. R. Pakravan 1 Experimenting Network Layer with NS3 Goals 1) Become familiar with Network Simulator 3 2) Simulate routing algorithm in fixed wired network 3) Simulate routing algorithms for Ad hoc networks Introduction The network layer is concerned with getting packets from the source all the way to the destination. Getting to the destination may require making many hops at intermediate routers along the way. This function clearly contrasts with that of the data link layer, which has the more modest goal of just moving frames from one end of a wire to the other. To achieve its goals, the network layer must know about the topology of the communication subnet (i.e., the set of all routers) and choose appropriate paths through it. It must also take care to choose routes to avoid overloading some of the communication lines and routers while leaving others idle. It is up to the network layer to deal with them. A router in the network needs to be able to look at a packet’s destination address and then determine the output port which is the best choice to get the packet to that destination. The router makes this decision by consulting a forwarding table. Routing algorithms are required to build the routing tables and hence forwarding tables. The basic problem of routing is to find the lowest-cost path between any two nodes, where the cost of a path equals the sum of the costs of all the edges that make up the path. Routing is achieved in most practical networks by running routing protocols among the nodes. The protocols provide a distributed, dynamic way to solve the problem of finding the lowest-cost path in the presence of link and node failures, and changing edge costs. In this exercise you will see some NS3 features to simulate routing.

Upload: park100

Post on 17-Jul-2016

46 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

1

Experimenting Network Layer

with NS3

Goals

1) Become familiar with Network Simulator 3

2) Simulate routing algorithm in fixed wired network

3) Simulate routing algorithms for Ad hoc networks

Introduction

The network layer is concerned with getting packets from the source all the way to the destination.

Getting to the destination may require making many hops at intermediate routers along the way. This

function clearly contrasts with that of the data link layer, which has the more modest goal of just moving

frames from one end of a wire to the other.

To achieve its goals, the network layer must know about the topology of the communication subnet (i.e.,

the set of all routers) and choose appropriate paths through it. It must also take care to choose routes to

avoid overloading some of the communication lines and routers while leaving others idle. It is up to the

network layer to deal with them.

A router in the network needs to be able to look at a packet’s destination address and then determine

the output port which is the best choice to get the packet to that destination. The router makes this

decision by consulting a forwarding table. Routing algorithms are required to build the routing tables and

hence forwarding tables.

The basic problem of routing is to find the lowest-cost path between any two nodes, where the cost of a

path equals the sum of the costs of all the edges that make up the path.

Routing is achieved in most practical networks by running routing protocols among the nodes. The

protocols provide a distributed, dynamic way to solve the problem of finding the lowest-cost path in the

presence of link and node failures, and changing edge costs. In this exercise you will see some NS3

features to simulate routing.

Page 2: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

2

I) Routing in Fixed wired Networks

In this part we want to run a simulation to investigate the routing algorithm in the following topology. The

topology is the same as the example, the sink tree of which is calculated in the class based on Dijkstra’s

shortest path algorithm.

8

9

A

E B

CD

I H

G

F

J

First thing you should know that NS3 code is in C++ syntax. In fact NS3 is a library for C++ .It consists of

several modules for different parts of network simulation. When you want to do a simulation you include

the modules you need and then you write your code.

For this part add these libraries:

#include "ns3/core-module.h"

#include "ns3/network-module.h"

#include "ns3/internet-module.h"

#include "ns3/point-to-point-module.h"

#include "ns3/netanim-module.h"

#include "ns3/applications-module.h"

#include "ns3/animation-interface.h"

#include "ns3/point-to-point-layout-module.h"

#include "ns3/ipv4-static-routing-helper.h"

Page 3: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

3

#include "ns3/ipv4-list-routing-helper.h"

#include "ns3/ipv4-global-routing-helper.h"

#include "ns3/flow-monitor.h"

#include "ns3/flow-monitor-helper.h"

#include "ns3/flow-monitor-module.h"

#include <iostream>

#include <fstream>

#include <vector>

#include <string>

Next line will show that this project is implemented in a C++ namespace called ns3. “using” statement

introduces the ns-3 namespace into the current (global) declarative region. This is a fancy way of

saying that after this declaration, you will not have to type ns3:: scope resolution operator before all of

the ns-3 code in order to use it.

using namespace ns3;

The next line enables you in showing some messages while running the code:

NS_LOG_COMPONENT_DEFINE ("Lab3_part1");

Now you can start the main function of your program.

int main (int argc, char *argv[]) { //add your codes here }

First we declare some parameters for our simulation. You should write all other codes on your main

function.

uint32_t PacketSize = 512; // bytes std::string DataRate ("1Mbps"); uint16_t num_Nodes = 10; uint16_t UDPport = 9; bool tracing = false;

“CommandLine” object allows the user to override any of the defaults at run-time:

Page 4: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

4

CommandLine cmd; cmd.AddValue ("PacketSize", "size of application packet sent", PacketSize); cmd.AddValue ("DataRate", "rate of pacekts sent", DataRate); cmd.AddValue ("tracing", "turn on ascii and pcap tracing", tracing); cmd.Parse (argc, argv);

Now you should configure an on/off application to generate data. Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue(PacketSize)); Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue (DataRate)); Config::SetDefault ( "ns3::Ipv4GlobalRouting::RespondToInterfaceEvents",BooleanValue(true));

Now enable Packet Meta data for animator and the name of file for animation output:

ns3::PacketMetadata::Enable();

std::string animFile = "lab3_part1.xml" ;

Now let’s create the network topology. Network nodes are stored in a container class called

NodeContainer.

NodeContainer nodes; nodes.Create (num_Nodes);

Now you should group nodes to make links between them.

NodeContainer AB = NodeContainer (nodes.Get (0), nodes.Get (1)); NodeContainer BC = NodeContainer (nodes.Get (1), nodes.Get (2)); NodeContainer CD = NodeContainer (nodes.Get (2), nodes.Get (3)); NodeContainer DE = NodeContainer (nodes.Get (3), nodes.Get (4)); NodeContainer EA = NodeContainer (nodes.Get (4), nodes.Get (0)); NodeContainer FH = NodeContainer (nodes.Get (5), nodes.Get (7)); NodeContainer GI = NodeContainer (nodes.Get (6), nodes.Get (8)); NodeContainer HJ = NodeContainer (nodes.Get (7), nodes.Get (9)); NodeContainer IF = NodeContainer (nodes.Get (8), nodes.Get (5)); NodeContainer JG = NodeContainer (nodes.Get (9), nodes.Get (6)); NodeContainer AF = NodeContainer (nodes.Get (0), nodes.Get (5)); NodeContainer BG = NodeContainer (nodes.Get (1), nodes.Get (6)); NodeContainer CH = NodeContainer (nodes.Get (2), nodes.Get (7)); NodeContainer DI = NodeContainer (nodes.Get (3), nodes.Get (8)); NodeContainer EJ = NodeContainer (nodes.Get (4), nodes.Get (9));

Now you should assign bandwidth and delay to each link.

PointToPointHelper p2p; p2p.SetDeviceAttribute ("DataRate", StringValue ("1Mbps"));

Page 5: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

5

p2p.SetChannelAttribute ("Delay", StringValue ("10ms")); NetDeviceContainer dAB = p2p.Install (AB);

Do it for other links with the values like link AB.

After that we should set Layer 3 settings. To implement ipv4 easily we use InternetStackHelper. This

helper uses static routing as its first priority algorithm for routing; therefore, we redefine the priority:

NS_LOG_INFO("Setting routing protocols"); Ipv4StaticRoutingHelper staticRouting; Ipv4GlobalRoutingHelper globalRouting; Ipv4ListRoutingHelper list; list.Add(staticRouting,0); list.Add(globalRouting,10); // Install network stacks on the nodes InternetStackHelper internet; internet.SetRoutingHelper(list); internet.Install(nodes);

Now you should assign IP to each node for routing and also assign the metric of each link to it.

Ipv4AddressHelper ipv4; ipv4.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer iAB = ipv4.Assign (dAB); iAB.SetMetric(0,7); iAB.SetMetric(1,7); ipv4.SetBase ("10.1.2.0", "255.255.255.0"); Ipv4InterfaceContainer iBC = ipv4.Assign (dBC); iBC.SetMetric(0,4); iBC.SetMetric(1,4); ipv4.SetBase ("1.1.3.0", "255.255.255.0"); Ipv4InterfaceContainer iCD = ipv4.Assign (dCD); iCD.SetMetric(0,6); iCD.SetMetric(1,6); ipv4.SetBase ("10.1.4.0", "255.255.255.0"); Ipv4InterfaceContainer iDE = ipv4.Assign (dDE); iDE.SetMetric(0,3); iDE.SetMetric(1,3); ipv4.SetBase ("10.1.5.0", "255.255.255.0"); Ipv4InterfaceContainer iEA = ipv4.Assign (dEA); iEA.SetMetric(0,3); iEA.SetMetric(1,3); ipv4.SetBase ("10.1.6.0", "255.255.255.0"); Ipv4InterfaceContainer iFH = ipv4.Assign (dFH); iFH.SetMetric(0,5);

Page 6: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

6

iFH.SetMetric(1,5); ipv4.SetBase ("10.1.7.0", "255.255.255.0"); Ipv4InterfaceContainer iGI = ipv4.Assign (dGI); iGI.SetMetric(0,3); iGI.SetMetric(1,3); ipv4.SetBase ("10.1.8.0", "255.255.255.0"); Ipv4InterfaceContainer iHJ = ipv4.Assign (dHJ); iHJ.SetMetric(0,2); iHJ.SetMetric(1,2); ipv4.SetBase ("10.1.9.0", "255.255.255.0"); Ipv4InterfaceContainer iIF = ipv4.Assign (dIF); iIF.SetMetric(0,7); iIF.SetMetric(1,7); ipv4.SetBase ("10.1.10.0", "255.255.255.0"); Ipv4InterfaceContainer iJG = ipv4.Assign (dJG); iJG.SetMetric(0,6); iJG.SetMetric(1,6); ipv4.SetBase ("10.1.11.0", "255.255.255.0"); Ipv4InterfaceContainer iAF = ipv4.Assign (dAF); iAF.SetMetric(0,8); iAF.SetMetric(1,8); ipv4.SetBase ("10.1.12.0", "255.255.255.0"); Ipv4InterfaceContainer iBG = ipv4.Assign (dBG); iBG.SetMetric(0,3); iBG.SetMetric(1,3); ipv4.SetBase ("10.1.13.0", "255.255.255.0"); Ipv4InterfaceContainer iCH = ipv4.Assign (dCH); iCH.SetMetric(0,5); iCH.SetMetric(1,5); ipv4.SetBase ("10.1.14.0", "255.255.255.0"); Ipv4InterfaceContainer iDI = ipv4.Assign (dDI); iDI.SetMetric(0,2); iDI.SetMetric(1,2); ipv4.SetBase ("10.1.15.0", "255.255.255.0"); Ipv4InterfaceContainer iEJ = ipv4.Assign (dEJ); iEJ.SetMetric(0,6); iEJ.SetMetric(1,6);

Now, we add the following code to initialize routing database and set up the routing tables in the nodes:

Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

Now we want to show how to install UDP application on node A and D. First, copy the following code:

Page 7: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

7

PacketSinkHelper UDPsink ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), UDPport)); ApplicationContainer App; NodeContainer SourceNode = NodeContainer (nodes.Get (0));

NodeContainer SinkNode = NodeContainer (nodes.Get (6));

Where instead of source node and sink node above (0 and 6), you should insert the two last non-equal digits

of your student ID.

To Create a UDP packet sink to receive these packets use the following codes:

App = UDPsink.Install (SinkNode); App.Start (Seconds (0.0)); App.Stop (Seconds (10.0)); Address Sink_Address(InetSocketAddress(iHD.GetAddress (1), UDPport));

To Create a UDP packet source to send these packets type the following codes:

OnOffHelper UDPsource ("ns3::UdpSocketFactory", Sink_Address); UDPsource.SetAttribute ("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=1]")); UDPsource.SetAttribute ("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0]")); App = UDPsource.Install(SourceNode); App.Start (Seconds (1.0)); App.Stop (Seconds (10.0));

You should determine your nodes places for NetAnim. Do it with these codes:

AnimationInterface anim (animFile); Ptr<Node> n = nodes.Get (0); anim.SetConstantPosition (n, 100, 10); n = nodes.Get (1); anim.SetConstantPosition (n, 187, 73); n = nodes.Get (2); anim.SetConstantPosition (n, 154, 172); n = nodes.Get (3); anim.SetConstantPosition (n, 47, 172); n = nodes.Get (4); anim.SetConstantPosition (n, 14, 73); n = nodes.Get (5); anim.SetConstantPosition (n, 100, 56); n = nodes.Get (6);

Page 8: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

8

anim.SetConstantPosition (n, 143, 86); n = nodes.Get (7); anim.SetConstantPosition (n, 127, 136); n = nodes.Get (8); anim.SetConstantPosition (n, 73, 136); n = nodes.Get (9); anim.SetConstantPosition (n, 56, 86);

NS3 has two types of text output: Pcap files which are standard files in network programs. You can read

them with “wireshark” or “winpcap”. The second type is NS3’s trace files that you can parse it yourself (in

MATLAB for example).

if (tracing == true) { AsciiTraceHelper ascii; p2p.EnableAsciiAll (ascii.CreateFileStream ("Lab3_part1.tr")); p2p.EnablePcap ("Lab3_part1"); }

To print routing tables you should add the following codes:

Ptr<OutputStreamWrapper> stream1 = Create<OutputStreamWrapper> ("Table2", std::ios::out); Ipv4GlobalRoutingHelper helper2; helper2.PrintRoutingTableAllAt(Seconds(2.0),stream1);

And the last thing to do is to define the simulation time and run the simulation. After everything is done,

we destroy the simulator object we have created, and then end the main function.

Simulator::Stop (Seconds (10.0)); Simulator::Run (); Simulator::Destroy (); return 0; }

To run the simulation save the code with “.cc” extension in “scratch” folder in ns3 directory. Then open a

terminal and cd to ns-allinone-3.x/ns-3.x/ and enter:

./waf –run “scratch/myfile” (without .cc)

Do the simulation and compare the result with what calculated in the class.

Now try to change the metric of an arbitrary link, such that the path created by Dijksta's shortest path

aloghrithm changes. Again do the simulation and investigate how the path for sending packets has been

Page 9: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

9

changed.

In all above parts, you should take some snapshots from NetAnim to compare the results obtained by

simulation with what you calculate manually by the method mentioned in the class.

To see .xml output file with NetAnim open a terminal and cd to the netanim folder (cd netanim) and enter:

./NetAnim

A program will be opened and then click on ‘Open XML trace file’ and select the .xml output of your program.

You can find all of the outputs of the simulation such as trace file, routing table, .xml file and pcap files in

the following folder:

ns-allinone-3.x/ns-3.x/

II) Routing in Ad hoc networks

In this part, we want to analyze the routing in the ad hoc networks. These networks are quite different

from fixed wired network. What makes ad hoc networks different from wired networks is that all the usual

rules about fixed topologies, fixed and known neighbors, fixed relationship between IP address and

location are not more applicable. Routers can come and go or appear in new places at the drop of a bit.

With a wired network, if a router has a valid path to some destination, that path continues to be valid

indefinitely (barring a failure somewhere in the system). With an ad hoc network, the topology may be

changing all the time, so desirability and even validity of paths can change spontaneously, without

warning. Needless to say, these circumstances make routing in ad hoc networks quite different from

routing in their fixed counterparts.

A variety of routing algorithms for ad hoc networks have been proposed. In this part, we want to become

familiar with OLSR, AODV and DSDV routing algorithms. To do so, we consider the following topology in

which each node only has access to its neighbors.

Page 10: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

10

0 1

2 10

6 7

8 9

3 4

5

Due to the wireless nature of the topology, we cannot use the codes mentioned in the first part. First, we

should add these header files for further use:

#include "ns3/core-module.h" #include "ns3/network-module.h" #include "ns3/internet-module.h" #include "ns3/mobility-module.h" #include "ns3/config-store-module.h" #include "ns3/applications-module.h" #include "ns3/wifi-module.h" #include "ns3/internet-module.h" #include "ns3/olsr-helper.h" #include "ns3/dsdv-helper.h" #include "ns3/aodv-helper.h" #include "ns3/point-to-point-layout-module.h" #include "ns3/ipv4-static-routing-helper.h" #include "ns3/ipv4-list-routing-helper.h" #include "ns3/ipv4-global-routing-helper.h" #include "ns3/flow-monitor.h" #include "ns3/flow-monitor-helper.h" #include "ns3/flow-monitor-module.h" #include "ns3/animation-interface.h" #include "ns3/netanim-module.h" #include <iostream> #include <fstream> #include <vector> #include <string>

Page 11: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

11

Likewise the part one, we add these codes:

using namespace ns3; NS_LOG_COMPONENT_DEFINE ("WifiAdhoc_Routing");

Then add these codes to the main function:

std::string phyMode ("DsssRate1Mbps"); uint32_t PacketSize = 512; // bytes std::string DataRate ("1Mbps"); // Kbytes per second uint16_t num_Nodes = 8; uint16_t UDPport = 9; bool verbose = false; bool tracing = false; Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (PacketSize)); Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue (DataRate)); //"CommandLine object allows the user to override any of the defaults at run-time CommandLine cmd; cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode); cmd.AddValue ("PacketSize", "size of application packet sent", PacketSize); cmd.AddValue ("DataRate", "rate of pacekts sent", DataRate); cmd.AddValue ("verbose", "turn on all WifiNetDevice log components", verbose); cmd.AddValue ("tracing", "turn on ascii and pcap tracing", tracing); cmd.Parse (argc, argv); ns3::PacketMetadata::Enable(); std::string animFile = "Lab3_part2.xml" ;

Now let’s create the network topology, network nodes are stored in a container class called

NodeContainer:

NodeContainer Nodes; Nodes.Create (num_Nodes);

The below set of helpers will help us to put together the wifi NICs we want, also some logging switches

are set here:

WifiHelper wifi; if (verbose) { wifi.EnableLogComponents (); // Turn on all Wifi logging }

Page 12: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

12

Here we set up the physical layer properties:

YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); wifiPhy.Set ("RxGain", DoubleValue (-12) ); // ns-3 supports RadioTap and Prism tracing extensions for 802.11b

wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);

And the wireless channel properties:

YansWifiChannelHelper wifiChannel; wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel"); wifiChannel.AddPropagationLoss("ns3::FriisPropagationLossModel"); wifiPhy.SetChannel (wifiChannel.Create ());

Add a non-QoS upper mac, and disable rate control:

NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); wifi.SetStandard (WIFI_PHY_STANDARD_80211b);

wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager","DataMode",StringValue(phyMode), "ControlMode",StringValue (phyMode));

Set it to adhoc mode:

wifiMac.SetType ("ns3::AdhocWifiMac"); NetDeviceContainer Devices; Devices = wifi.Install (wifiPhy, wifiMac, Nodes);

Using MobilityHelper, we set the positions of the nodes:

MobilityHelper mobility; mobility.SetPositionAllocator ("ns3::GridPositionAllocator","MinX", DoubleValue (0.0),

"MinY", DoubleValue (0.0),"DeltaX", DoubleValue (5.0), "DeltaY", DoubleValue (10.0),"GridWidth", UintegerValue (3), "LayoutType", StringValue ("RowFirst")); int x[num_Nodes] = {0, 500, 0, 1000, 1500, 500, 1000, 1500, 1000, 1500, 500}; int y[num_Nodes] = {0, 0, 500, 500, 500, 1000, 1000, 1000, 1500, 1500, 500}; int z[num_Nodes] = {0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0}; Ptr<ListPositionAllocator> positionAlloc = CreateObject <ListPositionAllocator>(); for(int i = 0; i < num_Nodes; i++) { positionAlloc->Add(Vector(x[i], y[i], z[i])); } mobility.SetPositionAllocator(positionAlloc); mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");

Page 13: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

13

mobility.Install (Nodes);

Now we enable OLSR routing for the network. The procedure for AODV and DSDV is similar to OLSR.

OlsrHelper olsr; Ipv4StaticRoutingHelper staticRouting; Ipv4ListRoutingHelper list; list.Add (staticRouting, 0); list.Add (olsr, 10); InternetStackHelper internet; internet.SetRoutingHelper (list); // has effect on the next Install () internet.Install (Nodes);

Then we assign the IP addresses to the nodes:

Ipv4AddressHelper ipv4; NS_LOG_INFO ("Assign IP Addresses."); ipv4.SetBase ("192.168.1.0", "255.255.255.0"); Ipv4InterfaceContainer i; i = ipv4.Assign (Devices);

Now, we should create a UDP application between node 0 and node 8:

PacketSinkHelper UDPsink ("ns3::UdpSocketFactory", InetSocketAddres(Ipv4Address::GetAny (), UDPport)); ApplicationContainer App; NodeContainer SourceNode = NodeContainer (Nodes.Get (0)); NodeContainer SinkNode = NodeContainer (Nodes.Get (8)); //To Create a UDP packet sink App = UDPsink.Install(SinkNode); App.Start (Seconds (30.0)); App.Stop (Seconds (60.0)); //To Create a UDP packet source OnOffHelper UDPsource ("ns3::UdpSocketFactory", InetSocketAddress(i.GetAddress(8,0), UDPport)); UDPsource.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1))); UDPsource.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0))); App = UDPsource.Install(SourceNode); App.Start (Seconds (30.0)); App.Stop (Seconds (60.0));

Page 14: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

14

OLSR needs time to converge and therefore we should give it some time to converge before starting the

data flow. Also you can add the following codes to print the routing tables meanwhile the simulation:

Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> ("moh-olsr-routes", std::ios::out); olsr.PrintRoutingTableAllEvery (Seconds (1), routingStream);

And the last thing to do is to define the simulation time and run the simulation and after everything is done

you should destroy the simulator object as explained in the first part.

For this part of assignment, first run the simulation for each of the routing algorithms (OLSR, AODV and

DSDV). Explain what the parameters are in the tables of each algorithm. What are the differences between

the algorithms?

Second, check the routing table of node 0 and determine when the table converges and when a path

between node 0 and node 8 is established.

At last, set down node 6 at second ⌊𝑇𝑤𝑜 𝑙𝑎𝑠𝑡 𝑑𝑖𝑔𝑖𝑡𝑠 𝑜𝑓 𝑦𝑜𝑢𝑟 𝑠𝑡𝑢𝑑𝑒𝑛𝑡 𝐼𝐷

10⌋ + 40. In this case, the previous path will

be no more valid, and a new path should be established. Check the routing table of node 0 and determine

when a new path is created? (You should check the destination with IP address: 192.168.1.9 and see

which node is the interface).

III) Flow Monitor

In this part, we want to become familiar with flow monitor, by means of which you can see the throughput

of each flow easily. To do so, you can add the following codes to your main function:

// 1. Install FlowMonitor on all nodes FlowMonitorHelper flowmon; Ptr<FlowMonitor> monitor = flowmon.InstallAll (); // 2. Run simulation for 60 seconds Simulator::Stop (Seconds (60)); Simulator::Run (); // 3. Print per flow statistics monitor->CheckForLostPackets (); Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier > (flowmon.GetClassifier ()); std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats (); for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i = stats.begin (); i != stats.end (); ++i) {

Page 15: Assignment 3.pdf

Department of Electrical Engineering Sharif University of Technology

Data Networks

Dr. M. R. Pakravan

15

Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow (i->first); std::cout << "Flow " << i->first - 1 << " (" << t.sourceAddress << " -> " << t.destinationAddress << ")\n";std::cout << " Tx Bytes: " << i->second.txBytes << "\n"; std::cout << " Rx Bytes: " << i->second.rxBytes << "\n"; std::cout << " Throughput: " << i->second.rxBytes * 8.0 /(i->second.timeLastRxPacket.GetSeconds()- i->second.timeFirstTxPacket.GetSeconds()) / 1024 / 1024 << " Mbps \n";

}

IV) Experiment Report:

You should prepare a proper explanatory report for this assignment. Then you should pack this report,

as well as the scripts and output files (.xml) for each part, zip them and upload one file in the courseware.

The received folder should contain:

The scripts written for each part,

The output files (routing tables and .xml files) for each part,

Your report (both MS word and PDF format) that contains the results of the simulations in the form

of plots and some snapshots from NetAnim output. Please kindly that for each part, you should

analyze the results you have found and explain how they are related to the theories discussed in

the class.