
3 Začínajúc prácu
3.1 Prehľad
3.2 Predpoklady
3.2.1 Stiahnutie vydania ns-3 vo forme archívu so zdrojovými kódmi
3.3 Sťahovanie ns-3 pomocou Git
3.3.1 Stiahnutie ns-3 pomocou Bake
3.4 Skladanie ns-3
3.4.1 Skladanie pomocou build.py
3.4.2 Skladanie s Bake
3.4.3 Skladanie s Waf
3.5 Testovanie ns-3
3.6 Spustenie skriptu
3.6.1 Argumenty príkazového riadku
3.6.2 Ladenie
3.6.3 Pracovný adresár
Kapitola 3
Začínajúc prácu
Táto kapitola je zameraná na to, aby pripravila čitateľa na prácu s počítačom, na ktorý možno nikdy nebol nainštalovaný ns-3. Obsahuje platformy, predpoklady, spôsoby získania ns-3, spôsoby skladania ns-3 a spôsoby overenia vašej zostavy a spustenia jednoduchých programov.
3.1 Prehľad
Simulátor ns-3 je postavený ako systém spolupracujúcich knižníc programového softvéru. Pri skladaní sa kód užívateľských programov prelinkuje s týmito knižnicami. Na písanie užívateľských programov sa používajú programovacie jazyky C++ alebo Python.
Ns-3 sa distribuuje vo forme zdrojového kódu, čo znamená, že cieľový systém musí mať prostredie na vývoj softvéru, aby najprv skompletizoval knižnice a následne skompletizoval užívateľský program. V zásade môže byť ns-3 distribuovaný aj ako hotové knižnice pre konkrétny systém, a v budúcnosti by mohli byť distribuované týmto spôsobom. Avšak v súčasnosti mnohí užívatelia vykonávajú svoju prácu úpravou samotného ns-3, preto je užitočné mať zdrojový kód na zostavovanie knižníc. Ak by sa niekto rád ujal úlohy vytvorenia hotových knižníc a balíkov pre operačné systémy, nech sa prosím skontaktuje so zoznamom zasielania. ns-developers.
Ďalej preskúmame tri spôsoby, ako stiahnuť a zostaviť ns-3. Prvý spôsob spočíva v stiahnutí a zostavení oficiálneho vydania z hlavnej stránky. Druhý spôsob je vybratie a zostavenie kópií vývojových verzií základnej inštalácie ns-3. Tretí spôsob je použitie dodatočných nástrojov na zostavovanie na stiahnutie väčšieho množstva rozšírení pre ns-3. Prejdeme si každý z nich, pretože nástroje sa trochu líšia.
Skúsení používatelia Linuxu sa môžu opýtať, prečo sa ns‑3 neposkytuje vo forme balíka, ako väčšina ostatných knižníc používajúcich správcu balíkov? Hoci existujú binárne balíky pre rôzne distribúcie Linuxu (napríklad Debian), väčšina používateľov nakoniec upravuje knižnice a musí si znova zostavovať ns‑3, takže dostupnosť zdrojového kódu je výhodná. Z tohto dôvodu sa zameriame na inštaláciu zo zdrojového kódu.
Pre väčšinu aplikácií ns‑3 nie sú práva root potrebné, odporúča sa používať neoprávnený používateľský účet.
3.2 Predpoklady
Celý súbor dostupných knižníc ns‑3 má množstvo závislostí od externých knižníc, ale väčšinou môže byť ns‑3 zostavený a používaný s podporou niekoľkých bežne sa vyskytujúcich (často predvolene nainštalovaných) komponentov: kompilátor C++, Python, editor zdrojového kódu (napríklad vim, emacs alebo Eclipse) a, ak sa používajú vývojové repozitáre, systémy kontroly verzií Git. Väčšina začínajúcich používateľov sa nemusí obávať, ak ich konfigurácia hlási niektoré chýbajúce dodatočné funkcie ns‑3, ale pre tých, ktorí si prajú úplnú inštaláciu, projekt poskytuje wiki, ktorá obsahuje stránky s množstvom užitočných rád a tipov. Jednou z takýchto stránok je stránka „Inštalácia“ s pokynmi na inštaláciu pre rôzne systémy, dostupnými na .
Sekcia „Predpoklady“ tejto wiki-stránky vysvetľuje, ktoré balíky sú potrebné na podporu bežných možností ns‑3, a poskytuje príkazy používané na ich inštaláciu v bežných variantách Linuxu alebo macOS.
Môžete využiť takúto príležitosť, ako je štúdium wiki-stránky ns‑3 alebo hlavného webu: , pretože tam je veľa informácií. Od poslednej verzie ns‑3 (ns‑3.29) sú potrebné na spustenie ns‑3 nasledujúce nástroje:
Nástroj Balík/verzia
- Kompilátor C++
clang++ alebo g++ (g++ verzia 4.9 alebo vyššia) - Python
python2 verzia >= 2.7.10, alebo python3 verzia >= 3.4 - Git
akákoľvek najnovšia verzia (na prístup k ns‑3 na GitLab.com) - tar
akákoľvek najnovšia verzia (na rozbalenie vydania ns‑3) - bunzip2
akákoľvek najnovšia verzia (na rozbalenie vydania ns‑3)
Aby ste skontrolovali verziu Pythonu nainštalovanú predvolene, zadajte python -V. Ak chcete skontrolovať verziu g++, zadajte g++ -v. Ak niektoré nástroje chýbajú alebo sú príliš staré, pozrite sa do príručky na inštaláciu na wiki stránke ns‑3.
Od tejto chvíle predpokladáme, že čitateľ pracuje na Linuxe, MacOS alebo emulátore Linuxového prostredia a má aspoň vyššie uvedené nástroje.
3.2.1 Stiahnutie vydania ns-3 vo forme archívu so zdrojovými kódmi
Toto je postup nového používateľa, ktorý chce stiahnuť a experimentovať s najnovšími vydaniami a balíčkovými verziami ns‑3. Vydania ns‑3 sa publikujú vo forme komprimovaných archívov zdrojových kódov, niekedy nazývaných tarball. tarball — to je špeciálny formát programového archívu, v ktorom sú viaceré súbory zlúčené dohromady. Archív je zvyčajne komprimovaný. Proces sťahovania ns‑3 cez tarball je jednoduchý, stačí si vybrať vydanie, stiahnuť a rozbaliť ho.
Predpokladajme, že ako používateľ chcete zostaviť ns‑3 do lokálneho adresára s názvom workspace. Môžete získať pracovnú kópiu vydania zadaním do konzoly Linuxu nasledovné (samozrejme, nahraďte príslušnými číslami verzií)
$ 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 Všimnite si vyššie uvedený nástroj wget, ktorý je príkazovým nástrojom na sťahovanie objektov z internetu. Ak ste ho nenainštalovali, môžete na to použiť prehliadač.
Nasledovaním týchto krokov prejdete do adresára ns-allinone-3.29, kde by ste mali vidieť niekoľko súborov a adresárov
$ 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.pyTeraz ste pripravení zostaviť základný distribučný balík ns‑3 a môžete prejsť na časť o zostavovaní ns‑3.
3.3 Sťahovanie ns-3 pomocou Git
Kód ns‑3 je dostupný v Git repozitároch na GitLab.com na adrese . Skupina nsnam združuje rôzne repozitáre, ktoré používajú projekty s otvoreným zdrojovým kódom.
Najjednoduchší spôsob, ako začať používať Git repozitáre, je urobiť fork alebo sklonovať prostredie ns‑3-allinone. Toto je súbor skriptov, ktorý riadi sťahovanie a zostavenie najpoužívanejších subsystémov ns‑3. Ak ste nováčik v Git, termíny "fork" a "klonovanie" vám môžu byť neznáme; ak je to tak, odporúčame jednoducho sklonovať (vytvoriť svoju vlastnú kópiu) úložisko na GitLab.com nasledovne:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone V tomto okamihu je vzhľad vášho adresára ns‑3-allinone sa trochu líši od vyššie opísaného adresára s archívom vydania. Mala by vyzerať približne takto:
$ ls
build.py constants.py download.py README util.pyVšimnite si prítomnosť skriptu download.py, ktorý navyše extrahuje ns-3 a sprievodný zdrojový kód. Tu máte na výber: buď stiahnuť najnovší snapshot vývoja ns-3:
$ python download.pyalebo uprednostniť vydanie ns-3 s použitím parametra -n na určenie čísla vydania:
$ python download.py -n ns-3.29Po tomto kroku sa do adresára ns‑3-allinone stiahnu ďalšie repozitáre ns-3, bake, pybindgen a netanim.
Poznámka
Na stroji s čistou Ubuntu16.04 som musel zmeniť príkaz na takýto tvar: $ sudo python3 download.py -n ns-3.29 (tu a ďalej poznámky prekladateľa).
3.3.1 Stiahnutie ns-3 pomocou Bake
Dva vyššie uvedené spôsoby (archív zdrojov alebo repozitár ns‑3-allinone cez Git) sú užitočné na získanie najjednoduchšej inštalácie ns-3 s niekoľkými doplnkami (pybindgen na generovanie viazaní Python a netanim na animovanie siete). Tretí repozitár, dodávaný predvolene v ns-3-allinone, sa nazýva bake.
Bake — to je nástroj na koordinovanú kompiláciu softvéru z viacerých repozitárov, navrhnutý pre projekt ns-3. Bake môže sa používať na získavanie vývojových verzií ns-3, ako aj na sťahovanie a kompiláciu rozšírení základnej verzie distribúcie ns-3, ako je prostredie Direct Code Execution, CradleNetwork Simulation Cradle, možnosť vytvárať nové viazania Python a rôzne "aplikácie" ns-3.
Poznámka
CradleNetwork Simulation Cradle — rámec, ktorý umožňuje vo vnútri sieťového simulátora používať skutočné sieťové stacky TCP / IP.
Ak predpokladáte, že vaša inštalácia ns-3 by mala mať rozšírené alebo ďalšie funkcie, môžete sledovať tento spôsob inštalácie.
V posledných vydaniach ns-3 Bake bol pridaný do tar-vydania. Do vydania bol zahrnutý konfiguračný súbor, ktorý umožňuje sťahovať aktuálne verzie softvéru k okamihu vytvorenia vydania. T.j. napríklad verzia Bake, ktorá je distribučná s vydaním ns-3.29, môže byť použitá na získavanie komponentov pre toto vydanie ns-3 alebo staršie, ale nemôže byť použitá na extrakciu komponentov pre novšie vydania (ak súbor popisu balíka bakeconf.xml nebol aktualizovaný).
Môžete tiež získať najnovšiu kópiu bake, zadaním nasledujúceho príkazu do vašej konzoly Linux (za predpokladu, že máte nainštalovaný Git):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.gitPri vykonávaní príkazu git by ste mali vidieť niečo takéto:
Klonovanie do 'bake'...
remote: Vypisovanie objektov: 2086, hotovo.
remote: Počítanie objektov: 100% (2086/2086), hotovo.
remote: Komprimovanie objektov: 100% (649/649), hotovo.
remote: Celkom 2086 (delta 1404), opätovne použité 2078 (delta 1399)
Prijímanie objektov: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, hotovo.
Riešenie delta: 100% (1404/1404), hotovo.Po dokončení príkazu klon by ste mali mať adresár s názvom bake, ktorého obsah by mal vyzerať približne takto:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOVšimnite si, že ste stiahli niekoľko skriptov Python, modul Python s názvom bake a konfiguračný súbor XML. Ďalším krokom bude použitie týchto skriptov na stiahnutie a zostavenie distribúcie ns-3 podľa vášho výberu. K dispozícii je niekoľko cieľov nastavenia:
ns-3.29: modul zodpovedajúci vydaniu; stiahne komponenty podobné vydaniu v tarballe;
ns-3-dev: podobný modul, ale s použitím kódu z vývojového stromu;
ns-allinone-3.29: modul, ktorý zahŕňa ďalšie funkcie, ako je Click smerovanie a Network Simulation Cradle, Openflow pre ns-3.
ns‑3-allinone: podobne ako verzia modulu allinone, ale pre vývojový kód.
Poznámka
Click — modulárna softvérová architektúra na vytváranie smerovačov.
Openflow je protokol na riadenie spracovania údajov prenášaných cez sieť smerovačmi a prepínačmi, ktorý implementuje technológiu softvérovo konfigurable siete.
Aktuálny vývojový snapshot (nevydaný) ns-3 je možné nájsť na adrese:.
Vývojári sa snažia udržiavať tieto repozitáre v súlade, ale nachádzajú sa v oblasti vývoja a obsahujú nevydaný kód, preto ak neplánujete používať nové funkcie, vyberte oficiálnu verziu.
Môžete nájsť poslednú verziu kódu prehliadaním zoznamu repozitárov alebo prechodom na webovú stránku „ns-3 Releases“: a kliknutím na odkaz poslednej verzie. V tomto príklade budeme pokračovať s ns-3.29.
Teraz, aby sme získali potrebné časti ns-3, použijeme nástroj Bake. Povedzme niekoľko úvodných slov o práci Bake.
Bake funguje sťahovaním zdrojov balíkov do adresára source a inštalovaním knižníc do adresára zostavovania. Bake môže byť spustený odkazom na spustiteľný súbor, ale ak chcete spúšťať Bake nie z adresára, do ktorého bol nahraný, je vhodné pridať cestu k bake vašej ceste (premenná prostredia PATH), napríklad nasledujúcim spôsobom (príklad pre shell Linux bash). Prejdite do adresára „bake“ a potom nastavte nasledujúce premenné prostredia:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libTo umiestni program bake.py do cesty shellu a umožní ostatným programom nájsť spustiteľné súbory a knižnice, ktoré vytvoril bake. V niektorých prípadoch použitia bake, popísaná vyššie inštalácia PATH a PYTHONPATH nie je potrebná, ale pre úplnú kompiláciu ns-3-allinone (s ďalšími balíčkami) je zvyčajne potrebná.
Prejdite do pracovného adresára a do konzoly zadajte nasledujúce:
$ ./bake.py configure -e ns-3.29Potom vás požiadame Bake skontrolovať, či máme dostatočne nástroje na sťahovanie rôznych komponentov. Napíšte:
$ ./bake.py checkMali by ste vidieť niečo ako nasledujúce:
> 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 ...Predovšetkým sťahovacie nástroje, ako Mercurial, CVS, Git a Bazaar, sú kľúčové v tomto kroku, pretože nám umožňujú získať kód. V tomto kroku nainštalujte chýbajúce nástroje bežným spôsobom pre vašu systém (ak to dokážete) alebo sa obráťte na svojho systémového administrátora.
Ďalej sa pokúste stiahnuť softvér:
$ ./bake.py downloadvýsledkom by malo byť niečo ako:
>> Hľadanie systémovej závislosti setuptools - OK
>> Hľadanie systémovej závislosti libgoocanvas2 - OK
>> Hľadanie systémovej závislosti gi-cairo - OK
>> Hľadanie systémovej závislosti pygobject - OK
>> Hľadanie systémovej závislosti pygraphviz - OK
>> Hľadanie systémovej závislosti python-dev - OK
>> Hľadanie systémovej závislosti qt - OK
>> Hľadanie systémovej závislosti g++ - OK
>> Sťahovanie pybindgen-0.19.0.post4+ng823d8b2 (cieľový adresár:pybindgen) - OK
>> Sťahovanie netanim-3.108 - OK
>> Sťahovanie ns-3.29 - OKTo bude znamenať, že boli stiahnuté tri zdrojové kódy. Teraz prejdite do adresára source a zadajte ls; mali by ste vidieť:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenTeraz ste pripravení zostaviť distribúciu ns-3.
3.4 Skladanie ns-3
Rovnako ako pri sťahovaní ns-3, existuje niekoľko spôsobov, ako zostaviť ns-3. Hlavne chceme zdôrazniť, že ns-3 je zostavený pomocou nástroja na zostavenie nazvaného Waf, popísaného nižšie. Väčšina používateľov bude pracovať s Waf, ale existuje niekoľko praktických skriptov, ktoré vám pomôžu začať alebo usporiadať zložitejšie zostavy. Preto, prosím, predtým, než prečítate o Waf, pozrite sa na build.py a zostavu s bake.
3.4.1 Skladanie pomocou build.py
Pozor! Tento krok zostavy je dostupný iba z verzie pôvodného archívu, získanej tak, ako je popísané vyššie; a nie stiahnutej cez git alebo bake.
Pri práci s vydaným archívom tarball, v ns‑3‑allinone existuje praktický skript, ktorý môže zjednodušiť zostavu komponentov. Nazýva sa build.py. Tento program nastaví projekt pre vás najprínosnejším spôsobom. Napriek tomu si uvedomte, že zložitejšie nastavenia a práca s ns‑3 zvyčajne zahŕňa použitie vlastného systému zostavy ns‑3, Waf, ktorý bude predstavený neskôr v tejto príručke.
Ak ste si stiahli pomocou tarball, potom vo vašej priečinke ~/workspace by sa mala objaviť priečka s názvom niečo ako ns-allinone-3.29. Zadajte nasledujúce:
$ ./build.py --enable-examples --enable-tests
Pri volaní build.py sme použili argumenty príkazového riadka na to, aby sme zostavili príklady a testy použité v tejto príručke, ktoré sa v ns‑3 podľa predvolených nastavení nezostavujú. Podľa predvolených nastavení program tiež zostavuje všetky dostupné moduly. Potom, ak budete chcieť, môžete zostaviť ns‑3 bez príkladov a testov alebo vylúčiť moduly, ktoré nie sú potrebné pre vašu prácu.
Uvidíte množstvo výstupných hlásení kompilátora, zobrazených skriptom pri zostavovaní rôznych častí, ktoré ste načítali. Najprv sa skript pokúsi zostaviť animátor netanim, potom generátor viazaní pybindgen a nakoniec ns‑3. Na konci procesu by ste mali vidieť nasledovné:
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.29V posledných troch riadkoch výpisu vidíme hlásenie o moduloch, ktoré neboli zostavené:
Moduly neboli zostavené (pozri tutorial ns-3 na vysvetlenie):
brite klikTo jednoducho znamená, že niektoré moduly ns-3, ktoré závisia od externých knižníc, nemuseli byť zostavené, alebo že pre túto konfiguráciu ich zostavenie nie je potrebné. Neznamená to, že simulátor sa nezostavil alebo že zostavené moduly budú nefunkčné.
3.4.2 Skladanie s Bake
Ak ste pre získanie zdrojového kódu z repozitárov projektu použili bake, môžete ho naďalej používať aj na zostavenie ns-3. Napíšte:
$ .\/bake.py builda mali by ste vidieť niečo ako:
>> Zostavovanie pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Zostavovanie netanim-3.108 - OK
>> Zostavovanie ns-3.29 - OKTip: môžete tiež vykonať oba kroky naraz, stiahnutie a zostavenie, vyvolaním "bake.py deploy".
Pri zostavovaní všetkých komponentov môžu nastať zlyhania, ale zostavovanie bude pokračovať, ak komponent nie je povinný. Napríklad nedávny problém s prenositeľnosťou spočíval v tom, že castxml môže byť zostavený nástrojom bake nie na všetkých platformách. V tomto prípade sa objaví správa vo formáte:
>> Zostavovanie castxml - Problém
> Problém: Voliteľná závislosť, modul "castxml" zlyhal
To môže znížiť funkčnosť konečného zostavenia.
Avšak, bake bude pokračovať, pretože "castxml" nie je základná závislosť.
Pre viac informácií zavolajte bake s -v alebo -vvv, pre úplný podrobný režim.Avšak castxml je potrebný len v prípade, že chcete vytvoriť aktualizované väzby Python. Pre väčšinu používateľov to nie je potrebné (aspoň pokiaľ nezačnú meniť ns-3), takže takéto varovania môžete zatiaľ bezpečne ignorovať.
Ak dôjde k zlyhaniu, nasledujúci príkaz vám poskytne tip o chýbajúcich závislostiach:
$ .\/bake.py showBudú vymenované rôzne závislosti balíkov, ktoré sa pokúšate zostaviť.
3.4.3 Skladanie s Waf
Doteraz sme na začatie zostavovania ns-3 použili buď skript build.py, alebo nástroj bake. Tieto nástroje sú užitočné na zostavovanie ns-3 a podporu knižníc. V skutočnosti spúšťajú nástroj na zostavovanie Waf z adresára ns-3. Waf je nainštalovaný spolu so zdrojovým kódom ns-3. Väčšina používateľov rýchlo prechádza na priame používanie Waf. Takže, aby sme pokračovali, prejdite do adresára ns-3, ktorý ste pôvodne vytvorili.
V súčasnosti to nie je striktne nutné, ale bolo by užitočné urobiť malé odbočenie a pozrieť sa, ako vykonávať zmeny v konfigurácii projektu. Najpravdepodobnejšou a najprínosnejšou zmenou konfigurácie, ktorú môžete vykonať, bude vytvorenie optimalizovanej verzie kódu. Predvolene ste nastavili svoj projekt na zostavenie ladenia. Pozrime sa na projekt pre vytvorenie optimalizovanej zostavy. Aby ste Waf vysvetlili, že má vykonať optimalizované zostavy, ktoré obsahujú príklady a testy, budete musieť vykonať nasledujúce príkazy:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-testsToto spustí Waf mimo miestneho adresára (pre vaše pohodlie). Prvý príkaz vykonáva čistenie od predchádzajúcej zostavy, zvyčajne to nie je striktne potrebné, ale je to dobrá prax (pozrite tiež profily zostaví nižšie); odstráni to predtým vytvorené knižnice a objektové súbory nachádzajúce sa v adresári build/. Keď je projekt prekonfigurovaný a systém zostavovania kontroluje rôzne závislosti, mali by ste vidieť výstup podobný nasledujúcemu:
Nastavenie top na : /home/ns3user/workspace/bake/source/ns-3-dev
Nastavenie out na : /home/ns3user/workspace/bake/source/ns-3-dev/build
Kontrola 'gcc' (C kompilátor) : /usr/bin/gcc
Kontrola verzie cc : 7.3.0
Kontrola 'g++' (C++ kompilátor) : /usr/bin/g++
Kontrola kompilátorovej vlajky -march=native podpora : ok
Kontrola kompilátorovej vlajky -Wl,--soname=foo podpora : ok
Kontrola kompilátorovej vlajky -std=c++11 podpora : ok
Kontrola boost knižníc : hlavičky nenájdené, prosím, poskytnite argument --boost-includes (pozrite si pomoc)
Kontrola boost knižníc : hlavičky nenájdené, prosím, poskytnite argument --boost-includes (pozrite si pomoc)
Kontrola programu 'python' : /usr/bin/python
Kontrola verzie python >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
Pýtanie python-config na pyembed '--cflags --libs --ldflags' vlajky : áno
Testovanie pyembed konfigurácie : áno
Pýtanie python-config na pyext '--cflags --libs --ldflags' vlajky : áno
Testovanie pyext konfigurácie : áno
Kontrola kompilátorovej vlajky -fvisibility=hidden podpora : ok
Kontrola kompilátorovej vlajky -Wno-array-bounds podpora : ok
Kontrola umiestnenia pybindgen : ../pybindgen ,!(odhadované)
Kontrola python modulu 'pybindgen' : 0.19.0. ,!post4+g823d8b2
Kontrola verzie pybindgen : 0.19.0. ,!post4+g823d8b2
Kontrola vzorového kódu : áno
Kontrola ekvivalencie typov uint64_t a unsigned long : nie
Kontrola vzorového kódu : nie
Kontrola ekvivalencie typov uint64_t a unsigned long long : áno
Kontrola apidefs, ktoré môžu byť použité pre Python viazanie : gcc-LP64
Kontrola interného GCC cxxabi : kompletné
Kontrola python modulu 'pygccxml' : nenájdené
Kontrola umiestnenia click : nenájdené
Kontrola programu 'pkg-config' : /usr/bin/pkg- ,!config
Kontrola 'gtk+-3.0' : nenájdené
Kontrola 'libxml-2.0' : áno
kontrola pre uint128_t : nenájdené
kontrola pre __uint128_t : áno
Kontrola vysokej presnosti implementácie : 128-bitové celé číslo ,!(predvolené)
Kontrola záhlavia stdint.h : áno
Kontrola záhlavia inttypes.h : áno
Kontrola záhlavia sys/inttypes.h : nenájdené
Kontrola záhlavia sys/types.h : áno
Kontrola záhlavia sys/stat.h : áno
Kontrola záhlavia dirent.h : áno
Kontrola záhlavia stdlib.h : áno
Kontrola záhlavia signal.h : áno
Kontrola záhlavia pthread.h : áno
Kontrola záhlavia stdint.h : áno
Kontrola záhlavia inttypes.h : áno
Kontrola záhlavia sys/inttypes.h : nenájdené
Kontrola knižnice rt : áno
Kontrola záhlavia sys/ioctl.h : áno
Kontrola záhlavia net/if.h : áno
Kontrola záhlavia net/ethernet.h : áno
Kontrola záhlavia linux/if_tun.h : áno
Kontrola záhlavia netpacket/packet.h : áno
Kontrola umiestnenia NSC : nenájdené
Kontrola 'sqlite3' : nenájdené
Kontrola záhlavia linux/if_tun.h : áno
Kontrola python modulu 'gi' : 3.26.1
Kontrola python modulu 'gi.repository.GObject' : ok
Kontrola python modulu 'cairo' : ok
Kontrola python modulu 'pygraphviz' : 1.4rc1
Kontrola python modulu 'gi.repository.Gtk' : ok
Kontrola python modulu 'gi.repository.Gdk' : ok
Kontrola python modulu 'gi.repository.Pango' : ok
Kontrola python modulu 'gi.repository.GooCanvas' : ok
Kontrola programu 'sudo' : /usr/bin/sudo
Kontrola programu 'valgrind' : nenájdené
Kontrola 'gsl' : nenájdené python-config : nenájdené
Kontrola kompilátorovej vlajky -fstrict-aliasing podpora : ok
Kontrola kompilátorovej vlajky -fstrict-aliasing podpora : ok
Kontrola kompilátorovej vlajky -Wstrict-aliasing podpora : ok
Kontrola kompilátorovej vlajky -Wstrict-aliasing podpora : ok
Kontrola programu 'doxygen' : /usr/bin/doxygen
---- Zhrnutie voliteľných vlastností ns-3:
Profil zostavenia : optimalizovaný
Zostavenie adresára :
Integrácia BRITE : nie je povolená (BRITE nie je povolené (pozrite si možnosť --with- ,!brite))
Zber dát DES Metrics udalostí : nie je povolený (predvolene zakázané)
Emulácia FdNetDevice : povolené
Príklady : povolené
NetDevice s deskriptorom súboru : povolené
GNU Scientific Library (GSL) : nie je povolená (GSL nenájdené)
Gcrypt knižnica : nie je povolená
(libgcrypt nenájdené: môžete použiť ,!libgcrypt-config na nájdenie jeho umiestnenia.) GtkConfigStore : nie je povolené (knižnica 'gtk+-3.0 >= 3.0' nebola nájdená)
MPI podpora : nie je povolená (možnosť --enable-mpi nebola vybraná)
ns-3 Click Integrácia : nie je povolená (nsclick nie je povolené (pozrite si možnosť --with- ,!nsclick))
ns-3 OpenFlow Integrácia : nie je povolená (Potrebné boost knižnice nenájdené)
Network Simulation Cradle : nie je povolené (NSC nenájdené (pozrite si možnosť --with-nsc))
PlanetLab FdNetDevice : nie je povolené (planetLab operačný systém nebol detekovaný ,!(pozrite si možnosť --force-planetlab)) PyViz vizualizátor : povolené
Podpora skenovania Python API : nie je povolená (Chýbajúci modulu Python 'pygccxml')
Python viazania : povolené
Reálny čas simulátor : povolené
SQlite schémy dátový výstup : nie je povolené (knižnica 'sqlite3' nenájdené)
Tap Bridge : povolené
Tap FdNetDevice : povolené
Testy : povolené
Primíty vlákien : povolené
Použite sudo na nastavenie suid bitu : nie je povolené (možnosť --enable-sudo nebola vybraná)
XmlIo : povolené
'configure' úspešne dokončené (6.387s)Všimnite si poslednú časť uvedeného zoznamu vyššie. Niektoré možnosti ns-3 nie sú predvolene zahrnuté alebo si vyžadujú podporu zo strany systému pre správne fungovanie. Napríklad na zahrnutie XmlTo musí byť v systéme prítomná knižnica libxml-2.0. Ak táto knižnica nebola nájdená a príslušná funkcia ns-3 nebola zahrnutá, zobrazí sa správa. Takisto si uvedomte, že je možné použiť príkaz sudo na nastavenie bitu suid „nastavenie ID skupiny počas vykonávania“ pre určité programy. Predvolene nie je zahrnuté, a preto sa táto funkcia zobrazuje ako „nie je zahrnutá“ („not enabled“). Nakoniec, aby ste získali zoznam zapnutých možností, použite Waf s parametrom --check-config.
Teraz sa vrátime a prepneme späť na laditeľnú verziu, ktorá obsahuje príklady a testy.
$ .\/waf clean
$ .\/waf configure --build-profile=debug --enable-examples --enable-testsSystém zostavenia je teraz nastavený a môžete zostaviť laditeľné verzie programov ns-3 jednoducho zadaním:
$ ./wafNech vás vyššie popísané kroky donútili zostaviť časť systému ns-3 dvakrát, ale teraz viete, ako zmeniť konfiguráciu a zostaviť optimalizovaný kód.
Na overenie, ktorý profil je aktívny pre danú konfiguráciu projektu, existuje príkaz:
$ .\/waf --check-profile
Waf: Vstup do adresára `\/path\/to\/ns-3-allinone\/ns-3.29\/build'
Profil zostavenia: debugPreskúmaný scenár vyššie build.py taktiež podporuje argumenty --enable-examples a --enable-tests, ale iné možnosti Waf nepodporuje priamo. Napríklad, toto nebude fungovať:
$ .\/build.py --disable-pythonreakcia bude taká:
build.py: error: no such option: --disable-pythonNapriek tomu môže byť špeciálny operátor - - použitý na odovzdanie ďalších parametrov cez waf, preto namiesto vyššie uvedeného bude fungovať nasledujúci príkaz:
$ .\/build.py -- --disable-pythonkeďže generuje základný príkaz .\/waf configure —disable-python. Tu je niekoľko ďalších úvodných tipov o Waf.
Správa chýb pri zostavovaní
Verzie ns-3 boli testované na najnovších kompilátoroch C++, ktoré boli dostupné v čase vydania na bežných distribúciách Linuxu a MacOS. Avšak časom vychádzajú nové distribúcie s novými kompilátormi, a tieto novšie kompilátory sú zvyčajne prísnejšie voči varovaniam. ns-3 nastavuje svoje zostavenie na spracovanie všetkých varovaní ako chýb, takže niekedy, ak používate staršiu verziu v novšom systéme, môže byť varovanie kompilátora prekážkou pre zostavenie.
Napríklad, predtým bola vydaná verzia ns-3.28 pre Fedora 28, ktorá obsahovala novú hlavnú verziu gcc (gcc-8). Pri zostavovaní verzie ns-3.28 alebo starších verzií pod Fedora 28, ak je nainštalovaný Gtk2+, sa objaví takáto chyba:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);V vydaniach, počnúc ns-3.28.1, Waf je dostupná možnosť na riešenie týchto problémov. Vypína inštaláciu príznaku „-Werror“ v g++ a clang++. Táto možnosť „--disable-werror“ by sa mala aplikovať počas konfigurácie:
$ ./waf configure --disable-werror --enable-examples --enable-testsKonfigurovať alebo zostaviť
Niektoré príkazy Waf majú zmysel iba v fáze konfigurácie, a niektoré pôsobia iba v fáze zostavenia. Napríklad, ak chcete používať funkcie emulácie ns-3, môžete zahrnúť nastavenie bitu suid použitím sudo, ako je uvedené vyššie. To zruší príkazy fázy konfigurácie, a týmto spôsobom môžete zmeniť konfiguráciu pomocou nasledujúceho príkazu, ktorý tiež zahŕňa príklady a testy.
$ ./waf configure --enable-sudo --enable-examples --enable-testsAk to urobíte, Waf spustí sudo, aby zmenilo programy vytvárania zásuviek emulovaného kódu na spúšťanie s právami root. V Waf existuje množstvo ďalších možností pre fázy konfigurácie a zostavenia. Ak chcete preskúmať možnosti, zadajte:
$ ./waf --helpV nasledujúcej kapitole budeme používať niektoré možnosti týkajúce sa testovania.
Profily zostavy
Už sme videli, ako je možné nastaviť Waf pre zostavy debug a optimized:
$ ./waf --build-profile=debugExistuje aj medzičlánkový profil zostavy, release. Možnosť -d je synonymom --build-profile. Profil zostavy riadi používanie protokolovania, afirmácií (assertions) a optimalizačných kľúčov kompilátora:

Ako môžete vidieť, logovanie a asertácie sú dostupné iba v ladených zostaveniach. Odporúčaná prax spočíva v tom, že svoj skript vypracujete v režime ladenia a potom vykonáte opakované spustenia (pre štatistiky alebo zmenu parametrov) v optimalizovanom profile zostavenia.
Ak máte kód, ktorý sa má vykonávať iba v určitých profiloch zostavenia, použite makro Code Wrapper Macro:
NS_BUILD_DEBUG (std::cout << "Časť výstupného riadku..." << std::flush; timer.Start, !()); DoLongInvolvedComputation();
NS_BUILD_DEBUG (timer.Stop(); std::cout << "Hotovo: " << timer << std::endl;)Predvolene, Waf umiestňuje artefakty zostavenia do adresára zostavenia. Môžete zadať iný výstupný adresár pomocou možnosti - -out, napríklad:
$ ./waf configure --out=my-build-dirKombinovaním tohto s profilmi zostavenia môžete ľahko prechádzať medzi rôznymi parametrami kompilácie:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...Čo vám umožňuje pracovať s viacerými zostaveniami, aniž by ste zakaždým prepisovali posledné zostavenie. Keď prejdete na iný profil, Waf bude kompilovať iba ten, bez úplnej prekódovania všetkého.
Keď takýmto spôsobom prepínate profily zostavenia, musíte dbát na to, aby ste zakaždým poskytovali rovnaké parametre konfigurácie. Pomôže vám vyhnúť sa chybám definovanie niekoľkých premenných prostredia:
$ 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 buildKompilátory a flagy
V uvedených príkladoch Waf pre zostavenie ns‑3 používa C++ kompilátor z GCC ( g++). Napriek tomu, je možné zmeniť používaný Waf C++ kompilátor definovaním premennej prostredia CXX. Napríklad, aby ste použili C++ kompilátor Clang, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build Podobne je možné nastaviť Waf na použitie distribuovanej kompilácie pomocou distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf buildPodrobnejšie informácie o distcc a distribuovanej kompilácii nájdete na stránke projektu v sekcii 'Dokumentácia'. Aby ste pri konfigurácii ns‑3 pridali flagy kompilátora, použite premennú prostredia CXXFLAGS_EXTRA.
Inštalácia
Waf môže sa použiť na inštaláciu knižníc na rôzne miesta v systéme. Predvolene sú zhromaždené knižnice a spustiteľné súbory umiestnené v adresári build, a keďže Waf pozná umiestnenie týchto knižníc a spustiteľných súborov, nie je potrebné inštalovať knižnice nikam inam.
Ak používateľom vyhovuje inštalácia mimo adresár pre stavbu, môžu vykonať príkaz .\/waf install. Predvolene je prefix pre inštaláciu — /usr/local, takže .\/waf install bude inštalovať programy do /usr/local/bin, knižnice do /usr/local/lib a hlavičkové súbory do /usr/local/include. Práva superužívateľa sú zvyčajne potrebné na inštaláciu s predvoleným prefixom, takže typický príkaz bude sudo .\/waf install. Pri spustení Waf najprv uprednostní použitie zdieľaných knižníc v adresári pre stavbu a potom bude hľadať knižnice podľa cesty k knižniciam nastaveným v lokálnom prostredí. Takže pri inštalácii knižníc do systému je dobrá prax skontrolovať, že sa používajú požadované knižnice. Používatelia si môžu zvoliť inštaláciu s iným prefixom, pričom počas konfigurácie odovzdajú voľbu --prefix, napríklad:
.\/waf configure --prefix=\/opt\/localAk neskôr, po zbuildovaní, používateľ zadá príkaz inštalácie .\/waf, bude sa používať prefix /opt/local.
Tím .\/waf clean by mala byť použitá pred novou konfiguráciou projektu, ak sa na inštaláciu použije Waf pod iným prefixom.
Tým pádom nie je potrebné volať ns‑3, .\/waf install. Väčšine používateľov tento príkaz nebude potrebný, pretože Waf získa aktuálne knižnice z adresára pre stavbu, ale niektorí používatelia to môžu považovať za užitočné, keď ich činnosť zahŕňa prácu s programami mimo adresáru ns‑3.
Waf je jednotný
Na najvyššej úrovni stromu zdrojového kódu ns‑3 existuje iba jeden Waf skript. Keď začnete pracovať, stráviť veľa času v adresári scratch\/ alebo hlbšie, vsrc\/... a pritom sa potrebovať spustiť Waf. Môžete si jednoducho pamätať, kde ste, a spustiť Waf nasledovne:
$ ..\/..\/..\/waf ...ale to bude únavné a náchylné na chyby, preto existujú lepšie riešenia. Jedným z bežných spôsobov je použiť textový editor, ako je emacs alebo vim, v ktorom sa otvoria dve terminálové relácie, jedna sa používa na stavbu ns‑3 a druhá na úpravu zdrojového kódu. Ak máte len tarball, to môže pomôcť premenná prostredia:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && .\/waf $* ; }
$ cd scratch
$ waff buildV adresári modulu môže byť lákavé pridať triviálny skript waf ako vzor exec ..\/..\/waf. Prosím, nerobte to. Zmätie to nováčikov a pri zlom vykonaní vedie k ťažko odhaliteľným chybám pri zostavení. Riešenia uvedené vyššie sú cestou, ktorou by sa malo ísť.
3.5 Testovanie ns-3
Môžete vykonať modulárne testy distribúcie ns-3 spustením skriptu .\/test.py:
$ .\/test.pyTieto testy sa vykonávajú paralelne s Waf. Nakoniec by ste mali vidieť správu, že
92 z 92 testov prešlo (92 prešlo, 0 zlyhalo, 0 havarovalo, 0 chyby valgrind)Toto je dôležitá správa na identifikáciu zlyhaní, pádov alebo chýb valgrind, ktorá poukazuje na problémy s kódom alebo nekompatibilitu medzi nástrojmi a kódom.
Tiež uvidíte konečný výstup od Waf a testera, ktorý vykonáva každý test, ktorý bude vyzerať približne takto:
Waf: Vstup do adresára `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build'
Waf: Opúšťanie adresára `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build'
'build' bolo dokončené úspešne (1.799s)
Zostavené moduly:
aodv aplikácie most
click config-store jadro
csma csma-layout dsdv
emu energia monitorovanie-prúdu
internet lte mesh
mobilita mpi netanim
sieť nix-vector-routing ns3tcp
ns3wifi olsr openflow
point-to-point point-to-point-layout propagácia
spektrum štatistiky tap-bridge
šablóna test nástroje
topológia-čítať uan virtuálne-netové-zariadenie
vizualizér wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite objekt
PASS: TestSuite generátory-náhodných-čísel
92 z 92 testov prešlo (92 prešlo, 0 zlyhalo, 0 havarovalo, 0 chyby valgrind)
Tento príkaz zvyčajne spúšťajú používatelia na rýchlu kontrolu správnosti zostavenia distribúcie ns-3. (Všimnite si, že poradie riadkov „PASS: …“ sa môže líšiť, to je normálne. Dôležité je, že v konečnom riadku na konci správy všetky kontroly prešli; žiaden test neskončil neúspešne alebo nezlyhal.) A Waf, a test.py budú paralelizovať prácu podľa dostupných jadier procesora stroja.
3.6 Spustenie skriptu
Obvykle spúšťame skripty pod kontrolou Waf. To umožňuje systému zostavovania zabezpečiť, aby cesty k zdieľanej knižnici boli nastavené správne a aby boli knižnice dostupné počas vykonávania. Ak chcete spustiť program, jednoducho použite Waf s parametrom - run. Spustíme pre ns-3 ekvivalent všadeprítomného programu hello world, zadaním nasledujúceho:
$ .\/waf --run hello-simulatorWaf najprv skontroluje, či je program správne zostavený, a v prípade potreby vykoná zostavenie. Potom Waf vykoná program, ktorý vykoná nasledujúci výstup.
Hello SimulatorGratulujeme! Teraz ste používateľom ns‑3!
Čo mám robiť, ak nevidím výsledok?
Ak vidíte správy Waf, ktoré naznačujú, že zostavenie bolo úspešne dokončené, ale nevidíte výstup „Hello Simulator“, existuje pravdepodobnosť, že ste v sekcii [Zostavenie-s-Waf] zmenili svoj režim zostavenia na optimized, ale vynechali ste spätné prepínanie do režimu debug. Celý výstup konzoly, ktorý sa používa v tejto príručke, využíva špeciálnu komponentu ns‑3, ktorá vykonáva zápis logu a používa sa na tlač užívateľských správ do konzoly. Výstup z tejto komponenty je automaticky vypnutý pri kompilácii optimalizovaného kódu — je „optimalizovaný“. Ak nevidíte výstup „Hello Simulator“, zadajte nasledujúce:
$ .\/waf configure --build-profile=debug --enable-examples --enable-testsaby ste nastavili Waf na zostavenie odladěných verzií programov ns‑3, ktoré zahŕňajú príklady a testy. Potom by ste mali znovu zostaviť aktuálnu odladěnú verziu kódu zadaním
$ ./wafTeraz, ak spustíte program hello-simulator, mali by ste vidieť očakávaný výsledok.
3.6.1 Argumenty príkazového riadku
Aby ste odovzdali argumenty príkazového riadku do programu ns‑3, použite nasledujúcu šablónu:
$ .\/waf --run --command-template="%s "Nahraďte názvom vášho programu a argumentmi. Argument - -command-template pre Waf — je v podstate recept na zostavenie skutočného príkazového riadku Waf používaného na vykonanie programu. Waf kontroluje, že zostavenie je dokončené, nastavuje cesty k spoločnej knižnici, potom s použitím poskytnutej šablóny príkazového riadku a dosadením názvu programu namiesto zástupného symbolu %s volá spustiteľný súbor. Ak sa vám tento syntax zdá zložitý, existuje jednoduchšia možnosť, ktorá zahŕňa program ns‑3 a jeho argumenty uzavreté do jednoduchých úvodzoviek:
$ .\/waf --run ' --arg1=value1 --arg2=value2 ...'Iným, obzvlášť užitočným, príkladom je selektívne spustenie súborov testov. Predpokladajme, že existuje testovací súbor (suite) mytest (v skutočnosti neexistuje). Vyššie sme použili skript .\/test.py na paralelné spustenie celého radu testov, ktorý viackrát volá program testovania test-runner. Zavolanie test-runner priamo na vykonanie jedného testu:
$ . /waf --run test-runner --command-template="%s --suite=mytest --verbose"Argumenty budú poslané programu test-runner. Keďže mytest neexistuje, bude sa generovať chybové hlásenie. Ak chcete vytlačiť dostupné parametre test-runner, zadajte:
$ . /waf --run test-runner --command-template="%s --help"3.6.2 Ladenie
Na spustenie programov ns-3 pod riadiacou utilitou, ako je ladenie (napríklad gdb) alebo nástroj na overenie pamäte (napríklad valgrind), použite podobnú formu - -command-template = "…". Napríklad, ak chcete spustiť vo ladení gdb vašu aplikáciu hello-simulator ns-3 s argumentmi:
$ . /waf --run=hello-simulator --command-template="gdb %s --args "Všimnite si, že názov programu ns-3 ide s argumentom - run, a riadiaca utilita (tu gdb) je prvým tokenom v argumente - -command-template. Možnosť - -args oznamuje gdb, že zvyšok príkazového riadku patrí "nižšiemu" programu. (Niektoré verzie gdb nezhodujú voľbu - -args. V takom prípade odstráňte argumenty programu z - -command-template a použite súbor príkazov gdb args.) Môžeme kombinovať tento recept a predchádzajúci na spustenie testu pod ladením:
$ . /waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"3.6.3 Pracovný adresár
Waf by mal byť spustený zo svojho umiestnenia na vrchole stromu ns-3. Táto zložka sa stáva pracovným adresárom, kam budú zapísané výstupné súbory. Ale čo robiť, ak chcete uchovať tieto súbory mimo zdrojového stromu ns-3? Použite argument - -cwd:
$ . /waf --cwd=...Možno bude pre vás pohodlnejšie získavať výstupné súbory vo vašom pracovnom adresári. V takom prípade môže pomôcť takéto nepriame opatrenie:
$ function waff {
CWD="$PWD"
cd $NS3DIR > /dev /null
. /waf --cwd="$CWD" $*
cd - > /dev /null
}Takéto dekorovanie predchádzajúcej verzie príkazu uchováva aktuálny pracovný adresár, prechádza do adresára Waf, a potom pokyn Waf na zmenu pracovného adresára späť na uložený pred spustením programu aktuálny pracovný adresár. Spomíname príkaz - -cwd pre úplnosť, väčšina používateľov jednoducho spúšťa Waf z adresára najvyššej úrovne a tam generujú výstupné súbory.
Zdroj: habr.com
