剛開始看
aodv
協議就被兩個函式難到:
hdr_cmn(p)
和hdr_ip(p)
,經查功能都差不多,以
hdr_cmn(p)
為例說明。
**:
struct hdr_cmn *ch = hdr_cmn(p);
結構體hdr_cmn
的定義在:
/ns-allinone-2.34/ns-2.34/common/packet.h
,570
行。hdr_cmn(p)
實際上是乙個巨集命令,在
packet.h的53
行: #define hdr_cmn(p)
(hdr_cmn::access(p))
hdr_cmn::access(p)
的定義在
packet.h
的619
行能找到:
inline static hdr_cmn* access(const packet* p)
這裡實際上是呼叫的類
packet
的access(offset_)
函式,該函式的定義在
484行:
inline unsigned char* access(int off) const
而bits_
是packet
類的成員變數,代表包頭資料,實際上是乙個無符號字串的起始指標,定義如下:
unsigned char* bits_;
// header bits
因此,&bits_[off]
就好理解了,它應該是相對於包頭
off個位元組位址偏移之後的指標。
這樣看來,
hdr_cmn(p)
執行的結果應該是將包頭資料偏移
offset_
個位元組之後的指標強制轉換成
hdr_cmn*
型別之後返回,
offset_
在結構體
hdr_cmn
中定義。
而同樣的,
hdr_ip(p)
返回的也是
packet
中的偏移
offset_
位元組的指標,只不過強制轉換成了
hdr_ip*
型別,同時偏移量
offset_
在結構體
hdr_ip
中定義,與
hdr_cmn(p)
不同。綜上所述,
hdr_cmn(p)
和hdr_ip(p)
實際上都是返回的資料報中的資料指標,只不過偏移量不同而已,其實就是因為這兩個結構體中的資料位於資料報的不同段,通過不同的偏移量取出。
ns2 AODV協議分析
2 協議從接收到乙個分組開始的基本流程 aodv 路由協議主要包括以下幾個元件 1 協議實體 2 路由表 3 定時器 1 廣播定時器 2 週期hello 報文廣播定時器 3 用於鄰居管理的定時器 4 用於路由快取的定時器 5 用於本地修復的定時器 6 快取廣播id 的定時器 4 日誌記錄器 5 路由...
ns2,AODV協議解析
在ns2.27中,aodv路由協議主要包括以下幾個元件 1 協議實體 2 路由表 3 定時器 1 廣播定時器 2 週期hello報文廣播定時器 3 用於鄰居管理的定時器 4 用於路由快取的定時器 5 用於本地修復的定時器 6 快取廣播id的定時器 4 日誌記錄器 5 路由快取佇列 首先來看協議從接收...
在NS2中新添協議
在ns2下進行新協議開發的一般流程 由於ns2使用 物件模型,所以在協議開發的過程中,總是從c 和tcl兩個類入手。流程說明如下 1 定義新的路由協議 在aodv.h中定義class aodv public agent 在ns2中,所有路由協議都是從agent類繼承而來的。其中,recv 函式和co...