ns-3 jaringan simulator tutorial. Bab 3

ns-3 jaringan simulator tutorial. Bab 3
bab 1,2

3 Miwiti
3.1 Ringkesan
3.2 Prasyarat
3.2.1 Ngundhuh release ns-3 minangka arsip sumber
3.3 Ngundhuh ns-3 nggunakake Git
3.3.1 Loading ns-3 nggunakake Panggang
3.4 Majelis ns-3
3.4.1 Bangunan nganggo build.py
3.4.2 Bangunan karo Panggangan
3.4.3 Mbangun karo Waf
3.5 Testing ns-3
3.6 Nggawe skrip
3.6.1 Bantahan baris printah
3.6.2 Debugging
3.6.3 Direktori kerja

Bab 3

Miwiti

Bab iki dimaksudaké kanggo nyiapake maca kanggo miwiti karo komputer sing uga wis tau diinstal ns-3. Iki kalebu platform sing didhukung, prasyarat, carane entuk ns-3, carane mbangun ns-3, lan carane nyoba mbangun lan mbukak program sing prasaja.

3.1 Ringkesan

Simulator ns-3 dibangun minangka sistem perpustakaan piranti lunak kolaborasi. Sajrone perakitan, kode program pangguna disambung karo perpustakaan kasebut. Basa pemrograman C ++ utawa Python digunakake kanggo nulis program khusus.

Ns-3 disebarake minangka kode sumber, tegese sistem target kudu duwe lingkungan pangembangan piranti lunak supaya bisa mbangun perpustakaan luwih dhisik lan banjur mbangun program pangguna. Ing asas, ns-3 bisa disebarake minangka perpustakaan siap-digawe kanggo sistem tartamtu, lan ing mangsa padha bisa disebarake ing cara iki. Nanging saiki akeh pangguna sing bener-bener nindakake pakaryan kanthi nyunting ns-3 dhewe, mula migunani kanggo duwe kode sumber kanggo mbangun perpustakaan. Yen ana wong sing pengin nindakake karya nggawe perpustakaan lan paket sing wis siap kanggo sistem operasi, hubungi mailing list. ns-pangembang.

Sabanjure, kita bakal ndeleng telung cara kanggo ngundhuh lan mbangun ns-3. Pisanan yaiku ndownload lan mbangun rilis resmi saka situs utama. Kapindho yaiku pilihan lan perakitan salinan versi pangembangan instalasi ns-3 dhasar. Katelu yaiku nggunakake alat mbangun tambahan kanggo mbukak ekstensi liyane kanggo ns-3. Kita bakal nliti saben siji amarga alat kasebut rada beda.

Pangguna Linux sing berpengalaman bisa uga mikir kenapa ns-3 ora kasedhiya minangka paket kaya umume perpustakaan liyane sing nggunakake manajer paket? Sanajan ana paket binar kanggo macem-macem distribusi Linux (contone Debian), umume pangguna pungkasane nyunting perpustakaan lan kudu mbangun maneh ns-3 dhewe, saengga duwe kode sumber sing kasedhiya. Mulane, kita bakal fokus ing nginstal saka sumber.

Kanggo aplikasi paling hak ns-3 ROOT ora perlu, disaranake nggunakake akun pangguna sing ora duwe hak istimewa.

3.2 Prasyarat

Kabeh pustaka ns-3 sing kasedhiya nduweni sawetara dependensi ing perpustakaan pihak katelu, nanging umume ns-3 bisa dibangun lan digunakake kanthi dhukungan kanggo sawetara komponen umum (asring diinstal kanthi standar): kompiler C ++, Python, editor kode sumber (contone, vim, emacs utawa eclipse) lan, yen repositori pangembangan digunakake, sistem kontrol versi Git. Umume pangguna sing sepisanan ora perlu kuwatir yen konfigurasi nyatakake sawetara fitur canggih ns-3 ilang, nanging kanggo wong sing pengin instalasi lengkap, proyek kasebut nyedhiyakake wiki sing kalebu kaca kanthi akeh tips lan trik sing migunani. Salah sawijining kaca yaiku kaca Instalasi, kanthi instruksi instalasi kanggo macem-macem sistem, kasedhiya ing: https://www.nsnam.org/wiki/Installation.

Bagean Prasyarat ing wiki iki nerangake paket endi sing dibutuhake kanggo ndhukung opsi ns-3 umum lan uga menehi prentah sing digunakake kanggo nginstal ing rasa umum Linux utawa macOS.

Sampeyan bisa njupuk kauntungan saka kesempatan iki kanggo njelajah kaca wiki ns-3 utawa situs web utama: https://www.nsnam.org, amarga ana akeh informasi ing kana. Miwiti karo versi paling anyar saka ns-3 (ns-3.29), alat ing ngisor iki dibutuhake kanggo mbukak ns-3:

