如何在NS中添加路由協(xié)議_full.doc_第1頁
如何在NS中添加路由協(xié)議_full.doc_第2頁
如何在NS中添加路由協(xié)議_full.doc_第3頁
如何在NS中添加路由協(xié)議_full.doc_第4頁
如何在NS中添加路由協(xié)議_full.doc_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

在NS2中添加路由協(xié)議(整理版)最近正在研究怎樣把自己新寫的協(xié)議添加到NS2中去,正好借鑒了一些朋友的文章,現(xiàn)在整理下來,以便以后參考,也希望能給廣大博友一些方便。step 1:比如我們新建的協(xié)議名字就叫做protoname,以ns2.27平臺為例,我們在ns2.27目錄下建立一個protoname目錄。此目錄包含protoname.h,protoname.cc,protoname_pkt.h,protoname_rtable.h,protoname_rtable.cc五個文件。其中五個文件的具體功能和作用如下:(1)protoname.h 定義必要的計時器和路由代理(2)protoname.cc 執(zhí)行計時器、路由代理和Tcl文件(3)protoname_pkt.h 聲明protoname路由協(xié)議需要在無線自組網(wǎng)節(jié)點(diǎn)交換的數(shù)據(jù)包(4)protoname_rtable.h 聲明我們自己的路由選擇表(5)protoname_rtable.cc 執(zhí)行路由選擇表step 2:相應(yīng)文件的代碼(1)protoname.h(2)protoname.cc(3)protoname_pkt.h(4)protoname_rtable.h(5)protoname_rtable.ccstep 3:我們需要對ns2中的一些文件進(jìn)行修改,來使這個協(xié)議在tcl中被調(diào)用,需要修改的文件有以下幾個,你可以在ns目錄下找到它們:Common/packet.hTrace/cmu-trace.hTrace/cmu-trace.ccTcl/lib/ns-packet.tclTcl/lib/ns-default.tclTcl/lib/ns-lib.tclQueue/priqueue.ccMakefilestep4:需要修改的具體內(nèi)容(在需要修改的地方添加紅色的字)1.Common/packet.h (兩個需要修改的地方) 增加對新數(shù)據(jù)包類型的支持,可以發(fā)現(xiàn)枚舉中新協(xié)議的名稱和p_info()中的數(shù)組名稱是相對應(yīng)的當(dāng)頭文件定義和函數(shù)定義放在一起可以需要在該文件中或在新路由的.h文件中加入下面一句否則在編譯時HDR_ PROTONAME (p)函數(shù)顯示未定義(待驗(yàn)證)#define HDR_ PROTONAME (p)(hdr_ protoname:access(p)enum packet_t PT_TCP,PT_UDP,PT_CBR,/* . much more packet types . */PT_PROTONAME,PT_NTYPE / This MUST be the LAST one;=p_info() name_PT_TCP= tcp;name_PT_UDP= udp;name_PT_CBR= cbr;/* . much more names . */name_PT_PROTONAME= protoname;2.Trace/cmu-trace.h (一個)為cmu-trace.cc中新增函數(shù)增加函數(shù)聲明class CMUTrace : public Trace /* . definitions . */private:/* . */void format_aodv(Packet *p, int offset);void format_protoname(Packet *p, int offset);3.Trace/cmu-trace.cc (三個,先在最上面加頭文件,在找一個合適的地方加函數(shù))感覺像是增加對各種trace文件的支持#include /* . */voidCMUTrace:format_protoname(Packet *p, int offset)struct hdr_protoname_pkt* ph = HDR_PROTONAME_PKT(p);/生存各種trace文件的格式格式相關(guān)變量必須是包頭中存在的變量if (pt_-tagged() sprintf(pt_-buffer() + offset,-protoname:o %d -protoname:s %d -protoname:l %d ,ph-pkt_src(),ph-pkt_seq_num(),ph-pkt_len();else if (newtrace_) sprintf(pt_-buffer() + offset,-P protoname -Po %d -Ps %d -Pl %d ,ph-pkt_src(),ph-pkt_seq_num(),ph-pkt_len(); else sprintf(pt_-buffer() + offset,protoname %d %d %d , ph-pkt_src(),ph-pkt_seq_num(),ph-pkt_len();=void CMUTrace:format(Packet* p, const char *why)/* . */case PT_PING: break;/根據(jù)類型調(diào)用上面的函數(shù)case PT_PROTONAME:format_protoname(p, offset);break;11:default:/* . */4.Tcl/lib/ns-packet.tcl(一個)foreach prot ProtonameAODVARP # .NV add-packet-header $prot5.Tcl/lib/ns-default.tcl(一個)設(shè)置包頭仿真時的相關(guān)默認(rèn)值 如數(shù)據(jù)包大小、速度等值。根據(jù)需要仿照其他協(xié)議設(shè)置# .# Defaults defined for ProtonameAgent/Protoname set accessible_var_ true6.Tcl/lib/ns-lib.tcl(兩個)設(shè)置創(chuàng)建該路由的方法時的相關(guān)操作和使用該路由協(xié)議時的創(chuàng)建方法等如果協(xié)議需要相關(guān)過程方法需要在./ns-*/tcl/programname/中建立一個programname.tcl,在該文件中加入source ./ programname/programname.tcl. Simulator instproc create-wireless-node args # .switch -exact $routingAgent_ Protoname set ragent $self create-protoname-agent $node# .# .=Simulator instproc create-protoname-agent node # Create Protoname routing agent/注意包頭是應(yīng)該用地址創(chuàng)建還是id如果是id應(yīng)把node-addr改為idset ragent new Agent/Protoname $node node-addr $self at 0.0 $ragent start$node set ragent_ $ragentreturn $ragent7.Queue/priqueue.cc(一個)void PriQueue:recv(Packet *p, Handler *h)struct hdr_cmn *ch = HDR_CMN(p);if (Prefer_Routing_Protocols) switch(ch-ptype() case PT_DSR:case PT_MESSAGE:case PT_TORA:case PT_AODV:case PT_PROTONAME:recvHighPriority(p, h);break;default:Queue:recv(p, h);else Queue:recv(p, h); 8.Makefile(一個)OBJ_CC = tools/random.o tools/rng.o tools/ranvar.o common/misc.o common/timer-handler.o # .protoname/protoname.o protoname/protoname_rtable.o # .$(OBJ_STL)step 5:編譯在ns目錄下輸入下名命令進(jìn)行編譯:$ make clean$ touch common/packet.cc$ make到這里,我們添加新協(xié)議的過程就結(jié)束了。step 6:測試協(xié)議寫完了,要用一個tcl對它進(jìn)行測試,下面這是個很簡單的而且可用的例子set ns new Simulator$ns node-config -Routing protoname set nf open out.nam w $ns namtrace-all $nf set nd open out.tr w $ns trace-all $nd proc finish global ns nfnd $ns flush-trace close $nf close $nd exec nam out.nam & exit 0 for set i 0 $i 7 incr i set n($i) $ns node for set i 0 $i 7 incr i $ns duplex-link $n($i) $n(expr ($i+1)%7) 1Mb 10ms DropTailset udp0 new Agent/UDP $ns attach-agent $n(0) $udp0set cbr0 new Application/Traffic/CBR $cbr0 set packetSize_ 500 $cbr0 set interval_ 0.005 $cbr0 attach-agent $udp0set null0 new Agent/Null$ns attach-agent $n(3) $null0$ns connect $udp0 $null0 $ns at 0.5 $cbr0 start$ns rtmodel-at 1.0 down $n(1)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論