How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ....

27
How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:[email protected] du.cn June 1, 2001

Transcript of How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ....

Page 1: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

How to Add a New Protocol in NS2

Xu LeimingCSCW Lab. at CS Dept., Tsinghua Univ.

mailto:[email protected]

June 1, 2001

Page 2: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Outline

Overview An Example ---- Ping Packet flow Node models Our research

Page 3: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Overview

New packet header C++ code Tcl code Some necessary changes

Page 4: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Packet Header

Page 5: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Packet Header

Page 6: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

New Packet Header

Create new header structure Enable tracing support of new header Create static class for OTcl linkage

(packet.h) Enable new header in Otcl (tcl/lib/ns-

packet.tcl)

Page 7: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

New Agent

Decide position in class hierarchyDerive from a agent class

Link with a OTcl class– TclClass TclObject– TclObject::bind()– Otcl --> c++: command() <otcl command>, tcl.result()– c++ --> otcl: tcl.eval(“<otcl action>”)

Some member functions:int Agent::command(int argc, const char*const* argv)void Agent::recv(Packet* pkt, Handler*)

Page 8: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Overview

New packet header C++ code Tcl code Some necessary changes

Page 9: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Ping.h

struct hdr_ping {char ret;double send_time;

// Header access methodsstatic int offset_; // required by PacketHeaderManagerinline static hdr_ping* access(const Packet* p) {

return (hdr_ping*) p->access(offset_);}

};class PingAgent : public Agent {public:

PingAgent();virtual int command(int argc, const char*const* argv);virtual void recv(Packet*, Handler*);

};

Page 10: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Ping.ccint hdr_ping::offset_;static class PingHeaderClass : public PacketHeaderClass {public:

PingHeaderClass() : PacketHeaderClass("PacketHeader/Ping", sizeof(hdr_ping)) {

bind_offset(&hdr_ping::offset_);}

} class_pinghdr;

static class PingClass : public TclClass {public:

PingClass() : TclClass("Agent/Ping") {}TclObject* create(int, const char*const*) {

return (new PingAgent());}

} class_ping;

Page 11: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Ping.cc (cont.)

PingAgent::PingAgent() : Agent(PT_PING){

bind("packetSize_", &size_);}

Page 12: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

int PingAgent::command(int argc, const char*const* argv){ if (argc == 2) { if (strcmp(argv[1], "send") == 0) { // Create a new packet Packet* pkt = allocpkt(); // Access the Ping header for the new packet: hdr_ping* hdr = hdr_ping::access(pkt); // Set the 'ret' field to 0, so the receiving node knows // that it has to generate an echo packet hdr->ret = 0; // Store the current time in the 'send_time' field hdr->send_time = Scheduler::instance().clock(); // Send the packet send(pkt, 0); // return TCL_OK, so the calling function knows that the // command has been processed return (TCL_OK); } } // If the command hasn't been processed by PingAgent()::command, // call the command() function for the base class return (Agent::command(argc, argv));}

Page 13: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

void PingAgent::recv(Packet* pkt, Handler*){ // Access the IP header for the received packet: hdr_ip* hdrip = hdr_ip::access(pkt); // Access the Ping header for the received packet: hdr_ping* hdr = hdr_ping::access(pkt); // Is the 'ret' field = 0 (i.e. the receiving node is being pinged)? if (hdr->ret == 0) {

// Send an 'echo'. First save the old packet's send_timedouble stime = hdr->send_time;// Discard the packetPacket::free(pkt);// Create a new packetPacket* pktret = allocpkt();// Access the Ping header for the new packet:hdr_ping* hdrret = hdr_ping::access(pktret);// Set the 'ret' field to 1, so the receiver won't send another echohdrret->ret = 1;// Set the send_time field to the correct valuehdrret->send_time = stime;// Send the packetsend(pktret, 0);

Page 14: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

} else {// A packet was received. Use tcl.eval to call the Tcl// interpreter with the ping results.// Note: In the Tcl code, a procedure 'Agent/Ping recv {from rtt}'// has to be defined which allows the user to react to the ping// result.char out[100];// Prepare the output to the Tcl interpreter. Calculate the round// trip timesprintf(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 packetPacket::free(pkt);

}}

Page 15: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Ping.tcl

#Define a 'recv' function for the class 'Agent/Ping'Agent/Ping instproc recv {from rtt} {

$self instvar node_puts "node [$node_ id] received ping answer from \

$from with round-trip-time $rtt ms."}

set ns [new Simulator]

set nf [open out.nam w]$ns namtrace-all $nf

#Create three nodesset n0 [$ns node]set n1 [$ns node]

Page 16: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

#Connect the nodes with one link$ns duplex-link $n0 $n1 1Mb 10ms DropTail

#Create two ping agents and attach them to the nodes n0 and n1set p0 [new Agent/Ping]$ns attach-agent $n0 $p0set p1 [new Agent/Ping]$ns attach-agent $n1 $p1

#Connect the two agents$ns connect $p0 $p1

#Schedule events$ns at 0.2 "$p0 send"$ns at 0.4 "$p1 send"$ns at 0.6 "$p0 send"$ns at 0.6 "$p1 send"$ns at 1.0 "finish"

#Run the simulation$ns run

Page 17: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Necessary changes

packet.henum packet_t {

PT_TCP,PT_UDP,

......// insert new packet types herePT_TFRC,PT_TFRC_ACK,

PT_PING, // packet protocol ID for our ping-agentPT_NTYPE // This MUST be the LAST one

};

Page 18: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Necessary changes (cont.)

packet.hclass p_info {public:

p_info() {name_[PT_TCP]= "tcp";name_[PT_UDP]= "udp";

........... name_[PT_TFRC]= "tcpFriend";

name_[PT_TFRC_ACK]= "tcpFriendCtl";

name_[PT_PING]="Ping";

name_[PT_NTYPE]= "undefined";}

..... }

Page 19: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Necessary changes (cont.)

tcl/lib/ns-default.tclAgent/Ping set packetSize_ 64

tcl/lib/ns-packet.tclforeach prot {

AODVARP

aSRM……

Ping } {

add-packet-header $prot}

Page 20: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Necessary changes (cont.)

Makefilesessionhelper.o delaymodel.o srm-ssm.o \srm-topo.o \ping.o \$(LIB_DIR)int.Vec.o $(LIB_DIR)int.RVec.o \$(LIB_DIR)dmalloc_support.o \

Recompile and runmake dependmakens ping.tcl

Page 21: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Packet flow

Page 22: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Node Models -- Wireless Node

Page 23: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Node Models -- LAN

Page 24: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Our Research : Wireless routing

Manet: Mobile Ad hoc Networks– No fixed infrastructure

– Mobile nodes

– Multi-hop wireless network

– Every host act as a router Routing protocol in Manet:

AODV DSR DSDV ……

Target applications:battlefield, border patrol, disaster recovery……

Page 25: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.
Page 26: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

CMU Ad-Hockey– realistic scenario builder– visualizations of the simulation trace files

Scenario: – 1500m * 300m, 50 nodes – propogation range: 250m– max speed: 20m/s– pause time: 0 30 60 120 300 600 900

Our Research : Wireless routing

Page 27: How to Add a New Protocol in NS2 Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:xlming@csnet4.cs.tsinghua.edu.cn June 1, 2001.

Traffic:– CBR 4pkt/s – source number: 10 20 30

Simlation time: 900s Analyze the trace file: perl program Performance metric:

– packet delivery rate– end-end delay– protocol overhead– ……

Our Research : Wireless routing