Paket Tool/Versi

  • C++ compiler
    clang++ utawa g++ (g++ versi 4.9 utawa luwih dhuwur)
  • Python
    versi python2> = 2.7.10, utawa versi python3> = 3.4
  • Git
    versi paling anyar (kanggo ngakses ns-3 ing GitLab.com)
  • tar
    versi paling anyar apa wae (kanggo mbongkar rilis ns‑3)
  • bunzip2
    versi paling anyar apa wae (kanggo mbongkar rilis ns‑3)

Kanggo mriksa versi standar Python, ketik python -V. Kanggo mriksa versi g++, ketik g++ -v. Yen ana piranti sing ilang utawa lawas banget, waca pandhuan instalasi ing kaca wiki ns-3.

Wiwit saiki, kita nganggep manawa sing maca nganggo Linux, MacOS, utawa emulator Linux, lan paling ora duwe alat ing ndhuwur.

3.2.1 Ngundhuh release ns-3 minangka arsip sumber

Iki minangka tumindak kanggo pangguna anyar sing pengin ndownload lan eksprimen karo versi rilis lan paket paling anyar saka ns-3. Rilis ns-3 diterbitake minangka arsip sumber sing dikompres, kadhangkala disebut tarbal. tarbal minangka format arsip piranti lunak khusus ing ngendi sawetara file digabungake. Arsip biasane dikompres. Proses boot ns-3 liwat tarbal prasaja, sampeyan mung kudu milih release, download lan unpack.

Ayo nganggep yen sampeyan, minangka pangguna, pengin mbangun ns-3 ing direktori lokal sing diarani ruang kerja. Sampeyan bisa entuk salinan rilis sing bisa digunakake kanthi ngetik ing ngisor iki menyang konsol Linux (ngganti nomer versi sing cocog, mesthi)

$ 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 

Pay manungsa waé kanggo sarana digunakake ing ndhuwur wget, yaiku alat baris perintah kanggo ngundhuh obyek saka Internet. Yen sampeyan durung nginstal, sampeyan bisa nggunakake browser kanggo iki.

Sawise langkah-langkah iki bakal nggawa sampeyan menyang direktori ns-allinone-3.29, ing kana sampeyan kudu ndeleng sawetara file lan direktori

$ 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

Sampeyan saiki siyap kanggo mbangun distribusi basis ns-3 lan bisa pindhah menyang bagean ing bangunan ns-3.

3.3 Ngundhuh ns-3 nggunakake Git

Kode ns-3 kasedhiya ing repositori Git ing GitLab.com ing https://gitlab.com/nsnam/... Klompok nsnam nggabungake macem-macem repositori sing digunakake dening proyek open source.

Cara paling gampang kanggo miwiti nggunakake repositori Git yaiku garpu utawa kloning lingkungan ns-3-allinone. Iki minangka set skrip sing ngatur loading lan perakitan subsistem ns-3 sing paling umum digunakake. Yen sampeyan anyar karo Git, istilah "garpu" lan "klon" bisa uga ora dingerteni kanggo sampeyan; yen mangkono, disaranake sampeyan mung tiron (gawe salinan dhewe) repositori sing ana ing GitLab.com kaya iki:

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git 
$ cd ns-3-allinone 

Ing tahap iki, tampilan direktori sampeyan ns-3-allinone rada beda karo direktori arsip rilis sing diterangake ing ndhuwur. Iku kudu katon kaya iki:

$ ls
build.py constants.py download.py README util.py

Elinga yen ana naskah download.py, sing uga bakal ngekstrak ns-3 lan kode sumber sing diiringi. Ing kene sampeyan duwe pilihan: download snapshot pangembangan ns-3 paling anyar:

$ python download.py

utawa luwih seneng release ns-3 nggunakake flag -n kanggo nuduhake nomer release:

$ python download.py -n ns-3.29

Sawise langkah iki menyang direktori ns-3-allinone repositori tambahan bakal diundhuh ns-3, panggang, pybindgen и netanim.

komentar
Ing mesin kanthi Ubuntu16.04 sing resik, aku kudu ngganti perintah kasebut: $ sudo python3 download.py -n ns-3.29 (sateruse cathetan penerjemah).

3.3.1 Loading ns-3 nggunakake Panggang

Rong cara ing ndhuwur (sumber arsip utawa repositori ns-3-allinone liwat Git) migunani kanggo entuk instalasi ns-3 sing paling gampang kanthi macem-macem tambahan (pybindgen kanggo generate Python naleni lan netanim kanggo animasi jaringan). Repositori katelu sing diwenehake kanthi standar ing ns-3-allinone diarani panggang.

Panggang minangka alat kanggo mbangun piranti lunak sing terkoordinasi saka pirang-pirang repositori, dikembangake kanggo proyek ns-3. Panggang bisa digunakake kanggo njupuk versi pangembangan ns-3, uga kanggo ngundhuh lan mbangun ekstensi versi dhasar saka distribusi ns-3, kayata lingkungan Eksekusi Kode Langsung, CradleNetwork Simulasi Cradle, kemampuan kanggo nggawe bindings Python anyar lan macem-macem ns-3 "apps".

