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));
相比原有的,这次客户端发送了两次分组而非一次