NS2相关学习——完成一个新协议(3)
生活随笔
收集整理的這篇文章主要介紹了
NS2相关学习——完成一个新协议(3)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在前面已經(jīng)基本學(xué)習(xí)了怎么完成一個新協(xié)議(一個神奇的ping協(xié)議,然鵝還是有點懵。。。)
接下來繼續(xù)學(xué)習(xí)相關(guān)知識
接著上一部分從1開始
1、必要的修改
如果想要添加添加新的代理程序,就需要修改NS源文件中的內(nèi)容,特別是在需要使用新的數(shù)據(jù)包的格式的時候。
① 我們需要一個新的包的類型的ping代理,首先我們需要修改“packet.h”文件,“packet.h”文件中,我們可以找到分組協(xié)議ID(如即PT_TCP,PT_TELNET等)的定義。我們在里面做得修改如下代碼表示:
enum 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 }; 同樣地,我們需要對p_info做出修改,修改形式如下代碼表示 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";}.....}在進(jìn)行'make'之前,你必須做一個'make depend',否則這兩個文件可能不會被重新編譯。文件'tcl / lib / ns-default.tcl'也必須編輯。 這是定義Tcl對象的所有默認(rèn)值的文件。 插入以下行以設(shè)置Agent / Ping的默認(rèn)數(shù)據(jù)包大小。 Agent/Ping set packetSize_ 64 還必須在文件開頭的列表中的文件“tcl / lib / ns-packet.tcl”中添加新的ping數(shù)據(jù)包的條目。 它看起來像下面的代碼片段。
{ SRMEXT off_srm_ext_}{ Ping off_ping_ }} { set cl PacketHeader/[lindex $pair 0] 最后一個更改是必須應(yīng)用到“Makefile”的更改。 必須將文件“ping.o”添加到ns的目標(biāo)文件列表中。
| sessionhelper.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 \ |
您現(xiàn)在只需在ns目錄中鍵入'make'就可以重新編譯ns。
2、TCL代碼
現(xiàn)在我們需要對TCL代碼做一些必要的修改。下面舉recv()為例子,代碼如下:
Agent/Ping instproc recv {from rtt} {$self instvar node_puts "node [$node_ id] received ping answer from \$from with round-trip-time $rtt ms." }以上這段代碼訪問基類“Agent”的成員變量“node_”,以獲取Agent附加的節(jié)點的節(jié)點ID。
我們可以在上面這些基礎(chǔ)上做一些修改,學(xué)會創(chuàng)建自己的Agent。
總結(jié)
以上是生活随笔為你收集整理的NS2相关学习——完成一个新协议(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aix系统升级失败提示java_AIX系
- 下一篇: 代码整洁之道-函数