20100712-OTcl Command -- Getting Started

Post on 18-Dec-2014

3.842 views 3 download

description

 

Transcript of 20100712-OTcl Command -- Getting Started

NS2: NS2: OTcl Command – Getting OTcl Command – Getting StartedStarted

by Teerawat Issariyakul

http://www.ns2ultimate.com

July 2010

http://www.ns2ultimate.com 1

OutlineOutlineIntroductionMotivationWhat we would like to doOTcl Command

http://www.ns2ultimate.com 2

IntroductionIntroductionThis is a series on how NS2 binds C++ and OTcl

together. This is the second topic of the series:

1.Why Two Languages?

2.Binding C++ and OTcl classes

3. Variable binding

4.OTcl command: Invoking C++ statements from the

OTcl domain

5.Eval and result: Invoking OTcl statements from the C+

+ domain

6.Object binding and object construction process.

http://www.ns2ultimate.com 3

MotivationMotivationOTcl is the place where users do the

programmingSometimes, users need to call C++

function

http://www.ns2ultimate.com 4

delay_

MyObject

programmer

C++

show_delay(){show “delay_” on the screen}

MyOTclObject

OTcl

show-delaybinding function

binding class name

What we would like to doWhat we would like to do

http://www.ns2ultimate.com 5

C++:oclass = MyObject (see

above)

ovariable = delay_

ofunction: show_delay()

OTcl:

oclass = MyOTclObject (see

above)

ovariable = none

oOTcl command: show-delay

Binding class name [see here and here]

delay_

MyObject

C++

show_delay(){show “delay_” on the screen}

MyOTclObject

OTcl

show-delaybinding function

binding class name

(see above)

OTcl Command: OTcl Command: IntroductionIntroductionCan be invoked from the OTcl domain

(show-delay)

Is bound to an OTcl object (object)

Execute C++ domain (show_delay())

http://www.ns2ultimate.com 6

OTcl Command: C++ filesOTcl Command: C++ files In the following, I will use files in the

previous post: otcl.cc, otcl.h, otcl.tclAdd a C++ variable delay_ to class MyObject

http://www.ns2ultimate.com 7

class MyObject : public TclObject {public: MyObject(); virtual ~MyObject(){};protected: int count_; double delay_; double speed_; double virtual_time_; int is_running_; int command(int argc, const char*const* argv); };

otcl.h

OTcl Command: C++ filesOTcl Command: C++ files In the following, I will use files in the

previous post: otcl.cc, otcl.h, otcl.tclAdd a C++ variable delay_ to class MyObject

Constructor: Set the initial value of delay_ to be 7.7

Do not bind the variable

Next step to use OTcl command to show the value of the variable delay_ on the screen

http://www.ns2ultimate.com 8

MyObject::MyObject(){

delay_ = 7.7;}

otcl.cc

OTcl Command: DefinitionOTcl Command: DefinitionDefine within C++ class (e.g. MyObject)Define by function “command(…)”Example: Insert the following into the file otcl.cc

Do not forget to add a C++ variable delay_ to class MyObject http://www.ns2ultimate.com 9

int MyObject::command(int argc, const char*const* argv) {

if (argc==2) {if (strcmp(argv[1], "show-delay") == 0) {

printf("Delay is %g\n", delay_);return (TCL_OK);

}}return TclObject::command(argc, argv);

};

OTcl command name

what this OTcl command do

Summary of Key StepsSummary of Key Steps1. Use files otcl.cc and otcl.h in the

previous post2. Add the details as stated earlier3. run “make” to incorporate C++

changes in to NS2 [see detail here]4. Create file otcl.tcl for testing

4.1 Create an OTcl object object

4.2 Invoke the OTcl command “show-delay” associated with object

4.4 Change the C++ constructor: set delay_ to be 9.9

4.5 Repeat 4.2 and 4.3http://www.ns2ultimate.com 10

File otcl.tcl

Run the file otcl.tcl

OTcl Command: OTcl Command: InvocationInvocation

http://www.ns2ultimate.com 11

set ns [new Simulator]set obj [new MyOTclObject]$obj show-delay

Modify the constructor

Run the file otcl.tcl again

OTcl Command: OTcl Command: InvocationInvocation

http://www.ns2ultimate.com 12

MyObject::MyObject(){

delay_ = 9.9;}

For more information For more information about NS 2about NS 2

Please see this book from Springer

T. Issaraiyakul and E. Hossain, “Introduction to Network Simulator NS2”, Springer 2009

http://www.ns2ultimate.com 13