komentar
CradleNetwork Simulation Cradle minangka kerangka sing ngidini sampeyan nggunakake tumpukan jaringan TCP/IP nyata ing simulator jaringan.

Yen sampeyan ngarepake instalasi ns-3 sampeyan duwe fitur lanjut utawa tambahan, sampeyan bisa ngetutake jalur instalasi iki.

Ing rilis ns-3 paling anyar Panggang ditambahake ing release tar. Rilis kasebut kalebu file konfigurasi sing ngidini sampeyan ndownload versi piranti lunak saiki nalika diluncurake. Sing, contone, versi Panggang, sing disebarake karo release ns-3.29, bisa digunakake kanggo njupuk komponen kanggo release saka ns-3 utawa sadurungé, nanging ora bisa digunakake kanggo njupuk komponen kanggo release mengko (yen file deskripsi paket bakeconf.xml ora dianyari).

Sampeyan uga bisa njaluk salinan paling anyar panggangkanthi ngetik printah ing ngisor iki menyang konsol Linux sampeyan (assuming sampeyan wis diinstal Git):

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.git

Nalika sampeyan mbukak printah git, sampeyan kudu ndeleng kaya ing ngisor iki:

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.

Sawise printah rampung Klone sampeyan kudu duwe direktori jenenge panggang, isine kudu katon kaya iki:

$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO

Elinga yen sampeyan wis mbukak sawetara skrip Python, modul Python jenenge panggang lan file konfigurasi XML. Langkah sabanjure yaiku nggunakake skrip kasebut kanggo ngundhuh lan mbangun distribusi ns-3 sing sampeyan pilih. Sawetara target kustomisasi kasedhiya:

  1. ns-3.29: modul sing cocog karo release; bakal ndownload komponen sing padha karo rilis ing tarball;

  2. ns-3-dev: modul padha, nanging nggunakake kode saka wit pembangunan;

  3. ns-allinone-3.29: A modul sing kalebu fitur tambahan kayata Klik nuntun lan Network Simulasi Cradle, Openflow kanggo ns-3.

  4. ns-3-allinone: padha karo versi release saka modul kabeh, nanging kanggo kode pangembangan.

komentar
Klik - arsitektur lunak modular kanggo nggawe router.

Openflow minangka protokol kanggo ngatur proses pangolahan data sing dikirim liwat jaringan data dening router lan switch, ngleksanakake teknologi jaringan sing ditemtokake piranti lunak.

Gambar pangembangan saiki (non-release) ns-3 bisa ditemokake ing:https://gitlab.com/nsnam/ns-3-dev.git.

Pangembang nyoba njaga repositori kasebut ing urutan kerja sing konsisten, nanging ana ing wilayah pangembangan lan ngemot kode sing durung dirilis, dadi yen sampeyan ora ngrancang nggunakake fitur-fitur anyar, banjur pilih rilis resmi.

Sampeyan bisa nemokake versi paling anyar saka kode kasebut kanthi browsing dhaptar repositori, utawa menyang kaca web ns-3 Releases:https://www.nsnam.org/releases/ lan ngeklik link versi paling anyar. Ing conto iki kita bakal terus karo ns-3.29.

Saiki, kanggo entuk komponen ns-3 sing dibutuhake, kita bakal nggunakake alat kasebut Panggang. Ayo ngomong sawetara tembung pambuka babagan karya Panggang.

Panggang dianggo kanthi ngemot sumber paket menyang direktori sumber lan nginstal perpustakaan menyang direktori mbangun. Panggang bisa mbukak kanthi referensi binar, nanging yen sampeyan pengin mbukak Panggang ora saka direktori sing diundhuh, disaranake nambah path menyang panggang menyang path sampeyan (variabel lingkungan PATH), contone kaya ing ngisor iki (conto kanggo cangkang bash Linux). Pindhah menyang direktori "panggang" banjur setel variabel lingkungan ing ngisor iki:

$ export BAKE_HOME=`pwd` 
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin 
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib

Iki bakal nyelehake program kasebut panggang.py menyang path shell lan bakal ngidini program liyane nemokake eksekusi lan perpustakaan sing digawe panggang. Ing sawetara kasus panggunaan panggang, setelan PATH lan PYTHONPATH sing diterangake ing ndhuwur ora dibutuhake, nanging mbangun lengkap ns-3-allinone (karo paket tambahan) biasane mbutuhake.

Pindhah menyang direktori kerja lan ketik ing ngisor iki ing console:

$ ./bake.py configure -e ns-3.29

Sabanjure kita bakal takon Panggang priksa manawa kita duwe alat sing cukup kanggo ngemot macem-macem komponen. Telpon:

$ ./bake.py check

Sampeyan kudu ndeleng kaya ing ngisor iki:

> 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 ...

