本人在看ns2源**的時候發現有list_head,list_entry,list_init,list_remove等等,經過檢視源**和上網翻閱資料,發現ns2有其自身定義的鍊錶結構,定義在bsd-list.h中,於是寫了個簡短的說明,方便他人使用.由於是自己看源**後自己理解的,如有錯誤,請告知
本文件分三部分
1.原始碼解釋
2.原始碼
3.應用舉例 1.
解釋如下:
list_head(name, type)
是定義乙個結構體
name,
其中包含乙個
type
型別的指標
*lh_first,
用於指向表頭
list_entry(type)
用於定義兩個指標
,*le_next
指向鍊錶的下乙個元素
,**le_prev
指向」address of previous next element」,
即該元素在該佇列中的前乙個元素的
le_next
的位址list_init(head)
初始化(head)->lh_first
為空list_insert_after(listelm, elm, field)
將elm
插在listelm
後面list_insert_before(listelm, elm, field)
將elm
插在listelm
前面list_insert_head(head, elm, field)
將elm
插在表頭,對於
elm,
將le_prev
指向其自身的位址
」(elm)->field.le_prev = &(head)->lh_first」 其中
field
指的是list_entry
中定義的結構體例項
list_remove(elm, field)
從鍊錶中移出
elm
2.原始碼如下:
#define list_head(name, type)/
struct name
#define list_entry(type)/
struct
/** list functions.
*/#definelist_init(head)
#define list_insert_after(listelm, elm, field)
#define list_insert_before(listelm, elm, field)
#define list_insert_head(head, elm, field)
#define list_remove(elm, field)
3.如何使用:
//此例建立了乙個鍊錶,名為
rt_path_list,
該鍊錶中的元素型別為
aodv_path
class aodv_path ;
list_head(aodv_paths, aodv_path);
//定義結構體
aodv_pathsrt_path_list;
// rt_path_list
相當與源**中的
head //
初始化list_init(&rt_path_list);
//在p
元素後插入
path
元素list_insert_after(p, path, path_link);
//在表頭插入
path
list_insert_head(&rt_path_list, path, path_link);
//將path
從鍊錶中刪除
list_remove(path, path_link);
//獲取煉表表頭元素
aodv_path *path = rt_path_list.lh_first;
ns2中變數的繫結
asrmagnet asrmagent bind pdistance pdistance 實變數 bind requerstor requestor 整形變數 bind time lastsent lastsesssent 時間變數 bind bw ctrlimit ctrlbwlimit 帶框變數...
基於ns2的mip切換分析
rel file list href file c 5cdocume 7e1 5ckgn 5clocals 7e1 5ctemp 5cmsohtml1 5c01 5cclip filelist.xml rel edit time data href file c 5cdocume 7e1 5ckgn...
ns2 中得到Agent的例項
下面 說明了如何訪問其他節點的agent,以aodv協議為例 新增以下 到aodv.cc.用這種方法也可以訪問其他物件,比如 mobilenode,等等.aodv aodvagent set i to be the node id char command 256 agent aodv info i...