NS3提供了一種通過命令行傳遞參數來輸出和改變腳本中的變量。
在使用命令行機制時,
一 首先要聲明一個命令行類的對象然後調用其函數成員Parse
int main(int argc,char*argv[]){
...
CommandLine cmd;
cmd.Parse(argc,argv);
...
}
這兩行代表用戶可用命令行來訪問代碼中全局變量和NS3的屬性。
以example/tutorial中的first.cc爲例,說明可通過命令行顯示該類在使用中所定義的默認值。
二 在編譯腳本時附加一些額外信息
./waf --run "scratch/myfirst --PrintHelp"
./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"
可以看到腳本中默認屬性DataRate默認值爲32768bit/s,幀最大傳輸單元MTU是1500,網卡地址ff:ff:ff:ff:ff:ff等而在腳本中設這了DataRate爲5Mbit/s,意味者實際運行會覆蓋原始默認值。
三 通過命令行修改屬性值
以echoClient.SetAttribute (“MaxPackets”, UintegerValue (1));爲例說明,原始的這句話就限制了MaxPackets屬性是固定的爲1,如果要改成命令行編譯腳本時自定義可通過:
uint32_t npacks=1;//自定義一個變量
CommandLine cmd;
cmd.AddValue("npacks","Number of packs",npacks);
cmd.Parse(argc,argv);//必須在前三行之後
並
echoClient.SetAttribute ("MaxPackets", UintegerValue (npacks));
相比原有的,這次客戶端發送了兩次分組而非一次