NS-3命令行参数

5.13. 在代码中增加logging

首先在first.cc这个code中,我们一开始(在main函数之前)
就已经定义了一个logging component,即:
NS_LOG_COMPONENT_DEFINE("FirstScriptExample");
我们可以通过设定NS_LOG environment variable不同层次来记录信息。
现在我们来修改一下logging component
1) 打开 scratch/myfirst.cc
在终端中输入命令:gedit scratch/myfirst.cc
2) 添加
NS_LOG_INFO(“creating Topology");
到命令:
NodeContainer nodes;
nodes.Create (2);
之前
3) ./waf
export NS_LOG=       //这一步是清除之前设定的NS_LOG变量
./waf --run scratch/myfirst
实际上此时我们运行看不到有什么变化,那是因为相关的logging
component(FirstScriptExample)还没有被激活。为了激活它,在运行前
在终端中输入:

export NS_LOG=FirstScriptExample=info

//因为在代码中设定的level是info所以此处想要显示,这里的level必须要大于等于info

再次运行脚本文件,就能看到我们刚才在code中加入的信息就能

显示在屏幕上

5.2使用命令行参数

5.2.1 覆盖默认属性

另一种不用编辑和重新build就能更改NS-3脚本文件的方法
1.

1) 在脚本文件中要实现加入命令行解析器(command line parser)

这两行简单的命令激活了ns-3 global variable and Atrribute system


2) Build 然后运行


这个命令会命令Waf运行myfirst这个脚本,并且传递命令行参数 --PrintHelp 给脚本文件

双引号用来区分那个程序得到那个参数。命令行解析器会接收到--PrintHelp,然后对

它做出响应


高亮的良好没有显示,原因不明。

2. 接下来看属性系统Attribute system,比如PointToPointNetDevice的属性DataRate,Delay.
根据PrintHelp的提示,我们需要提供一个TypeId给PrintAttribute

./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"

系统会显示出这个网络设备的属性,其中有一条

这里显示的都是系统的默认属性。默认属性会被我们的设定的属性覆盖。
3. 在code中删除设定属性,观察默认属性

4.	./waf
export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time
./waf --run scratch/first

之前自定义属性的时候接收到数据的时间是2.00369s
现在用默认的Dtatrate接收到数据的时间是2.25732s
5. 在命令行中修改DateRate

./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"


设定delay

1) 显示Delay属性

./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"

2) 我们可以同时设定多个属性

./waf --run"scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps --ns3::PointTopointChannel::Delay=2ms"

设定 MaxPackets

1) 将代码中设定MaxPackets的语句变成注释(如过代码中已经设定了属性,命令行是无法覆盖的)

2)	./waf                 //rebuild the script
3)	./waf --run"scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps --ns3::PointTopointChannel::Delay=2ms --ns3::UdpEchoClient::MaxPackets=2"

5.2.2关联自定义值

你可以增加你自己的hooks到命令行系统。通过对命令行解析器(command line parser)使用AddValue method. 我们可以用这个功能实现另一种设定pakets值的方法。

1.  增加一个变量nPackets在main函数中,初始化为1

调用AddValue

 

2.      找到设定MaxPackets属性的命令,将其改为

这是如果你在用 --PrintHelp 你会看到新增加的user argument

  

3.      ./waf --run "scratch/myfirst--nPackets=2"

现在,code中的设定的属性就可以被命令行参数覆盖了

 

 

 

结论: 我们可以用命令行参数系统来控制全局变量和属性。

 

 

 

5.3使用追踪系统(tracingsystem)

模拟的意义在于产生输出结果便于以后的进一步研究。

概念:tracing sources,tracing sinks

Trace sources:entities that can signal events that heppen in a simulation and

Provide access tointeresting underlying data.

Trace sinks: areconsumers of the events and data provided by the trace sources

 

1.      ASCII Tracing

1). 在code中添加

添加到Simulator::Run()之前

第一行用一个 helper object创建 ASCII traces

第二行,括号里创建一个文件"myfirst.rt"并把它传递给NS3

括号外,EnalbeAsciiAll()告诉helper你想要激活所有point-to-point

的ASCII tracing, 你想要trace sinks以ASCII format 输出packet movement的信息

2).  ./waf --run scratch/myfirst

 

   

3). 当你运行这个程序的时候,一个文件"myfirst.tr"已经被创建

并保存在local diractory

可以用 --cwd 来告诉Waf保存目录

 

解析 Ascii Traces

打开myfirst.tr,文件中的每一行代表了一个trace event

我们在transmit queue上追踪事件

Transmit queue is aqueue thorugh which every packet destined

For apoint-to-point channel must pass

每一行以一个单个字符开头

现在将一个事件分成几行来解析

00 代表operation, 加号对应 enqueue operation on transmit queue

01 simulation timein seconds

02 表明这个事件是从哪里开始的。 NodeList代表管理NS-3 core code的 container,

它包含了所有在这个脚本中创建的nodes。 /NodeList/0 代表第0个node

 

 

ns3::PointToPointNetDevice表明在第0个node中有什么设备

TxQueue/Enque对应00行的加号

 

 

 

03-04 表明packet被封装在point-to-point 协议中

05-06 表明这个packet的header,它起源于IP10.1.1.1, 目的地是10.1.1.2

08-09 表明这个packet有一个UDP header

10表明the payload isexpected 1024 bytes

 

第三行表明packet被有网络设备的node (echo server)所接收

02 trace sourcenamespace entry已经改变,表明这个事件起源于node 1

以及trace source 接收的packet(/MacRx)

 

 

2.      PCAP Tracing

NS-3 device helpers也可以以 .pcap的形式生成trace files。

Pcap 代表packet capture

最流行的程序:Wireshark

这里使用的分析程序是tcpdump

                                      i.           激活pcap tracing

pointToPoint.EnablePcapAll("myfirst");

注意,括号内不需要拓展名

将这行代码写入脚本文件中

生成的文件会以前缀,node number, devicenumber 和 , .pcap组成

会有两个文件生成"myfirst-0-0.pcap"和"myfirst-1-0.pcap"

                                    ii.           ./waf --run scratch/myfirst

生成的文件会在当前的操作目录下

  

          iii.     用tcpdum读取输出文件

   

                                  iv.           用Wireshark读取输出文件




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值