ns2 2.35 mflood協議移植


剛在ns2 2.35版本下移植了mflood協議,主要參照了網上一些ns2.34的資料和《NS網絡模擬和協議仿真》中第11章ns2.29的mflood移植過程。

按照書上的驗證方法,應該是移植成功了。驗證采用書上第四章第2個例子,例子去www.ptpress.com.cn上搜這本書,然后資料里有的下。

 

1. 下載mflood協議

mflood協議我是從csdn上下載的,里面還有leach協議,一會移植下試試。

地址是:http://download.csdn.net/detail/lzq20082009/3365100

壓縮包里有個mfloodtest應該是用來測試的,但是跑了沒什么效果,不太懂,有知情者可以告訴我為啥哈,學習下~~~

2. 在ns-2.35文件夾下建立mflood目錄

如題,在你的ns-2.35目錄下建立mflood目錄,將下載的文件中的,mflood.h, mflood.cc, mflood_packet.h, mflood-seqtable.h, mflood-seqtable.cc放入該文件夾內。

3. ns-2.35/common/packet.h

(1)packet.h是定義分組類型頭文件,這里要修改packet_t的類型。2.35跟2.29很不同,在75行左右說的很清楚:

  自從ns-2.33就修改了,加入了對動態庫的支持。

  packet_t從enum枚舉類型改成了unsigned int類型,為了使得新加動態庫中可以動態定義新的分組。

  預定義的分組類型通過static const來實現。

那么在下面一串 

static const packet_t PT_TCP = 0;
……
……
static packet_t PT_NTYPE = 73; // This MUST be the LAST one

 

這些都是分組類型,最后一行的PT_NTYPE必須是最后一個,那么在這行之前加入PT_MFLOOD類型。

加入划線一行之后如下:

static const packet_t PT_TCP = 0;
……
……
static const packet_t PT_MFLOOD = 73;
static packet_t PT_NTYPE = 74; // This MUST be the LAST one

(2)同樣是這個文件,還需要加入對應分組類型PT_MFLOOD的字符串。

需要p_info類,跟2.29也不一樣了,2.35把賦值語句放到了initName()函數中,找到這個函數,可以把這句依然放到PT_NTYPE之前。

name_[PT_MFLOOD]="MFlood";
name_[PT_NTYPE]="undefined";


4. ns-2.35/tcl/lib/ns-packet.tcl

mflood定義自己的分組頭部,這個頭部需要激活。所以在此文件中修改,添加mflood的頭部。(mflood頭部定義的具體代碼在mflood.cc中,想看的可以去看看這是個啥)。這里的MFlood寫法應該和上一步“”中的一樣,書上貌似寫錯了,寫成了Mflood,f小寫了,應該是大寫的。

#Mobility, Ad-Hoc Networks, Sensor Nets:
MFlood
AODV # WSN protocol for ad-hoc networks

5. ns-2.35/tcl/lib/ns-lib.tcl

(1)在這里添加語句,表示當無線移動節點指定路由協議為MFlood是,將調用create-mflood-agent成員函數進行初始化。

OMNIMCAST {
eval $node addr $args
set ragent [$self create-omnimcast-agent $node]
}
MFlood {
set ragent [$self create-mflood-agent $node]
}

下划線一段加在這個switch語段里就行了,不一定非要加到OMNIMCAST后面。

(2)在末尾加入函數具體定義。

Simulator instproc create-mflood-agent {node} {
set ragent [new Agent/MFlood [$node id]]
$node set ragent_ $ragent
return $ragent
}


6. ns-2.35/Makefile

    修改Makefile文件,加入:

wpan/p802_15_4trace.o wpan/p802_15_4transac.o \
apps/pbc.o \
mflood/mflood.o mflood/mflood-seqtable.o \
$(OBJ_STL)

 

7*. mflood/mflood.cc  mflood/mflood.h

這一步不一定要做,主要看你下載的mflood協議里寫沒寫這些,我下的那個寫了,所以此步驟可以忽略。寫在這只是提個醒,注意檢查下mflood.cc和mflood.h的內容。

(1)mflood.cc中:

else if (strcmp(argv[1], "uptarget") == 0) {
if (*argv[2] == '0') {
……
……}
if (uptarget == 0) {
……
……}
return (TCL_OK);
}
else if (strcasecmp (argv[1], "port-dmux") == 0) {
TclObject *obj;
port_dmux_ = (NsObject *) obj;
return (TCL_OK);
}

(2)mflood.h

// A mechanism for logging the contents of the routing
Trace *logtarget;
NsObject *uptarget_;
NsObject *port_dmux_;

注意有下划線的地方。

8. 重新編譯NS

回到ns-2.35的目錄下,執行make

 

經過以上步驟應該不會出error。

 

9. 驗證移植結果

使用《NS網絡模擬和協議仿真》第4章第2個,3節點無線網的例子來驗證。

將源文件中

set val(rp)    MFlood ;#路由協議更改為MFlood

然后可以另存為mflood-3nodes.tcl

ns運行下,查看結果和trace文件。

大致如此了。







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM