ns-3 tutorial - universitetet i oslo · ns-3 overview free and open source discrete event network...
TRANSCRIPT
![Page 2: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/2.jpg)
Outline
Ns-3 Overview
Installation
Ns-3 Objects
Scripting Step-by-Step
Resources
![Page 3: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/3.jpg)
Ns-3 Overview Free and open source discrete event network simulator
Intended as a replacement for the popular ns-2
◦ Clean slate implementation – no reuse of ns-2 code
◦ Easier to use, more facilities, faster, more accurate and flexibile
First version 3.1 in June 2008
◦ Current version: 3.10
◦ 3.11 planned for release spring of 2011
◦ Available for Linux, OS-X and Windows w/ Cygwin
Written in C++
◦ Scripts written in C++, with optional Python interface
◦ Helper classes make ”scripting” in C++ easy
Well documented
◦ Manual, tutorial, Doxygen and examples
◦ Examples for wireless networks: ns-3.10/examples/wireless
![Page 4: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/4.jpg)
Installing ns-3
Simplest approach: download tarball, extract and build
In Ubuntu, you can use build.sh:
For Mac OS X, this works:
For development, Eclipse with Mercurial provides many advantages
◦ Consult your supervisor
Detailed instructions in the ns-3 tutorial
$ wget http://www.nsnam.org/releases/ns-allinone-3.10.tar.bz2
$ tar xjf ns-allinone-3.10.tar.bz2
$ cd ns-allinone-3.10
$ ./build
$ cd ns-3-dev
$ ./waf --run first
$ wget http://www.nsnam.org/releases/ns-allinone-3.10.tar.bz2
$ tar xjf ns-allinone-3.10.tar.bz2
$ cd ns-allinone-3.10/ns-3.10
$ ./configure –d debug
$ ./waf --run first
![Page 5: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/5.jpg)
Example Scripts
manet-main.cc : mobile ad-hoc network, OLSR, random walkmobility
Presented here
chain-main.cc : wireless ad-hoc network, chain topology, nomobility, static routes
Slides in the appendix
Running the script:
1. Searches examples, samples and scratch folders for scripts
2. Compiles your script (+ any other modified files) into ns-3
3. Runs the main() method in manet-main.cc
$ cp –r manet NS3FOLDER/scratch
$ cd NS3FOLDER
$ ./waf --run ”manet --numnodes=16 --cols=4 --spacing=100”
![Page 6: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/6.jpg)
Ns-3 Objects
![Page 7: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/7.jpg)
Ns-3 Objects
Most objects inherit from ns3::Object◦ … which inherits from ns3::ObjectBase
Properties◦ Manageable via smart-pointers Provides “garbage-collection” via reference-counting
◦ Can be aggregated
Must implement the GetTypeId() method◦ Provides run-time information on type
◦ Allows objects to be located via object paths
◦ Provides objects with attributes
◦ Provides objects with trace-sources
![Page 8: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/8.jpg)
Smart-Pointers
Ns-3 objects are created by the CreateObject
function, returning a smart-pointer:
Always check functions’ return-values and
parameters: Ptr<T> or not?
Most often they are
Ptr<PacketSocketFactory> factory = CreateObject<PacketSocketFactory> ();
Ptr<Node> node = nodes.Get(0);
![Page 9: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/9.jpg)
Object Aggregation Object can be aggregated to access each other, and for the user to easily access
individual objects in an aggregation
Object aggregation:
Avoid huge classes encompassing all possible functionality
Retrieving an aggregated object:
node->AggregateObject (mobility);
node mobility node mobility
Ptr<MobilityModel> mob = node->GetObject<MobilityModel> ();
![Page 10: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/10.jpg)
TypeId GetTypeId(void)
Returns TypeId-object to identify and characterize object
Contains object type, constructor and parent object
Defines the object’s attributes and trace-sources
TypeId
RoutingProtocol::GetTypeId (void)
{
static TypeId tid = TypeId ("ns3::olsr::RoutingProtocol")
.SetParent<Ipv4RoutingProtocol> ()
.AddConstructor<RoutingProtocol> ()
.AddAttribute ("HelloInterval", "HELLO messages emission interval.",
TimeValue (Seconds (2)),
MakeTimeAccessor (&RoutingProtocol::m_helloInterval),
MakeTimeChecker ())
…
.AddTraceSource ("Rx", "Receive OLSR packet.",
MakeTraceSourceAccessor (&RoutingProtocol::m_rxPacketTrace))
;
return tid;
}
![Page 11: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/11.jpg)
Ns-3 Object Paths
Paths define location(s) of object(s) or their attributes
Objects can be reached via paths as long as they are attributes of, or aggregated to, another object reachable via paths
◦ All paths through which an object can be reached listed in doxygen
Can select sub-set of objects in lists by qualifiers
Examples (from the Tunis tutorial available at the Ns-3 web-page):
◦ /NodeList/[3-5]|8|[0-1]: matches nodes index 0, 1, 3, 4, 5, 8
◦ /NodeList/*: matches all nodes
◦ /NodeList/3/$ns3::Ipv4: matches object of type ns3::Ipv4 aggregated to node number 3
◦ /NodeList/3/DeviceList/*/$ns3::CsmaNetDevice: matches all devices of type ns3::CsmaNetDevice in node number 3
Can e.g., use Config::LookupMatches to access the objects directly
◦ Casting achieved by GetObject<Type> ()
Config::MatchContainer m = Config::LookupMatches("NodeList/*/$ns3::olsr::RoutingProtocol”);
Ptr<Olsr::RoutingProtocol> olsr = m.Get(0)->GetObject<olsr::RoutingProtocol> ();��
![Page 12: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/12.jpg)
Attributes Attributes represent the different parameters of the models
Attributes are defined in the class implementation
Has type with the corresponding setter-classes, as well as default values
◦ All available attributes are listed in the doxygen
TypeId
RoutingProtocol::GetTypeId (void)
{
static TypeId tid = TypeId ("ns3::olsr::RoutingProtocol")
.SetParent<Ipv4RoutingProtocol> ()
.AddConstructor<RoutingProtocol> ()
.AddAttribute ("HelloInterval", "HELLO messages emission interval.",
TimeValue (Seconds (2)),
MakeTimeAccessor (&RoutingProtocol::m_helloInterval),
MakeTimeChecker ())
…
return tid;
}
![Page 13: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/13.jpg)
Setting Attribute Values
Default attribute values can be set via Config::SetDefault
◦ Set attribute values for all subsequently instantiated objects of this
Attributes for individual object can be set with Config::Set, or
directly on the object via SetAttribute
Config::SetDefault("ns3::YansWifiPhy::TxGain", DoubleValue (”1"));
Config::Set("/NodeList/5/DeviceList/0/Phy/TxGain”, DoubleValue (”1"));
phy->SetAttribute ("TxGain", DoubleValue (”1"));
![Page 14: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/14.jpg)
Simulation Scripts Step-by-Step
![Page 15: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/15.jpg)
General Structure of a Script:
1. Handle command line arguments
2. Set default attribute values and random seed
3. Create nodes
4. Configure physical and MAC layers
5. Enable PCAP tracing
6. Set up network stack, routing and addresses
7. Configure and install applications
8. Set up initial positions and mobility
9. Connect trace sources and sinks
10. Schedule user-defined events and start simulation
![Page 16: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/16.jpg)
Step 1: Command line Arguments
Allows configuration from command line◦ E.g., $ ./waf --run ”manet --spacing=100”
int main(int args, char *argv[]) {
uint32_t rows =4, cols = 4, nodeSpacing = 90, duration = 900, seed = 1;
std::string phyMode("DsssRate11Mbps");
CommandLine cmd;
cmd.AddValue (”phymode", ”Physical transmission mode", phyMode);
cmd.AddValue ("rows", "Rows of nodes", rows);
cmd.AddValue ("cols", "Columns of nodes", cols);
cmd.AddValue ("spacing", "Spacing between neighbouring nodes", nodeSpacing);
cmd.AddValue ("duration", "Duration of simulation", duration);
cmd.AddValue (”seed", ”Random seed for simulation", seed);
cmd.Parse (argc,argv);
uint32_t numNodes = rows * cols;
…
![Page 17: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/17.jpg)
Step 2: Set Attribute Values and
Random Seed
Set default attribute values
Remember to set random seed to
different values between runs
Config::SetDefault("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));
Config::SetDefault("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200"));
Config::SetDefault("ns3::WifiRemoteStationManager::NonUnicastMode", StringValue (phyMode));
Config::SetDefault("ns3::ConstantRateWifiManager::DataMode", StringValue(phyMode));
Config::SetDefault("ns3::ConstantRateWifiManager::ControlMode", StringValue(phyMode));
Config::SetDefault("ns3::YansWifiPhy::RxGain", DoubleValue(-10));
Config::SetDefault("ns3::YansWifiPhy::TxGain", DoubleValue(1));
// Set seed for pseudorandom number generator
SeedManager::SetSeed (seed);
![Page 18: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/18.jpg)
Step 3: Create nodes
Most components in ns-3 is managed by
containers
◦ Simulations usually consist of many components
of the same type
◦ Used by e.g, helper classes to install components
(devices, stacks, applications, mobility, etc.)
◦ Individual entities accessable via the Get()-
method
NodeContainer nodes;
nodes.Create (numNodes);
…
Ptr<Node> first = nodes.Get(0)
…
0 numNodes - 1
nodes
1
![Page 19: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/19.jpg)
Steps 4-7: Configuring the Nodes
Nodes are currently empty
Antenna and NIC
Protocols
Applications
![Page 20: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/20.jpg)
Step 4: Physical Layer
Helpers make scripting easier
Here used to configure the physical layer
”Antenna”
Set capturing format (explained later)
TxGain = 1 and RxGain = -10
With 11 Mbps DSSS, this yields 160-190 meters range
Can be adjusted to obtain a range more realistic for a given scenario
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
wifiPhy.Set ("RxGain", DoubleValue (-10) );
wifiPhy.SetPcapDataLinkType(YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
![Page 21: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/21.jpg)
Step 4: Channel
Use of helpers to
configure the channel
Can also use e.g., ns3::TwoRayGroundPropagationLossModel
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
wifiPhy.Set ("RxGain", DoubleValue (-10) );
wifiPhy.SetPcapFormat(YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
YansWifiChannelHelper wifiChannel ;
wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
wifiPhy.SetChannel (wifiChannel.Create ());
![Page 22: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/22.jpg)
Step 4: MAC layer
NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
"DataMode", StringValue(phyMode));
wifiMac.SetType ("ns3::AdhocWifiMac");
MAC
Non-QoS, 11 Mbps 802.11b used in the example
Constant rate on transmissions and retransmissions
Many alternatives, e.g., minstrel which is often used in real life
Data mode set to ”DsssRate11Mbps”
![Page 23: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/23.jpg)
Step 4: MAC layer
NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
"DataMode", StringValue(phyMode));
wifiMac.SetType ("ns3::AdhocWifiMac");
WifiHelper wifi;
wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, nodes);
MAC
…
devices
MAC
MAC
MAC
…
nodes Use helper to install devices
Set the wireless interface into ad-hoc mode
Select 802.11b standard
Install this MAC layer into all nodes in our container ”nodes”, and connect them with the channel
![Page 24: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/24.jpg)
Step 5: Enable Tracing
Must be done after setting up MAC
Will produce one PCAP-file per interface per node in the current directory
◦ Prefix is set to ”MANET”
◦ Resulting filenames: MANET-X-Y.pcap
X = node, Y = device
Can later be analysed with e.g., tcpdump or wireshark:
◦ $ tcpdump –r MANET-X-Y.pcap
wifiPhy.EnablePcap ("MANET", devices);
![Page 25: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/25.jpg)
Step 6: Stack, routing and addresses
Select routing◦ Ns-3 currently supports OLSR, AODV and DSDV
◦ Explained here: OLSR
◦ In the appendix: manual configuration of static routes
Install the network stack◦ Protocols installed: IP, TCP, UDP, ARP and ICM
OlsrHelper olsr;
InternetStackHelper internet;
internet.SetRoutingHelper
(olsr);
internet.Install (nodes);
…
nodes
TCPUDP
ARP IP ICMP
OLSR
![Page 26: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/26.jpg)
Step 6: Assign Network Addresses
Nodes 1 to N get addresses 10.0.0.1 through 10.0.0.N
◦ I.e., the address of node nodes.Get(X) has address 10.0.0.(X + 1)
MAC addresses are set to 00:00:00:00:00:(X + 1)
Ipv4AddressHelper address;
address.SetBase ("10.0.0.0", "255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign (devices);
![Page 27: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/27.jpg)
Step 7: Configure and Install Applications
This tutorial: UDP trace-client and –server
◦ For specific applications, consult supervisors
Set attributes, and start and stop applications
according to duration of simulation// Server/Receiver
UdpServerHelper server (4000);
ApplicationContainer apps = server.Install (nodes.Get(1));
apps.Start (Seconds (1.0));
apps.Stop (Seconds (10.0));
// Client/Sender
UdpClientHelper client (interfaces.GetAddress (1), 4000);
client.SetAttribute ("MaxPackets", UintegerValue (320));
client.SetAttribute ("Interval", TimeValue (Seconds(0.05)));
client.SetAttribute ("PacketSize", UintegerValue (1024));
apps = client.Install (nodes.Get (0));
apps.Start (Seconds (2.0));
apps.Stop (Seconds (9.0));
![Page 28: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/28.jpg)
The Ns-3 Node
Node provides methods to retrieve
pointers to devices and applications
Aggregated with stack, mobility and
energy-model
Ptr<Application> app = node->GetApplication(0);
Ptr<NetDevice> nic = node->GetDevice(0);
Ptr<Ipv4> ip = nodes.Get(0)->GetObject<Ipv4>();
Ipv4Address addr = ip->GetAddress(1,0).GetLocal();
![Page 29: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/29.jpg)
Step 8: Set up Initial Positions
Several options available, including grid,
disc, random placement and user-defined
locations
◦ Explained here: grid
◦ In the appendix: user-defined locations
◦ For the usage of other alternatives, consult
manual, tutorial and doxygen
![Page 30: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/30.jpg)
Step 8: The Grid
MobilityHelper mobility;
mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
"MinX", DoubleValue (0.0),
"MinY", DoubleValue (0.0),
"DeltaX", DoubleValue (nodeSpacing),
"DeltaY", DoubleValue (nodeSpacing),
"GridWidth", UintegerValue (cols));
nodeSpacing
nodeSpacing
1 Cols
Rows *
Cols
![Page 31: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/31.jpg)
Step 8: Set up Mobility
Several alternatives◦ Random mobility: random waypoint, random walk, …
◦ User-defined: constant position/velocity/acceleration
◦ Explained here: random walk
◦ In the appendix: constant position (no mobility)
![Page 32: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/32.jpg)
Step 8: Random WalkX
Y
Uniform:2:0
MobilityHelper mobility;
// Set positions
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue (Rectangle (0, 500, 0, 500)),
"Speed", StringValue(”Uniform:2:0"),
”Distance”, DoubleValue(30));
mobility.Install(nodes);
Random walk:• Walk in random direction for
fixed time/distance + reflect on boundaries
• Upon arrival, select new random direction
• Select speed with a random variable
Default: ”Uniform:2:4”
• Select traveling distance or time
![Page 33: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/33.jpg)
Step 9: Connecting Trace Sources
and Sinks
TypeId
RoutingProtocol::GetTypeId (void)
{
.AddTraceSource ("RoutingTableChanged", "The OLSR routing table has changed.",
MakeTraceSourceAccessor (&RoutingProtocol::m_routingTableChanged))
;
return tid;
}
olsr-routing-protocol.cc
Ns-3 Objects can have a set of trace-sources
◦ All listed in the doxygen
Invoked by methods in the object upon certain events
◦ E.g., for the routing protocol, whenever there is a change in the route table
User can connect sources to their own sinks
◦ Sinks: functions defined by the user
◦ Use Config::Connect with paths
◦ Invoked each time the source-object invokes the corresponding source
◦ Function prototype of source and sink must match Fist argument a text string identifying the trace-sink
![Page 34: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/34.jpg)
Step 9: Connecting Trace Sources
and Sinks
class RoutingProtocol : public Ipv4RoutingProtocol
{
public:
…
TracedCallback <uint32_t> m_routingTableChanged;
};
olsr-routing-protocol.h
Ns-3 Objects can have a set of trace-sources
◦ All listed in the doxygen
Invoked by methods in the object upon certain events
◦ E.g., for the routing protocol, whenever there is a change in the route table
User can connect sources to their own sinks
◦ Sinks: functions defined by the user
◦ Use Config::Connect with paths
◦ Invoked each time the source-object invokes the corresponding source
◦ Function prototype of source and sink must match Fist argument a text string identifying the trace-sink
![Page 35: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/35.jpg)
Step 9: Connecting Trace Sources
and Sinks Ns-3 Objects can have a set of trace-sources
◦ All listed in the doxygen
Invoked by methods in the object upon certain events
◦ E.g., for the routing protocol, whenever there is a change in the route table
User can connect sources to their own sinks
◦ Sinks: functions defined by the user
◦ Use Config::Connect with paths
◦ Invoked each time the source-object invokes the corresponding source
◦ Function prototype of source and sink must match Fist argument a text string identifying the trace-sink
void RouteChange(std::string source, uint32_t size) {
std::cout << "Routechange at " << source << ", new size: " << size << std::endl;
}
int main(int argc, char *argv[]) {
…
Config::Connect("/NodeList/*/$ns3::olsr::RoutingProtocol/RoutingTableChanged",
MakeCallback (&RouteChange));
routingTableObject->TraceConnect(“RoutingTableChanged”,
MakeCallback(&RouteChange));
simulation-script.cc
![Page 36: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/36.jpg)
Step 9: Connecting Trace Sources
and Sinks Ns-3 Objects can have a set of trace-sources
◦ All listed in the doxygen
Invoked by methods in the object upon certain events
◦ E.g., for the routing protocol, whenever there is a change in the route table
User can connect sources to their own sinks
◦ Sinks: functions defined by the user
◦ Use Config::Connect with paths
◦ Invoked each time the source-object invokes the corresponding source
◦ Function prototype of source and sink must match Fist argument a text string identifying the trace-sink
…
Routechange at /NodeList/1/$ns3::olsr::RoutingProtocol/RoutingTableChanged, new size: 4
Routechange at /NodeList/6/$ns3::olsr::RoutingProtocol/RoutingTableChanged, new size: 8
…
sample output:
![Page 37: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/37.jpg)
Step 10: Schedule Events and Start
Simulation
Can schedule your own events beforeexecution◦ Event: run a function w/ arguments at a given time
◦ Can schedule new events
Duration of simulation set by Simulator::Stop
void printTime(int interval) {
std::cout << Simulator::Now() << std::endl;
Simulator::Schedule(Seconds(interval), &printTime, interval);
}
int main(int argc, char *argv[]) {
…
Simulator::Schedule(Seconds(1), &printTime, 1);
Simulator::Stop (Seconds (duration));
Simulator::Run ();
Simulator::Destroy ();
return 0;
} // End of main()
![Page 38: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/38.jpg)
Step 10: Enabling Bienvisto-Tracing
Bienvisto: Extensible MANET visualizer developed as a master project by Miguel Santirso
Flash (web)application taking as input a trace from Ns-3
◦ Consult supervisor to get a copy
◦ Based on the trace source/sink mechanism
◦ Currently traces events related to mobility, routing and data-transmission
Put visualizer-trace-helper.cc/h into folder with script
#include ”visualizer-trace-helper.h”
int main(int argc, char *argv[]) {
…
Simulator::Schedule(Seconds(1), &printTime, 1);
Simulator::Stop (Seconds (duration));
VisualizerTraceHelper traceHelper(duration*1000, nodes);
traceHelper.StartWritingFile("tracefile.txt");
Simulator::Run ();
traceHelper.EndWritingFile();
Simulator::Destroy ();
return 0;
} // End of main()
![Page 39: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/39.jpg)
Resources
The Ns-3 Website: http://www.nsnam.org
◦ Wiki
◦ Manual
◦ Tutorials
◦ Presentations
◦ Doxygen
Ns-3 examples
◦ <ns3 folder>/examples
◦ <ns3 folder>/samples
◦ chain and manet
![Page 40: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/40.jpg)
That’s All
Questions?
Good luck with the assignments!
![Page 41: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/41.jpg)
Static routes
User defined locations
Constant positions
The Ns-3 logging facility
Appendix
![Page 42: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/42.jpg)
Step 6: Static Routing
Setting static routes
◦ Use Ipv4StaticRoutingHelper
We provide a function to manipulate table
Ipv4StaticRoutingHelper staticRouting;
InternetStackHelper internet;
internet.SetRoutingHelper(staticRouting);
internet.Install (nodes);
![Page 43: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/43.jpg)
Step 6: Static Routing
Setting static routes
◦ Use Ipv4StaticRoutingHelper
We provide a function to manipulate table
void SetStaticRoute(Ptr<Node> n, const char* destination, const char* nextHop, uint32_t interface)
{
Ipv4StaticRoutingHelper staticRouting;
Ptr<Ipv4> ipv4 = n->GetObject<Ipv4> ();
Ptr<Ipv4StaticRouting> a = staticRouting.GetStaticRouting (ipv4);
a->AddHostRouteTo (Ipv4Address (destination), Ipv4Address (nextHop), interface);
}
![Page 44: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/44.jpg)
Step 6: Configuring Static Routes
Setting static routes:
// Set addresses
SetStaticRoute(nodes.Get(0), "10.0.0.3", "10.0.0.2", 1);
SetStaticRoute(nodes.Get(0), "10.0.0.2", "10.0.0.2 ,1);
SetStaticRoute(nodes.Get(1), "10.0.0.1", "10.0.0.1", 1);
SetStaticRoute(nodes.Get(1), "10.0.0.3", "10.0.0.3", 1);
SetStaticRoute(nodes.Get(2), "10.0.0.1", "10.0.0.2", 1);
SetStaticRoute(nodes.Get(2), "10.0.0.2", "10.0.0.2", 1);
10.0.0.1 10.0.0.2 10.0.0.3
10.0.0.3 -> 10.0.0.2
10.0.0.2 -> 10.0.0.2
![Page 45: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/45.jpg)
Step 6: Configuring Static Routes
Setting static routes:
// Set addresses
SetStaticRoute(nodes.Get(0), "10.0.0.3", "10.0.0.2", 1);
SetStaticRoute(nodes.Get(0), "10.0.0.2", "10.0.0.2", 1);
SetStaticRoute(nodes.Get(1), "10.0.0.1", "10.0.0.1", 1);
SetStaticRoute(nodes.Get(1), "10.0.0.3", "10.0.0.3", 1);
SetStaticRoute(nodes.Get(2), "10.0.0.1", "10.0.0.2", 1);
SetStaticRoute(nodes.Get(2), "10.0.0.2", "10.0.0.2", 1);
10.0.0.1 10.0.0.2 10.0.0.3
10.0.0.1 -> 10.0.0.1 10.0.0.3 -> 10.0.0.3
![Page 46: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/46.jpg)
Step 6: Configuring Static Routes
Setting static routes:
10.0.0.1 10.0.0.2 10.0.0.3
10.0.0.1 -> 10.0.0.2
10.0.0.2 -> 10.0.0.2
// Set addresses
SetStaticRoute(nodes.Get(0), "10.0.0.3", "10.0.0.2", 1);
SetStaticRoute(nodes.Get(0), "10.0.0.2", "10.0.0.2", 1);
SetStaticRoute(nodes.Get(1), "10.0.0.1", "10.0.0.1", 1);
SetStaticRoute(nodes.Get(1), "10.0.0.3", "10.0.0.3", 1);
SetStaticRoute(nodes.Get(2), "10.0.0.1", "10.0.0.2", 1);
SetStaticRoute(nodes.Get(2), "10.0.0.2", "10.0.0.2", 1);
![Page 47: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/47.jpg)
Step 8: Explicit Locations and
Constant Positions
MobilityHelper mobility;
Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
positionAlloc->Add(Vector(0.0, 0.0, 0.0));
positionAlloc->Add(Vector(0.0, nodeSpacing, 0.0));
mobility.SetPositionAllocator(positionAlloc);
nodeSpacing
[0,0,0] [nodeSpacing,0,0]
MobilityHelper mobility;
// Set positions
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install(nodes);
![Page 48: Ns-3 Tutorial - Universitetet i oslo · Ns-3 Overview Free and open source discrete event network simulator Intended as a replacement for the popular ns-2 Clean slate implementation](https://reader035.vdocuments.net/reader035/viewer/2022070703/5e7d5e1986d34f6c21560508/html5/thumbnails/48.jpg)
The logging facility
Ns-3 has an extensive logging facility Seven levels: error, warn, debug, info, function,
logic, all
Can activate component from script or from shell LogComponentEnable (”MANET", LOG_LEVEL_INFO); $ export NS_LOG=”MANET=level_info”
NS_LOG_COMPONENT_DEFINE ("MANET");
…
NS_LOG_INFO("Area width: " << (rows - 1) * nodeSpacing);
NS_LOG_INFO("Area height: " << (cols - 1) * nodeSpacing);