Utamane, alat unggahan kayata Mercurial, CVS, Git lan Bazaar penting ing langkah iki amarga ngidini kita entuk kode kasebut. Ing jalur iki, instal alat sing ilang kanthi cara biasa kanggo sistem sampeyan (yen sampeyan ngerti carane) utawa hubungi administrator sistem kanggo njaluk bantuan.

Sabanjure, coba download piranti lunak:

$ ./bake.py download

asil kudu kaya:

>> 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

Iki tegese telung sumber wis diundhuh. Saiki pindhah menyang direktori sumber lan ketik ls; Sampeyan kudu ndeleng:

$ cd source 
$ ls
netanim-3.108 ns-3.29 pybindgen

Saiki sampeyan siyap mbangun distribusi ns-3.

3.4 Majelis ns-3

Minangka ndownload ns-3, ana sawetara cara kanggo mbangun ns-3. Wangsulan: Bab ingkang utama kita pengin nandheske iku ns-3 dibangun nggunakake alat mbangun disebut Wafditerangake ing ngisor iki. Umume pangguna bakal nggarap Waf, nanging ana sawetara skrip praktis kanggo mbantu sampeyan miwiti utawa ngatur bangunan sing luwih rumit. Dadi mangga, sadurunge maca babagan Waf, delengen mbangun.py lan perakitan karo panggang.

3.4.1 Bangunan nganggo build.py

Ati-ati Langkah mbangun iki mung kasedhiya saka versi arsip sumber sing dipikolehi kaya sing kasebut ing ndhuwur; lan ora diundhuh liwat git utawa panggang.

Nalika nggarap arsip rilis tarbaling ns-3-allinone Ana script praktis sing bisa nggawe assembling komponen luwih gampang. Iki diarani build.py. Program iki bakal nyiyapake proyek kanggo sampeyan kanthi cara sing paling migunani. Nanging, elinga yen persiyapan sing luwih maju lan nggarap ns-3 biasane nggunakake sistem mbangun ns-3 dhewe, Waf, sing bakal dienalake ing tutorial iki.

Yen sampeyan ngundhuh nggunakake tarbal, banjur ing direktori sampeyan ~/ruang kerja direktori karo jeneng kaya ns-allinone-3.29. Ketik ing ngisor iki:

$ ./build.py --enable-examples --enable-tests

Nalika diarani mbangun.py Kita nggunakake argumen baris perintah kanggo mbangun conto lan tes sing digunakake ing tutorial iki, sing ora dibangun kanthi standar ing ns-3. Kanthi gawan, program uga mbangun kabeh modul sing kasedhiya. Banjur, yen sampeyan pengin, sampeyan bisa mbangun ns-3 tanpa conto lan tes, utawa ngilangi modul sing ora dibutuhake kanggo karya sampeyan.

Sampeyan bakal weruh akeh pesen output compiler sing ditampilake dening skrip nalika mbangun macem-macem bagean sing wis dimuat. Kaping pisanan, skrip bakal nyoba mbangun animator netanim, banjur generator naleni pybindgen lan pungkasanipun ns-3. Nalika proses rampung, sampeyan kudu ndeleng ing ngisor iki:

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

Ing telung baris pungkasan listing kita ndeleng pesen babagan modul sing ora dibangun:

Modules not built (see ns-3 tutorial for explanation):
brite                     click

Iki mung ateges sawetara modul ns-3 sing gumantung ing perpustakaan eksternal bisa uga durung dibangun, utawa ora kudu dibangun kanggo konfigurasi iki. Iki ora ateges simulator ora dipasang utawa modul sing dipasang ora bisa digunakake kanthi bener.

3.4.2 Bangunan karo Panggangan

Yen sampeyan nggunakake panggangan ndhuwur kanggo njaluk kode sumber saka repositori project, sampeyan bisa terus nggunakake kanggo mbangun ns-3. Telpon:

$ ./bake.py build

lan sampeyan kudu ndeleng kaya:

>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK 
>> Building netanim-3.108 - OK 
>> Building ns-3.29 - OK

Petunjuk: Sampeyan uga bisa nindakake loro download lan mbangun langkah bebarengan kanthi nelpon "bake.py deploy".

Ngrakit kabeh komponen bisa gagal, nanging perakitan bakal terus yen komponen ora dibutuhake. Contone, masalah portabilitas anyar yaiku castxml bisa dirakit dening alat panggang ora ing kabeh platform. Ing kasus iki, pesen kaya iki bakal katon:

>> 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.

Nanging, castxml mung perlu yen sampeyan pengin nggawe dianyari Python bindings. Kanggo umume pangguna ora perlu iki (paling ora nganti ngganti ns-3), supaya bebaya kasebut bisa diabaikan kanthi aman saiki.

Yen gagal, printah ing ngisor iki bakal menehi pitunjuk babagan dependensi sing ilang:

$ ./bake.py show

