• No results found

ns-3 Tutorial (Part IV) Wireless & Tracing System and Visualizing Results

N/A
N/A
Protected

Academic year: 2021

Share "ns-3 Tutorial (Part IV) Wireless & Tracing System and Visualizing Results"

Copied!
38
0
0

Loading.... (view fulltext now)

Full text

(1)

JCSSE 2011's tutorials and workshops

Wednesday, 11 May 2011, 9:00 - 16:00

Intelligent Wireless Network Group

Department of Computer Engineering Faculty of Engineering, Kasetsart University http://iwing.cpe.ku.ac.th

ns-3 Tutorial (Part IV)

Wireless &

Tracing System and Visualizing Results

(2)

Time Table

09:00 - 10:15 ns-3 Introduction & Installation

10:15 - 10.30 Break

10:30 - 12:00 Hands-On:

Point-to-point and CSMA (Ethernet)

12:00 - 13:00 Lunch

13:00 - 14:15 Hands-On:

Wireless & Tracing System and Visualizing Results

14:15 - 14:30 Break

14:30 - 15:30 Demonstation:

ns-3 protocol stack modification

(3)

Wireless modules overviewTracing with Trace HelpersCreating custom tracers

Visualizing and analyzing resultsWalk-through examples

Hands-on exercise

(4)

ns-3 provides a set of pre-configured trace sources

Users provide trace sinks and attach to the trace sourceMultiple trace sources can connect to a trace sink

(5)

Decouple trace sources from trace sinks:

(6)
(7)

High-level

Use a helper to hook a predefined trace source to an existing

trace sink (e.g., ascii, pcap)

Mid-level

Hook an existing trace source to a custom trace sink

Low-level

Add a new trace source and connect it to a special trace sink

(8)

Ascii Trace HelperPcap Trace Helper

(9)

Custom Trace Sink

void

DevTxTrace(

std::string context,

Ptr<const Packet> p, Mac48Address address) {

std::cout << " TX to=" << address << " p: " << *p << std::endl; }

:

Config::Connect(

"/NodeList/*/DeviceList/*/Mac/MacTx", MakeCallback(&DevTxTrace));

Name of trace sink function

(10)

Task: model the network topology below in ns-3 and

capture ECHO packets transmitted from N7 to N4

We can start from tutorials/third.cc

Walk-Through Example I (1)

N2 N3 N4 N0 N1 10.1.1.0/24 10.1.2.0/24 10.1.3.0/24 N5 N6 N7 ECHO

(11)

CommandLine class allows processing of command-line

arguments

Supply default values of various attributes and variables

Dissecting third.cc

main (int argc, char *argv[]) {

bool verbose = true; uint32_t nCsma = 3; uint32_t nWifi = 3; CommandLine cmd;

cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma); cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);

cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose); cmd.Parse (argc,argv);

(12)

Various Helpers are available to help create wireless

channel/physical/mac models

Dissecting third.cc

NodeContainer wifiStaNodes; wifiStaNodes.Create (nWifi);

NodeContainer wifiApNode = p2pNodes.Get (0);

YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();

YansWifiPhyHelper phy = YansWifiPhyHelper::Default (); phy.SetChannel (channel.Create ());

WifiHelper wifi = WifiHelper::Default ();

(13)

WiFi MAC layer

Dissecting third.cc

NqosWifiMacHelper mac = NqosWifiMacHelper::Default (); Ssid ssid = Ssid ("ns-3-ssid");

mac.SetType ("ns3::StaWifiMac",

"Ssid", SsidValue (ssid),

"ActiveProbing", BooleanValue (false)); NetDeviceContainer staDevices;

staDevices = wifi.Install (phy, mac, wifiStaNodes); mac.SetType ("ns3::ApWifiMac",

"Ssid", SsidValue (ssid)); NetDeviceContainer apDevices;

Configure all nodes in wifiStaNodes container to be of

type “station”

Configure first node of point-to-point link

(14)

All wireless nodes must be associated with mobilityMobilityHelper provides a lot of help

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"));

mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",

"Bounds", RectangleValue (Rectangle (-50, 50, -50, 50))); mobility.Install (wifiStaNodes); mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); mobility.Install (wifiApNode);

Dissecting third.cc

1 2 3 4

(MinX, MinY) DeltaX

(15)

Create a copy of third.cc into the scratch dir and rename

it to pm-ex1.cc

Edit the source

Change port number from 9 to 7 (standard ECHO port)

Change PCAP file prefix to pm-ex1

Walk-Through Example I (2)

