Adding new Protocol to ns2
-
Upload
rajendra-bhosale -
Category
Documents
-
view
81 -
download
1
description
Transcript of Adding new Protocol to ns2
![Page 1: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/1.jpg)
How to Add a New Protocol in NS2
Xu LeimingCSCW Lab. at CS Dept., Tsinghua Univ.
mailto:[email protected]
June 1, 2001
![Page 2: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/2.jpg)
Outline
Overview An Example ---- Ping Packet flow Node models Our research
![Page 3: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/3.jpg)
Overview
New packet header C++ code Tcl code Some necessary changes
![Page 4: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/4.jpg)
Packet Header
![Page 5: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/5.jpg)
Packet Header
![Page 6: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/6.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/7.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/8.jpg)
Overview
New packet header C++ code Tcl code Some necessary changes
![Page 9: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/9.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/10.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/11.jpg)
Ping.cc (cont.)
PingAgent::PingAgent() : Agent(PT_PING){
bind("packetSize_", &size_);}
![Page 12: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/12.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/13.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/14.jpg)
} 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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/15.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/16.jpg)
#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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/17.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/18.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/19.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/20.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/21.jpg)
Packet flow
![Page 22: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/22.jpg)
Node Models -- Wireless Node
![Page 23: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/23.jpg)
Node Models -- LAN
![Page 24: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/24.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/25.jpg)
![Page 26: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/26.jpg)
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: Adding new Protocol to ns2](https://reader030.fdocuments.us/reader030/viewer/2022032612/55cf9d10550346d033ac170d/html5/thumbnails/27.jpg)
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