Macem-macem dependensi saka paket sing sampeyan coba gawe bakal didaftar.

3.4.3 Mbangun karo Waf

Nganti titik iki, kanggo miwiti mbangun ns-3, kita nggunakake salah siji script mbangun.py, utawa alat panggang. Piranti kasebut migunani kanggo mbangun ns-3 lan njaga perpustakaan. Nyatane, kanggo mbangun padha mbukak alat mbangun Waf saka direktori ns-3. Waf diinstal nganggo kode sumber ns-3. Umume pangguna kanthi cepet pindhah menyang panggunaan langsung kanggo ngatur lan ngrakit ns‑3 Waf. Dadi, kanggo nerusake, bukak direktori ns-3 sing asline digawe.

Iki ora strictly dibutuhake ing wektu iki, nanging bakal migunani kanggo backtrack sethitik lan ndeleng carane nggawe owahan kanggo konfigurasi project. Mbokmenawa owah-owahan konfigurasi sing paling migunani sing bisa ditindakake yaiku nggawe versi kode sing dioptimalake. Kanthi gawan, sampeyan wis ngatur proyek kanggo mbangun versi debug. Ayo goleki proyek kanggo nggawe bangunan sing dioptimalake. Kanggo nerangake Waf yen kudu nggawe optimasi mbangun sing kalebu conto lan tes, sampeyan kudu nglakokake printah ing ngisor iki:

$ ./waf clean 
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests

Iki bakal diluncurake Waf njaba direktori lokal (kanggo penak). Printah pisanan ngresiki saka mbangun sadurungé, iki biasane ora strictly perlu, nanging iku laku apik (uga ndeleng mbangun profil ngisor); iki bakal mbusak perpustakaan sing digawe sadurunge lan file obyek sing ana ing direktori mbangun/. Nalika proyek dikonfigurasi maneh lan sistem mbangun mriksa macem-macem dependensi, sampeyan kudu ndeleng output sing padha karo ing ngisor iki:

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)

Wigati bagean pungkasan saka dhaptar ing ndhuwur. Sawetara opsi ns-3 ora diaktifake kanthi gawan utawa mbutuhake dhukungan sistem supaya bisa digunakake kanthi bener. Contone, kanggo ngaktifake XmlTo, perpustakaan kudu ana ing sistem libxml-2.0. Yen perpustakaan iki ora ditemokake lan fungsi ns-3 sing cocog ora diaktifake, pesen bakal ditampilake. Uga elinga yen bisa nggunakake printah kasebut sudo kanggo nyetel bit suid "nyetel ID grup ing runtime" kanggo program tartamtu. Ora diaktifake kanthi gawan lan mulane fitur iki katon minangka "ora aktif". Pungkasan, kanggo entuk dhaptar pilihan sing diaktifake, gunakake Waf karo parameter --check-config.

Saiki ayo bali lan bali menyang bangunan debug sing ngemot conto lan tes.

$ ./waf clean 
$ ./waf configure --build-profile=debug --enable-examples --enable-tests

Sistem mbangun saiki wis disetel lan sampeyan bisa mbangun versi debug program ns-3 kanthi mung ngetik:

$ ./waf

Langkah-langkah ing ndhuwur bisa uga meksa sampeyan mbangun bagean saka sistem ns-3 kaping pindho, nanging saiki sampeyan ngerti carane ngganti konfigurasi lan mbangun kode sing dioptimalake.

Kanggo mriksa profil sing aktif kanggo konfigurasi proyek sing diwenehake, ana prentah:

$ ./waf --check-profile 
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build' 
Build profile: debug

Skenario ing ndhuwur mbangun.py uga ndhukung argumentasi --enable-examples и --enable-tests, nanging opsi liyane Waf iku ora ndhukung langsung. Contone, iki ora bakal bisa:

$ ./build.py --disable-python

reaksi bakal kaya iki:

build.py: error: no such option: --disable-python

Nanging, operator khusus - - bisa digunakake kanggo pass paramèter tambahan liwat wafdadi tinimbang ing ndhuwur printah ing ngisor iki bakal bisa digunakake:

$ ./build.py -- --disable-python

amarga ngasilake printah utama ./waf configure --disable-python. Kene sawetara tips pambuko liyane babagan Waf.

Nangani kesalahan mbangun

Rilis ns-3 diuji ing kompiler C ++ paling anyar sing kasedhiya nalika diluncurake ing distribusi Linux lan MacOS umum. Nanging, liwat wektu, distribusi anyar dirilis karo compiler anyar, lan compiler anyar iki cenderung dadi luwih pedantic babagan bebaya. ns-3 ngatur mbangun kanggo nambani kabeh bebaya minangka kasalahan, supaya kadhangkala yen sampeyan nggunakake versi lawas ing sistem anyar, bebaya compiler bisa mungkasi mbangun.

