ns2中AODV協議HDR CMN p 的含義

2021-06-16 23:41:04 字數 1407 閱讀 7139

剛開始看

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...