Performing RWA Simulation With NS An introduction to NS & RWA simulation constructs.

37
Performing RWA Simulation With NS An introduction to NS & RWA simulation constructs
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    238
  • download

    3

Transcript of Performing RWA Simulation With NS An introduction to NS & RWA simulation constructs.

Performing RWA Simulation With NS

An introduction to NS &

RWA simulation constructs

Optical Networking Research GroupInformation Network Lab, USTC 2

Outline

Part I: NS Programming Basics Object oriented mechanisms Overview of NS Simulator The Lamp Example Packet Handling in NS—from a transport protocol’s

perspectivePart II: Build in NS a platform for RWA Simulation Network Model Architectural Overview Internals…

Optical Networking Research GroupInformation Network Lab, USTC 3

What’s Object Oriented…

Object An object is a software bundle of variables and r

elated methods. [java.sun.com] Variable => State Methods => Behavior

OOP. A software design method that models the charact

eristics of abstract or real objects using classes. [java.sun.com]

Optical Networking Research GroupInformation Network Lab, USTC 4

Why Object Oriented…

Modularity Easy for maintenance Easy for code Reuse

Information hiding Transparency Security

Inheritance Structuring and Organizing Software

Optical Networking Research GroupInformation Network Lab, USTC 5

Object Oriented Programming

struct astruct a Class aClass a

member v1;member v2;method m1;method m2;…

member v1;member v2;method m1;method m2;…

variable v1;variable v2;…

variable v1;variable v2;…

procedure pprocedure p

Some operation on instances of struct a

Some operation on instances of struct a

Class b base class aClass b base class a

member v2b;method m2b;…

member v2b;method m2b;…

Optical Networking Research GroupInformation Network Lab, USTC 6

NS – A Schematic Overview

C++Compiled Hierarchy

OTclInterpreted Hierarchy

Optical Networking Research GroupInformation Network Lab, USTC 7

NS – A Schematic Overview

C++ /OTcl ImplementationC++ and OTcl InteractionOTcl Object Implementation Simulation Scripts

What to do? For ordinary users For Advanced users

Optical Networking Research GroupInformation Network Lab, USTC 8

An Example -- Lamp

May change ON/OFF Status

May change brightness

Status and Brightness may be monitored

Optical Networking Research GroupInformation Network Lab, USTC 9

From this example,

You will know how to…

Implement a class in C++

Implement a class in OTcl

Combine OTcl and C++ codes

Write simple simulation scripts

Optical Networking Research GroupInformation Network Lab, USTC 10

An Example: Lamp

Interfaces:switch: switch the ON/OFF status of the lamp objectshow_status: Show the current ON/OFF status of the lamp objectbrighten: make the lamp object brighterdarken: make the lamp object darker

Member variablesstatus: current status of the lamp object, {ON, OFF}brightness: current brightness of the lamp object in integervoltage, current, resistance: electro. character. of the lamp object

OTcl

C++

OTcl

C++

Optical Networking Research GroupInformation Network Lab, USTC 11

Lamp Implementation in C++

class Lamp_C: public TclObject {private:

real resistance, current, voltage;int brightness;

public: Lamp_C(real r) {resistance = r;}void brighten(int step);void darken(int step);

}void Lamp_C::brighten(int step) {

resistance -= log(step); //need check here!!!current = voltage/resistance;brightness = C*pow (current, 2);

}void Lamp_C::darken(int step) {

resistance +=log(step); //need check here!!!current = voltage/resistance;brightness = C*pow (current, 2);

}

class Lamp_C: public TclObject {private:

real resistance, current, voltage;int brightness;

public: Lamp_C(real r) {resistance = r;}void brighten(int step);void darken(int step);

}void Lamp_C::brighten(int step) {

resistance -= log(step); //need check here!!!current = voltage/resistance;brightness = C*pow (current, 2);

}void Lamp_C::darken(int step) {

resistance +=log(step); //need check here!!!current = voltage/resistance;brightness = C*pow (current, 2);

}

Lamp_C mylamp = new Lamp_C(50.0);

mylamp.brighten(10);

mylamp.darken(30);

Lamp_C mylamp = new Lamp_C(50.0);

mylamp.brighten(10);

mylamp.darken(30);

Optical Networking Research GroupInformation Network Lab, USTC 12

Lamp Implementation in OTcl

Class Lamp_TCLLamp_TCL set status OFFLamp_TCL set brightness 0

Lamp_TCL instproc switch { state } {$self instvar statusif {$state != “”} {

set status $state} return $status

}

Lamp_TCL instproc show_status { } {$self instvar statusputs “Current status is :$status”puts “Current brightness is :$brightness”

}