Contone, sadurunge ana rilis ns-3.28 kanggo Fedora 28, sing kalebu versi utama anyar. gcc (gcc-8). Mbangun release ns-3.28 utawa versi sadurungé ing Fedora 28, kanthi Gtk2+ diinstal, kesalahan ing ngisor iki bakal kedadeyan:

/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);

Ing rilis wiwit saka ns-3.28.1, ing Waf pilihan kasedhiya kanggo ngatasi masalah iki. Iku disables nyetel "-Werror" flag ing g ++ lan clang ++. Iki minangka pilihan "--disable-werror" lan kudu ditrapake sajrone konfigurasi:

$ ./waf configure --disable-werror --enable-examples --enable-tests

Ngatur utawa ngumpul

Sawetara prentah Waf mung nggawe pangertèn ing phase konfigurasi, lan sawetara mung bener ing phase mbangun. Contone, yen sampeyan pengin nggunakake fitur emulasi ns-3, sampeyan bisa ngaktifake setelan bit kidul nggunakake sudo, kaya sing kasebut ing ndhuwur. Iki bakal ngilangi printah langkah konfigurasi, lan kanthi mangkono sampeyan bisa ngganti konfigurasi nggunakake printah ing ngisor iki, kang uga kalebu conto lan tes.

$ ./waf configure --enable-sudo --enable-examples --enable-tests

Yen sampeyan nindakake iki Waf bakal diluncurake sudokanggo ngganti program nggawe soket kode emulasi kanggo mbukak kanthi ijin ROOT. ing Waf Ana akeh opsi liyane sing kasedhiya kanggo konfigurasi lan langkah-langkah mbangun. Kanggo njelajah pilihan sampeyan, ketik:

$ ./waf --help

Ing bagean sabanjure kita bakal nggunakake sawetara opsi sing gegandhengan karo testing.

Profil Majelis

Kita wis weruh carane sampeyan bisa ngatur Waf kanggo majelis debug и optimized:

$ ./waf --build-profile=debug

Ana uga profil perakitan penengah, release. Pilihan -d iku sinonim karo --build-profile. Profil mbangun ngontrol panggunaan logging, pernyataan, lan switch optimasi kompiler:

ns-3 jaringan simulator tutorial. Bab 3

Nalika sampeyan bisa ndeleng, logging lan pratelan mung kasedhiya ing debug mbangun. Praktek sing disaranake yaiku ngembangake skrip sampeyan ing mode debug, banjur nindakake bola-bali mlaku (kanggo statistik utawa owah-owahan parameter) ing profil mbangun sing dioptimalake.

Yen sampeyan duwe kode sing mung kudu mbukak ing profil mbangun tartamtu, gunakake Kode 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;)

Default, Waf panggonan mbangun artefak ing direktori mbangun. Sampeyan bisa nemtokake direktori output sing beda nggunakake pilihan kasebut - -out, contone:

$ ./waf configure --out=my-build-dir

Kanthi nggabungake iki karo profil mbangun, sampeyan bisa kanthi gampang ngalih ing antarane macem-macem opsi kompilasi:

$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
... 
$ ./waf configure --build-profile=optimized --out=build/optimized 
$ ./waf build
...

Sing ngidini sampeyan nggarap macem-macem rakitan tanpa kudu nulis ulang perakitan paling anyar saben wektu. Nalika sampeyan ngalih menyang profil liyane, Waf mung bakal ngumpulake, tanpa ngrampungake kabeh.

Nalika sampeyan ngalih profil mbangun kanthi cara iki, sampeyan kudu ati-ati kanggo menehi opsi konfigurasi sing padha saben wektu. Nemtokake sawetara variabel lingkungan bakal mbantu sampeyan supaya ora salah:

$ 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

Compiler lan gendera

Ing conto ing ndhuwur Waf kanggo mbangun ns-3 nggunakake kompiler C++ saka GCC ( g ++). Nanging, sampeyan bisa ngganti sing sampeyan gunakake Waf C++ compiler, kanthi nemtokake variabel lingkungan CXX. Contone, kanggo nggunakake C ++ compiler Clang, clang ++,

$ CXX="clang++" ./waf configure 
$ ./waf build 

Ing cara sing padha sampeyan bisa ngatur Waf kanggo nggunakake kompilasi mbagekke nggunakake distcc:

$ CXX="distcc g++" ./waf configure 
$ ./waf build

Informasi liyane babagan distcc lan kompilasi sing disebarake bisa ditemokake ing kaca proyek ing bagean Dokumentasi. Kanggo nambah panji kompiler nalika ngonfigurasi ns-3, gunakake variabel lingkungan CXXFLAGS_EXTRA.

Instalasi

Waf bisa digunakake kanggo nginstal perpustakaan ing macem-macem panggonan ing sistem. Kanthi gawan, perpustakaan sing dikompilasi lan eksekusi dumunung ing direktori mbangun, lan amarga Waf ngerti lokasi perpustakaan lan eksekusi kasebut, mula ora perlu nginstal perpustakaan kasebut ing papan liya.

