最近在除錯乙個sar協議,需要通過ifq的長度來判斷感測器節點是否發生阻塞。目前,在agent中已經能夠獲取ll和mac介面,檢視了ll.h/cc**,嘗試著直接在agent.cc中獲取:queue* ifq = (queue*)ll->ifq(); 結果發現獲得的指標總為空,目前還不知道具體原因在哪。
但是一種解決方法是通過mac層獲取到ifq的指標,方法是參考下面liu jian的。
1. 因為**用到的是mac 802.11協議,因此修改mac_802-11.h/cc檔案,在其中加入:
#include
queue *ifq_; //定義成員變數
inline queue *ifq()
2. 在mac-802_11.cc中修改command()函式
int mac802_11::command(int argc, const char*const* argv)
else if(strcmp(argv[1],"ifq")==0)
3. 隨後修改tcl/lib/ns-mobilenode.tcl檔案,呼叫上面的方法獲取到ifq的指標:
# mac layer
$mac netif $netif
$mac ifq $ifq
4. 至此已經可以在mac層中獲取ifq的指標了,但是要在路由層或者agent層獲取,還得獲取到mac的指標,這一步可以同上類似實現。
參考:
NS2如何在路由層獲取佇列的長度
最近在除錯乙個sar協議,需要通過ifq的長度來判斷感測器節點是否發生阻塞。目前,在agent中已經能夠獲取ll和mac介面,檢視了ll.h cc 嘗試著直接在agent.cc中獲取 queue ifq queue ll ifq 結果發現獲得的指標總為空,目前還不知道具體原因在哪。但是一種解決方法是...
NS 2跨層設計
ns 2技巧第 一篇 cross layer design 近期我會間斷的寫一些ns2修改 的小技巧,其中有的是網上蒐集出來的,有的則是自己寫的 不過所有的 都是已經經過測試並改良後的,以保 證其正常使用。希望對大家有幫助,互相交流,共同進步!怎樣在任意層訪問下層的資訊 包括 netif,mac,i...
ns2中層之間關聯回顧
在節點接收到資料後,要經過phy.mac層進行依次處理。如下 phy recv packet p,handler else break default printf direction for pkt flow not specified sending pkt up the stack on de...