腳本運行
./war --run scratch/myfirst
日志設置
可以在程序中給程序設置日志級別
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
程序外export命令設置
export NS_LOG=UdpEchoClientApplication=level_all
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:UdpEchoServerApplication=level_all|prefix_func'
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:UdpEchoServerApplication=level_all|prefix_func|prefix_time'
export 'NS_LOG=*=level_all|prefix_func|prefix_time'
export 'NS_LOG=*=level_all|prefix_func|prefix_time'
./waf --run scratch/myfirst > log.out 2>&1
/*
./waf --run scratch/myfirst 1> log.out 2>&1
Linux的IO輸入輸出有三類
Standard Input 代碼 0
Standard Output 代碼 1
Standard Error 代碼 2
2>&1 &1表示類似1,錯誤輸出綁定到1上
*/
export NS_LOG= //清除腳本外ns3日志設置
使用命令行參數(當次運行有效)
CommandLine cmd;
cmd.Parse (argc, argv);//在程序中加入
./waf --run "scratch/myfirst --PrintHelp"
./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"
./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"
./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps --ns3::PointToPointChannel::Delay=2ms --ns3::UdpEchoClient::MaxPackets=2"http://要注釋掉程序中原來的參數
//自己添加命令行參數
uint32_t nPackets = 1;
CommandLine cmd;
cmd.AddValue("nPackets", "Number of packets to echo", nPackets);
//然后再運行./waf --run "scratch/myfirst --PrintHelp"就可以看到自己添加的參數了
./waf --run "scratch/myfirst --nPackets=2"
使用Tracing
Trace發送端是可以在仿真過程中產生信號事件并且提供有關數據訪問通道。
Trace發送端自身是沒有用的,必須要跟接收端提供有用信息的代碼段“相連”。這種發送端和接收端工作的基本原理是允許用戶給已有的tracing發送端關聯上新類型的接收端,而不需要編輯和重新編譯仿真器的核心,一個用戶可以在腳本中定義新的tracing接收端,并且可以將其關聯到仿真核心中定義的tracing接收端
ASCII 碼Tracing
增加以下代碼
#include <iostream>//就可以使用標準的C++輸出
然后,在Simulator::Run()前增加下面的代碼:
AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll(ascii.CreateFileStream("myfirst.tr"));
然后編譯運行,使用trace可以更加詳細的分析仿真過程
啟用pcap tracing
pointToPoint.EnablePcapAll ("myfirst");
用tcpdump讀取結果或者用Wireshark讀取結果
tcpdump -nn -tt -r myfirst-0-0.pcap