Yen pangguna luwih seneng nginstal ing njaba direktori mbangun, dheweke bisa mbukak perintah kasebut ./waf nginstal. Ater-ater standar kanggo instalasi yaiku / usr / lokal, dadi ./waf nginstal bakal nginstal program ing / usr / local / bin, perpustakaan ing / usr / local / lib lan file header ing /usr/local/include. Hak superuser biasane kudu disetel kanthi awalan standar, dadi prentah sing khas sudo ./waf nginstal. Nalika diluncurake, Waf bakal milih nggunakake perpustakaan sing dienggo bareng ing direktori mbangun, banjur goleki perpustakaan ing sadawane dalan menyang perpustakaan sing dikonfigurasi ing lingkungan lokal. Dadi, nalika nginstal perpustakaan ing sistem, iku praktik sing apik kanggo mriksa manawa perpustakaan sing bener digunakake. Pangguna bisa milih kanggo nginstal kanthi ater-ater sing beda kanthi menehi pilihan sajrone konfigurasi --prefix, contone:

./waf configure --prefix=/opt/local

Yen mengko, sawise mbangun, pangguna ngetik printah instalasi ./waf, ater-ater bakal digunakake /opt/lokal.

tim ./waf clean kudu digunakake sadurunge reconfiguring project yen instalasi bakal digunakake Waf ing ater-ater beda.

Dadi, kanggo nggunakake ns-3 ora perlu nelpon ./waf install. Umume pangguna ora mbutuhake prentah iki amarga Waf bakal njupuk perpustakaan saiki saka direktori mbangun, nanging sawetara pangguna bisa nemokake iki migunani yen aktivitase melu nggarap program ing njaba direktori ns-3.

Waf single

Ing tingkat ndhuwur wit sumber ns-3, mung ana siji skrip Waf. Sawise sampeyan miwiti nggarap, sampeyan bakal nglampahi akeh wektu ing direktori scratch/ utawa luwih jerosrc/... lan ing wektu sing padha kudu mbukak Waf. Sampeyan mung bisa ngelingi ngendi sampeyan lan mlayu Waf kaya mangkene:

$ ../../../waf ...

nanging iki bakal mboseni lan rawan kesalahan, mula ana solusi sing luwih apik. Salah sawijining cara sing umum yaiku nggunakake editor teks kayata emacs utawa vim, ing ngendi rong sesi terminal dibukak, siji digunakake kanggo mbangun ns-3, lan kapindho digunakake kanggo ngowahi kode sumber. Yen sampeyan mung duwe tarbal, banjur variabel lingkungan bisa mbantu:

$ export NS3DIR="$PWD" 
$ function waff { cd $NS3DIR && ./waf $* ; } 

$ cd scratch 
$ waff build

Ing direktori modul bisa uga nggodho kanggo nambah skrip waf sing ora pati penting kaya exec ../../waf. Mangga, aja mengkono. Iki mbingungake kanggo wong anyar lan, yen ditindakake kanthi ora apik, nyebabake kesalahan mbangun sing angel dideteksi. Solusi sing dituduhake ing ndhuwur minangka dalan sing kudu digunakake.

3.5 Testing ns-3

Sampeyan bisa mbukak tes unit distribusi ns-3 kanthi mbukak skrip ./test.py:

$ ./test.py

Tes kasebut ditindakake sejajar karo Waf. Pungkasane sampeyan kudu ndeleng pesen sing ujar:

92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

Iki pesen penting kanggo ngenali kacilakan valgrind, kacilakan utawa kasalahan, nuduhake masalah karo kode utawa incompatibility antarane alat lan kode.

Sampeyan uga bakal weruh output final saka Waf lan tester sing nglakokake saben tes, sing bakal katon kaya iki:

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)

Printah iki biasane ditindakake dening pangguna kanggo verifikasi kanthi cepet manawa distribusi ns-3 wis dibangun kanthi bener. (Elinga yen urutan garis "LULUS: ..." bisa uga beda, iki normal. Sing penting yaiku garis ringkesan ing pungkasan laporan nuduhake yen kabeh tes lulus; ora ana tes sing gagal utawa nabrak.) lan Waflan test.py bakal parallelize karya tengen prosesor kasedhiya intine mesin.

3.6 Nggawe skrip

Kita biasane mbukak skrip ing kontrol Waf. Iki ngidini sistem mbangun kanggo mesthekake yen path perpustakaan sambungan wis disetel bener lan perpustakaan kasedhiya ing runtime. Kanggo mbukak program, mung nggunakake Waf karo parameter - -run. Ayo mbukak ns-3 sing padha karo program sing ana ing ngendi-endi hello donyakanthi ngetik ing ngisor iki:

$ ./waf --run hello-simulator

Waf bakal mriksa manawa program kasebut dibangun kanthi bener lan yen perlu. Banjur Waf bakal nglakokake program sing ngasilake output ing ngisor iki.

