All time is good time to remember users to contribute to the NS2 wiki;
Now that you have got multiple responses to your question, please take the initiative to document what you have learned in the NS2 wiki! Create a new page if necessary; small steps like these ones are essential to benefit all the NS2 community, and it's the new users like yourself that are the best positioned to document the problems, as they can collect the various answers and comment what actually worked best! This call for help is obviously targeted to all NS2 users; I've only taken this case as an example to show what is the best time to contribute, where multiple answers were provided in the mailing list. Pedro Vale Estrela > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf > Of Sylvester Yorke > Sent: quinta-feira, 22 de Junho de 2006 4:17 > To: Hajer FERJANI > Cc: ns-users@isi.edu > Subject: Re: [ns] Cloning AODV > > > Hajer, thank you for your advice. I've try it and it does work. Now i > can go on to do modification on MYAODV and compare it with original > AODV. > > I really appreciate your help. > > And also thank for other people's info. > > On 21/06/06, Mohammad Abu Zaid <[EMAIL PROTECTED]> wrote: > > Hi > > I think you have to change > > # Special processing for MYAODV > > set myaodvonly [string first "MYAODV" [$agent info class]] > > if {$myaodvonly != -1 } { > > $agent if-queue [$self set ifq_(0)] ;# ifq between LL > and MAC > > } > On 21/06/06, Larry Zhang <[EMAIL PROTECTED]> wrote: > > Hi, > > I can tell another way which I think is simpler to do this clone > stuff, > > for your reference only. > > You can directly change the AODV codes in the ns/aodv/ directory > > without change the name of the directory and files (of > > course you'd better backup the oringal codes first), and rebuild the > codes. > > This approach would cause less problems related to the makefile and > > ns-lib.tcl kind of things, so maybe worth a shot. > > good luck > > Larry > On 21/06/06, Pedro Vale Estrela <[EMAIL PROTECTED]> wrote: > > yes, directly hacking any protocol is fine for small localizations, > > but cloning is one way to go when you need to compare > > your routing protocol to another standard one. > > (other benefit is that I've seen __complete protocols__ hacked inside > > and interleaved with standard ones, and believe me that > > is an horrible mess.) > > Other complixier but cleaner option is to subclass the original > protocol, > > but is complex when Otcl comes into the way. > > Pedro Estrela > On 21/06/06, Hajer FERJANI <[EMAIL PROTECTED]> wrote: > > Hi, > > Make sure "packet.cc" is recompiled by doing "touch packet.cc" and > > then make. Because as changes are done in .h file, the makefile does > > not see changes in .cc and in most cases, changes are not taken into > > account. > > Hope it helps. > > Ciao. > > > > > > On 6/18/06, Sylvester Yorke <[EMAIL PROTECTED]> wrote: > > > > > > Hello, NS-users: > > > > > > I want to create a routing protocol according to AODV, so my first > > > task is to clone AODV. After seeing other ns-users' posts, i do my > > > work in following steps. > > > > > > > > > First, i copy all the files in $NS\aodv\ to a new folder called > > > aodv_lsa and rename all files (i.e. from filename.cc and filename.h to > > > myfilename.cc and myfilename.h), and then i change all the names of > > > C++ classes, packet headers, variables, TCL bindings, ... > > > > > > > > > Second, i make some essential changes according to > > > http://masimum.dif.um.es/nsrt-howto/html/ > > > > > > > > > $NS\common\packet.h > > > enum packet_t { > > > PT_TCP, > > > PT_UDP, > > > PT_CBR, > > > ...... > > > ...... > > > PT_AODV, > > > PT_MYAODV, //added by Xinhao Yu > > > PT_IMEP, > > > ...... > > > ...... > > > PT_NTYPE // This MUST be the LAST one > > > }; > > > ...... > > > ...... > > > class p_info { > > > public: > > > p_info() { > > > name_[PT_TCP]= "tcp"; > > > name_[PT_UDP]= "udp"; > > > name_[PT_CBR]= "cbr"; > > > ...... > > > ...... > > > name_[PT_AODV]= "AODV"; > > > name_[PT_MYAODV]= "MYAODV"; //added by Xinhao Yu > > > name_[PT_IMEP]= "IMEP"; > > > ...... > > > ...... > > > name_[PT_NTYPE]= "undefined"; > > > } > > > ...... > > > ...... > > > }; > > > > > > > > > $NS\trace\cmu-trace.h > > > class CMUTrace : public Trace { > > > ...... > > > ...... > > > void format_aodv(Packet *p, int offset); > > > void format_myaodv(Packet *p, int offset); //added by > Xinhao Yu > > > }; > > > > > > > > > $NS\trace\cmu-trace.cc > > > #include <aodv_lsa/myaodv_packet.h> //added by Xinhao Yu > > > ...... > > > ...... > > > //added by Xinhao Yu > > > void > > > CMUTrace::format_myaodv(Packet *p, int offset) > > > { > > > struct hdr_myaodv *ah = HDR_MYAODV(p); > > > struct hdr_myaodv_request *rq = HDR_MYAODV_REQUEST(p); > > > struct hdr_myaodv_reply *rp = HDR_MYAODV_REPLY(p); > > > > > > > > > switch(ah->ah_type) { > > > case MYAODVTYPE_RREQ: > > > > > > if (pt_->tagged()) { > > > sprintf(pt_->buffer() + offset, > > > "-myaodv:t %x -myaodv:h %d -myaodv:b %d - > myaodv:d %d " > > > "-myaodv:ds %d -myaodv:s %d -myaodv:ss %d " > > > "-myaodv:c REQUEST ", > > > rq->rq_type, > > > rq->rq_hop_count, > > > rq->rq_bcast_id, > > > rq->rq_dst, > > > rq->rq_dst_seqno, > > > rq->rq_src, > > > rq->rq_src_seqno); > > > } else if (newtrace_) { > > > > > > sprintf(pt_->buffer() + offset, > > > "-P myaodv -Pt 0x%x -Ph %d -Pb %d -Pd %d -Pds > %d -Ps %d -Pss %d -Pc > > > REQUEST ", > > > rq->rq_type, > > > rq->rq_hop_count, > > > rq->rq_bcast_id, > > > rq->rq_dst, > > > rq->rq_dst_seqno, > > > rq->rq_src, > > > rq->rq_src_seqno); > > > > > > > > > } else { > > > > > > sprintf(pt_->buffer() + offset, > > > "[0x%x %d %d [%d %d] [%d %d]] (RREQ)", > > > rq->rq_type, > > > rq->rq_hop_count, > > > rq->rq_bcast_id, > > > rq->rq_dst, > > > rq->rq_dst_seqno, > > > rq->rq_src, > > > rq->rq_src_seqno); > > > } > > > break; > > > > > > case MYAODVTYPE_RREP: > > > case MYAODVTYPE_HELLO: > > > case MYAODVTYPE_RERR: > > > > > > if (pt_->tagged()) { > > > sprintf(pt_->buffer() + offset, > > > "-myaodv:t %x -myaodv:h %d -myaodv:d %d - > myadov:ds %d " > > > "-myaodv:l %f -myaodv:c %s ", > > > rp->rp_type, > > > rp->rp_hop_count, > > > rp->rp_dst, > > > rp->rp_dst_seqno, > > > rp->rp_lifetime, > > > rp->rp_type == MYAODVTYPE_RREP ? "REPLY" : > > > (rp->rp_type == MYAODVTYPE_RERR ? "ERROR" : > > > "HELLO")); > > > } else if (newtrace_) { > > > > > > sprintf(pt_->buffer() + offset, > > > "-P myaodv -Pt 0x%x -Ph %d -Pd %d -Pds %d - > Pl %f -Pc %s ", > > > rp->rp_type, > > > rp->rp_hop_count, > > > rp->rp_dst, > > > rp->rp_dst_seqno, > > > rp->rp_lifetime, > > > rp->rp_type == MYAODVTYPE_RREP ? > "REPLY" : > > > (rp->rp_type == MYAODVTYPE_RERR ? > "ERROR" : > > > "HELLO")); > > > } else { > > > > > > sprintf(pt_->buffer() + offset, > > > "[0x%x %d [%d %d] %f] (%s)", > > > rp->rp_type, > > > rp->rp_hop_count, > > > rp->rp_dst, > > > rp->rp_dst_seqno, > > > rp->rp_lifetime, > > > rp->rp_type == MYAODVTYPE_RREP ? "RREP" > : > > > (rp->rp_type == MYAODVTYPE_RERR ? > "ERROR" : > > > "HELLO")); > > > } > > > break; > > > > > > default: > > > #ifdef WIN32 > > > fprintf(stderr, > > > "CMUTrace::format_myaodv: invalid MYAODV packet > type\n"); > > > #else > > > fprintf(stderr, > > > "%s: invalid MYAODV packet type\n", > __FUNCTION__); > > > #endif > > > abort(); > > > } > > > } > > > ...... > > > ...... > > > //added by Xinhao Yu > > > void CMUTrace::format(Packet* p, const char *why) > > > { > > > ...... > > > ...... > > > default: > > > ...... > > > ...... > > > case PT_AODV: > > > format_aodv(p, offset); > > > break; > > > case PT_MYAODV: > > > format_myaodv(p, offset); > > > break; > > > ...... > > > ...... > > > } > > > > > > > > > $NS\tcl\lib\ns-packet.tcl > > > foreach prot { > > > AODV > > > MYAODV ;#added by Xinhao Yu > > > ...... > > > ...... > > > } > > > > > > > > > $NS\tcl\lib\ns-lib.tcl > > > Simulator instproc create-wireless-node args { > > > ...... > > > ...... > > > switch -exact $routingAgent_ { > > > ...... > > > ...... > > > AODV { > > > set ragent [$self create-aodv-agent $node] > > > } > > > MYAODV { > > > set ragent [$self create-myaodv-agent $node] > ;#added by Xinhao Yu > > > } > > > ...... > > > ...... > > > } > > > ...... > > > ...... > > > } > > > ...... > > > ...... > > > # added by Xinhao Yu > > > Simulator instproc create-myaodv-agent { node } { > > > # Create MYAODV routing agent > > > set ragent [new Agent/MYAODV [$node node-addr]] > > > $self at 0.0 "$ragent start" ;# start BEACON/HELLO Messages > > > $node set ragent_ $ragent > > > return $ragent > > > } > > > > > > > > > $NS\queue\priqueue.cc > > > //added by Xinhao Yu > > > void > > > PriQueue::recv(Packet *p, Handler *h) > > > { > > > ...... > > > ...... > > > case PT_AODV: > > > case PT_MYAODV: > > > ...... > > > ...... > > > } > > > > > > > > > $NS\Makefile > > > OBJ_CC = \ > > > ...... > > > ...... > > > aodv/aodv_logs.o aodv/aodv.o \ > > > aodv/aodv_rtable.o aodv/aodv_rqueue.o \ > > > aodv_lsa/myaodv_logs.o aodv_lsa/myaodv.o \ > > > aodv_lsa/myaodv_rtable.o aodv_lsa/myaodv_rqueue.o \ > > > ...... > > > ...... > > > $(OBJ_STL) > > > > > > > > > To be safe, i also modify $NS\tcl\lib\ns-agent.tcl and > > > $NS\tcl\lib\ns-mobilenode.tcl > > > > > > $NS\tcl\lib\ns-agent.tcl > > > Agent/AODV instproc init args { > > > > > > $self next $args > > > } > > > > > > Agent/AODV set sport_ 0 > > > Agent/AODV set dport_ 0 > > > > > > # added by Xinhao Yu > > > Agent/MYAODV instproc init args { > > > > > > $self next $args > > > } > > > > > > Agent/MYAODV set sport_ 0 > > > Agent/MYAODV set dport_ 0 > > > > > > > > > $NS\tcl\lib\ns-mobilenode.tcl > > > Node/MobileNode instproc add-target { agent port } { > > > ...... > > > ...... > > > # Special processing for AODV > > > set aodvonly [string first "AODV" [$agent info class]] > > > if {$aodvonly != -1 } { > > > $agent if-queue [$self set ifq_(0)] ;# ifq between LL > and MAC > > > } > > > # added by Xinhao Yu > > > # Special processing for MYAODV > > > set aodvonly [string first "MYAODV" [$agent info class]] > > > if {$aodvonly != -1 } { > > > $agent if-queue [$self set ifq_(0)] ;# ifq between LL > and MAC > > > } > > > ...... > > > ...... > > > } > > > > > > > > > Third, i compile ns again. > > > After 'make depend', there is no error. Then 'make' and everything is > ok. > > > Then i use a simple tcl script to test my new ns model. I replace AODV > > > with MYAODV. > > > > > > set val(rp) MYAODV ;# Routing: > MYAODV > > > > > > Tcl script runs fine. I get a trace file. Following is a part of it. > > > > > > r 10.000000000 _0_ RTR --- 0 cbr 500 [0 0 0 0] ------- [0:0 6:0 32 0] > [0] 0 0 > > > s 10.000000000 _0_ RTR --- 0 IMEP 48 [0 0 0 0] ------- [0:255 -1:255 > > > 30 0] [0x2 1 1 [6 0] [0 4]] (RREQ) > > > r 10.001360033 _2_ RTR --- 0 IMEP 48 [0 ffffffff 0 800] ------- > > > [0:255 -1:255 30 0] [0x2 1 1 [6 0] [0 4]] (RREQ) > > > r 10.001360033 _1_ RTR --- 0 IMEP 48 [0 ffffffff 0 800] ------- > > > [0:255 -1:255 30 0] [0x2 1 1 [6 0] [0 4]] (RREQ) > > > s 10.001502080 _2_ RTR --- 0 IMEP 48 [0 ffffffff 0 800] ------- > > > [2:255 -1:255 29 0] [0x2 2 1 [6 0] [0 4]] (RREQ) > > > s 10.002241260 _1_ RTR --- 0 IMEP 48 [0 ffffffff 0 800] ------- > > > [1:255 -1:255 29 0] [0x2 2 1 [6 0] [0 4]] (RREQ) > > > r 10.002722107 _3_ RTR --- 0 IMEP 48 [0 ffffffff 2 800] ------- > > > [2:255 -1:255 29 0] [0x2 2 1 [6 0] [0 4]] (RREQ) > > > r 10.002722113 _0_ RTR --- 0 IMEP 48 [0 ffffffff 2 800] ------- > > > [2:255 -1:255 29 0] [0x2 2 1 [6 0] [0 4]] (RREQ) > > > r 10.003936160 _0_ RTR --- 0 IMEP 48 [0 ffffffff 1 800] ------- > > > [1:255 -1:255 29 0] [0x2 2 1 [6 0] [0 4]] (RREQ) > > > r 10.003936177 _7_ RTR --- 0 IMEP 48 [0 ffffffff 1 800] ------- > > > [1:255 -1:255 29 0] [0x2 2 1 [6 0] [0 4]] (RREQ) > > > s 10.010324829 _7_ RTR --- 0 IMEP 48 [0 ffffffff 1 800] ------- > > > [7:255 -1:255 28 0] [0x2 3 1 [6 0] [0 4]] (RREQ) > > > s 10.010886867 _3_ RTR --- 0 IMEP 48 [0 ffffffff 2 800] ------- > > > [3:255 -1:255 28 0] [0x2 3 1 [6 0] [0 4]] (RREQ) > > > r 10.011484852 _6_ RTR --- 0 IMEP 48 [0 ffffffff 7 800] ------- > > > [7:255 -1:255 28 0] [0x2 3 1 [6 0] [0 4]] (RREQ) > > > s 10.011484852 _6_ RTR --- 0 IMEP 44 [0 0 0 0] ------- [6:255 0:255 > > > 30 7] [0x4 1 [6 4] 10.000000] (RREP) > > > r 10.012026894 _2_ RTR --- 0 IMEP 48 [0 ffffffff 3 800] ------- > > > [3:255 -1:255 28 0] [0x2 3 1 [6 0] [0 4]] (RREQ) > > > r 10.016279017 _7_ RTR --- 0 IMEP 44 [13a 7 6 800] ------- [6:255 > > > 0:255 30 7] [0x4 1 [6 4] 10.000000] (RREP) > > > f 10.016279017 _7_ RTR --- 0 IMEP 44 [13a 7 6 800] ------- [6:255 > > > 0:255 29 1] [0x4 2 [6 4] 10.000000] (RREP) > > > > > > But i see that the 7th column packet type in the trace file is IMEP > > > not MYAODV. Could anyone explain to me what's the matter? > > > > > > Thank you in advance. > > > > > > -- > > > > > > Best Regards, > > > > > > Xinhao Yu > > > > > > > > > > > -- > Best Regards > > Xinhao Yu