在ns2下添加新協議:

在NS2想要添加一個協議,至少要實現如下8個步驟。下面以ns2中的ping爲例子說明,在版本2.29中已存在ping,這裏改爲bing。

1.因爲ping在文件夾apps下,這裏就在該目錄下(自己新建協議時,應該建立新的文件夾bing)新建文件bing.h bing.cc。

2.在bing.h中定義爲packet頭定義一個struct數據類型, 例如 "struct hdr_bing"; ( 仿照 "~ns/apps/ping.h" 文件中的hdr_ping)和一個類BingAgent(仿照PingAgent)

3.在bing.cc中定義BingHeaderClass和BingClass(仿照ping.cc中的類)。

前面三步可以省略,直接在文件夾apps下cp ping.h bing.h和cp ping.cc bing.cc,然後把bing.h和bing.cc中所有的ping,PING,Ping用bing,BING,Bing替代。以下幾步是必要的修改:

4. 在 "~ns/common/packet.h" 文件中,爲 enum packet_t 添加一個新的條目 "PT_BING" ,並在p_into類的構造函數中添加一個新的數組元素 name[PT_BING] = "bing",要注意此處的位置必須對應。

5. 在文件 "~ns/tcl/lib/ns-packet.tcl" 中,在"foreach prot" 中添加"BING" 。

6. 在文件 "~ns/tcl/lib/ns-default.tcl" 中,設置包的默認大小Agent/Bing set packetSize_ 64

7.在文件~ns/makefile中,apps/ping.o後添加apps/bing.o.(apps表示bing.h和bing.cc所在的文件夾,所以如果自己新建了文件夾bing,此處應添加bing/bing.o)

8.保存以上文件後,需要先'make depend'一下,生成依賴關係,然後再'make'。成功後,可以仿照ping.tcl建立一個bing.tcl(在文件中用bing,Bing替換ping,Ping)。接下來就可以運行ns bing.tcl查看結果。

以上各個步驟,步驟2是爲了定義新的包頭格式;步驟3是爲了能夠將該數據包與Otcl聯繫起來;步驟4是爲了在trace中能夠使用該數據包,注意name[PT_TCP]="tcp",其中的 "tcp" 即是出現在trace文件中的第五列,pkt type;步驟5是爲了NS在啓動的時候能夠載入我們定義的包頭。

最後需要注意:如果新建的協議是無線路由協議,則還需要在 "~ns/tcl/lib/ns-lib.tcl" 文件中Simulator的create-wireless-node方法中添加相應的處理。

小結:.h文件中主要定義頭結構體hdr_[name],[name]agent:public agent。結構體中訪問方法部分基本相同,類中要有默認構造函數和命令函數。所有.cc文件中的[name]headerclass和[name]class內容基本相同,主要是類agent中成員函數的實例化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章