Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 [email protected]...
-
date post
20-Dec-2015 -
Category
Documents
-
view
241 -
download
4
Transcript of Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 [email protected]...
![Page 1: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/1.jpg)
Introduction to ns2
Network Simulation and Simulator Internals潘仁義
[email protected] from Su Wen’s ns2 ppt
[email protected]& Padmaparna Haldar’s
![Page 2: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/2.jpg)
The Network Simulator - ns-2
http://www.isi.edu/nsnam/ns/ The source code and documentation is currently mai
ntained by VINT project at ISI http://nsnam.isi.edu/nsnam/index.php/Main_Page
Sept 3, 2007: ns-2.32 released. Mar 10, 2007: ns-2.31 released. July 2, 2006: ns-3 project announced.
NS2 is a discrete event simulator targeted at networking research
NS2 is an object oriented simulator, written in C++, with an OTcl interpreter as a frontend
抽考 : ns2 安裝
![Page 3: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/3.jpg)
ns-2 Overview
Collection of various protocols at multiple layers TCP(reno, tahoe, vegas, sack) MAC(802.11, 802.3, TDMA) Ad-hoc Routing (DSDV, DSR, AODV, TORA) Sensor Network (diffusion, gaf) Multicast protocols, Satellite protocols, and many others
Codes are contributed from multiple research communities Good: Large set of simulation modules Bad: Level of support and documentation varies
The source code and documentation is currently maintained by VINT project at ISI
![Page 4: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/4.jpg)
Documentation
introductory: Marc Greis's tutorial reference: Ns Manual (formerly called "ns
Notes and Documentation") ns by Example Practical Programming in Tcl and Tk (
http://www.beedub.com/book/) http://hpds.ee.ncku.edu.tw/~smallko/ns2/n
s2.htm
![Page 5: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/5.jpg)
Current Status
ns-2 (2.1b6) Simulator Core100K lines of C++70K lines of OTcl30K lines of test suite20K lines of documentation
Other ComponentsTcl/TK 8.x, OTcl, TclCL, nam-1Tcl-debug, GT-ITM, xgraph, …
![Page 6: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/6.jpg)
ns Directory Structure
TK8.0 OTcl tclclTcl8.0 ns-2 nam-1
tcl
ex test lib
...
...
examples validation tests
C++ code
OTcl code
ns-allinone
mcast
simple.tcl
![Page 7: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/7.jpg)
Running simulations with ns
Compile the simulator core (“ns”)Write a simulation script in Otcl
e.g. my-test.tcl
Running the simulatore.g. ns my-test.tcl
![Page 8: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/8.jpg)
Hello World
simple.tclset sim [new Simulator]
$sim at 1 “puts \“Hello World!\””
$sim at 1.5 “exit”
$sim run
arches 74% ns simple.tcl
Hello World!
arches 75%
![Page 9: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/9.jpg)
Discrete Event Simulation
Model world as eventsSimulator has list of eventsProcess: take next one, run it, until doneEach event happens in an instant of virtual
(simulated) time, but takes an arbitrary amount of real time
Ns uses simple model: single thread of control => no locking or race conditions to worry about (very easy)
![Page 10: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/10.jpg)
Discrete Event Examples
Consider two nodeson an Ethernet:
A B
simplequeuingmodel:
t=1, A enqueues pkt on LANt=1.01, LAN dequeues pkt
and triggers B
detailedCSMA/CDmodel:
t=1.0: A sends pkt to NICA’s NIC starts carrier sense
t=1.005: A’s NIC concludes cs,starts tx
t=1.006: B’s NIC begins reciving pktt=1.01: B’s NIC concludes pkt
B’s NIC passes pkt to app
![Page 11: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/11.jpg)
ns-2 EnvironmentSimulation Scenario
Tcl Script
C++ Implementation
1 2
set ns_ [new Simulator]
set node_(0) [$ns_ node]
set node_(1) [$ns_ node]
class MobileNode : public Node {
friend class PositionHandler;public: MobileNode();
••
}
![Page 12: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/12.jpg)
Why two languages? (Tcl & C++)
C++: Detailed protocol simulations require systems programming language byte manipulation, packet processing, algorithm imple
mentationRun time speed is importantTurn around time (run simulation, find bug, fix bug, rec
ompile, re-run) is slowerTcl: Simulation of slightly varying parameters or c
onfigurationsquickly exploring a number of scenariositeration time (change the model and re-run) is more im
portant
![Page 13: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/13.jpg)
C++ and OTcl Separation
“data” / control separationC++ for “data”:
per packet processing, core of ns fast to run, detailed, complete control
OTcl for control:Simulation scenario configurationsPeriodic or triggered actionManipulating existing C++ objects fast to write and change
+ running vs. writing speed– Learning and debugging (two languages)
![Page 14: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/14.jpg)
Using ns
Problem
Simulationmodel
Setup/run simulation
with ns
Resultanalysis
Modifyns
![Page 15: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/15.jpg)
Summary: Generic Script Structure
set ns [new Simulator]set ns [new Simulator]
# [Turn on tracing]# [Turn on tracing]
# Create topology# Create topology
# Setup packet loss, link dynamics# Setup packet loss, link dynamics
# Create routing agents# Create routing agents
# Create: # Create:
# - multicast groups# - multicast groups
# - protocol agents# - protocol agents
# - application and/or setup traffic sources# - application and/or setup traffic sources
# Post-processing procs# Post-processing procs
# Start simulation# Start simulation
![Page 16: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/16.jpg)
Basic Tcl
variables:set x 10puts “x is $x”
functions and expressions:set y [pow x 2]set y [expr x*x]
control flow:if {$x > 0} { return $x } else {
return [expr -$x] }while { $x > 0 } {
puts $xincr x –1
}
procedures:proc pow {x n} {
if {$n == 1} { return $x }set part [pow x [expr $n-1]]return [expr $x*$part]
}
Also lists, associative arrays, etc.
=> can use a real programming language to build network topologies, traffic models, etc.
![Page 17: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/17.jpg)
Basic otclClass Person# constructor:Person instproc init {age} {
$self instvar age_set age_ $age
}# method:Person instproc greet {} {
$self instvar age_puts “$age_ years old: How are you doing?”
}
# subclass:Class Kid -superclass PersonKid instproc greet {} {
$self instvar age_puts “$age_ years old kid: What’s up, dude?”
}
set a [new Person 45]set b [new Kid 15]$a greet$b greet# “new” in ns2 only
=> can easily make variations of existing things (TCP, TCP/Reno)
Person a 45; Kid b 15a greet; b greetPerson info instancesa info class; a info vars
![Page 18: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/18.jpg)
Otcl and C++: The Duality
OTcl (object variant of Tcl) and C++ share class hierarchy
TclCL is glue library that makes it easy to share functions, variables, etc
C++
otcl
C++/OTcl split object
s
![Page 19: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/19.jpg)
C++ and OTcl Linkage
Class Tcl: instance of OTcl interpreterTcl& tcl = Tcl::instance();
tcl.evalc(“puts stdout hello world”);
tcl.result() and tcl.error()
Class TclObject and TclClassVariable bindings
bind(“rtt_”, &t_rtt_)Invoking command method in shadow class
$tcp advanceby 10
![Page 20: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/20.jpg)
C++ and Otcl linkage II
Some important objects:NsObject: has recv() methodConnector: has target() and drop()BiConnector: uptarget() & downtarget()
目前悟性不夠
![Page 21: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/21.jpg)
TclObject: Hierarchy and Shadowing
TclObject
Agent
Agent/TCP/JS
Agent/TCP/JS OTcl shadow object
_o123Agent/TCP/JS C++
object
*tcp
TclObject
Agent
JSTcpAgent
OTcl classhierarchy
C++ classhierarchy
static JSTcpClass : public TclClass {public:JSTcpClass():TclClass("Agent/TCP/JS"){} TclObject* create(int,const char*const*) { return (new JSTcpAgent());}};
![Page 22: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/22.jpg)
C++
OTcl
TclObject: Creation and Deletion
invoke parentconstructor
Agent/TCP/JSconstructor
Agent/TCP constructor
invoke parentconstructor
TclObjectconstructor
create C++object
JSTCPAgentconstructor
invoke parentconstructordo nothing,
return
TclObject (C++)constructor
bind variablesand return
bind variablesand return
create OTclshadow object
complete initialization
complete initialization
which C++ object to create? – TclClass
invoke parentconstructor
parent (Agent)constructor
![Page 23: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/23.jpg)
Class Hierarchy in ns
TclObject
NsObject
Connector Classifier
Delay AddrClassifierAgent McastClasifierQueue Trace
DropTail RED TCP Enq Deq Drop
Reno SACK JS
![Page 24: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/24.jpg)
TCP Jump Start – Step 1
New file: tcp-js.h
class JSTcpAgent : public TcpAgent {class JSTcpAgent : public TcpAgent {
public:public:
virtual void set_initial_window() {virtual void set_initial_window() {
cwnd_ = MAXWIN_;cwnd_ = MAXWIN_;
}}
JSTcpAgent();JSTcpAgent();
private:private:
int MAXWIN_;int MAXWIN_;
};};
![Page 25: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/25.jpg)
TCP Jump Start – Step 2
New file: tcp-js.cc#include “tcp.h”#include “tcp-js.h”
static class JSTcpClass : public TclClass {public:
JSTcpClass() : TclClass("Agent/TCP/JS") {}TclObject* create(int, const char*const*) {
return (new JSTcpAgent());}
}class_jstcp;JSTcpAgent::JSTcpAgent() {
bind(“MAXWIN_”, &MAXWIN_);}
![Page 26: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/26.jpg)
TclObject::bind()
Link C++ member variables to OTcl object variables
C++TcpAgent::TcpAgent() {
bind(“window_”, &wnd_);… …
}bind_time(), bind_bool(), bind_bw() (set with unit)
OTclset tcp [new Agent/TCP]set tcp [new Agent/TCP]$tcp set window_ 200$tcp set window_ 200
![Page 27: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/27.jpg)
Initialization of Bound Variables
Initialization through OTcl class variablesAgent/TCP set Agent/TCP set window_window_ 50 50
Do all initialization of bound variables in ~ns/lib/ns-default.tclOtherwise a warning will be issued when the
shadow object is createdAfter modifying, remember to make ns2
![Page 28: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/28.jpg)
Calling C++ functions from Otcl
OTclset tcp [new Agent/TCP]
$tcp advance 10
C++int TcpAgent::command(int argc,
const char*const* argv) {
if (argc == 3) { if (strcmp(argv[1], “advance”) == 0) { int newseq = atoi(argv[2]);
…… return(TCL_OK);
} }
return (Agent::command(argc, argv);}
![Page 29: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/29.jpg)
TclObject::command()
$tcp send TclObject::unknown{} $tcp cmd sendno suchprocedure
TcpAgent::command()
match “send”?
Invoke parent: return Agent::command()
process and return
Yes No
OTcl space
C++ space
![Page 30: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/30.jpg)
Calling Otcl functions from C++
OTclAgent/TCP instproc advance {num} {
set window_ [expr $window_ + $num]
return $window_
}
C++Tcl& tcl = Tcl::instance(); char *result;
tcl.evalf(“%s advance %d”, name_, size);result = tcl.result();wnd_ = atoi(result);
![Page 31: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/31.jpg)
EmbeddedTcl
How it workstcl2c++tcl2c++: provided by TclCL, converts tcl script
s into a C++ static character arrayMakefile.in:tclsh8.0 bin/tcl-expand.tcl tcl/lib/ns-litclsh8.0 bin/tcl-expand.tcl tcl/lib/ns-lib.tcl | tcl2c++ et_ns_lib > gen/ns_tcl.b.tcl | tcl2c++ et_ns_lib > gen/ns_tcl.cccc
![Page 32: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/32.jpg)
Summary
TclObjectUnified interpreted (OTcl) and compiled (C++)
class hierarchiesSeamless access (procedure call and variable
access) between OTcl and C++TclClass
The mechanism that makes TclObject workTcl: primitives to access Tcl interpreter
![Page 33: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/33.jpg)
Event Scheduler
Create event scheduler set ns [new Simulator]
Schedule events $ns at <time> <event>
<event>: any legitimate ns/tcl commands $ns at 0.1 “$ftp start” $ns at 4.0 “$ftp stop” $ns at 5.0 “finish”
Start scheduler $ns run
ns/common/scheduler.cc Scheduler::command() “now”, “at”
ns/link/delay.cc LinkDelay::recv() “s.schedule()”
![Page 34: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/34.jpg)
Extending ns in OTcl
TK8.0 OTcl tclclTcl8.0 ns-2 nam-1
tcl
ex test lib
...
...
examples validation tests
C++ code
OTcl code
ns-allinone
mcastmysrc
msg.tcl
![Page 35: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/35.jpg)
Add Your Changes into ns
source your changes in your sim scripts
Or add to tcl/lib/ns-lib.tcl
……source ../mysrc/msg.tclsource ../mysrc/msg.tcl
Change MakefileNS_TCL_LIB = \NS_TCL_LIB = \
tcl/mysrc/msg.tcl \tcl/mysrc/msg.tcl \……
Recompile
![Page 36: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/36.jpg)
Scalability vs Flexibility
It’s tempting to write all-OTcl simulationBenefit: quick prototypingCost: memory + runtime
SolutionControl the granularity of your split object by migra
ting methods from OTcl to C++
Conventional Wisdom:C++ for “data”
Per packet action
OTcl for controlPeriodic or triggered action
![Page 37: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/37.jpg)
THE Merit of OTcl
Program size, complexity
C/C++ OTcl
Smoothly adjust the granularity of scripting to balance extensibility and performance
With complete compatibility with existing simulation scripts
high low
split objects
![Page 38: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/38.jpg)
Object Granularity Tips
FunctionalityPer-packet processing C++Hooks, frequently changing code OTcl
Data managementComplex/large data structure C++One-time configuration variables OTcl
![Page 39: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/39.jpg)
Memory Conservation Tips
Avoid trace-alltrace-all
Use arrays for a sequence of variablesInstead of n$in$i, say n($i)n($i)
Avoid OTcl temporary variablesUse dynamic binding
delay_bind()delay_bind() instead of bind()bind()See object.{h,cc}
![Page 40: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/40.jpg)
Memory Leaks
Purify or dmalloc, but be careful about split objects:for {set i 0} {$i < 500} {incr i} {for {set i 0} {$i < 500} {incr i} {
set a [new RandomVariable/Constanset a [new RandomVariable/Constant]t]
}}It leaks memory, but can’t be detected!
SolutionExplicitly delete EVERY split object that was n
ew-ed
![Page 41: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/41.jpg)
Backup slide
![Page 42: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/42.jpg)
OTcl Linkage
OTcl Linkage 是 c++ 和 OTcl 的一個介面。
C++ code
OLcl Linkake
OTcl code
描述 名稱 繼承C++ object
classMyAgent Agent
Linkage object
MyAgent
CLass
TCL CLass
OTcl object
Agent/MyAgentOtcl
![Page 43: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/43.jpg)
OTcl Linkage
![Page 44: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/44.jpg)
如何使用 OTcl linkage Export C++ class variables to OTcl
- bind(): real or integer variables- bind_time(): time variable- bind_bw(): bandwidth variable- bind_bool(): boolean variable請在 ns-2/tcl/lib/ns-lib.tcl 設預設值,否則會有警告 message
OTcl 變數 C++ 變數
![Page 45: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/45.jpg)
如何使用 OTcl linkage
Export C++ Object Control Commands to OTcl
This is done by defining a "command" member function of your C++ object, which works as an OTcl command interpreter.
When OTcl object( is created and the user tries to call a member function of that object (i.e. $myagent call-my-priv-func), OTcl searches for the given member function name in the OTcl object. If the given member function name cannot be found, then it invokes the "MyAgent::command" passing the invoked OTcl member function name and arguments in argc/argv format.
![Page 46: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/46.jpg)
如何使用 OTcl linkage Export C++ Object Control Commands to OTcl
-
![Page 47: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/47.jpg)
如何使用 OTcl linkage Execute an OTcl command from C++.
makes an OTcl interpreter print out the value in "my_var1" and "my_var2" private member variables
To execute an OTcl command from C++, you should get a reference to "Tcl::instance()"
![Page 48: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/48.jpg)
如何使用 OTcl linkage Compile, run and test "MyAgent“
put "ex-linkage.cc" file, and save it under the "ns-2" directory.
Open "Makefile", add "ex-linkage.o" at the end of object file list.
Re-compile NS using the "make" command.
Run the OTcl script using command "ns ex-linkage.tcl".
![Page 50: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/50.jpg)
如何使用 OTcl linkage
![Page 51: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/51.jpg)
C++ Guidelines
Decide position in class hierarchyi.e., which class to derive from?
Create new packet header (if necessary)Create C++ class, fill in methodsDefine OTcl linkage (if any)Write OTcl code (if any)Build (and debug)
![Page 52: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/52.jpg)
Where to Find What?
![Page 53: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/53.jpg)
Where to Find What?
ns-lib.tcl: The simulator class and most of its member function definitions except for LAN, Web, and Multicast related ones are located here.
ns-default.tcl: The default values for configurable parameters for various network components are located here. the parameters are actually C++ variables made available to OTcl via an OTcl linkage function
bind(C++_variable_name, OTcl_variable_name)
![Page 54: Introduction to ns2 Network Simulation and Simulator Internals 潘仁義 jypan@comm.ccu.edu.tw Modified from Su Wen ’ s ns2 ppt suwen@dcs.uky.edu suwen@dcs.uky.edu.](https://reader035.fdocument.pub/reader035/viewer/2022081420/56649d435503460f94a1f775/html5/thumbnails/54.jpg)
Where to Find What?
ns-packet.tcl: The packet header format initialization implementation is located here. When you create a new packet header, you should register the header in this file to make the packet header initialization process and give you the offset of your header in the stack.
other OTcl files: Other OTcl files in this directory, The
FTP application is entirely implemented in OTcl and the source code is located in "ns-source.tcl".