3 á
áááºááŒááºážá
3.1 ááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááº
3.2 ááŒáá¯áááºááá¯á¡ááºáá»ááºáá»á¬áž
3.2.1 áááºážááŒá
áºááŸááºáááºážá¡ááŒá
Ạns-3 áá¯ááºáá±ááŸá¯ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒááºážá
3.3 Git ááᯠá¡áá¯á¶ážááŒá¯á ns-3 ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒááºážá
3.3.1 Bake ááᯠá¡áá¯á¶ážááŒá¯á ns-3 ááᯠáááºáá±áááºá
3.4 á
ááºážáá±ážááœá² ns-3
3.4.1 build.py ááŒáá·áº áááºáá±á¬ááºááŒááºážá
3.4.2 áá¯áá·áºáá¯ááºááŒáá·áº áááºáá±á¬ááºááŒááºážá
3.4.3 Waf ááŒáá·áºáááºáá±á¬ááºáá«á
3.5 á
ááºážáááºááŒááºáž ns-3
3.6 áá¬ááºááœáŸááºážááᯠáá¯ááºáá±á¬ááºááŒááºážá
3.6.1 Command line á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬áž
3.6.2 á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážá
3.6.3 á¡áá¯ááºáááºážááœáŸááº
á¡áááºážááŒá®áž 3
á áááºáá²á·áááº
á€á¡áááºážááẠá á¬áááºáá°ááᯠns-3 ááááºáááºáá°ážáá±á¬ ááœááºáá»á°áá¬ááŒáá·áº á áááºááŒááºáááºááẠáááºááœááºáá«áááºá áááºážááẠáá¶á·ááá¯ážáá±ážáá¬ážáá±á¬ ááááºáá±á¬ááºážáá»á¬ážá ááŒáá¯áááºááá¯á¡ááºáá»ááºáá»á¬ážá ns-3 ááá¯ááá°áááºážá ns-3 áááºáá±á¬ááºáá¯á¶ááŸáá·áº áááºááááºáá±á¬ááºáá¯á¶ááŸáá·áº ááá¯ážááŸááºážáá±á¬áááá¯ááááºáá»á¬ážááᯠá ááºážáááºáááºážááá¯á· áá«áááºáááºá
3.1 ááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááº
ns-3 Simulator ááᯠáá°ážáá±á«ááºážáá¯ááºáá±á¬ááºáá±á¬ áá±á¬á·ááºáá²á á¬ááŒáá·áºááá¯ááºáá»á¬ážá á áá áºáá áºáá¯á¡áá±ááŒáá·áº áááºáá±á¬ááºáá¬ážáááºá á ááºážáá±ážááœá²á¡ááœááºážá á¡áá¯á¶ážááŒá¯áá°áááá¯ááááºáá»á¬ážááá¯ááºááᯠá€á á¬ááŒáá·áºááá¯ááºáá»á¬ážááŸáá·áº áá»áááºáááºáá¬ážáááºá C++ ááá¯á·ááá¯áẠPython áááá¯ááááºážáááºážáá¬áá¬á áá¬ážáá»á¬ážááᯠá áááºááŒáá¯ááºáááá¯ááááºáá»á¬ážáá±ážááẠá¡áá¯á¶ážááŒá¯áááºá
Ns-3 ááᯠá¡áááºážá¡ááŒá áºáá¯ááºá¡ááŒá ẠááŒáá·áºáá±áá¬ážáááºá ááá¯ááá¯áááºááŸá¬ áá áºááŸááºá áá áºááœáẠá á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáŠážá áœá¬áááºáá±á¬ááºááŒá®ážáá±á¬áẠá¡áá¯á¶ážááŒá¯áá°áááá¯ááááºááᯠáááºáá±á¬ááºáááºá¡ááœáẠáá±á¬á·ááºáá²ááºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áááºáááºážáá»ááºááŸáááááºááŒá áºáá«áááºá áá°á¡áá ns-3 ááᯠáá®ážááŒá¬ážá áá áºáá áºáá¯á¡ááœáẠá¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ á á¬ááŒáá·áºááá¯ááºáá»á¬ážá¡ááŒá ẠááŒáá·áºáá±ááá¯ááºááŒá®áž á¡áá¬áááºááœáẠáááºážááá¯á·ááᯠá€áááºážááŒáá·áº ááŒáá·áºáá±ááá¯ááºáááºá ááá¯á·áá±á¬áº ááá±á·áá±ááºááœáẠá¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá¡ááŒá¬ážááẠns-3 ááá¯ááºááá¯ááºáááºážááŒááºááŒááºážááŒáá·áº áááºážááá¯á·áá¡áá¯ááºááᯠá¡ááŸááºááááºáá¯ááºáá±á¬ááºáá±ááŒáá±á¬ááŒá±á¬áá·áº á á¬ááŒáá·áºááá¯ááºáá»á¬ážáááºáá±á¬ááºáááºá¡ááœáẠá¡áááºážá¡ááŒá áºáá¯ááºááŸáááŒááºážááẠá¡áá¯á¶ážáááºáá«áááºá áááºáááºááŸá¯á áá áºáá»á¬ážá¡ááœáẠá¡áááºááá·áºáá¯ááºáá¬ážááá·áº á á¬ááŒáá·áºááá¯ááºáá»á¬ážááŸáá·áº áááºáá±á·áá»áºáá»á¬áž áááºáá®ážááŒááºážáá¯ááºáááºážááᯠáá¯ááºááá¯ááºááá¯áá«á áá»á±ážáá°ážááŒá¯á á á¬ááá¯á·á á¬áááºážááᯠáááºááœááºáá«á ns- developer áá»á¬áž.
ááá¯á·áá±á¬áẠns-3 ááᯠáá±á«ááºážáá¯ááºáá¯ááºáááºááŸáá·áº áááºáá±á¬ááºááẠáááºážáááºážáá¯á¶ážááœááºááᯠááŒáá·áºáá«áááºá áááá¡áá»ááºááŸá¬ áááºáááá¯ááºááŸááá¬ážáááºááŒáá·áºáá»áááŸá¯ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž áááºáá±á¬ááºáááºááŒá áºáááºá áá¯áááááŸá¬ á¡ááŒá±áᶠns-3 áááºáááºááŒááºážá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬ážááŸááºáž áááá¹áá°áá»á¬áž ááœá±ážáá»ááºááŒááºážááŸáá·áº á á¯á ááºážááŸá¯ááŒá áºáááºá ááááá¡áá»ááºááŸá¬ ns-3 á¡ááœáẠáá±á¬ááºááẠextensions áá»á¬ážááᯠáááºááẠá¡ááá¯áááºáá±á¬ááºáááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºáááºá áááááá¬áá»á¬ážááẠá¡áááºážáááºááœá²ááŒá¬ážáá±á¬ááŒá±á¬áá·áº áá áºáá¯áá»ááºážá á®ááᯠááŒááºááœá¬ážáá«áááºá
á¡ááœá±á·á¡ááŒá¯á¶ááŸá Linux á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠáááºáá±á·áá»áºáááºáá±áá»á¬ááᯠá¡áá¯á¶ážááŒá¯ááá·áº á¡ááŒá¬ážá á¬ááŒáá·áºááá¯ááºá¡áá»á¬ážá á¯áá²á·ááá¯á· á¡áááºááŒá±á¬áá·áº ns-3 ááᯠáááºáá±á·áá»áºá¡ááŒá Ạááá±ážá¡ááºáááááºážáᯠááœá±ážáá±á¬áááá±áááºá á¡áá»áá¯ážáá»áá¯ážáá±á¬ Linux ááŒáá·áºáá»á®ááŸá¯áá»á¬ážá¡ááœáẠbinary packages áá»á¬áž (á¥ááᬠDebian) ááŸááá±á¬áºáááºážá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá á¯ááẠá á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáááºážááŒááºááŒá®áž ns-3 ááᯠáááºážááá¯á·ááá¯ááºááá¯áẠááŒááºáááºáááºáá±á¬ááºááá±á¬ááŒá±á¬áá·áº áááŸáááá¯ááºááá·áºá¡áááºážá¡ááŒá áºáá¯ááºááŸáááŒááºážááẠá¡áá¯á¶ážáááºáá«áááºá á€á¡ááŒá±á¬ááºážááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡áááºážá¡ááŒá áºá០ááá·áºááœááºážááŒááºážá¡áá±á«áº á¡á¬áá¯á¶á áá¯ááºáá«áááºá
á¡ááá®áá±ážááŸááºážá¡áá»á¬ážá á¯á¡ááœáẠns-3 á¡ááœáá·áºá¡áá±áž á¡ááŒá Ạáááá¯á¡ááºáá«á á¡ááœáá·áºáá°ážááá¶ááá±ážáá±á¬ á¡áá¯á¶ážááŒá¯áá°á¡áá±á¬áá·áºááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯áá¬ážáááºá
3.2 ááŒáá¯áááºááá¯á¡ááºáá»ááºáá»á¬áž
áááŸáááá¯ááºáá±á¬ ns-3 á
á¬ááŒáá·áºááá¯ááºá¡á
á¯áá
áºáá¯áá¯á¶ážááœáẠááŒááºáá¡ááœá²á·á¡á
ááºážá
á¬ááŒáá·áºááá¯ááºáá»á¬ážáá±á«áºááœáẠááŸá®ááá¯ááŸá¯áá»á¬ážá
áœá¬ááŸááá±á¬áºáááºáž á¡áá»á¬ážá
á¯á¡ááœáẠns-3 ááᯠáá¯á¶ (áá¯á¶ááŸááºá¡á¬ážááŒáá·áº ááá·áºááœááºážáá±á·ááŸááááº) á¡á
áááºá¡ááá¯ááºážá¡áá»á¬ážá¡ááŒá¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááŒáá·áº áááºáá±á¬ááºá¡áá¯á¶ážááŒá¯ááá¯ááºáááº- C++ á
á¯á
ááºážááŸá¯á Pythoná á¡áááºážá¡ááŒá
áºáá¯ááºáááºážááŒááºáá° (á¥ááá¬á vim, emacs ááá¯á·ááá¯áẠáá±áááŒááºááŒááºáž) ááŸáá·áº ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž ááááºážáááºážááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áá Git áá¬ážááŸááºáž ááááºážáá»á¯ááºááŸá¯á
áá
áºáá»á¬ážá áááá¡ááŒáááºá¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá
á¯ááẠáááºážááá¯á·áááœá²á·á
ááºážáá¯á¶ááœá²á·á
ááºážáá¯á¶ááœáẠns-3 á¡ááá·áºááŒáá·áºá¡ááºá¹áá«áááºá¡áá»áá¯á·áá»á±á¬ááºáá¯á¶ážáá±áá«á á
áá¯ážááááºá
áá¬áááá¯á¡ááºáá±á¬áºáááºáž á¡ááŒáá·áºá¡áááá·áºááœááºážááá¯áá°áá»á¬ážá¡ááœááºá ááá±á¬áá»ááºááẠá¡áá¯á¶ážáááºáá±á¬á¡ááŒá¶ááŒá¯áá»ááºáá»á¬ážááŸáá·áº ááŸáá·áºááœááºáá»á¬ážá
áœá¬áá«ááŸááá±á¬ á
á¬áá»ááºááŸá¬áá»á¬ážáá«ááŸááá±á¬ wiki áá
áºáá¯ááᯠáá±ážáá«áááºá ááá¯á
á¬áá»ááºááŸá¬ááẠá
áá
áºá¡áá»áá¯ážáá»áá¯ážá¡ááœáẠáááºáááºááŸá¯áááºážááœáŸááºáá»ááºáá»á¬ážáá«ááŸááá±á¬ áááºáááºááŒááºážá
á¬áá»ááºááŸá¬ááŒá
áºáááº-
ဠwiki áááŒáá¯áááºááá¯á¡ááºáá»ááºáá»á¬ážááá¹áááœáẠáá¯á¶ ns-3 ááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠáá¶á·ááá¯ážááẠáááºááá·áºáááºáá±á·áá»áºáá»á¬áž ááá¯á¡ááºááŒá±á¬ááºáž ááŸááºážááŒáá¬ážááŒá®áž áááºážááá¯á·ááᯠLinux ááá¯á·ááá¯áẠmacOS á áá¯á¶á¡ááá¬áá»á¬ážááœáẠááá·áºááœááºážááẠá¡áá¯á¶ážááŒá¯ááá·áº command áá»á¬ážááá¯áááºáž áá±ážáá«áááºá
ns-3 wiki á
á¬áá»ááºááŸá¬ ááá¯á·ááá¯áẠáááºááááºááá¯ááºááᯠáá±á·áá¬ááẠá€á¡ááœáá·áºá¡áá±ážááᯠá¡áá¯á¶ážáá»ááá¯ááºáááº-
áááááá¬á¡á á¯á¶á¡áááº/áá¬ážááŸááºáž
- C++ compiler
clang++ ááá¯á·ááá¯áẠg++ (g++ áá¬ážááŸááºáž 4.9 ááŸáá·áºá¡áááº) - Python ááá¯
python2 áá¬ážááŸááºáž >= 2.7.10á ááá¯á·ááá¯áẠpython3 áá¬ážááŸááºáž >=3.4 - git
áááºááá·áºáá±á¬ááºáá¯á¶ážáá¬ážááŸááºážáááᯠ(GitLab.com ááœáẠns-3 áááºáá±á¬ááºáááº) - áááºážáá°ážáá®
áááºááá·áºáá±á¬ááºáá¯á¶ážáá¬ážááŸááºážáááᯠ(ns-3 áá¯ááºáá±ááŸá¯á¡ááœááºáá¯ááºááá¯ážááŒááºážá¡ááœááº) - bunzip á
áááºááá·áºáá±á¬ááºáá¯á¶ážáá¬ážááŸááºážáááᯠ(ns-3 áá¯ááºáá±ááŸá¯ááᯠáá¯ááºááá¯ážáááºá¡ááœááº)
Python á áá°áááºážáá¬ážááŸááºážááᯠá
á
áºáá±ážáááºá ááá¯ááºááá·áºáá«á python -V
. g++ áá¬ážááŸááºážááᯠá
á
áºáá±ážáááºá ááá¯ááºááá·áºáá«á g++ -v
. áááºááá·áºáááááá¬áá»á¬áž áá»á±á¬ááºáá¯á¶ážáá±ááẠááá¯á·ááá¯áẠáá±á¬ááºážááœááºážáá«áá ns-3 wiki á
á¬áá»ááºááŸá¬ááŸá áááºáááºááŸá¯áááºážááœáŸááºááᯠááá¯ážáá¬ážáá«á
á€á¡áá»ááºááŸá á á á¬áááºáá°ááẠLinuxá MacOS ááá¯á·ááá¯áẠLinux emulator ááá¯á¡áá¯á¶ážááŒá¯áá±ááŒá®áž á¡áááºážáá¯á¶áž á¡áááºáá«áááááá¬áá»á¬áž ááŸááááºáᯠáá»áœááºá¯ááºááá¯á·áá°ááá«áááºá
3.2.1 áááºážááŒá áºááŸááºáááºážá¡ááŒá Ạns-3 áá¯ááºáá±ááŸá¯ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒááºážá
á€áááºááŸá¬ ns-3 á áá±á¬ááºáá¯á¶ážááœááºáá¬ážááŸááºážááŸáá·áº áááºáá±á·áá»áºáá¬ážááŸááºážáá»á¬ážááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž á ááºážáááºááá¯áá±á¬ áá¯á¶ážá áœá²áá°á¡áá áºá¡ááœáẠáá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááŒá áºáááºá ns-3 áá¯ááºáá±ááŸá¯áá»á¬ážááᯠáá»á¯á¶á·áá¬ážáá±á¬áááºážááŒá Ạáá±á¬áºááœááºážááá¯ááºáá»á¬ážá¡ááŒá Ạáá áºáá«áá áºáᶠáá¯ááºáá±áááºá áá²ááá¹áá¬á. áá²ááá¹áá¬á ááá¯ááºáá»á¬ážá áœá¬ááᯠá¡áá°áááœáá±á«ááºážá ááºáá¬ážááá·áº á¡áá°ážáá±á¬á·ááºáá² archive áá±á¬áºáááºáá áºáá¯ááŒá áºáááºá áá±á¬áºááœááºážááᯠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááááááºáá¬ážáááºá ns-3 ááŸáááá·áº boot áá¯ááºáááºážá áẠáá²ááá¹áá¬á ááá¯ážááŸááºážáááºá áááºááẠáá¯ááºáá±ááŸá¯ááᯠááœá±ážáá»ááºáááºá áá±á«ááºážáá¯ááºáá¯ááºááŒá®áž áááºážááᯠáá¯ááºááá¯ážááẠááá¯á¡ááºáááºá
áááºá¡áá¯á¶ážááŒá¯áá°áá áºáŠážá¡áá±ááŒáá·áº ns-3 áá¯áá±á«áºáá±á¬ áá±áááá¯ááºáá¬áááºážááœáŸááºáá áºáá¯ááœáẠáááºáá±á¬ááºááá¯áááºáᯠáá°áááŒáá«á áá¯á· Workspace. á¡á±á¬ááºáá«ááá¯á·ááᯠLinux ááœááºááá¯ážááºáá²ááá¯á· ááŒáá·áºááœááºážááŒááºážááŒáá·áº (ááá·áºáá»á±á¬áºáá±á¬ áá¬ážááŸááºážáá¶áá«ááºáá»á¬ážááᯠá¡á á¬ážááá¯ážááŒááºáž)á
$ cd
$ mkdir workspace
$ cd workspace
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2
$ tar xjf ns-allinone-3.29.tar.bz2
á¡áááºáá±á¬áºááŒáá« á¡áá¯á¶ážá¡áá±á¬ááºáá»á¬ážááᯠááá¯ááŒá¯áá«á wget áááºá¡ááºáá¬áááºá០á¡áá¬ááá¹áá¯áá»á¬ážááᯠáá±á«ááºážáá¯ááºáá¯ááºáááºá¡ááœáẠcommand line tool áá áºáá¯ááŒá áºáááºá áááºážááᯠááááºáááºááá±ážáá«áá áááºážá¡ááœáẠááá·áºááá±á¬ááºáá¬ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
á€á¡ááá·áºáá»á¬ážááᯠááá¯ááºáá¬ááŒááºážááŒáá·áº ááá·áºá¡á¬áž ns-allinone-3.29 directory ááá¯á· áá±á«áºáá±á¬ááºááœá¬ážáááºááŒá áºááŒá®ážá ááá¯áá±áá¬ááœáẠáááºááẠááá¯ááºáá»á¬ážááŸáá·áº áááºážááœáŸááºáá»á¬ážá áœá¬ááᯠááŒááºááœá±á·áááẠááŒá áºáááºá
$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.py
áááºááẠááá¯á¡áá« ns-3 á¡ááŒá±áá¶ááŒáá·áºááŒá°ážááŸá¯ááᯠáááºáá±á¬ááºááẠá¡áááºááá·áºááŒá áºáá±ááŒá®ááŒá áºááŒá®áž ns-3 áááºáá±á¬ááºááŒááºážááá¯ááºáᬠááá¹áááá¯á· áááºááœá¬ážááá¯ááºáá«áááºá
3.3 Git ááᯠá¡áá¯á¶ážááŒá¯á ns-3 ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒááºážá
ns-3 áá¯ááºááᯠGitLab.com ááŸá Git repositories ááœáẠáááá¯ááºáá«áááºá
Git repositories ááᯠá áááºá¡áá¯á¶ážááŒá¯ááẠá¡ááœááºáá°áá¯á¶ážáááºážáááºážááŸá¬ áááºáááºážáá»ááºááᯠáááºážááœá²ááŒááºáž ááá¯á·ááá¯áẠáá¯á¶áá°áá°ážááŒááºáž ááŒá áºáááºá ns-3-allinone. áááºážááẠá¡áá¯á¶ážá¡áá»á¬ážáá¯á¶áž ns-3 á áá áºááœá²áá»á¬ážá loading ááŸáá·áº assembly ááᯠá á®áá¶ááá·áºááœá²ááá·áº script á¡á á¯áá áºáá¯ááŒá áºáááºá á¡áááºá áááºááẠGit ááŸáá·áº á¡áá áºááŒá áºáá«á "fork" ááŸáá·áº "clone" áá°áá±á¬ áá±á«áá¬ááá»á¬ážááẠááá·áºá¡ááœáẠááááºážááŸá®ážááá¯ááºáá«á ááá¯á·ááá¯áá»áŸááºá GitLab.com ááœááºááŸááá±á¬ repository ááᯠá€áá²á·ááá¯á· clone (ááá·áºááá¯ááºááá¯ááºáááá¹áá°ááŒá¯áá¯ááºáááº) ááá¯ážááŸááºážá áœá¬ááŒá¯áá¯ááºááẠá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone
á€á¡ááá·áºááœááºá áááºááááºážááœáŸááºááá¯ááŒáá·áºááŸá¯áá«á ns-3-allinone á¡áááºááœááºáá±á¬áºááŒáá¬ážááá·áº áá¯ááºáá±ááŸá¯ááŸááºáááºážááá¯ááºáááºážááŒá±á¬ááºážááŸáá·áº á¡áááºážáááºááœá¬ááŒá¬ážáááºá áááºážáááºá€áá²á·ááá¯á·áá±á¬áá¯á¶ááá¹áá¬ááºááŸáááá·áºáááº-
$ ls
build.py constants.py download.py README util.py
áá¬ááºááœáŸááºážáá áºáá¯ááŸááá±ááŒá±á¬ááºáž áááááŒá¯áá«á download.pyááá¯á·á¡ááŒáẠns-3 ááŸáá·áº áá°ážááœá²áá«ááŸááá±á¬ á¡áááºážá¡ááŒá áºáá¯ááºááᯠáá¯ááºáá°áá«áááºá á€áá±áá¬ááœáẠááá·áºááœáẠááœá±ážáá»ááºá áá¬áá áºáá¯ááŸááááº- áá±á¬ááºáá¯á¶ážááœáẠns-3 ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá»áŸááºáá áºááŒááºááᯠáá±á«ááºážáá¯ááºáá¯ááºáá«á
$ python download.py
ááá¯á·ááá¯áẠá¡áá¶ááᯠá¡áá¯á¶ážááŒá¯á ns-3 áá¯ááºáá±ááŸá¯ááᯠááá¯ááŸá
áºáááºáááºá -n
áá¯ááºáá±ááŸá¯áá¶áá«ááºááá¯ááœáŸááºááŒáááº-
$ python download.py -n ns-3.29
áá®á¡ááá·áºááŒá®ážáááºáá±á¬á· directory ááá¯ááœá¬ážáá«á ns-3-allinone á¡ááá¯ááá¯ááŸá±á¬ááºááŸá¯áá»á¬ážááᯠáá±á«ááºážáá¯ááºáá¯ááºáá«áááºá ns-3, áá¯ááºáááº, pybindgen О áááºáááº.
ááœá±á¬ááá¯
ááá·áºááŸááºážáá±á¬ Ubuntu16.04 ááŸááá±á¬á
ááºááœááºá áá»áœááºá¯ááºáááºá€ááá¯á· command ááá¯ááŒá±á¬ááºážáááºááá¯á¡ááºáááº- $ sudo python3 download.py -n ns-3.29
(áá±á¬ááºááœáẠáá¬áá¬ááŒááºáá°á ááŸááºá
á¯áá»á¬áž)á
3.3.1 Bake ááᯠá¡áá¯á¶ážááŒá¯á ns-3 ááᯠáááºáá±áááºá
á¡áááºáá±á¬áºááŒáá« áááºážáááºážááŸá áºáᯠ(á¡áááºážá¡ááŒá Ạááá¯ááŸá±á¬ááºááŸá¯ ááá¯á·ááá¯áẠááá¯ááŸá±á¬ááºááŸá¯ ns-3-allinone Git ááŸáááá·áº) ááẠaddons áá»á¬ážá áœá¬ááŒáá·áºá¡ááá¯ážááŸááºážáá¯á¶áž ns-3 áááºáááºááŒááºážááá¯ááá°áááºá¡ááœááºá¡áá¯á¶ážáááºáááºpybindgen Python bindings ááŸáá·áº áááºáá®ážááẠáááºááẠnetwork animation á¡ááœááº)á ns-3-allinone ááœáẠáá°áááºážá¡ááá¯ááºáž áá¶á·ááá¯ážáá±ážáá±á¬ ááááááŒá±á¬áẠááá¯ááŸá±á¬ááºááŸá¯ááᯠáá±á«áºáááºá áá¯ááºáááº.
áá¯áá·áºáá¯áẠns-3 ááá±á¬áá»ááºá¡ááœáẠáá®ááœááºáááºáá®ážáá¬ážááá·áº ááá¯ááŸá±á¬ááºáá±áá¬áá»á¬ážá áœá¬á០áá±á¬á·ááºáá²áá»á¬ážááᯠááŸáááŸáá¯ááºážáááºáá±á¬ááºááŒááºážá¡ááœáẠáááááá¬áá áºáá¯ááŒá áºáááºá áá¯áá·áºáá¯áẠns-3 á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬ážááŸááºážáá»á¬ážááᯠááá°áááºá¡ááŒáẠáááºáááºážáá»ááºáá²á·ááá¯á·áá±á¬ ns-3 ááŒáá·áºááŒá°ážááŸá¯á á¡ááŒá±áá¶áá¬ážááŸááºážá extension áá»á¬ážááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž áááºáá±á¬ááºáááºáááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá ááá¯ááºááá¯ááºáá¯áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯, CradleNetwork Simulation CradlePython bindings á¡áá áºáá»á¬ážááŸáá·áº ns-3 âappsâ á¡áá»áá¯ážáá»áá¯ážááᯠáááºáá®ážááá¯ááºááŸá¯á
ááœá±á¬ááá¯
CradleNetwork Simulation Cradle ááẠnetwork simulator á¡ááœááºážááŸá á
á
áºááŸááºáá±á¬ TCP/IP network stacks áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠááœáá·áºááŒá¯ááá·áº framework áá
áºáá¯ááŒá
áºáááºá
áááºá ns-3 áááºáááºááŸá¯ááœáẠá¡ááá·áºááŒáá·áº ááá¯á·ááá¯áẠá¡ááá¯áá±á¬ááºážá¡ááºá¹áá«áááºáá»á¬áž ááŸááááºáᯠáá»áŸá±á¬áºááá·áºáá«áá áááºááẠá€áááºáááºááŸá¯áááºážááŒá±á¬ááºážááᯠááá¯ááºáá¬ááá¯ááºáááºá
áá±á¬ááºáá¯á¶ážááœáẠns-3 áá»á¬áž áá¯áá·áºáá¯áẠááá¹ááá¬á á±ážááᯠááœáŸááºáááºáá²á·áááºá áá¯ááºáá±ááŸá¯ááœáẠáááºááŸááá¯ááºáá±ááá·áºá¡áá»áááºááœáẠáááºááŸááá±á¬á·ááºáá²áá¬ážááŸááºážáá»á¬ážááᯠáá±á«ááºážáá¯ááºáá¯ááºááá¯ááºááá·áº ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááá¯ááºáá áºáᯠáá«áááºáá«áááºá á¡á²áá«á á¥ááᬠáá¬ážááŸááºážáá«á áá¯áá·áºáá¯ááºáá¯ááºáá±ááŸá¯ ns-3.29 ááŒáá·áº ááŒáá·áºáá±áá¬ážááá·áº ns-3 ááá¯á·ááá¯áẠá¡á á±á¬ááá¯ááºážáá¯ááºááœáŸááºááŸá¯áá»á¬ážá¡ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠááŒááºáááºááá°ááẠá¡áá¯á¶ážááŒá¯áá±á¬áºáááºáž áá±á¬ááºááá¯ááºážááœááºááŸáááŸá¯áá»á¬ážá¡ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠááŒááºáááºááá°ááẠá¡áá¯á¶ážááŒá¯ááááá« (áááºáá±á·áá»áºáá±á¬áºááŒáá»ááºááá¯ááºááŒá áºáá«áá bakeconf.xml ááœááºážáá¶áá¬ážááŒááºáž)á
áá±á¬ááºáá¯á¶áž áááá¹áá°ááá¯áááºáž áááºáááá¯ááºáááºá áá¯ááºáááºáááºá Linux ááœááºááá¯ážááºáá²ááá¯á· á¡á±á¬ááºáá« command ááá¯ááá¯ááºááá·áºááŒááºážááŒáá·áº (ááá·áºááœáẠGit ááá·áºááœááºážáá¬ážáááºáᯠáá°ááááº)á
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.git
git command ááᯠrun áá±á¬á¡áá«ááœááºá á¡á±á¬ááºáá«áá²á·ááá¯á· áá áºáá¯áá¯ááᯠááœá±á·ááááºááŒá áºáá«áááºá
Cloning into 'bake'...
remote: Enumerating objects: 2086, done.
remote: Counting objects: 100% (2086/2086), done.
remote: Compressing objects: 100% (649/649), done.
remote: Total 2086 (delta 1404), reused 2078 (delta 1399)
Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done.
Resolving deltas: 100% (1404/1404), done.
á¡áááá·áºáá±ážááŒá®ážáá±á¬áẠááá¯ááºááœá¬áž á¡áááºáá±ážáá¬ážáá±á¬ áááºážááœáŸááºáá áºáᯠááŸáááá·áºáááºá áá¯ááºáááºá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááẠá€áá²á·ááá¯á·áá±á¬áá¯á¶áá±á«ááºááá·áºáááº-
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO
áááºááẠPython script á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºáá¬ážááŒá±á¬ááºáž áááááŒá¯áá«á áá¯ááºááẠááŸáá·áº XML ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááá¯ááºá áá±á¬ááºáá áºááá·áºááŸá¬ áááºááŸá áºáááºáᬠns-3 ááŒáá·áºáá±ááŸá¯ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž áááºáá±á¬ááºááẠဠscript áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºáááºá á áááºááŒáá¯ááºááŒááºáááºááŸá¯ áá áºááŸááºáá»á¬ážá áœá¬ááᯠáááá¯ááºáááº-
-
ns-3.29: áá¯ááºáá±ááŸá¯ááŸáá·áºáááºááá¯ááºáá±á¬ module; áááºážááẠtarball ááœááºááœááºááŸáááŒááºážááŸáá·áºáááºáá°áá±á¬á¡á áááºá¡ááá¯ááºážáá»á¬ážááá¯áá±á«ááºážáá¯ááºáá¯ááºáááá·áºáááºá
-
ns-3-dev: á¡áá¬ážáá° module áá áºáá¯á áá«áá±ááá·áº development tree áá¯ááºááᯠá¡áá¯á¶ážááŒá¯ááŒá®ážá
-
ns-allinone-3.29â Click routing ááŸáá·áº Network Simulation Cradle á ns-3 á¡ááœáẠOpenflow áá²á·ááá¯á·áá±á¬ á¡ááŒá¬ážá¡ááá¯áá±á¬ááºážá¡ááºá¹áá«áááºáá»á¬ážáá«áááºááá·áº áá±á¬áºáá»á°ážáá áºáá¯á
-
ns-3-allinone: module á ááœááºááŸáááá·áºáá¬ážááŸááºážááŸáá·áº áááºáá°áááºá allinoneáá«áá±ááá·áº development code á¡ááœááºáá«á
ááœá±á¬ááá¯
ááá
áºááŸáááºáá« - routers áá»á¬ážáááºáá®ážáááºá¡ááœáẠmodular software architectureá
Openflow ááẠrouters áá»á¬ážááŸáá·áº switches áá»á¬ážá០data network áá»á¬ážááŸáááá·áº áá±ážááá¯á·áá¬áá±á¬ data áá»á¬ážááᯠprocessing data processing process ááᯠá á®áá¶ááá·áºááœá²áááºá¡ááœáẠprotocol áá áºáá¯ááŒá áºááŒá®áž software ááŸáááºááŸááºáá¬ážáá±á¬ network technology ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
áááºááŸá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ áá»áŸááºáá
áºááŒáẠ(áá¯ááºááœáŸááºááŒááºážááá¯ááºáá±á¬) ns-3 ááᯠá¡á±á¬ááºáá«ááœáẠááœá±á·ááá¯ááºáááº-
áá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážááẠá€ááááºážáááºážááŸá¯áá»á¬ážááᯠáááááºáááºážáá¯ááºáá±á¬ááºááẠááŒáá¯ážá á¬ážáá±á¬áºáááºáž áááºážááá¯á·ááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á§áááá¬ááœááºááŸáááŒá®áž ááá¯ááºáá±ááá±ážáá±á¬áá¯ááºáá»á¬ážáá«ááŸááááºá ááá¯á·ááŒá±á¬áá·áº áááºááẠá¡ááºá¹áá«áááºá¡áá áºáá»á¬ážááᯠá¡áá¯á¶ážáááŒá¯áá«á ááá¬ážáááºáá¯ááºááœáŸááºááŸá¯ááᯠááœá±ážáá»ááºáá«á
repositories á
á¬áááºážááá¯ááŸá¬ááœá±ááŒááºážááŒáá·áºá ááá¯á·ááá¯áẠns-3 áá¯ááºáá±ááŸá¯áááºá
á¬áá»ááºááŸá¬ááá¯á·ááœá¬ážááŒááºážááŒáá·áº áááºááẠáá¯ááºááá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááᯠááŸá¬ááœá±á·ááá¯ááºáááº-
ááá¯áá»áœááºá¯ááºááá¯á·ááá¯á¡ááºáá±á¬ ns-3 á¡á áááºá¡ááá¯ááºážáá»á¬ážááá¯ááá°áááºá áá»áœááºá¯ááºááá¯á·ááẠtool ááá¯á¡áá¯á¶ážááŒá¯áá«áááºá áá¯áá·áºáá¯ááº. á¡áá¯ááºá¡ááŒá±á¬ááºáž áááá«ááºážá áá¬áž á¡áááºážááẠááŒá±á¬ááŒáá·áºáá¡á±á¬áẠáá¯áá·áºáá¯ááº.
áááºáá±á·áá»áºáááºážááŒá áºáá»á¬ážááᯠáááºážááœáŸááºáá áºáá¯áá²ááá¯á· ááá·áºááœááºážááŒááºážááŒáá·áº áá¯áá·áºáá¯ááºáá¯ááºáááºážááᯠáá¯ááºáá±á¬ááºáááºá á¡áááºážá¡ááŒá ẠááŒá®ážáá»áŸáẠá á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠbuild directory ááœáẠááá·áºááœááºážáá«á áá¯áá·áºáá¯áẠbinary ááá¯áááºááœáŸááºážááŒááºážááŒáá·áº run ááá¯ááºáááºá ááá¯á·áá±á¬áºááẠrun ááá¯áá«á áá¯áá·áºáá¯áẠáááºážááᯠáá±á«ááºážáá¯ááºáá¯ááºáá¬ážááá·áº áááºážááœáŸááºááŸááá¯ááºáá²á áááºážááŒá±á¬ááºážááᯠááá·áºááẠá¡ááŒá¶ááŒá¯ááá¯áá«áááºá áá¯ááºááẠáááºááááºážááŒá±á¬ááºáž (PATH áááºáááºážáá»ááºááŒá±á¬ááºážáá²ááá¯ááºáá±á¬)á á¥ááá¬á¡á¬ážááŒáá·áº á¡á±á¬ááºáá«á¡ááá¯ááºáž (á¥ááᬠLinux bash shell)á "bake" directory ááá¯á·ááœá¬ážáá«á ááá¯á·áá±á¬áẠá¡á±á¬ááºáá«áááºáááºážáá»ááºááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáááºááŸááºáá«-
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib
áá®á¡á á®á¡á ááºááᯠáá±áá¬áá»áá±ážááŸá¬áá«á bake.py shell áááºážááŒá±á¬ááºážááá¯á·áá±á¬ááºááŒá®áž á¡ááŒá¬ážáááá¯ááááºáá»á¬ážááᯠáááºážáááºáá®ážáá¬ážááá·áº executable ááŸáá·áº libraries áá»á¬ážááᯠááŸá¬ááœá±ááá¯ááºáááºááŒá áºáááºá áá¯ááºáááº. ááá»áá¯á·ááá á¹á ááœá±ááŸá¬ áá¯á¶ážáááºá áá¯ááºáááºá¡áááºááœááºáá±á¬áºááŒáá¬ážáá±á¬ PATH ááŸáá·áº PYTHONPATH áááºáááºááẠáááá¯á¡ááºáá±á¬áºáááºáž ns-3-allinone (áá±á¬ááºáááºáááºáá±á·áá»áºáá»á¬ážáá«ááŸááá±á¬) á ááŒá®ážááŒáá·áºá á¯á¶áá±á¬áááºáá±á¬ááºááŸá¯ááᯠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááá¯á¡ááºáá«áááºá
ááá·áºáá¯ááºáááºážáááºážááœáŸááºááá¯á· ááœá¬ážá ááœááºááá¯ážááºááœáẠá¡á±á¬ááºáá«ááá¯á·ááᯠááá·áºááœááºážáá«-
$ ./bake.py configure -e ns-3.29
áá±á¬ááºáá áºáá¯áá±ážáááºá áá¯áá·áºáá¯áẠá¡á áááºá¡ááá¯ááºážá¡áá»áá¯ážáá»áá¯ážááᯠáááºááẠáá»áœááºá¯ááºááá¯á·ááœáẠáááááá¬áá»á¬áž áá¯á¶áá±á¬ááºááŸá¯ááŸááááŸá á á áºáá±ážáá«á áá¯ááºážáá±á«áºááá¯ááŸá¯-
$ ./bake.py check
á¡á±á¬ááºáá«áá²á·ááá¯á· áá áºáá¯áá¯ááᯠááŒááºááá«áááºá
> Python - OK
> GNU C++ compiler - OK
> Mercurial - OK
> Git - OK
> Tar tool - OK
> Unzip tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...
á¡áá°ážáááŒáá·áºá Mercurialá CVSá Git ááŸáá·áº Bazaar áá²á·ááá¯á·áá±á¬ á¡ááºáá¯ááºáááááá¬áá»á¬ážááẠáá»áœááºá¯ááºááá¯á·ááᯠáá¯ááºáááá¯ááºá á±áá±á¬ááŒá±á¬áá·áº á€á¡ááá·áºááœáẠáááŸááááŒá áºááá¯á¡ááºáá«áááºá á€á¡áá»áááºááœááºá ááá·áºá áá áºá¡ááœáẠáá¯á¶ááŸááºáááºážáááºážá¡ááá¯ááºáž áá»á±á¬ááºáá¯á¶ážáá±áá±á¬áááááá¬áá»á¬ážááᯠááá·áºááœááºážáá« (áááºáá²á·ááá¯á·áááá«á) ááá¯á·ááá¯áẠááá·áºá áá áºá á®áá¶ááá·áºááœá²áá°ááᯠá¡áá°á¡áá®ááá°ááẠáááºááœááºáá«á
ááá¯á·áá±á¬áẠáá±á¬á·ááºáá²ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒáá·áºáá«-
$ ./bake.py download
ááááºááẠáá áºáá¯áá¯ááŒá áºááá·áºáááº-
>> Searching for system dependency setuptools - OK
>> Searching for system dependency libgoocanvas2 - OK
>> Searching for system dependency gi-cairo - OK
>> Searching for system dependency pygobject - OK
>> Searching for system dependency pygraphviz - OK
>> Searching for system dependency python-dev - OK
>> Searching for system dependency qt - OK
>> Searching for system dependency g++ - OK
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK
>> Downloading netanim-3.108 - OK
>> Downloading ns-3.29 - OK
ááá¯ááá¯áááºááŸá¬ áááºážááŒá áºáá¯á¶ážáá¯ááᯠáá±á«ááºážáá¯ááºáá¯ááºáá¬ážááŒááºážááŒá áºáááºá á¡áááºážá¡ááŒá ẠáááºážááœáŸááºááᯠááœá¬ážááŒá®áž ls ááᯠááá¯ááºááá·áºáá«á ááŒááºááá·áºáááº-
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgen
ááᯠáááºááẠns-3 ááŒáá·áºááŒá°ážááŸá¯ááᯠáááºáá±á¬ááºááẠá¡ááá·áºááŒá áºáá±áá«ááŒá®á
3.4 á ááºážáá±ážááœá² ns-3
ns-3 ááá¯áá±á«ááºážáá¯ááºáá¯ááºááá²á·ááá¯á· ns-3 ááá¯áááºáá±á¬ááºáááºáááºážáááºážáá»á¬ážá áœá¬ááŸááááºá áá»áœááºá¯ááºááá¯á·á¡áá±ážáá±ážááŒá±á¬ááŒá¬ážááá¯áááºááŸá¬ á¡áááá¡áá»ááºááŸá¬ ns-3 áá¯áá±á«áºáá±á¬ build tool ááá¯á¡áá¯á¶ážááŒá¯á áááºáá±á¬ááºáá¬ážááŒááºážááŒá áºáá«áááºá wafá¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáááºá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá á¯ááŸáá·áºá¡áá°á¡áá¯ááºáá¯ááºáá«áááá·áºáááºá wafááá¯á·áá±á¬áº ááá·áºá¡á¬áž á áááºááẠááá¯á·ááá¯áẠááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá á®á ááºáá¬ááœáẠáá°áá®ááẠá¡áá¯á¶ážáááºáá±á¬ Script á¡áááºážáááºááŸááá«áááºá áá«áá²á· áááºáááºááŒá®áž ááááºááẠáá»á±ážáá°ážááŒá¯á wafááŒáá·áºáá«á build.py ááŸáá·áºá ááºážáá±ážááœá²ááŸáá·áºá¡áá° áá¯ááºáááº.
3.4.1 build.py ááŒáá·áº áááºáá±á¬ááºááŒááºážá
ááááá±ážááŒááºáž! á€áááºáá±á¬ááºááŸá¯á¡ááá·áºááẠá¡áááºááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºáž áááŸááá±á¬ á¡áááºážá¡ááŒá Ạarchive áá¬ážááŸááºážááŸáá¬áá»áŸáẠáááŸáááá¯ááºáá«áááºá git ááá¯á·ááá¯áẠbake ááŸáááá·áºáá±á«ááºážáá¯ááºáá¯ááºááá¬ážáá«á
áá¯ááºáá±ááŸá¯ archive ááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬á¡áá« áá²ááá¹áá¬áááœáẠns-3-allinone á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠá á¯á ááºážáá¬ááœáẠááá¯ááá¯ááœááºáá°á á±ááá·áº á¡áá¯á¶ážáááºáá±á¬ script áá áºáá¯ááŸááááºá build.py ááá¯á·áá±á«áºáá«áááºá á€áááá¯ááááºááẠááá·áºá¡ááœáẠá¡áá¯á¶ážáááºáá¯á¶ážáááºážáááºážááŒáá·áº ááá±á¬áá»ááºááᯠáááºááŸááºáá±ážáááºááŒá áºáááºá ááá¯á·áá±á¬áºá ááá¯ááá¯á¡ááá·áºááŒáá·áºáá±á¬ á áá áºááá·áºááœááºážááŒááºážááŸáá·áº ns-3 ááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ns-3 á ááá¯ááºááá¯ááºáááºáá±á¬ááºááŸá¯á áá ẠWaf ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááœáẠáá«áááºááŒá±á¬ááºáž áááááŒá¯áá«á á€áááºáááºážá á¬ááœáẠáá±á¬ááºááá¯ááºážááœáẠááááºáááºáá«áááºá
áá±á«ááºážáá¯ááºáá¯ááºáá¬ážááẠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá áá²ááá¹áá¬áááŒá®ážááẠáááºážáá²á· directory áá²ááŸá¬ ~/ á¡áá¯ááºááœáẠáá¬áááºáá²á·áá°áá²á· directory áá áºáᯠns-allinone-3.29. á¡á±á¬ááºáá«ááá¯á·ááᯠááá·áºáá«
$ ./build.py --enable-examples --enable-tests
áá±á«áºáá²á·á¡áá« build.py áá»áœááºá¯ááºááá¯á·ááẠns-3 ááœáẠáá¯á¶áá±áááºáá±á¬ááºáá¬ážááŒááºážááá¯ááºáá±á¬ á€áááºáááºážá á¬ááœááºá¡áá¯á¶ážááŒá¯ááá·áº ááá°áá¬áá»á¬ážááŸáá·áº á ááºážáááºááŸá¯áá»á¬ážááᯠáááºáá±á¬ááºáááºá¡ááœáẠcommand line arguments áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá²á·áááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá áááá¯ááááºááẠáááŸáááá¯ááºáá±á¬ module á¡á¬ážáá¯á¶ážááá¯áááºáž áááºáá±á¬ááºáá«áááºá ááá¯á·áá±á¬áẠááá¹áááŸááá«áá ááá°áá¬áá»á¬ážááŸáá·áº á ááºážáááºááŸá¯áá»á¬ážááá«áá² ns-3 ááᯠáááºáá±á¬ááºááá¯ááºáááºá ááá¯á·ááá¯áẠááá·áºá¡áá¯ááºá¡ááœáẠáááá¯á¡ááºáá±á¬ module áá»á¬ážááᯠáááºáá¯ááºááá¯ááºáááºá
script á áááºáááºáá¬ážáá²á· á¡á áááºá¡ááá¯ááºážá¡áá»áá¯ážáá»áá¯ážááᯠáááºáá±á¬ááºáá±ážáá²á·á¡ááœáẠcompiler output message á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºááœá±á·áá«áááá·áºáááºá ááááá¯á¶áž áá¬ááºááœáŸááºážááẠáá¬ááœááºážááᯠáááºáá±á¬ááºááẠááŒáá¯ážá á¬ážáááºááŒá áºáááºá áááºáááºááá¯á·áá±á¬áẠbinding áá®ážá áẠpybindgen áá±á¬ááºáá¯á¶ážáá±á¬á· ns-3 áá±á«á·á áá¯ááºáááºážá ááºááŒá®ážááŒá±á¬ááºáá±á¬á¡áá«ááœááºá áááºááẠá¡á±á¬ááºáá«ááá¯á·ááᯠááŒááºááá«áááºá
Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s)
Modules built:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Modules not built (see ns-3 tutorial for explanation):
brite click openflow
Leaving directory ./ns-3.29
á á¬áááºážááá±á¬ááºáá¯á¶ážáá¯á¶ážááá¯ááºážááœáẠááááºáá±á¬ááºááá±ážáá±á¬ module áá»á¬ážá¡ááŒá±á¬ááºáž áááºáá±á·áá»áºáá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºááááº-
Modules not built (see ns-3 tutorial for explanation):
brite click
ááá¯ážááŸááºážá áœá¬ááá¯ááá¯áááºááŸá¬ ááŒááºáá á¬ááŒáá·áºááá¯ááºáá»á¬ážáá±á«áºááœááºáá°áááºáá±á¬ ns-3 áá±á¬áºáá»á°ážá¡áá»áá¯á·ááᯠááááºáá±á¬ááºááá±ážááŒá±á¬ááºážá ááá¯á·ááá¯áẠá€ááœá²á·á ááºážáá¯á¶á¡ááœáẠáááºáá±á¬ááºááẠáááá¯á¡ááºááŒá±á¬ááºáž ááá¯ááá¯áááºá áááºážááẠSimulator ááᯠáááºáááºáá¬ážááŒááºáž áááŸáááŒááºáž ááá¯á·ááá¯áẠáááºáááºáá¬ážáá±á¬ module áá»á¬ážááẠááŸááºáááºá áœá¬ á¡áá¯ááºááá¯ááºáᯠáááá¯ááá¯áá«á
3.4.2 áá¯áá·áºáá¯ááºááŒáá·áº áááºáá±á¬ááºááŒááºážá
ááá±á¬áá»ááºááá¯ááŸá±á¬ááºáá¬áá»á¬ážá០áááºážááŒá áºáá¯ááºááá¯ááá°ááẠá¡áááºááœáẠáá¯ááºááá¯á¡áá¯á¶ážááŒá¯áá«áá ns-3 áááºáá±á¬ááºááẠáááºážááᯠáááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá áá¯ááºážáá±á«áºááá¯ááŸá¯-
$ ./bake.py build
ááŸáá·áºáááºáá²á·ááá¯á·á¡áá¬áá áºáá¯áá¯ááá¯ááŒááºááá«áááº:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OK
á¡áá°á¡áá®: "bake.py deploy" ááá¯áá±á«áºááá¯ááŒááºážááŒáá·áº áá±á«ááºážáá¯ááºáá¯ááºááŒááºážááŸáá·áº áááºáá±á¬ááºááŒááºáž á¡ááá·áºááŸá áºáááºá áá¯á¶ážááᯠáá áºááŒáá¯ááºááẠáá¯ááºáá±á¬ááºááá¯ááºáááºá
á¡á áááºá¡ááá¯ááºážá¡á¬ážáá¯á¶ážááᯠá á¯á ááºážááŸá¯ áá¡á±á¬ááºááŒááºáá±á¬áºáááºáž á¡á áááºá¡ááá¯ááºážáá áºáᯠáááá¯á¡ááºáá«á áááºáááºááŸá¯ áááºáááºáá¯ááºáá±á¬ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááŒá¬áá±ážáá®á áááºáá±á¬ááºáááœááºáá°ááá·áº ááŒá¿áá¬áá áºáá¯ááŒá áºáááºá castxml áááááá¬ááŒáá·áº á á¯á ááºážááá¯ááºáááºá áá¯ááºááẠááááºáá±á¬ááºážá¡á¬ážáá¯á¶ážááœááºááá¯ááºáá«á á€ááá á¹á ááœááºá á€áá²á·ááá¯á·áá±á¬áááºáá±á·ááºá»áá áºáá¯áá±á«áºáá¬áááá·áºáááº-
>> Building castxml - Problem
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.
ááá¯á·áá±á¬áº castxml ááœááºážáá¶áá¬ážáá±á¬ Python bindings áá»á¬ážááᯠáááºáá®ážááá¯áá«ááᬠááá¯á¡ááºáá«áááºá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá á¯á¡ááœáẠ(á¡áááºážáá¯á¶áž áááºážááá¯á·ááẠns-3 ááá¯áááŒá±á¬ááºážááá»ááºáž) áááá¯á¡ááºáá±á¬á·áá«á ááá¯á·ááŒá±á¬áá·áº ááá¯ááááá±ážáá»ááºáá»á¬ážááᯠááá¯áá±á¬áá±á¬áááºááœáẠáá±ážáááºážá áœá¬ áá»á áºáá»á°ááŸá¯áá¬ážááá¯ááºáá«áááºá
á¡áááºáááŒá±áá«á á¡á±á¬ááºáá« command ááẠáá»á±á¬ááºáá¯á¶ážáá±áá±á¬ ááŸá®ááá¯ááŸá¯áá»á¬ážá¡ááŒá±á¬ááºáž á¡ááááºá¡ááŒáœááºáá±ážáá«áááºá
$ ./bake.py show
áááºáááºáá±á¬ááºáááºááŒáá¯ážá á¬ážáá±áá±á¬ áááºáá±á·áá»áºáá»á¬ážá á¡áá»áá¯ážáá»áá¯ážáá±á¬ááŸá®ááá¯á¡á¬ážáá¬ážááŸá¯áá»á¬ážááᯠáá±á¬áºááŒáá«áááºá
3.4.3 Waf ááŒáá·áºáááºáá±á¬ááºáá«á
á€á¡áá»ááºá¡ááá ns-3 ááá¯á áááºáááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠscript ááá¯áá¯á¶ážáááºá build.pyááá¯á·ááá¯áẠáááááᬠáá¯ááºáááº. á€áááááá¬áá»á¬ážááẠns-3 áááºáá±á¬ááºááŒááºážááŸáá·áº á á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠááááºážááááºážááŒááºážá¡ááœáẠá¡áá¯á¶ážáááºáááºá á¡ááŸááºáá±á¬á· áá±á¬ááºááá¯á· áá°ááá¯á·á build tool ááᯠrun áááºá waf ns-3 áááºážááœáŸááºááŸá waf ns-3 á¡áááºážá¡ááŒá áºáá¯ááºááŒáá·áº ááá·áºááœááºážáá¬ážáááºá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá á¯ááẠnsâ3 ááᯠconfigure áá¯ááºááŒá®áž á á¯á ááºážááẠááá¯ááºááá¯ááºá¡áá¯á¶ážááŒá¯ááẠáá»ááºááŒááºá áœá¬ áááºáááºáá¯ááºáá±á¬ááºááŒáááºá waf. ááá¯á·ááŒá±á¬áá·áº áááºáááºáá±á¬ááºááœááºáááºá ááẠáá°ááááºáá®ážáá¬ážááá·áº ns-3 áááºážááœáŸááºááá¯á· ááœá¬ážáá«á
á€á¡áá»áááºááœáẠáááºážáááºážáá»ááºáá»áẠáááá¯á¡ááºáá±á¬áºáááºáž á¡áááºážááẠáá±á¬ááºááŒá±á¬ááºážááŒááºáááºááŸáá·áº ááá±á¬áá»ááºááœá²á·á ááºážáá¯á¶ááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬áž ááŒá¯áá¯ááºáááºážááᯠááŒáá·áºááŸá¯ááẠá¡áá¯á¶ážáááºáá«áááá·áºáááºá áááºááŒá¯áá¯ááºááá¯ááºááá·áº á¡áá¯á¶ážáááºáá¯á¶ážáá±á¬ ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááŒá±á¬ááºážáá²ááŸá¯ááŸá¬ áá¯ááºá á¡áá±á¬ááºážáá¯á¶ážáá¬ážááŸááºážááᯠáááºáá®ážááẠááŒá áºááá¯ááºáááºá áá°áááºážá¡á¬ážááŒáá·áºá áááºááẠááá·áºááá±á¬áá»ááºááᯠá¡ááŸá¬ážááŸá¬ááŒááºááá·áºáá¬ážááŸááºážáá áºáá¯áááºáá±á¬ááºááẠááŒááºáááºáááºááŸááºáá¬ážáááºá á¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáááºáá®ážáááºáá±á¬ááºááẠááá±á¬áá»ááºáá áºáá¯ááᯠááŒáá·áºááŒáá«á áá¯á·á ááá°áá¬áá»á¬ážááŸáá·áº á ááºážáááºááŸá¯áá»á¬áž áá«áááºáá±á¬ á¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáááºáá®ážááá·áºáááºáᯠWaf á¡á¬áž ááŸááºážááŒáááºá áááºááẠá¡á±á¬ááºáá« command áá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááá·áºáááº-
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
ááœáŸáá·áºáááºáá«áááºá waf local directory ááŒááºá (ááá·áºá¡áááºááŒá±áááºá¡ááœááº)á ááá command ááẠáááẠbuild á០clean up ááŒá áºááŒá®ážá áááºážááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº áááºážááŒááºá áœá¬ áááá¯á¡ááºáá±á¬áºáááºáž áááºážááẠáá±á¬ááºážááœááºáá±á¬ á¡áá±á·á¡áá»áá·áºááŒá áºááẠ(á¡á±á¬ááºáá« build profiles ááá¯áááºáž ááŒáá·áºáá«)á áááºážááẠááááºá áááºáá®ážáá¬ážáá±á¬ á á¬ááŒáá·áºááá¯ááºáá»á¬ážááŸáá·áº áááºážááœáŸááºááœááºááŸááá±á¬ á¡áá¬ááá¹áá¯ááá¯ááºáá»á¬ážááᯠáá»ááºáá áºáááºááŒá áºáááºá áááºáá±á¬ááº/. ááá±á¬áá»ááºááᯠááŒááºáááºááŒááºáááºááŒá®áž áááºáá±á¬ááºááŸá¯á áá áºááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ ááŸá®ááá¯ááŸá¯ááᯠá á áºáá±ážáá±á¬á¡áá«á á¡á±á¬ááºáá«ááŸáá·áº áááºáá°áá±á¬ output ááᯠáááºááœá±á·ááá«áááºá
Setting top to : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler) : /usr/bin/gcc
Checking for cc version : 7.3.0
Checking for 'g++' (C++ compiler) : /usr/bin/g++
Checking for compilation flag -march=native support : ok
Checking for compilation flag -Wl,--soname=foo support : ok
Checking for compilation flag -std=c++11 support : ok
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking for program 'python' : /usr/bin/python
Checking for python version >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags : yes
Testing pyext configuration : yes
Checking for compilation flag -fvisibility=hidden support : ok
Checking for compilation flag -Wno-array-bounds support : ok
Checking for pybindgen location : ../pybindgen ,!(guessed)
Checking for python module 'pybindgen' : 0.19.0. ,!post4+g823d8b2
Checking for pybindgen version : 0.19.0. ,!post4+g823d8b2
Checking for code snippet : yes
Checking for types uint64_t and unsigned long equivalence : no
Checking for code snippet : no
Checking for types uint64_t and unsigned long long equivalence : yes
Checking for the apidefs that can be used for Python bindings : gcc-LP64
Checking for internal GCC cxxabi : complete
Checking for python module 'pygccxml' : not found
Checking for click location : not found
Checking for program 'pkg-config' : /usr/bin/pkg- ,!config
Checking for 'gtk+-3.0' : not found
Checking for 'libxml-2.0' : yes
checking for uint128_t : not found
checking for __uint128_t : yes
Checking high precision implementation : 128-bit integer ,!(default)
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for header sys/types.h : yes
Checking for header sys/stat.h : yes
Checking for header dirent.h : yes
Checking for header stdlib.h : yes
Checking for header signal.h : yes
Checking for header pthread.h : yes
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for library rt : yes
Checking for header sys/ioctl.h : yes
Checking for header net/if.h : yes
Checking for header net/ethernet.h : yes
Checking for header linux/if_tun.h : yes
Checking for header netpacket/packet.h : yes
Checking for NSC location : not found
Checking for 'sqlite3' : not found
Checking for header linux/if_tun.h : yes
Checking for python module 'gi' : 3.26.1
Checking for python module 'gi.repository.GObject' : ok
Checking for python module 'cairo' : ok
Checking for python module 'pygraphviz' : 1.4rc1
Checking for python module 'gi.repository.Gtk' : ok
Checking for python module 'gi.repository.Gdk' : ok
Checking for python module 'gi.repository.Pango' : ok
Checking for python module 'gi.repository.GooCanvas' : ok
Checking for program 'sudo' : /usr/bin/sudo
Checking for program 'valgrind' : not found
Checking for 'gsl' : not found python-config : not found
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for program 'doxygen' : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory :
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite))
DES Metrics event collection : not enabled (defaults to disabled)
Emulation FdNetDevice : enabled
Examples : enabled
File descriptor NetDevice : enabled
GNU Scientific Library (GSL) : not enabled (GSL not found)
Gcrypt library : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore : not enabled (library 'gtk+-3.0 >= 3.0' not fou nd)
MPI Support : not enabled (option --enable-mpi not selected)
ns-3 Click Integration : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration : not enabled (Required boost libraries not found)
Network Simulation Cradle : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled
Python API Scanning Support : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled
Real Time Simulator : enabled
SQlite stats data output : not enabled (library 'sqlite3' not found)
Tap Bridge : enabled
Tap FdNetDevice : enabled
Tests : enabled
Threading Primitives : enabled
Use sudo to set suid bit : not enabled (option --enable-sudo not selected)
XmlIo : enabled
'configure' finished successfully (6.387s)
á¡áááºáá±á¬áºááŒáá«á
á¬áááºážá áá±á¬ááºáá¯á¶ážá¡ááá¯ááºážááᯠáááááŒá¯áá«á á¡áá»áá¯á·áá±á¬ ns-3 ááœá±ážá
áá¬áá»á¬ážááᯠáá¯á¶áá±á¡á¬ážááŒáá·áº ááœáá·áºááá¬ážáá« ááá¯á·ááá¯áẠáá±á¬ááºážááœááºá
áœá¬ áá¯ááºáá±á¬ááºááá¯ááºááẠá
áá
áºáá¶á·ááá¯ážááŸá¯ ááá¯á¡ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá XmlTo ááá¯ááœáá·áºáááºá á
á¬ááŒáá·áºááá¯ááºááẠá
áá
áºáá±á«áºááœáẠááŸááá±ááá«áááºá libxml-2.0. á¡áááºá á€á
á¬ááŒáá·áºááá¯ááºááᯠááŸá¬áááœá±á·áá«á áááºááá¯ááºáᬠns-3 áá¯ááºáá±á¬ááºáá»ááºááᯠááœáá·áºááá¬ážáá«á áááºáá±á·áá»áºáá
áºáᯠááŒááá«áááºá áááºážááẠcommand ááá¯á¡áá¯á¶ážááŒá¯áááºááŒá
áºááá¯ááºáááºááá¯áááááŒá¯áá«á sudo á¡áá»áá¯á·áá±á¬áááá¯ááááºáá»á¬ážá¡ááœáẠsuid bit "set group ID at runtime" ááᯠáááºááŸááºáááºá áááºážááᯠáá°áááºážá¡ááá¯ááºáž ááœáá·áºááá¬ážáá±á¬ááŒá±á¬áá·áº á€á¡ááºá¹áá«áááºááᯠâáááœáá·áºáá¬ážâ áᯠáá±á«áºááœááºá
á±áááºá áá±á¬ááºáá¯á¶ážááœááºá ááœáá·áºáá¬ážáá±á¬ ááœá±ážáá»ááºá
áá¬áá»á¬ážá
á¬áááºážááᯠááá°áááºá á¡áá¯á¶ážááŒá¯áá«á waf ááá·áºáááºáá»ááºáá»á¬ážááŸáá·áºá¡áá° --check-config
.
ááᯠááŒááºááœá¬ážáᬠááá°áá¬áá»á¬ážááŸáá·áº á ááºážáááºááŸá¯áá»á¬ážáá«ááŸááá±á¬ á¡ááŸá¬ážá¡ááœááºážáááºáá±á¬ááºááŸá¯ááá¯á· ááŒááºááŒá±á¬ááºážááŒáá«á áá¯á·á
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
áááºáá±á¬ááºááŸá¯á áá áºááẠááá¯á¡áá« á áá áºááá·áºááœááºážáá¬ážááŒá®áž áááºááẠá á¬ááá¯ááºáá¯á¶ááŒáá·áº ns-3 áááá¯ááááºáá»á¬ážá á¡ááŸá¬ážááŸá¬áá¬ážááŸááºážáá»á¬ážááᯠáááºáá±á¬ááºááá¯ááºáááº-
$ ./waf
á¡áááºáá±á¬áºááŒáá«á¡ááá·áºáá»á¬ážááẠááá·áºá¡á¬áž ns-3 á áá áºá á¡á áááºá¡ááá¯ááºážááᯠááŸá áºááŒáááºáááºáá±á¬ááºááẠááœááºážá¡á¬ážáá±ážáá²á·áá±á¬áºáááºáž ááá¯ááœáẠconfiguration ááᯠáááºááá¯á·ááŒá±á¬ááºážáá²áááºááŸáá·áº optimized code áááºáá±á¬ááºááááºááᯠáááºááááœá¬ážáá«ááŒá®á
áá±ážáá¬ážáá±á¬ ááá±á¬áá»ááºááœá²á·á ááºážááŸá¯áá¯á¶á á¶á¡ááœáẠáááºááá·áºáááá¯ááá¯ááºááẠá¡áááºáááºáá±ááŒá±á¬ááºáž á á áºáá±ážáááºá á¡áááá·áºáá áºáᯠááŸááááº-
$ ./waf --check-profile
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debug
á¡áááºáá« áá¬ááºáááºáž build.py ááŒááºážáá¯á¶ááŸá¯áá»á¬ážááá¯áááºáž áá±á¬ááºáá¶áá«áááºá --enable-examples
О --enable-tests
áá«áá±ááá·áº á¡ááŒá¬ážááœá±ážáá»ááºá
áá¬áá»á¬áž waf ááá¯ááºááá¯ááºááá±á¬ááºáá¶á·áá«á á¥ááá¬á¡á¬ážááŒáá·áºá áááºážááẠá¡áá¯ááºáááŒá
áºáá«á
$ ./build.py --disable-python
áá¯á¶á·ááŒááºááŸá¯áááºá€áá²á·ááá¯á·ááŒá áºáááá·áºáááº-
build.py: error: no such option: --disable-python
ááá¯á·áá±á¬áºá á¡áá°ážá¡á±á¬áºááá±áᬠ- - ááŸáááá·áºáá±á¬ááºáááºáá±á¬ááºáá»á¬ážááá¯ááŒááºáááºážáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá wafááá¯á·ááŒá±á¬áá·áº á¡áááºáá« command á¡á á¬áž á¡á±á¬ááºáá« command ááẠá¡áá¯ááºááŒá áºáááá·áºááẠá
$ ./build.py -- --disable-python
á¡ááá command ááá¯áá¯ááºáá±ážáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá ./waf --disable-python ááᯠá á®á ááºáááºááŸááºáááºá. á€áááºááŸá¬ ááááºáááºá¡ááŒá±á¬ááºáž á¡ááŒá¶ááŒá¯áá»ááºá¡áá»áá¯á·ááŒá áºáááºá waf.
áááºáá±á¬ááºááŸá¯ á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááá¯ááºááœááºááŒááºážá
ns-3 áá¯ááºáá±ááŸá¯áá»á¬ážááᯠáá¯á¶ Linux ááŸáá·áº MacOS ááŒáá·áºááŒá°ážááŸá¯áá»á¬ážááœáẠáá¯ááºáá±ááá·áºá¡áá»áááºááœáẠáááŸáááá¯ááºáá±á¬ áá±á¬ááºáá¯á¶ážáá±á«áº C++ ááœááºáá®áá¬áá»á¬ážááœáẠá ááºážáááºáá¬ážáááºá ááá¯á·áá±á¬áºáááºáž á¡áá»áááºááŒá¬áá¬áááºááŸáá·áºá¡áá»áŸá ááŒáá·áºáá±ááŸá¯á¡áá áºáá»á¬ážááẠá á¯á ááºážááŸá¯á¡áá áºáá»á¬ážááŸáá·áºá¡áá° ááœááºááŸááá¬ááŒá®ážá á€á¡áá áºáá±á¬ á á¯á ááºážááŸá¯áá»á¬ážááẠááááá±ážáá»ááºáá»á¬ážááŸáá·áºáááºáááºááŒá®áž ááá¯ááá¯ááá¯ážááœá¬ážáá¬áááºáááºá ns-3 ááẠááááá±ážáá»ááºá¡á¬ážáá¯á¶ážááᯠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážá¡ááŒá Ạáá¯áááẠáááºážá build ááᯠconfigure áá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº áá áºáá«áá áºáá¶ááœáẠáááºááẠá áá áºá¡áá áºáá áºáá¯ááœáẠáá¬ážááŸááºážá¡áá±á¬ááºážááᯠá¡áá¯á¶ážááŒá¯áá±áá«áá compiler ááááá±ážáá»ááºááẠáááºáá±á¬ááºááŸá¯ááᯠáááºááá·áºááœá¬ážááá¯ááºáááºá
á¥ááá¬á¡á¬ážááŒáá·áºá ááááºáá¬ážááŸááºážá¡áá áºáá áºáá¯áá« á ááºááá·áº Fedora 3.28 á¡ááœáẠns-28 ááá¯ááááºáááœááºááŸááá²á·áááºá gcc (gcc-8) Gtk3.28+ ááᯠááá·áºááœááºážááŒááºážááŒáá·áº Fedora 28 á¡á±á¬ááºááœáẠááœááºááŸááá¬ážáá±á¬ ns-2 ááá¯á·ááá¯áẠá¡á á±á¬ááá¯ááºážáá¬ážááŸááºážáá»á¬ážááᯠáááºáá±á¬ááºááŒááºážááŒáá·áº á¡á±á¬ááºáá« á¡ááŸá¬ážá¡ááœááºážáá»á¬áž ááŒá áºáá±á«áºáá¬áá«áááº-
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of â__gtk_reserved1â [-Werror=parentheses] void (*__gtk_reserved1);
nsâ3.28.1 ááŸá áááºá áá¯ááºáá±ááŸá¯áá»á¬ážááœááºá waf á€ááŒá¿áá¬áá»á¬ážááá¯ááŒá±ááŸááºážááẠááœá±ážáá»ááºááœáá·áºáá áºáá¯ááŸááááºá áááºážááẠg++ ááŸáá·áº clang++ ááœáẠ"-Werror" á¡áá¶áááºááŸááºááŒááºážááᯠááááºáá¬ážáááºá áááºážááẠ"--disable-wrror" ááœá±ážáá»ááºááŸá¯ááŒá áºááŒá®áž ááœá²á·á ááºážááŸá¯á¡ááœááºáž ááá·áºááœááºážááááº-
$ ./waf configure --disable-werror --enable-examples --enable-tests
á á®á ááºáááºááŸááºáá« ááá¯á·ááá¯áẠá á¯áá±ážáá«á
á¡áá»áá¯á·á¡áááá·áºáá»á¬áž waf configuration á¡ááá·áºááœááºáᬠá¡áááá¹áá«ááºááŸáááŒá®áž á¡áá»áá¯á·ááŸá¬ build á¡ááá·áºááœááºáᬠá¡áá»á¯á¶ážáááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠns-3 emulation á¡ááºá¹áá«áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯áá«áá áááºááẠáá áºáááºáááºááᯠááœáá·áºááá¯ááºáááºá áá±á¬áẠá¡áá¯á¶ážááŒá¯ááŒááºáž sudoá¡áááºáá±á¬áºááŒáá«á¡ááá¯ááºážá áááºážááẠconfiguration step commands áá»á¬ážááᯠá¡á á¬ážááá¯ážáááºááŒá áºááŒá®ážá á¥ááá¬áá»á¬ážááŸáá·áº á ááºážáááºááŸá¯áá»á¬ážáááºážáá«áááºááá·áº á¡á±á¬ááºáá« command ááᯠá¡áá¯á¶ážááŒá¯á configuration ááᯠáááºááŒá±á¬ááºážáá²ááá¯ááºáááºá
$ ./waf configure --enable-sudo --enable-examples --enable-tests
áá®ááá¯áá¯ááºááẠwaf á áááºáááá·áºááẠsudoááœáá·áºááŒá¯áá»ááºááŒáá·áºáááºáááºááẠemulation code socket áááºáá®ážááŸá¯áááá¯ááááºáá»á¬ážááá¯ááŒá±á¬ááºážáá²ááẠá¡ááŒá áºá á¡ááá¯áá« waf ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááŸáá·áº áááºáá±á¬ááºááŸá¯á¡ááá·áºáá»á¬ážá¡ááœáẠáááŸáááá¯ááºáá±á¬ á¡ááŒá¬ážááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬ááŸááááºá ááá·áºááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠáá±á·áá¬áááºá ááá·áºááœááºážáá«-
$ ./waf --help
áá±á¬ááºá¡ááá¯ááºážááœáẠáá»áœááºá¯ááºááá¯á·ááẠá ááºážáááºááŒááºážááá¯ááºáᬠááœá±ážáá»ááºá áá¬á¡áá»áá¯á·ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
á ááºážáá±ážááœá²ááá¯ááºáá±ážá¡áá»ááºážáá»á¬áž
áááºáááºáá²á·ááá¯á· configure áá¯ááºááá¯ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· ááŒááºááŒá®ážááŒá áºáááºá waf á ááºážáá±ážááœá²áá»á¬ážá¡ááœáẠáá®áá¬áẠО optimized:
$ ./waf --build-profile=debug
á¡áááºá¡ááẠá
á¯áá±ážáá±áž áááá¯ááá¯ááºáááºáž ááŸááááºá ááœáŸááºáá±áž. ááœá±ážáá»ááºááŸá¯ -d
ááŸáá·áº á¡áááá¹áá«ááºáá°áááºá --build-profile
. áááºáá±á¬ááºááŸá¯áááá¯ááá¯ááºááẠááŸááºáááºážááŸááºááŒááºážá á¡áááºááŒá¯áá»ááºáá»á¬ážááŸáá·áº á
á¯á
ááºážááŸá¯ ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááᯠááááºážáá»á¯ááºáááº-
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá ááŸááºáááºážááŸáá·áº á¡áááºááŒá¯áá»ááºáá»á¬ážááᯠá¡ááŸá¬ážááŸá¬ááŒááºáááºááŸá¯áá»á¬ážááœááºáᬠáááá¯ááºáá«áááºá á¡ááŒá¶ááŒá¯áá¬ážáá±á¬ á¡áá±á·á¡áá»áá·áºááŸá¬ ááá·áº script ááᯠá¡ááŸá¬ážááŸá¬ááŒááºáá¯ááºááœáẠááŒá¯á á¯áá»áá¯ážáá±á¬ááºáááºááŒá áºááŒá®ážá ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáá±á¬ áááºáá±á¬ááºáááá¯ááá¯ááºááœáẠáááºáá«ááá²áá² áá¯ááºáá±á¬ááºááŒááºáž (á á¬áááºážááá¬ážáá»á¬áž ááá¯á·ááá¯áẠááá·áºáááºáá»ááºááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá¡ááœááº) ááŒá áºáááºá
ááá·áºááœáẠá¡áá»áá¯á·áá±á¬ áááºáá±á¬ááºááŸá¯ áááá¯ááá¯ááºáá»á¬ážááœááºáᬠáá¯ááºáá±á¬ááºáááá·áº áá¯ááºááŸááá«áá Code Wrapper Macro ááᯠá¡áá¯á¶ážááŒá¯áá«-
NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)
áá¯á¶ááŸáẠwaf build directory ááœáẠartifacts áá»á¬ážáááºáá±á¬ááºáááºáá±áá¬áá»á¬ážá ááœá±ážáá»ááºááœáá·áºááᯠá¡áá¯á¶ážááŒá¯á ááá°áá®áá±á¬ á¡ááœááºáááºážááŒá±á¬ááºážááᯠáááºáááºááŸááºááá¯ááºáááºá -â¯-out
á¥ááá¬:
$ ./waf configure --out=my-build-dir
áááºážááᯠáááºáá±á¬ááºááŸá¯áááá¯ááá¯ááºáá»á¬ážááŸáá·áº áá±á«ááºážá ááºááŒááºážááŒáá·áºá ááá°áá®áá±á¬ á á¯á ááºážááŸá¯ááœá±ážáá»ááºá áá¬áá»á¬ážááŒá¬ážááœáẠá¡ááœááºááá° ááŒá±á¬ááºážááá¯ááºáááº-
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...
á¡ááŒáááºááá¯ááºáž áá±á¬ááºáá¯á¶ážáá±á«áº á ááºážáá±ážááœá²áá»á¬ážááᯠááŒááºáá±ážááẠáááá¯á¡ááºáá² áá»á¬ážá áœá¬áá±á¬ á ááºážáá±ážááœá²áá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááá¯ááºá á±áá«áááºá á¡ááŒá¬ážáááá¯ááá¯ááºááá¯á·ááŒá±á¬ááºážáá±á¬á¡áá«á waf á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬áž áááŒá¯á á¯áá² áá áºáá¯áááºážáᬠá á¯á ááºážáá«áááºá
á€áá¯á¶á á¶ááŒáá·áº áááºáá±á¬ááºáá¬ážáá±á¬ áááá¯ááá¯ááºáá»á¬ážááᯠáááºááŒá±á¬ááºážáá±á¬á¡áá«á áá áºááŒáááºá á®ááœáẠáá°áá®áá±á¬ configuration ááœá±ážá áá¬áá»á¬ážááᯠáá±ážáá±á¬ááºááẠááááá¬ážááẠááá¯á¡ááºáááºá áá»á¬ážá áœá¬áá±á¬ áááºáááºážáá»áẠááááºážááŸááºáá»á¬ážááᯠáááºááŸááºááŒááºážááẠá¡ááŸá¬ážáá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážááẠáá°áá®áá±ážáá«áááº-
$ export NS3CONFIG="--enable-examples --enable-tests"
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized"
$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build
...
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf build
áá±ážááœá²á·ááŒááºážááŸáá·áº á¡áá¶áá»á¬áž
á¡áááºáá«á¥ááá¬áá»á¬ážááœáẠwaf ns-3 ááá¯áááºáá±á¬ááºááẠGCC á០C++ compiler ááá¯á¡áá¯á¶ážááŒá¯ááẠ( g ++) ááá¯á·áá±á¬áº áááºá¡áá¯á¶ážááŒá¯ááá·áºá¡áá¬ááᯠááŒá±á¬ááºážáá²ááá¯ááºáááºá waf CXX environment variable ááᯠáááºááŸááºááŒááºážááŒáá·áº C++ compilerá á¥ááá¬á¡á¬ážááŒáá·áºá C++ compiler Clangá clang++á
$ CXX="clang++" ./waf configure
$ ./waf build
ááá¯áááºážá¡ááá¯ááºážááẠááẠconfigure áá¯ááºááá¯ááºáá«áááºá waf ááŒáá·áºáá±áá¬ážáá±á¬á á¯á ááºážááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááẠdistcc:
$ CXX="distcc g++" ./waf configure
$ ./waf build
distcc ááŸáá·áº ááŒáá·áºáá±á á¯á ááºážááŒááºážááá¯ááºáᬠáá±á¬ááºáááºá¡áá»ááºá¡áááºáá»á¬ážááᯠá á¬ááœááºá á¬áááºážááŒá¯á á¯ááŒááºážááá¹áááŸá ááá±á¬áá»ááºá á¬áá»ááºááŸá¬ááœáẠááœá±á·ááŸáááá¯ááºáá«áááºá ns-3 ááᯠconfigure áá¯ááºáá±á¬á¡áá«ááœáẠcompiler á¡áá¶áá»á¬ážááá·áºáááºá CXXFLAGS_EXTRA áááºáááºážáá»ááºááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ááá¯áá¯á¶ážáá«á
ustanovka
waf á áá áºáá±á«áºááŸá ááá°áá®áá±á¬áá±áá¬áá»á¬ážááœáẠá á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠááá·áºááœááºážááẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá á á¯á ááºážáá¬ážáá±á¬ á á¬ááŒáá·áºááá¯ááºáá»á¬ážááŸáá·áº á á®áá¶áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ á¡áá¬áá»á¬ážááẠáááºážááœáŸááºááœáẠáááºááŸááá±áá«áááºá áááºáá±á¬ááºWaf ááẠá€á á¬ááŒáá·áºááá¯ááºáá»á¬ážááŸáá·áº á á®áá¶áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áááºáá±áá¬ááᯠááááŸááá±á¬ááŒá±á¬áá·áºá á¡ááŒá¬áž áááºááá·áºáá±áá¬ááœááºá០á á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠááá·áºááœááºážááẠáááá¯á¡ááºáá«á
á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠbuild directory ááŒááºáááœáẠinstall áá¯ááºááá¯áá»áŸáẠáááºážááá¯á·ááẠcommand ááᯠrun ááá¯ááºáá«áááºá install áá¯ááºáá«. áááºáááºááŸá¯á¡ááœáẠáá¯á¶áá±ááŸá±á·áááºááŸá¬ / usr / localááá¯ááœá±á¬áá»á· install áá¯ááºáá« áááá¯ááááºáá»á¬ážááᯠinstall áá¯ááºáááá·áºáááºá / usr / local / biná á
á¬ááŒáá·áºááá¯ááºáá»á¬áž / usr / local / lib ááŸáá·áº header ááá¯ááºáá»á¬áž /usr/local/include. Superuser áá¯ááºááá¯ááºááœáá·áºáá»á¬ážááᯠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº áá¯á¶áá±ááŸá±á·áááºááŒáá·áº áááºááŸááºááẠááá¯á¡ááºáááºá ááá¯á·ááŒá±á¬áá·áº áá¯á¶ááŸáẠcommand áá
áºáá¯ááŒá
áºáááºá sudo ./waf ááᯠinstall áá¯ááºáá«á. á
áááºááá·áºá¡áá« Waf ááẠáááºáá±á¬ááºááŸá¯áááºážááœáŸááºááœáẠáá»áŸáá±áá¬ážáá±á¬á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáŠážá
áœá¬á¡áá¯á¶ážááŒá¯ááẠááœá±ážáá»ááºáááºááŒá
áºááŒá®ážá ááá¯á·áá±á¬áẠáá±ááááºáááºážáá»ááºááŸá ááŒááºáááºáá¬ážááá·áº á
á¬ááŒáá·áºááá¯ááºáá»á¬ážáá®ááá¯á· áááºážááŒá±á¬ááºážáá
áºáá»áŸá±á¬ááºááŸá á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠááŸá¬ááœá±áááºááŒá
áºáááºá ááá¯á·ááŒá±á¬áá·áº á
áá
áºáá
áºáá¯ááœáẠá
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠááá·áºááœááºážááá·áºá¡áá« ááŸááºáááºáá±á¬ á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá±ááŒá±á¬ááºáž á
á
áºáá±ážááẠá¡áá±á·á¡áá»áá·áºáá±á¬ááºážáá
áºáá¯ááŒá
áºáááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠconfiguration áá¯ááºáá±á
ááºá¡ááœááºáž ááœá±ážáá»ááºááŸá¯ááᯠáá»á±á¬áºááŒááºááŒááºážááŒáá·áº á¡ááŒá¬ážááŸá±á·áááºáá
áºáá¯ááŒáá·áº ááá·áºááœááºážááẠááœá±ážáá»ááºááá¯ááºáááºá --prefix
á¥ááá¬:
./waf configure --prefix=/opt/local
á¡áááºá áááºáá±á¬ááºááŒá®ážáá±á¬ááºááœááºá á¡áá¯á¶ážááŒá¯áá°ááẠáááºáááºááŸá¯á¡áááá·áºááᯠááá·áºááœááºážáááºá ./waf
ááŸá±á·áááºááᯠá¡áá¯á¶ážááŒá¯áá«áááºá /opt/local.
á¡ááœá²á· ./waf clean
áááºáááºá¡áá¯á¶ážááŒá¯áááºááá¯áá«á ááá±á¬áá»ááºááᯠááŒááºáááºáááºááŸááºááŒááºážáááŒá¯áá® á¡áá¯á¶ážááŒá¯ááá«áááºá waf ááœá²ááŒá¬ážáá±á¬ ááŸá±á·áááºáá
áºáá¯á¡á±á¬ááºááœááºá
ááá¯á·ááŒá±á¬áá·áº ns-3 ááá¯á¡áá¯á¶ážááŒá¯áááºáá±á«áºááá¯áááºáááá¯á¡ááºáá«á ./waf install
. á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá
á¯ááẠá€á¡áááá·áºááᯠáááá¯á¡ááºáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá waf áááºááŸá á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠbuild directory á០áá±á¬ááºáá°áááºá ááá¯á·áá±á¬áº á¡áá»áá¯á·áá±á¬ á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠáááºážááá¯á·á áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááœáẠns-3 directory á¡ááŒááºááẠáááá¯ááááºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáá«á áááºážááẠá¡áá¯á¶ážáááºááŒá±á¬ááºáž ááœá±á·ááŸáááá¯ááºáááºá
Waf áá áºáá¯áááºáž
ns-3 á¡áááºážá¡ááŒá
áºáá
áºáááºá ááááºáááºážá¡ááá·áºááœááºá Waf script áá
áºáá¯áá¬ááŸááááºá áááºá
áááºá¡áá¯ááºáá¯ááºááŒá®ážáááºááŸáá·áºáááºáááºážááœáŸááºááœááºá¡áá»áááºáá»á¬ážá
áœá¬áá¯ááºáá¯á¶ážáááá·áºáááºá scratch/
ááá¯á·ááá¯áẠááá¯áááºáá²áááºásrc/...
áá
áºáá»áááºáááºážááŸá¬ ááŒá±ážááááºá waf. áááºážáááºáá±á¬ááºáá±áá² ááŸááºááááŒá®áž ááŒá±ážááá¯á·ááááºá waf á¡á±á¬ááºáá«á¡ááá¯ááºáž:
$ ../../../waf ...
áá«áá±ááá·áº áá«á áá»ááºážááááŒá®áž á¡ááŸá¬ážá¡ááœááºáž áá»á¬ážáááºáá¬ááá¯á· ááá¯áá±á¬ááºážáá²á· ááŒá±ááŸááºážáááºážááœá± ááŸááá«áááºá á¡áá¯á¶ážáá»á¬ážáá±á¬áááºážáááºážáá áºáá¯ááŸá¬ ááá¯áá²á·ááá¯á·áá±á¬ á á¬áá¬ážáááºážááŒááºááŒááºážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒá áºáááºá emacs ááá¯á·ááá¯áẠvimterminal sessions ááŸá áºáá¯ááá¯ááœáá·áºáá¬ážááá·áºá¡ááœááºá áá áºáá¯ááẠns-3 ááá¯áááºáá±á¬ááºáááºá¡áá¯á¶ážááŒá¯ááŒá®áž áá¯ááááá áºáá¯ááᯠsource code ááá¯áááºážááŒááºáááºá¡áá¯á¶ážááŒá¯áááºá áááºáá¬ááŸááá»áŸáẠáá²ááá¹áá¬áááá¯á·ááá¯áá»áŸáẠáááºáááºážáá»ááºááŒá±á¬ááºážááœá²ááá¯ááºáááº-
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff build
module directory ááœááºáááºážáááºá¡áá±ážá¡ááœá² waf script áá²á·ááá¯á·áá±á¬á¡áá±ážá¡ááœá²ááá¯ááá·áºáááºááœá²áá±á¬ááºááá¯ááºáááºá exec ../../waf
. áá»á±ážáá°ážááŒá¯á á¡á²ááá¯ááá¯ááºáá«áá²á·á áááºážááẠá¡áá
áºá¡áááºážáá»á¬ážá¡ááœáẠááŸá¯ááºááœá±ážá
á±ááŒá®ážá áá¶á·áá»ááºážá
áœá¬áá¯ááºáá±á¬ááºáá«áá ááŸá¬ááœá±ááááºáá±á¬ áááºáá±á¬ááºááŸá¯á¡ááŸá¬ážáá»á¬ážááᯠáŠážáááºá
á±áááºá á¡áááºáá±á¬áºááŒáá« ááŒá±ááŸááºážáááºážáá»á¬ážááẠá¡áá¯á¶ážááŒá¯ááá·áºááá·áº áááºážááŒá±á¬ááºážááŒá
áºáááºá
3.5 á ááºážáááºááŒááºáž ns-3
script ááᯠrun ááŒááºážááŒáá·áº áááºááẠns-3 ááŒáá·áºááŒá°ážááŸá¯ááá°áá áºá ááºážáááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºá ./test.py:
$ ./test.py
á€á á áºáá±ážááŸá¯áá»á¬ážááŸáá·áºá¡ááŒáá¯áẠáá¯ááºáá±á¬ááºáááºá waf. áá±á¬ááºáá¯á¶ážááœáẠáááºááŒá±á¬áá±á¬ áááºáá±á·áá»áºááᯠááœá±á·ááá«áááºá
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
á€áááºááŸá¬ valgrind áá»ááºá á®ážááŸá¯áá»á¬ážá áá»ááºá á®ážááŸá¯áá»á¬áž ááá¯á·ááá¯áẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠáá±á¬áºáá¯ááºáááºá¡ááœáẠá¡áá±ážááŒá®ážáá±á¬ ááááºážá áá¬ážááŒá áºááŒá®ážá áá¯ááºááŸáá·áº áááááá¬áá»á¬ážááŸáá·áº áá¯ááºááŒá¬ážááœáẠáááá¯ááºáá®ááŸá¯ ááá¯á·ááá¯áẠááŒá¿áá¬áá»á¬ážááᯠááœáŸááºááŒáááºá
áá¶á០áá±á¬ááºáá¯á¶ážááœááºááŸáááŸá¯ááá¯áááºáž ááŒááºááœá±á·ááááºááŒá áºáááºá waf ááŸáá·áº á ááºážáááºááŸá¯áá áºáá¯á á®ááᯠáá¯ááºáá±á¬ááºáá±ááá·áº á ááºážáááºáá°áá áºáŠážá
Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (1.799s)
Modules built:
aodv applications bridge
click config-store core
csma csma-layout dsdv
emu energy flow-monitor
internet lte mesh
mobility mpi netanim
network nix-vector-routing ns3tcp
ns3wifi olsr openflow
point-to-point point-to-point-layout propagation
spectrum stats tap-bridge
template test tools
topology-read uan virtual-net-device
visualizer wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
ns-3 ááŒáá·áºááŒá°ážááŸá¯ááᯠááŸááºáááºá áœá¬áááºáá±á¬ááºáá¬ážááŒá±á¬ááºáž áá»ááºááŒááºá áœá¬á¡áááºááŒá¯ááẠá€á¡áááá·áºááᯠáá¯á¶ážá áœá²áá°áá»á¬ážá áá¯ááºáá±á¬ááºáá±á·ááŸááááºá ("PASS: ... " ááá¯ááºážáá»á¬ážá á¡á á®á¡á á¥áºááẠááœá²ááŒá¬ážááá¯ááºáááºá áááºážááẠáá¯á¶ááŸááºááŒá áºáááºá á¡áá±ážááŒá®ážáááºááŸá¬ á¡á á®áááºáá¶á á¬á á¡áá¯á¶ážááœáẠá¡áá»ááºážáá»á¯ááºá á¬ááŒá±á¬ááºážááẠá á áºáá±ážááŸá¯áá»á¬ážá¡á¬ážáá¯á¶áž á¡á±á¬ááºááŒááºááŒá®ážááŒá±á¬ááºáž ááŒááááºá áááºááá·áºá á¬áá±ážááœá²áá»á¬áž áá¡á±á¬ááºááŒááºáá« ááá¯á·ááá¯áẠáá»ááºááœá¬ážáááºááᯠáááááŒá¯áá«á) ááŸáá·áº wafááŸáá·áº test.py á ááºááááŸáááá¯ááºááá·áº áááá¯áááºáᬠcores áá»á¬ážáá áºáá»áŸá±á¬áẠá¡áá¯ááºáá¯ááºáá±á¬ááºáááºááŒá áºáááºá
3.6 áá¬ááºááœáŸááºážááᯠáá¯ááºáá±á¬ááºááŒááºážá
áá»áœááºá¯ááºááá¯á·ááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááááºážáá»á¯ááºááŸá¯á¡á±á¬ááºááœáẠscript áá»á¬ážááᯠrun áááºá waf. áááºážááẠáá»áŸáá±áá¬ážáá±á¬ áá
áºáá»á
áºááá¯ááºáááºážááŒá±á¬ááºážáá»á¬ážááᯠááŸááºáááºá
áœá¬áááºááŸááºááŒá®áž á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠruntime ááœááºáááŸáááá¯ááºááŒá±á¬ááºáž áá±áá»á¬á
á±ááẠáááºáá±á¬ááºá
áá
áºá¡á¬áž ááœáá·áºááŒá¯áá«áááºá áááá¯ááááºááá¯áááºáááºáááºááá¯ážááŸááºážá
áœá¬á¡áá¯á¶ážááŒá¯áá«á waf ááá·áºáááºáá»ááºáá»á¬ážááŸáá·áºá¡áá° -â¯-run
. áá±áá¬á¡ááŸá¶á·áááá¯ááááºá ns-3 ááŸáá·áºáá®áá»áŸáá±á¬ ns-XNUMX ááᯠrun ááŒáá«á
áá¯á· áááºá¹ááá¬áá«ááá¹áá¬áá±á¬áá¡á±á¬ááºáá«ááá¯á·ááᯠááá¯ááºááá·áºááŒááºážááŒáá·áº
$ ./waf --run hello-simulator
Waf ááẠáááá¯ááááºááᯠááŸááºáááºá áœá¬áááºáá±á¬ááºáá¬ážááŒá±á¬ááºážááᯠáŠážá áœá¬á á áºáá±ážááŒá®áž ááá¯á¡ááºáá«á áááºáá±á¬ááºáááºááŒá áºáááºá ááŒá®ážáá±á¬á· waf á¡á±á¬ááºáá« output ááá¯áá¯ááºáá±ážáá±á¬ program áá áºáá¯ááᯠexecute áá¯ááºáááá·áºáááºá
Hello Simulator
áá¯ááºáá°áá«áááºá áááºááẠááᯠns-3 á¡áá¯á¶ážááŒá¯áá°ááŒá áºáá±áá«ááŒá®á
ááááºááœá± áááœá±á·ááẠáá¬áá¯ááºáááá²á
á á¬ááœá±ááá¯ááœá±á·ááẠwafáááºáá±á¬ááºááŸá¯ á¡á±á¬ááºááŒááºááŒá±á¬ááºáž ááœáŸááºááŒáá±á¬áºáááºáž output ááᯠáááœá±á·áá«á "áááºá¹ááá¬áá« Simulator"ááá¯á·áá±á¬áẠ[Build-with-Waf] ááá¹áááœáẠááá·áºáááºáá±á¬ááºááŸá¯áá¯ááºááá¯á· áááºááŒá±á¬ááºážááá¯ááºáááºááŸá¬ ááŒá áºááá¯ááºááŒá±ááŸááá«áááºá optimizedááá¯á·áá±á¬áº áá¯ááºááá¯á· ááŒááºááŒá±á¬ááºážááẠááœááºááœá¬ážáááºá áá®áá¬ááº. á€áááºáááºážá á¬ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº ááœááºááá¯ážááºá¡ááœááºá¡á¬ážáá¯á¶ážááẠááŸááºáááºážááŸááºááŒááºážáá¯ááºáá±á¬ááºááá·áº á¡áá°áž ns-3 á¡á áááºá¡ááá¯ááºážááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž ááœááºááá¯ážááºááá¯á· á áááºááŒáá¯ááºá á¬ááá¯áá»á¬ážááᯠáááá·áºáá¯ááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áááºá ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáá±á¬áá¯ááºááᯠá á¯á ááºážáá¬ážááá·áºá¡áá« á€á¡á áááºá¡ááá¯ááºážááŸááœááºááŸáááŸá¯ááᯠá¡ááá¯á¡áá»á±á¬ááºááááºááœá¬ážááẠ- áááºážááẠ"ááá¯áá±á¬ááºážá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáááº" ááŒá áºáááºá "Hello Simulator" output ááᯠáááœá±á·áá«áá á¡á±á¬ááºáá«ááá¯á·ááᯠááá¯ááºááá·áºáá«á
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
á áááºááŒáá¯ááºáá¯ááºááẠwaf ááá°áá¬áá»á¬ážááŸáá·áº á ááºážáááºááŸá¯áá»á¬ážáá«áááºááá·áº ns-3 áááá¯ááááºáá»á¬ážá á¡ááŸá¬ážááŸá¬áá¬ážááŸááºážáá»á¬ážááᯠáááºáá±á¬ááºáááºá ááá¯á·áá±á¬áẠáááºááẠá á¬ááá¯ááºááŒááºážááŒáá·áº áá¯ááºá áááºááŸá á¡ááŸá¬ážááŸá¬ááŒááºáá¬ážááŸááºážááᯠááŒááºáááºáááºáá±á¬ááºááá·áºáááºá
$ ./waf
á¡áᯠprogram ááᯠrun ááẠáááºá¹ááá¬áá« Simulatoráá»áŸá±á¬áºááá·áºáá¬ážáá²á· ááááºááᯠááŒááºááááºá
3.6.1 Command line á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬áž
ns-3 áááá¯ááááºááá¯á· command line arguments áá»á¬ážááá¯ááŒááºáááºážáááºá á¡á±á¬ááºáá«áá¯á¶á á¶ááᯠá¡áá¯á¶ážááŒá¯áá«á
$ ./waf --run <ns3-program> --command-template="%s <args>"
á¡á
á¬ážááá¯ážáá«á ááá·áºáááá¯ááááºáá¡áááºááŸáá·áº á¡ááŒááºážá¡áá¯á¶áá»á¬ážáá®ááá¯á·á áááºááŒá± -â¯-command-template
á¡ááœáẠwaf á¡ááŸááºáááẠcommand line áááºáá±á¬ááºáááºá¡ááœáẠá¡ááŒá±áá¶á¡á¬ážááŒáá·áº á
á¬ááœááºáá
áºáá¯ááŒá
áºáááºá waf áááá¯ááááºááá¯áá¯ááºáá±á¬ááºáááºá¡áá¯á¶ážááŒá¯áááºá Waf ááẠáááºáá±á¬ááºááŸá¯ááŒá®ážááŒá±á¬ááºááŒá±á¬ááºáž á
á
áºáá±ážááŒá®áž áá»áŸáá±áá¬ážáá±á¬ á
á¬ááŒáá·áºááá¯ááºáááºážááŒá±á¬ááºážáá»á¬ážááᯠáááºááŸááºááŒá®ážáá±á¬áẠáá±ážáá¬ážáá±á¬ ááœááºáááºážááá¯ááºážáá¯á¶á
á¶ááᯠá¡áá¯á¶ážááŒá¯áᬠá¡áá±á¬ááºáááºáá±á¬áºááá¯ááºáá±á¬ %s áá±áá¬áá°áá°á¡ááœáẠáááá¯ááááºá¡áááºááᯠá¡á
á¬ážááá¯ážáááºá á€á¡áá¬ážá¡ááá¯ááŸá¯ááºááœá±ážááŸá¯ááᯠáááºááœá±á·ááŸááá«áá ns-3 áááá¯ááááºááŸáá·áº áááºážá á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááᯠááá¯ážáá¬ážáá»ááºáá
áºáá¯áááºážááœáẠááá·áºááœááºážáá¬ážáá±á¬ ááá¯ážááŸááºážáá±á¬áá¬ážááŸááºážáá
áºáᯠááŸááá«áááºá
$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'
áá±á¬ááºááẠá¡áá°ážá¡áá¯á¶ážáááºáá±á¬ á¥ááá¬áá áºáá¯ááŸá¬ á ááºážáááºááŸá¯á¡á á¯á¶áá»á¬ážááᯠááœá±ážáá»ááºáá¯ááºáá±á¬ááºááŒááºážááŒá áºáááºá mytest ááá¯á· áá±á«áºáá²á· test suite ááŸáááẠ(ááááºáá±á¬á· áááŸááá°áž)á á ááºážáááºááŸá¯áááá¯ááááºááᯠáááºáá«ááá²áá²áá±á«áºááá¯ááá·áº á¡ááŒáá¯ááºá ááºážáááºááŸá¯áá»á¬ážá áœá¬ááᯠáá¯ááºáá±á¬ááºááẠá¡áááºááœáẠ./test.py script ááᯠá¡áá¯á¶ážááŒá¯áá²á·áááºá á ááºážáááºááŒá±ážáá°. áá¯ááºážáááºáá«á á ááºážáááºááŒá±ážáá° á ááºážáááºááŸá¯áá áºáá¯ááᯠááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºáááº-
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááᯠá¡á á®á¡á ááºááœáẠáá±ážááá¯á·áá«áááºá á ááºážáááºááŒá±ážáá°. mytest áááŸááá±á¬ááŒá±á¬áá·áºá á¡ááŸá¬ážá¡ááœááºáž áááºáá±á·áá»áºáá áºáᯠáá¯ááºáá±ážáááá·áºáááºá áááŸáááá¯ááºáá±á¬ á ááºážáááºááŒá±ážáá° ááœá±ážáá»ááºá áá¬áá»á¬ážááᯠáááá·áºáá¯ááºáááºá ááá·áºááœááºážáá«-
$ ./waf --run test-runner --command-template="%s --help"
3.6.2 á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážá
ns-3 áááá¯ááááºáá»á¬ážááᯠá¡ááŒá¬áž utility áá
áºáá¯ááŒá
áºááá·áº debugger áá
áºáá¯á¡á±á¬ááºááœáẠáá¯ááºáá±á¬ááºááẠ(á¥ááá¬á gdb) ááá¯á·ááá¯áẠááŸááºáá¬ááºá
ááºážáááºáááááᬠ(á¥ááá¬á valgrind) á¡áá¬ážáá°áá¯á¶á
á¶ááᯠá¡áá¯á¶ážááŒá¯áá«á -â¯-command-template = "âŠ"
. á¥ááá¬á¡á¬ážááŒáá·áºá á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážááœáẠáá¯ááºáá±á¬ááºááẠgdb á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááŒáá·áº áááºá hello-simulator ns-3 áááá¯ááááº
$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
ns-3 áááá¯ááááºá¡áááºááẠá¡ááŒááºážá¡áá¯á¶ááŸáá·áºá¡áá° áá«áá¬ááŒá±á¬ááºáž áááááŒá¯áá«á -â¯-run
ááŸáá·áº á
á®áá¶ááá·áºááœá²ááŸá¯ á¡áá¯á¶ážáááºááŸá¯ (á€áá±áá¬ááœáẠgdb) ááẠá¡ááŒááºážá¡áá¯á¶ááœáẠááááá¯á¶áž áááºá¹áá±áááŒá
áºáááºá -â¯-command-template
. ááœá±ážáá»ááºááŸá¯ -â¯-args
á¡á
á®áááºáá¶á
á¬áá»á¬áž gdbáá»ááºáá±á¬ command line ááẠ"lower" program ááŸááŒá
áºáááºá (á¡áá»áá¯á·áá¬ážááŸááºážáá»á¬áž gdb option ááᯠáá¬ážááááºáá«á -â¯-args
. á€ááá
á¹á
ááœááºá áááá¯ááááºá¡ááŒááºážááœá¬ážááŸá¯áá»á¬ážááᯠáááºááŸá¬ážáá«á -â¯-command-template
command set ááá¯áá¯á¶ážáá«á gdb ááŒááºážáá¯á¶ááŸá¯áá»á¬áž.) á¡ááŸá¬ážááŸá¬ááŒááºáááááá¬á¡á±á¬ááºááœáẠá
ááºážáááºááŸá¯ááᯠáá¯ááºáá±á¬ááºááẠá€á
á¬ááœááºááŸáá·áº ááááºáá
áºáá¯ááᯠáá±á«ááºážá
ááºááá¯ááºáááº-
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
3.6.3 á¡áá¯ááºáááºážááœáŸááº
ns-3 áá
áºáááºááááºááŸá áááºážááááºáá±áá¬á០Waf ááá¯ááœáŸááºáááºááá·áºáááºá á€ááá¯ááºááœá²ááẠá¡ááœááºááá¯ááºáá»á¬ážááᯠáá±ážáá¬ážááá·áº á¡áá¯ááºáááºážááœáŸááºááŒá
áºáá¬áááºá áá«áá±ááá·áº áá®ááá¯ááºááœá±ááᯠns-3 á¡áááºážá¡ááŒá
áºáá
áºáááºá¡ááŒááºááŸá¬ ááááºážáá¬ážáá»ááºáááºááá¯áááºáá±á¬á áááºááŒá±ááá¯áá¯á¶ážáá«á -â¯-cwd
:
$ ./waf --cwd=...
ááá·áºáá¯ááºáááºážáá±á¬ááºáá¬áááºážááœáŸááºááœáẠá¡ááœááºááá¯ááºáá»á¬ážááᯠááá°ááẠááá¯ááá¯á¡áááºááŒá±á á±áá«áááºá á€ááá á¹á ááœááºá á¡á±á¬ááºáá±á¬áºááŒáá« ááœááºááá¯ááºáá¯ááºáá±á¬ááºáá»ááºááẠáá°áá®ááá¯ááºáááº-
$ function waff {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd - >/dev/null
}
á¡ááá¯áá« command áááááºáá¬ážááŸááºážáá€á¡ááŸáááºááŸá¯ááŒáá·áºáááºááŸááá¯ááºáá±á¬ááºáá±áá±á¬áááºážááœáŸááºááá¯ááááºážááááºážáá¬ážááŒá®ážáááºážááœáŸááºááá¯á·ááœá¬ážáá«á wafááŒá®ážáá±á¬á· ááœáŸááºááŒá¬ážáááºá waf áááá¯ááááºáá
áááºáá® ááááºážáááºážáá¬ážáá±á¬ áááºááŸááá¯ááºáá±á¬ááºáá±áá±á¬ áááºážááœáŸááºááᯠááŒááºááŒá±á¬ááºážáááºá áá»áœááºáá±á¬áºááá¯á·á á¡áááºážááᯠááŒá±á¬áá¬áá«á -â¯-cwd
ááŒá®ážááŒáá·áºá
á¯á¶ááŸá¯á¡ááœááºá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá
á¯ááẠááááºáááºážá¡ááá·áºáááºážááœáŸááºá០Waf ááá¯ááœáá·áºááŒá®áž ááá¯áá±áá¬ááœáẠá¡ááœááºááá¯ááºáá»á¬ážááá¯áá¯ááºáá±ážáááºá
source: www.habr.com