how to add a new protocol in ns2
Download
Skip this Video
Download Presentation
How to Add a New Protocol in NS2

Loading in 2 Seconds...

play fullscreen
1 / 27

How to Add a New Protocol in NS2 - PowerPoint PPT Presentation


  • 197 Views
  • Uploaded on

How to Add a New Protocol in NS2. Xu Leiming CSCW Lab. at CS Dept., Tsinghua Univ. mailto:[email protected] June 1, 2001. Outline. Overview An Example ---- Ping Packet flow Node models Our research. Overview. New packet header C++ code Tcl code

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'How to Add a New Protocol in NS2' - glenna


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
how to add a new protocol in ns2

How to Add a New Protocol in NS2

Xu Leiming

CSCW Lab. at CS Dept., Tsinghua Univ.

mailto:[email protected]

June 1, 2001

outline
Outline
  • Overview
  • An Example ---- Ping
  • Packet flow
  • Node models
  • Our research
overview
Overview
  • New packet header
  • C++ code
  • Tcl code
  • Some necessary changes
new packet header
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)
new agent
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*)
overview1
Overview
  • New packet header
  • C++ code
  • Tcl code
  • Some necessary changes
ping h
Ping.h

struct hdr_ping {

char ret;

double send_time;

// Header access methods

static int offset_; // required by PacketHeaderManager

inline 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*);

};

ping cc
Ping.cc

int 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;

ping cc cont
Ping.cc (cont.)

PingAgent::PingAgent() : Agent(PT_PING)

{

bind("packetSize_", &size_);

}

slide12

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));

}

slide13

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_time

double stime = hdr->send_time;

// Discard the packet

Packet::free(pkt);

// Create a new packet

Packet* 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 echo

hdrret->ret = 1;

// Set the send_time field to the correct value

hdrret->send_time = stime;

// Send the packet

send(pktret, 0);

slide14

} 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 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);

}

}

ping tcl
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 nodes

set n0 [$ns node]

set n1 [$ns node]

slide16

#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 n1

set p0 [new Agent/Ping]

$ns attach-agent $n0 $p0

set 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

necessary changes
Necessary changes
  • packet.h

enum packet_t {

PT_TCP,

PT_UDP,

......

// insert new packet types here

PT_TFRC,

PT_TFRC_ACK,

PT_PING, // packet protocol ID for our ping-agent

PT_NTYPE // This MUST be the LAST one

};

necessary changes cont
Necessary changes (cont.)
  • packet.h

class 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";

}

.....

}

necessary changes cont1
Necessary changes (cont.)
  • tcl/lib/ns-default.tclAgent/Ping set packetSize_ 64
  • tcl/lib/ns-packet.tclforeach prot { AODV ARP aSRM …… Ping } { add-packet-header $prot }
necessary changes cont2
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 depend make ns ping.tcl
our research wireless routing
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……
our research wireless routing1
Our Research : Wireless routing
  • 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 routing2
Our Research : Wireless routing
  • 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
    • ……
ad