$ cp examples/tutorials/third.cc scratch/pm-ex1.cc

UdpEchoServerHelper echoServer (7); :

UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 7);

pointToPoint.EnablePcapAll ("pm-ex1");

phy.EnablePcap ("pm-ex1", apDevices.Get (0));

(16)

Run the script

Open the pcap files with WireShark

Walk-Through Example I (3)

$ ls *.pcap

pm-ex1-0-0.pcap pm-ex1-0-1.pcap pm-ex1-1-0.pcap pm-ex1-1-1.pcap $ wireshark pm-ex1-0-0.pcap

(17)

Visualize the simulation by adding option

--visualize

Press F3 to start the simulation

Walk-Through Example I (4)

(18)

Attributes can be configured and explored before the simulation starts

Walk-Through Example I (5)

#include "ns3/gtk-config-store.h" GtkConfigStore config; config.ConfigureAttributes(); Simulator::Run ();

(19)

GtkConfigStore can also be invoked in PyViz using Ipython

shell

Ipython must be installed

(20)

Task: Using the previous topology, replace ECHO traffic

with CBR (Constant Bit Rate) traffic

Walk-Through Example II (1)

N2 N3 N4 N0 N1 10.1.1.0/24 10.1.2.0/24 10.1.3.0/24 N5 N6 N7 CBR (512 Kbps)

(21)

Create pm-ex2.cc from pm-ex1.cc

Use OnOffHelper to generate CBR traffic from the client

Walk-Through Example II (2)

$ cp scratch/pm-ex1.cc scratch/pm-ex2.cc uint16_t port = 9; OnOffHelper onoff( "ns3::UdpSocketFactory", InetSocketAddress("10.1.2.4", port)); onoff.SetAttribute("OnTime", StringValue("Constant:1")); onoff.SetAttribute("OffTime", StringValue("Constant:0")); onoff.SetAttribute("DataRate", StringValue("512Kbps")); onoff.SetAttribute("PacketSize", StringValue("512"));

ApplicationContainer apps = onoff.Install(wifiStaNodes.Get(nWifi-1)); apps.Start(Seconds(5.0));

Install app on node N7 only

(22)

Create a packet sink on the server

Set simulation time to 30 seconds

Don't forget to change the PCAP trace prefix

Walk-Through Example II (3)

PacketSinkHelper sink( "ns3::UdpSocketFactory", InetSocketAddress("10.1.2.4", port)); sink.Install(csmaNodes.Get(nCsma)); Simulator::Stop(Seconds(25.0)); Install PacketSink on node N4

(23)

Task: calculate average throughput from previous

scenario

Idea:

Connect a custom trace sink to PacketSink's Rx trace sourceCompute average throughput from

first and last packets' timestamps

total bytes received

(24)

How to determine what trace source PacketSink

provides?

And how to get to it?

In ns-3 Doxygen, look for ns3::PacketSink (either via

Class List or List of Trace Sources)

Look at the documentation for GetTypeId

(25)

We now know that PacketSink object already comes with

a trace source, called Rx

We need to write a callback function to serve as a trace

sink

Connecting Trace Source/Sink

PacketSink Object

(26)

Quoted from ns-3 Tutorial:

“…always try to copy someone else's working code…”

Opening examples/csma/csma-ping.cc reveals

Then look at definition of SinkRx function:

Callback Signature

$ find examples/ -name "*.cc" -exec grep -H PacketSink/Rx {} \;