Class Lamp_TCLLamp_TCL set status OFFLamp_TCL set brightness 0

Lamp_TCL instproc switch { state } {$self instvar statusif {$state != “”} {

set status $state} return $status

}

Lamp_TCL instproc show_status { } {$self instvar statusputs “Current status is :$status”puts “Current brightness is :$brightness”

}

C:\ns-2.1b8win\ns↲%% set mylamp [new Lamp_TCL]% $mylamp show_status% $mylamp switch ON% $mylamp show_status

Result:Current status is :OFFCurrent brightness is : 0Current status is :ONCurrent brightness is : 0

C:\ns-2.1b8win\ns↲%% set mylamp [new Lamp_TCL]% $mylamp show_status% $mylamp switch ON% $mylamp show_status

Result:Current status is :OFFCurrent brightness is : 0Current status is :ONCurrent brightness is : 0

Optical Networking Research GroupInformation Network Lab, USTC 13

Comparing C++ and OTcl

• class Lamp_C: public TclObject {• private:• real resistance, current,

voltage;• int brightness;• public: • Lamp_C(real r) {resistance =

r;}• void brighten(int step);• void darken(int step);• }• void Lamp_C::brighten(int step) {• // …• }• void Lamp_C::darken(int step) {• //…• }

• class Lamp_C: public TclObject {• private:• real resistance, current,

voltage;• int brightness;• public: • Lamp_C(real r) {resistance =

r;}• void brighten(int step);• void darken(int step);• }• void Lamp_C::brighten(int step) {• // …• }• void Lamp_C::darken(int step) {• //…• }

• Class Lamp_TCL• Lamp_TCL set status OFF• Lamp_TCL set brightness 0

• Lamp_TCL instproc switch { state } {• #...• }

• Lamp_TCL instproc show_status { } {• #...• }

• Class Lamp_TCL• Lamp_TCL set status OFF• Lamp_TCL set brightness 0

• Lamp_TCL instproc switch { state } {• #...• }

• Lamp_TCL instproc show_status { } {• #...• }

Optical Networking Research GroupInformation Network Lab, USTC 14

NS: OTcl and C++ Combined

Static class LampClass:public TclClass{

public:LampClass::TclClass(“Lamp_TCL”) {}TclObject * create(int, const char * const *){ return (new Lamp_C( ));}

}class_Lamp;

Int Lamp_C::init( ){…bind(“brightness”,&brightness);…

}

Static class LampClass:public TclClass{

public:LampClass::TclClass(“Lamp_TCL”) {}TclObject * create(int, const char * const *){ return (new Lamp_C( ));}

}class_Lamp;

Int Lamp_C::init( ){…bind(“brightness”,&brightness);…

}

int Lamp_C::command(int ac, const char*const* av){

if (strcmp(av[1], “brighten") == 0){

int step = atoi(av[2]);

brighten(step);

return TCL_OK;

}

if (strcmp(av[1], “darken”) == 0) {

int step = atoi(av[2]);

darken(step);

return TCL_OK;

}

return TclObject::command(ac,av);

}

int Lamp_C::command(int ac, const char*const* av){

if (strcmp(av[1], “brighten") == 0){

int step = atoi(av[2]);

brighten(step);

return TCL_OK;

}

if (strcmp(av[1], “darken”) == 0) {

int step = atoi(av[2]);

darken(step);

return TCL_OK;

}

return TclObject::command(ac,av);

}

Optical Networking Research GroupInformation Network Lab, USTC 15

NS: OTcl and C++ Combined

if (strcmp(av[1], “darken”) == 0) {

int step = atoi(av[2]);

Tcl & tcl = Tcl::instance();

char cmd[50],ret[10];

sprintf(cmd, “%s switch”, name());

tcl.eval(cmd);

if(strcmp(tcl.result(), “OFF”)){

return TCL_OK;

}

darken(step);

return TCL_OK;

}

if (strcmp(av[1], “darken”) == 0) {

int step = atoi(av[2]);

Tcl & tcl = Tcl::instance();

char cmd[50],ret[10];

sprintf(cmd, “%s switch”, name());

tcl.eval(cmd);

if(strcmp(tcl.result(), “OFF”)){

return TCL_OK;

}

darken(step);

return TCL_OK;

}

Optical Networking Research GroupInformation Network Lab, USTC 16

NS: OTcl and C++ Combined

C:\NetSim\ns-2.1b8a-win\ns↲ %%set mylamp [new Lamp_TCL]% $mylamp show_status% $mylamp switch ON% $mylamp brighten 100% $mylamp show_status%

Result:Current status is :OFFCurrent brightness is : 0Current status is :ONCurrent brightness is : 32

C:\NetSim\ns-2.1b8a-win\ns↲ %%set mylamp [new Lamp_TCL]% $mylamp show_status% $mylamp switch ON% $mylamp brighten 100% $mylamp show_status%

Result:Current status is :OFFCurrent brightness is : 0Current status is :ONCurrent brightness is : 32

Use OTcl –magic of manipulating:

Configuration, setup and one-time stuff

Manipulating existing C++ objects

Use C++ –power of Computing:

Packet processing

Computational complex jobs

Anything you like !

Optical Networking Research GroupInformation Network Lab, USTC 17

Lamp Conclusion

Interfaces:switch, show_status, brighten, darkenbrighten, darken

Member variablesstatusbrightness, voltage, current, resistance

Implementation C++/OTcl OTcl Invocation in C++ : tcl.eval(...), tcl.result(...); C++ Invocation in OTcl : Lamp::command(...); Variable binding: bind(...);

Optical Networking Research GroupInformation Network Lab, USTC 18

Packet Handling in NS:From A Protocol’s Perspective

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

if (strcmp(argv[1],”get-connect-request”) = = 0){

Packet *pkt = allocpkt();

hdr_rwa *hdrrwa = hdr_rwa::access(pkt);

hdrrwa->msg_type = CONNECTION_REQUEST;

send(pkt,0);

}

}

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

if (strcmp(argv[1],”get-connect-request”) = = 0){

Packet *pkt = allocpkt();

hdr_rwa *hdrrwa = hdr_rwa::access(pkt);

hdrrwa->msg_type = CONNECTION_REQUEST;

send(pkt,0);

}

}

>>>

Optical Networking Research GroupInformation Network Lab, USTC 19

Packet Handling in NS:From A Protocol’s Perspective

void RWAAgent::recv(Packet* pkt, Handler*){hdr_rwa *hdrrwa = hdr_rwa::access(pkt);int msgtype = hdrrwa->msg_type; …switch (msgtype){

case CONNECTION_REQUEST://process this packet…break;…

}Packet::free(pkt);

}

void RWAAgent::recv(Packet* pkt, Handler*){hdr_rwa *hdrrwa = hdr_rwa::access(pkt);int msgtype = hdrrwa->msg_type; …switch (msgtype){

case CONNECTION_REQUEST://process this packet…break;…

}Packet::free(pkt);

}

Optical Networking Research GroupInformation Network Lab, USTC 20

Build in NS a platform for RWA Simulation

Extensions to Class SimulatorExtensions to Class NodeRWA Agents new!

Connection Request Generator new!

Optical Networking Research GroupInformation Network Lab, USTC 21

Network Model

OXC

OXC

OXC

OXC

OXC

OXC

OXC

Connecti onrequest

Client Network A

Client Network B

Client Network CClient Network D

Optical Networking Research GroupInformation Network Lab, USTC 22

Components

DWDM Node Interfaces , Fibers, Wavelengths Wavelength Converter

RWA Agent Simple Signaling(Connection Setup/Teardown) Routing (Fixed, Explicit Routing)

Connection Request Generator Arrival Rate Hold Time

Optical Networking Research GroupInformation Network Lab, USTC 23

Architectural OverviewSimulator

DWDM Node

RWA Agent

node_ Traffic Generator peer_node_

Link 1 ... Link MLink 2 Link 3

Agent 1(default)

...Agent 2 Agent 3 Agent x

Node1 Node2 Node3 ... NodeNLinked_DWDM_nodes_

Linked_interfaces_

Linked_RWA_Agents_

Optical Networking Research GroupInformation Network Lab, USTC 24

Architectural Overview

RWA Agent

DWDM Node Edge Node Transit Node

Connect Request Generator

Edge Node

RWA Peer

Optical Networking Research GroupInformation Network Lab, USTC 25

Internals of Connection Request Generator

Descriptions Base Class: TrafficGenerator Functionality: generating connection request

Hold time … Destination node… Wavelength change allowed ? “$agent get-connect-request $ht $dst $change_allow”

Configurable Parameters: Mean arrival rate Mean hold time

Optical Networking Research GroupInformation Network Lab, USTC 26

Internals of RWA Agent

Descriptions: Base Class: Agent Functionality:

Packet processing Connection request/setup/release Route lookups Change node status

A list of timers Connection timeouts …

Optical Networking Research GroupInformation Network Lab, USTC 27

Internals of RWA Agent

OTcl part Route lookups Interfacing with Node

C++ Part Receiving/processing/sending packets Connection timeouts

Optical Networking Research GroupInformation Network Lab, USTC 28

Structure of A RWA Packet

struct hdr_rwa{int src, dst;int sid;int msg_type;int fid, lambda;char er[MAX_HOPS*5];int rtptr;…

}

struct hdr_rwa{int src, dst;int sid;int msg_type;int fid, lambda;char er[MAX_HOPS*5];int rtptr;…

}

Message Types:

•CONNECTION_REQUEST_MSG

•CONNECTION_RELEASE_MSG

•CONNECTION_CONFIRM_MSG

•CONNECTION_BLOCKED_MSG

•EXPLICIT_ROUTE_MSG

Global Session ID:NODEID * CONST + local_sid …

Message Processing In RWA Agentsrecv( )

msg_type?EXPLICIT_ROUTE_REQUEST_MSG

CONNECTION_REQUEST_MSG

CONNECTION_RELEASE_MSG

1.Find Next Hop2.Find IncomingInterface index

DestinationReached?

Setup ConnectionEntry on node,

Successful?

Find upstream RWA peer

Send ConfirmMessage Upstrean

Send BlockedMessage Upstrean

return return

Find OutgoingInterface index

Lock Resource,Successful?

Send Blocked Message Upstrean

return

Send Request MessageDownstream

return

... ...

Find upstreamRWA peer

Find downstreamRWA peer

YES NO

YES NOYES

NO

Agent C++

Agent OTcl

Node

Optical Networking Research GroupInformation Network Lab, USTC 30

Finding RWA Peers

Node/DWDM instproc get-rwa-agent {peer_node} {$self instvar linked_rwa_agents_set na [llength $linked_rwa_agents_]

for {set i 0} {$i < $na } {incr i} {set rwa_agent [lindex $linked_rwa_agents_ $i]if {[$rwa_agent set peer_node_] == $peer_node} {

return $rwa_agent}

}return -1

}

Node/DWDM instproc get-rwa-agent {peer_node} {$self instvar linked_rwa_agents_set na [llength $linked_rwa_agents_]

for {set i 0} {$i < $na } {incr i} {set rwa_agent [lindex $linked_rwa_agents_ $i]if {[$rwa_agent set peer_node_] == $peer_node} {

return $rwa_agent}

}return -1

}

Optical Networking Research GroupInformation Network Lab, USTC 31

Internals of DWDM Node

Descriptions Base class: Node Functionality

Management of physical resources Data structures

Lambda_table Converter_table ER_routing_table Connection_table

Optical Networking Research GroupInformation Network Lab, USTC 32

Internals of DWDM Node

OTcl part Attaching RWA agents/Traffic generator Interfacing with RWA Physical interface mapping (objectindex)

C++ Part A Lambda table /converter table /connection table Connection query interface Nodal statistics Static Routes

Optical Networking Research GroupInformation Network Lab, USTC 33

Connection Table Structure

struct connect_struct{

short src, dst;

int global_sid_;

short in_lambda, out_lambda;

short in_inf, out_inf;

short in_fid, out_fid;

short prevhop;

int holdtime;

int er_entry;

entry_status status;

};

struct connect_struct{

short src, dst;

int global_sid_;

short in_lambda, out_lambda;

short in_inf, out_inf;

short in_fid, out_fid;

short prevhop;

int holdtime;

int er_entry;

entry_status status;

};

BUSY

BUSY 100012 ...

BUSY 700001 ...

FREE - ...

1

2

3

.....

FREE - ...N-1

300083 ...N

# status sid other

sid = NODEID * CONST + local_sid

[Prefix] [local]

[Globally Unique]

sid = NODEID * CONST + local_sid

[Prefix] [local]

[Globally Unique]

new-connection(from RWA Agent)

Allocate a lambdaSuccessful?

Generate sid

Lock wavelength

Lock connectiontable entry

returnsid,lambda,fid

return -1

Confirm-setup(from RWA Agent)

Find ConnectionEntry by sid

ConfigureWavelength TableConverter Table

return

NO

YES

Agent OTcl

Node C++

Connection Initiation and confirmation on Nodes

Connection Request Processing on Nodesnew-request

(from RWA Agent)

Lock incomingwavelength,Successful?

Lock outgoingwavelength,Successful?

Conversion allow?

return -1

Lock ConnectionTable Entry

Lock Converter,Successful?

Unlock incomingwavelength

return -1returnout fid,

out wavelength

NO

YES

YES

NO

NO

YES

YES NO

Agent OTcl

Node C++

Optical Networking Research GroupInformation Network Lab, USTC 36

To Start Simulation…

Create Network Topology• Create DWDM Nodes• Build Links between Nodes

Configure RWA Agents on every nodeInstall Traffic Generator on Edge Nodes

Configure Traffic Generators

Install Static Routes On Edge NodesStart Traffic and do an “$ns run”

Optical Networking Research GroupInformation Network Lab, USTC 37

Thank You!

Questions are welcome…