Professional Documents
Culture Documents
ns-2 Tutorial (2) : Contents
ns-2 Tutorial (2) : Contents
Multimedia Networking Group, The Department of Computer Science, UVA Jianping Wang
cs757
Contents:
Objectives of this week What is ns-2? Working with ns-2 Tutorial exercise ns-2 internals Extending ns-2
Today
cs757
ns-2 Internals
cs757
Internals
Discrete Event Scheduler Network Topology Routing Transport Application Packet Flow Packet Format
cs757 4
Data Path
handler_ -> handle()
Network Object
head_ ->
Data Path Event Scheduler insert
handler_ -> handle()
Other Objects
Queue
cs757
cs757
link_
ttl_
Routing
n0
Port Classifier Addr Classifier Node entry entry_
n1
0 1
classifier_
dmux_
n1 entry_
cs757
Routing (cont.)
n0
Port Classifier Addr Classifier Addr Classifier dmux_ Link n0-n1 entry_
n1
Port Classifier
entry_
0 1
classifier_
1 0
classifier_
dmux_
Link n1-n0
cs757
10
Transport
n0
Port Classifier Addr Classifier
n1
Port Classifier Addr Classifier Link n0-n1 entry_
dst_=1.0
dst_=0.0
0
dmux_
Agent/TCP agents_
0
dmux_
Agent/TCPSink agents_
entry_
0 1
classifier_
1 0
classifier_
Link n1-n0
cs757
11
Application
n0
Port Classifier Addr Classifier Application/FTP dst_=1.0
n1
Port Classifier Addr Classifier Link n0-n1 entry_
dst_=0.0
0
dmux_
Agent/TCP agents_
0
dmux_
Agent/TCPSink agents_
entry_
0 1
classifier_
1 0
classifier_
Link n1-n0
cs757
12
Packet Flow
n0
Port Classifier Addr Classifier Application/FTP dst_=1.0
n1
Port Classifier Addr Classifier Link n0-n1 entry_
dst_=0.0
Agent/TCP
Agent/TCPSink
entry_
0 1
1 0
Link n1-n0
cs757
13
Packet Format
cmn header header data ip header uid_ tcp header size_ rtp header iface_ trace header ...
Jianping Wang, 2004 cs757 14
ts_ ptype_
C++
OTcl
ns2
Jianping Wang, 2004 cs757 15
C++/OTcl Linkage
Root of ns-2 object hierarchy TclObject bind(): link variable values between C++ and OTcl command(): link OTcl methods to C++ implementations Create an OTcl object, and create a linkage between the OTcl object and C++ Object C++ methods to access Tcl interpreter
TclClass Tcl
TclObject
Basic hierarchy in ns for split objects Mirrored in both C++ and OTcl Example
set tcp [new Agent/TCP]
cs757
17
Agent
Agent/TCP _o123
Agent/TCP OTcl shadow object
Jianping Wang, 2004 cs757
TcpAgent *tcp
Agent/TCP C++ object
18
TclClass
Static class TcpClass public TclClass mirroring OTcl Static class TcpClass ::public TclClass {{ public: public: TclObject TclObject TcpClass() TclClass(Agent/TCP) {} TcpClass() ::TclClass(Agent/TCP) {} TclObject* create(int, const char*const*) TclObject* create(int, const char*const*) {{ return (new TcpAgent()); return (new TcpAgent()); NsObject ?? }} }class_tcp; class_tcp; } Agent Agent C++ TcpAgent
Jianping Wang, 2004
Agent/TCP
cs757 19
cs757
20
10
TclObject::bind()
Link C++ member variables to OTcl object variables C++
TcpAgent::TcpAgent() {
bind(window_, &wnd_);
OTcl
set tcp [new Agent/TCP] $tcp set window_ 200
Jianping Wang, 2004 cs757 21
cs757
22
11
TclObject::command()
OTcl
set 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); }
cs757
23
TclObject::command()
no such $tcp send procedure
OTcl space TclObject::unknown{} $tcp cmd send
Yes
match send?
No
cs757
24
12
Extending ns-2
cs757
25
ns Directory Structure
ns-allinone Tcl8.3.2 TK8.3.2 OTcl tcl ex
examples
tclcl
test
validation tests
lib
mcast
OTcl code
...
cs757
26
13
C++
Anything that requires processing each packet Needs to change behavior of existing module
Jianping Wang, 2004 cs757 27
Ping Protocol
cs757
28
14
What to extend?
Create a new header object to store
Type of message (request or echo) Timestamp
Header object
static class PingHeaderClass : public PacketHeaderClass { public: PingHeaderClass() : PacketHeaderClass("PacketHeader/Ping", sizeof(hdr_ping)) {} } class_pinghdr;
cs757
30
15
Add to ns-allinone~/ns2-2.1b8/packet.h
foreach prot { AODV Ping }{ add-packet-header $prot }
Add to ns-allinone~/ns2-2.1b8/tcl/lib/ns-packet.tcl
cs757
31
16
Class Hierarchy
TclObject NsObject Connector Queue Delay Agent TCP SACK Trace Classifier AddrClassifier McastClasifier
C++
otcl
set msg [new Agent/Ping] $msg send
34
TclClass(Agent/Ping)
Jianping Wang, 2004 cs757
17
Constructor for the class 'PingAgent' binds the variables which have to be accessed both in Tcl and C++
PingAgent::PingAgent () : Agent(PT_PING) { bind("packetSize _", &size_); bind("off_ping_", &off_ping_); Jianping Wang, 2004 }
cs757
35
36
18
continues
cs757
37
// // // //
char out[100]; // Prepare the output to the Tcl interpreter. Calculate the round // trip time sprintf(out, "%s recv %d %3.1f", name(), hdrip->src_.addr_ >> Address::instance().NodeShift_[1], (Scheduler::instance().clock()-hdr->send_time) * 1000); Tcl& tcl = Tcl::instance(); tcl.eval(out); // Discard the packet Packet::free(pkt); } }
cs757
38
19
cs757
39
The End
cs757
40
20