examples/csma/csma-ping.cc: Config::ConnectWithoutContext ("/NodeList/3/ApplicationList/0/$ns3::PacketSink/Rx",

examples/csma/csma-packet-socket.cc: Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::PacketSink/Rx",

examples/csma/csma-raw-ip-socket.cc: Config::ConnectWithoutContext ("/NodeList/3/ApplicationList/0/$ns3::PacketSink/Rx", :

:

Config::ConnectWithoutContext ("/NodeList/3/ApplicationList/0/$ns3::PacketSink/Rx", MakeCallback (&SinkRx));

(27)

If no example can be found, look at ns-3 source code!

Either way, we now know that our callback's signature

should be:

Callback Signature

$ find . -name "*.h" -exec grep -H TracedCallback {} \; :

./src/applications/udp-echo/udp-echo-client.h: TracedCallback<Ptr<const Packet> > m_txTrace; ./src/applications/v4ping/v4ping.h: TracedCallback<Time> m_traceRtt;

./src/applications/packet-sink/packet-sink.h: TracedCallback<Ptr<const Packet>, const Address &> m_rxTrace;

./src/mobility/mobility-model.h: TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace; ./src/routing/olsr/model/olsr-routing-protocol.h: TracedCallback <const PacketHeader &,

:

(28)

Create pm-ex3.cc from pm-ex2.cc

Prepare trace sink callback and necessary statistical

variables

Walk-Through Example III (2)

double firstRxTime = -1.0, lastRxTime; uint32_t bytesTotal = 0;

void SinkRxTrace(Ptr<const Packet> pkt, const Address &addr) { if (firstRxTime < 0) firstRxTime = Simulator::Now().GetSeconds(); lastRxTime = Simulator::Now().GetSeconds(); bytesTotal += pkt->GetSize(); } $ cp scratch/pm-ex2.cc scratch/pm-ex3.cc

(29)

Connect trace source with trace sink

Produce statistical report at the end of the script

Run the simulation script

Walk-Through Example III (3)

Config::ConnectWithoutContext(

"/NodeList/*/ApplicationList/*/$ns3::PacketSink/Rx", MakeCallback(&SinkRxTrace));

cout << "Avg throughput = "

<< bytesTotal*8/(lastRxTime-firstRxTime)/1024 << " kbits/sec" << endl;

(30)

Task: study impact of number of clients on average throughput  Experiment setup2-14 mobile clientsUDP CBR stream512 Kbps per client

 Packet size: 512 bytes

(31)

Create pm-ex4.cc from pm-ex3.cc

Modify the source so that OnOff application is installed

on all WiFi stations

Change the line:

to

Walk-Through Example IV (2)

$ cp scratch/pm-ex3.cc scratch/pm-ex4.cc

ApplicationContainer apps = onoff.Install(wifiStaNodes);

(32)

Report the number of WiFi stations in addition to the

average throughput

Try running the script with various values specified for nWifi argument

Walk-Through Example IV (3)

cout << "Num clients = " << nWifi << " " << "Avg throughput = "

<< bytesTotal*8/(lastRxTime-firstRxTime)/1024 << " kbits/sec" << endl;

$ waf --run "pm-ex4 --nWifi=1" 2> /dev/null

Num clients = 1 Avg throughput = 512.96 kbits/sec $ waf --run "pm-ex4 --nWifi=2" 2> /dev/null

Num clients = 2 Avg throughput = 1025.54 kbits/sec

suppress stderr messages

(33)

Create a shell-script, named run-all.sh, that runs the

simulation with different values for nWifi

Run the shell-script and redirect all stdout messages to a

file

Walk-Through Example IV (4)

#!/bin/bash

for ((i=2; i<=14; i += 2)); do waf --run "pm-ex4 --nWifi=$i" done

(34)

Visualize results with gnuplot

Walk-Through Example IV (5)

$ gnuplot

(35)

Create a script, genplot.gnuplot, for generating a

plot as a PNG file

Also

Change x-axis to load,

Polish the plot: turn on grid, turn off legend

Walk-Through Example IV (6)

#!/usr/bin/gnuplot set terminal png

set output 'graph.png' set xrange [0:]

set yrange [0:]

set xlabel 'Load (kb/s)'

set ylabel 'Average Throughput (kb/s)' set grid

(36)

Run the plotting script

Walk-Through Example IV (7)

(37)

Publication-quality results should be obtained from many

replications in each scenario

Use --RngRun=<run-number> to change random

sequence

Running Multiple Replications

(38)

Study impact of number of mobile stations to packet

delivery ratio

References

Related documents

In modern terminology, the motivation for that theorem was to seek an estimate for the dimension of the vector space of holomorphic sections of a line bundle L over a Riemann

Our information variable X contains option trading from four groups of investors: firm proprietary traders, who trade for their firms’ own accounts; customers of full-service

Sousa-Poza and Sousa-Poza (2000) in their study found that there wasthe considerable difference among male- female employees’ level of job satisfaction and found nosignificant

We evaluated our channel assignment and routing algorithm using ns-2 simulator which supports multiple channels and multiple radios per node and we compared our results with

In this example, the contractor would be entitled to a one week extension of time because the delays overlap for one week. Therefore, the contractor is entitled to an extension

The spikes in the last week of benet eligibility are roughly twice of the corresponding spikes at the 100th week of unemployment in gure 1: 4.3 and 3.3 times the pre-spike level

We perform annual and semi-annual inspections as well as service and repair work on all generator makes and models.. We currently service hundreds of emergency standby generators

The models can trace with good accuracy the redshift distribution of the sources in the given The models can trace with good accuracy the redshift distribution of the sources in