NS 3コマンドライン学習


NS 3は、コマンドライン伝達パラメータによってスクリプト内の変数を出力および変更することを提供する.
コマンドラインメカニズムを使用する場合、
まず、コマンドラインクラスのオブジェクトを宣言し、その関数メンバーParseを呼び出します.
int main(int argc,char*argv[]){
...
CommandLine cmd;
cmd.Parse(argc,argv);
...
}

この2つの行は、コード内のグローバル変数およびNS 3の属性にアクセスするためにユーザが使用できるコマンド行を表す.
例えばexample/tutorialのfirst.ccスクリプトにはPointToPointクラスが使用されており、使用中に定義されたデフォルト値をコマンドラインで表示できます.
2スクリプトをコンパイルするときに追加情報を追加します.
./waf --run "scratch/myfirst --PrintHelp"
./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"

三運転結果
yan@ysw:~/NS3/ns-allinone-3.25/ns-3.25$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"
Waf: Entering directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build'
Waf: Leaving directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (0.956s)
Attributes for TypeId ns3::PointToPointNetDevice
    --ns3::PointToPointNetDevice::Address=[ff:ff:ff:ff:ff:ff]
        The MAC address of this device.
    --ns3::PointToPointNetDevice::DataRate=[32768bps]
        The default data rate for point to point links
    --ns3::PointToPointNetDevice::InterframeGap=[+0.0ns]
        The time to wait between packet (frame) transmissions
    --ns3::PointToPointNetDevice::Mtu=[1500]
        The MAC-level Maximum Transmission Unit
    --ns3::PointToPointNetDevice::ReceiveErrorModel=[0]
        The receiver error model used to simulate packet loss
    --ns3::PointToPointNetDevice::TxQueue=[0]
        A queue to use as the transmit queue in the device.

スクリプトのデフォルト属性であるDataRateのデフォルト値は32768 bit/s、フレーム最大転送ユニットMTUは1500、NICアドレスff:ff:ff:ff:ff:ff:ffなど、スクリプトではDataRateが5 Mbit/sに設定されており、実際に実行すると元のデフォルト値が上書きされます.
  PointToPointHelper pointToPoint;
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

デフォルトのDataRateを使用する場合は、スクリプトでpointToPointを使用するだけです.SetDeviceAttributeコメントを削除し、再度実行すると、クライアントアプリケーションの実行開始時間に変化はないが、送信速度が小さくなるためデータ転送時間が長くなる.同様に、遅延/最大パケット送信数などの他の属性変数を変更することができる.
4コマンドラインによる属性値の変更
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));

再コンパイルccスクリプト:
./waf --run "scratch/myfirst --PrintHelp"
実行結果は次のとおりです.
Waf: Entering directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build' Waf: Leaving directory `/home/yan/NS3/ns-allinone-3.25/ns-3.25/build' Build commands will be stored in build/compile_commands.json'build'finished successfully(1.061 s)myfirst[Program Arguments][General Arguments]Program Arguments:--npacks:Number of packs[1]表示される最後の行にプログラムパラメータ(Prigram Arguments)が表示され、--npacksはcmdに対応する.AddValueの最初のパラメータ、Number of packs[1]はcmdに対応する.AddValueの2番目のパラメータ.
実行:
./waf --run "scratch/myfirst --npacks=2"
結果:
At time 2s client sent 1024 bytes to 10.1.1.2 port 9 At time 2.00369s server received 1024 bytes from 10.1.1.1 port 49153 At time 2.00369s server sent 1024 bytes to 10.1.1.1 port 49153 At time 2.00737s client received 1024 bytes from 10.1.1.2 port 9 At time 3s client sent 1024 bytes to 10.1.1.2 port 9 At time 3.00369s server received 1024 bytes from 10.1.1.1 port 49153 At time 3.00369s server sent 1024 bytes to 10.1.1.1 port 49153は従来のものに比べて、今回クライアントは1回ではなく2回のパケットを送信した.