ns3學習筆記(1)--查找對象可設置的屬性

  已經離開學校2個月了,結束了3年的研究生生涯。這一系列筆記(我還不敢稱呼爲教程,因爲無法形成一個完整的體系,沒有一個詳細的流程)本該在校時完成的,但是由於前期太懶,後期太忙,導致學習過程中我覺得有用的,可以方便新人入手的一些東西沒有輸出。現在已經工作了,以前的東西已經擱置一段時間了,但這些知識還是不想就這樣算了,希望寫出來能夠幫到一些新手,因爲NS3入門確實還是有難度的,僅有的一本中文資料也基本是翻譯官方文檔,沒有太多意義。
  現在開始進入正題,每個學習ns3的新手應該都是從tutorial開始的,文檔加例子,一步一步走下來,c++基礎好的同學,學習能力強的,一遍下來應該能學個大概,嘗試寫自己基本的應用應該沒問題。可是我就是基礎差,學習能力又弱的,入門都入門了好久。核心提示:善用官方的API文檔,我比較喜歡用在線的,方便。
  在剛開始嘗試寫自己的程序時,第一個問題就是,我想設置一些屬性,可是這些設備有哪些屬性可以讓我設置呢?一般一個節點上的設備都是藉助help類去配置。

1.類屬性相關的

PointToPointHelper爲例,打開https://www.nsnam.org/doxygen,在頁面右上角搜索框輸入類名稱,這裏面不區分大小寫,找到PointToPointHelper單擊進入該類的API頁面
右上角搜索結果
下面Public Member Functions就是所有你能夠使用的方法了,再以SetChannelAttribute和SetDeviceAttribute爲例:
這裏寫圖片描述第一個參數是string類型屬性名,第二個是屬性值,單擊more看一下
這裏寫圖片描述
只是對參數表示的意義介紹一下,可是我怎麼知道有哪些屬性可以設置呢?
根據該類的公共成員函數可以看到可以Set Channel 和 Device,那就找PointToPointChanel類,看看這個對象裏面有什麼成員,繼續在右上角搜索PointToPointChanel,找到僅以ns3爲後綴的(僅以ns3爲後綴,表示進入這個類的API,從文檔首開始看,如果ns3後面跟着成員函數點進去,則直接查看該類的這個成員函數的介紹)點進去,單擊類名下方的more查看該類的詳細描述(包含類的屬性、配置路徑和trace source信息)
單擊more
Delay和父類中的ID即是PointToPointHelper的公有成員函數SetChannelAttribute中第一個參數的值,屬性的類型和值的範圍在這裏也給出來了
PointToPointChannel屬性
同理可以找到PointToPointNetDevice可以設置的屬性及取值類型、範圍,這裏要注意,helper類的set方法和對應的設備的類名通常不會一樣,比如PointToPointHelper 有個setDeviceAttribute,但是對應的設備類名叫PointToPointNetDevice,在搜索的時候可以只搜PointToPoint,通過滾動列表查看相關的、需要的類。
PointToPointNetDevice屬性
  還有Wifi、Mesh、蜂窩設備、車聯網、衛星設備都是同理,查找與其相關的netDevice、mac、Channel等類似的具體類實現,通過more查看其可以設置的屬性,設置類型和取值範圍。

2.模式相關的

  以無線設備控制模式爲例,在third.cc中涉及到了wifi通信,其中有一行

wifi.SetRemoteStationManager ("ns3::AarfWifiManager");

wifi是wifihelper類的一個對象,SetRemoteStationManager是其一個公有成員函數,查看其說明
SetRemoteStationManager API說明
只知道一個屬性後面有一堆參數可以設置,可是對於新手來說,例子裏面是這樣設置的,我怎麼知道還有其它的什麼值可以設呢?這與設備的屬性不一樣,其它Manager並不一定是以Aarf開頭的啊。記住我們的核心,善用官方文檔,如果你不知道,你就去API文檔上搜。
搜索結果圖
單擊打開,找到類名下面緊接着的類的繼承圖
類的繼承圖
單擊父類,打開鏈接,繼續打開類的繼承圖
類的繼承關係圖
右側一列都是與AarfWifiManager並列的,你可以用它們替換AarfWifiManager,單擊每個Manager對象可以查看簡單介紹和可以設置的屬性,這些Manager的詳細介紹我都幫你準備好了(關於NS3中各個WifiRemoteStationManager(一)關於NS3中各個WifiRemoteStationManager(二)),根據自己的場景和需要進行設置。

3.無線速率相關的

  前兩個還都有跡可循,這個我是真沒發現文檔裏有關於這個的列表,這個只能靠源碼了。在examples/wireless文件夾下,以wifi-adhoc.cc中的代碼爲例,代碼中有設置無線工作時的速率的參數:

wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                "DataMode", StringValue ("OfdmRate54Mbps"));

這裏面DataMode屬性到底有多少個值可以選呢,請參考源碼鏈接,我認爲這個裏面是比較全的。另外,設置這個的時候需要注意與無線標準相匹配,例如設置無線標準爲802.11b:

wifi.SetStandard (WIFI_PHY_STANDARD_80211b);

那你的無線速率只有以下四個可選:

DsssRate1Mbps ;
DsssRate2Mbps ;
DsssRate5_5Mbps ;
DsssRate11Mbps ;

  在我使用NS3仿真的過程中,僅涉及到了這些,我想其它的應該也類似。

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