Hello Simulator

Sugeng rawuh! Sampeyan saiki pangguna ns-3!

Apa sing kudu ditindakake yen ora ana asil?

Yen sampeyan ndeleng pesen Wafnuduhake yen mbangun rampung kasil, nanging sampeyan ora weruh output "Hello Simulator", banjur ana kemungkinan ing bagean [Build-with-Waf] sampeyan ngalih mode mbangun menyang optimized, nanging ora kejawab ngoper bali menyang mode debug. Kabeh output console digunakake ing tutorial iki nggunakake komponen ns-3 khusus sing nindakake logging lan digunakake kanggo print pesen adat kanggo console. Output saka komponen iki kanthi otomatis dipateni nalika kode sing dioptimalake dikompilasi - "dioptimalake". Yen sampeyan ora ndeleng output "Hello Simulator", ketik ing ngisor iki:

$ ./waf configure --build-profile=debug --enable-examples --enable-tests

kanggo ngatur Waf kanggo mbangun versi debug program ns-3, sing kalebu conto lan tes. Sampeyan banjur kudu mbangun maneh versi debug kode saiki kanthi ngetik

$ ./waf

Saiki yen sampeyan mbukak program hello-simulator, sampeyan kudu ndeleng asil samesthine.

3.6.1 Bantahan baris printah

Kanggo ngirim argumen baris perintah menyang program ns-3, gunakake pola ing ngisor iki:

$ ./waf --run <ns3-program> --command-template="%s <args>"

Ganti kanggo jeneng program lan argumen. Argumentasi - -command-template kanggo Waf iku ateges resep kanggo mbangun baris printah nyata Waf digunakake kanggo nglakokake program. Waf mriksa yen mbangun wis rampung, nyetel path perpustakaan sing dienggo bareng, banjur nggunakake cithakan baris printah sing kasedhiya lan ngganti jeneng program kanggo placeholder %s kanggo nelpon eksekusi. Yen sampeyan nemokake sintaks iki rumit, ana versi sing luwih prasaja sing nyakup program ns-3 lan argumen sing dilampirake ing kuotasi tunggal:

$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'

Conto liyane sing migunani yaiku nglakokake suite tes kanthi selektif. Ayo nganggep ana suite tes sing diarani mytest (nyatane ora ana). Ing ndhuwur kita nggunakake skrip ./test.py kanggo nglakokake sawetara tes kanthi paralel, sing bola-bali nelpon program tes. test-runner. Telpon test-runner langsung kanggo mbukak siji test:

$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"

Argumen bakal diterusake menyang program kasebut test-runner. Wiwit mytest ora ana, pesen kesalahan bakal digawe. Kanggo nyithak pilihan test-runner sing kasedhiya, ketik:

$ ./waf --run test-runner --command-template="%s --help"

3.6.2 Debugging

Kanggo mbukak program ns-3 ing utilitas liyane, kayata debugger (contone, gdb) utawa alat tes memori (contone, valgrind), nggunakake wangun sing padha - -command-template = "…". Contone, kanggo mbukak ing debugger gdb program hello-simulator ns-3 sampeyan kanthi argumen:

$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"

Elinga yen jeneng program ns-3 dilengkapi karo argumen - -run, lan sarana manajemen (kene gdb) minangka token pisanan ing argumentasi - -command-template. Pilihan - -args ngandhani gdbsing liyane saka baris printah belongs kanggo program "ngisor". (Sawetara versi gdb ora ngerti pilihan - -args. Ing kasus iki, mbusak argumen program saka - -command-template lan nggunakake pesawat printah gdb bantahan.) Kita bisa gabungke resep iki lan sing sadurunge kanggo mbukak test ing debugger:

$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"

3.6.3 Direktori kerja

Waf kudu diluncurake saka lokasi ing ndhuwur wit ns-3. Folder iki dadi direktori kerja ing ngendi file output bakal ditulis. Nanging apa yen sampeyan pengin nyimpen file kasebut ing njaba wit sumber ns-3? Gunakake argumentasi - -cwd:

$ ./waf --cwd=...

Sampeyan bisa uga luwih trep kanggo njupuk file output ing direktori kerja sampeyan. Ing kasus iki, tumindak ora langsung ing ngisor iki bisa mbantu:

$ function waff {
CWD="$PWD" 
cd $NS3DIR >/dev/null 
./waf --cwd="$CWD" $*
cd - >/dev/null 
}

Iki hiasan saka versi sadurungé saka printah ngreksa direktori apa saiki, pindhah menyang direktori Wafbanjur paring piwulang Waf kanggo ngganti direktori kerja bali menyang direktori kerja saiki sing disimpen sadurunge miwiti program. Kita sebutno tim - -cwd Kanggo lengkap, umume pangguna mung mbukak Waf saka direktori tingkat paling dhuwur lan ngasilake file output ing kana.

Lanjutan: Bab 4

Source: www.habr.com

Add a comment