Návod na simulátor siete ns-3. Kapitola 3

Návod na simulátor siete ns-3. Kapitola 3
kapitola 1,2

3 Začíname
3.1 Prehľad
3.2 Predpoklady
3.2.1 Stiahnutie vydania ns-3 ako zdrojového archívu
3.3 Sťahovanie ns-3 pomocou Git
3.3.1 Načítanie ns-3 pomocou funkcie Bake
3.4 Montáž ns-3
3.4.1 Budova s ​​build.py
3.4.2 Budovanie pomocou funkcie Bake
3.4.3 Zostavte pomocou 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číname

Táto kapitola má pripraviť čitateľa na to, aby začal s počítačom, na ktorom možno nikdy nemal nainštalovaný ns-3. Zahŕňa podporované platformy, predpoklady, ako získať ns-3, ako zostaviť ns-3 a ako otestovať zostavenie a spustenie jednoduchých programov.

3.1 Prehľad

Simulátor ns-3 je postavený ako systém spolupracujúcich softvérových knižníc. Počas zostavovania je kód užívateľských programov prepojený s týmito knižnicami. Programovacie jazyky C++ alebo Python sa používajú na písanie vlastných programov.

Ns-3 je distribuovaný ako zdrojový kód, čo znamená, že cieľový systém musí mať prostredie na vývoj softvéru, aby bolo možné najskôr zostaviť knižnice a potom zostaviť používateľský program. V zásade by ns-3 mohli byť distribuované ako hotové knižnice pre konkrétny systém a v budúcnosti môžu byť distribuované týmto spôsobom. Ale v súčasnosti mnohí používatelia skutočne robia svoju prácu úpravou samotného ns-3, takže je užitočné mať zdrojový kód na zostavenie knižníc. Ak by sa niekto chcel ujať práce s tvorbou hotových knižníc a balíkov pre operačné systémy, kontaktujte prosím mailing list ns-developers.

Ďalej sa pozrieme na tri spôsoby, ako stiahnuť a zostaviť ns-3. Prvým je stiahnutie a zostavenie oficiálneho vydania z hlavnej stránky. Druhým je výber a zostavenie kópií vývojových verzií základnej inštalácie ns-3. Tretím je použitie ďalších nástrojov na zostavovanie na načítanie ďalších rozšírení pre ns-3. Prejdeme si každý z nich, pretože nástroje sú mierne odlišné.

Skúsení používatelia Linuxu sa môžu čudovať, prečo sa ns-3 neposkytuje ako balík ako väčšina iných knižníc, ktoré používajú správcu balíkov? Aj keď existujú binárne balíky pre rôzne distribúcie Linuxu (napr. Debian), väčšina používateľov skončí úpravou knižníc a bude musieť prestavať ns-3 sami, takže mať k dispozícii zdrojový kód je praktické. Z tohto dôvodu sa zameriame na inštaláciu zo zdroja.

Pre väčšinu aplikácií práva ns-3 koreň nie sú potrebné, odporúča sa použiť neprivilegovaný používateľský účet.

3.2 Predpoklady

Celá sada dostupných knižníc ns-3 má množstvo závislostí na knižniciach tretích strán, ale väčšinou je možné ns-3 zostaviť a používať s podporou niekoľkých bežných (často predvolene nainštalovaných) komponentov: kompilátor C++, Python, editor zdrojového kódu (napr. elán, emacs alebo Zatmenie) a ak sa používajú vývojové úložiská, systémy na správu verzií Git. Väčšina začínajúcich používateľov sa nemusí obávať, ak ich konfigurácia hlási chýbajúce niektoré pokročilé funkcie ns-3, ale pre tých, ktorí chcú úplnú inštaláciu, projekt poskytuje wiki, ktorá obsahuje stránky s množstvom užitočných tipov a trikov. Jednou z takýchto stránok je stránka Inštalácia s pokynmi na inštaláciu pre rôzne systémy, ktoré sú dostupné na adrese: https://www.nsnam.org/wiki/Installation.

Sekcia Predpoklady na tejto wiki vysvetľuje, ktoré balíky sú potrebné na podporu bežných možností ns-3, a tiež poskytuje príkazy používané na ich inštaláciu v bežných verziách Linuxu alebo macOS.

Môžete využiť túto príležitosť a preskúmať wiki stránku ns-3 alebo hlavnú webovú stránku: https://www.nsnam.org, pretože tam je veľa informácií. Počnúc najnovšou verziou ns-3 (ns-3.29) sú na spustenie ns-3 potrebné nasledujúce nástroje:

Balík/verzia nástroja

  • kompilátor C++
    clang++ alebo g++ (g++ verzia 4.9 alebo vyššia)
  • Pytón
    verzia python2 >= 2.7.10 alebo verzia python3 >= 3.4
  • ísť
    akákoľvek najnovšia verzia (pre prístup k ns-3 na GitLab.com)
  • decht
    akákoľvek najnovšia verzia (na rozbalenie vydania ns‑3)
  • bunzip2
    akákoľvek najnovšia verzia (na rozbalenie vydania ns‑3)

Ak chcete skontrolovať predvolenú verziu Pythonu, napíšte python -V. Ak chcete skontrolovať verziu g++, napíšte g++ -v. Ak nejaké nástroje chýbajú alebo sú príliš staré, pozrite si inštalačnú príručku na wiki stránke ns-3.

Odteraz predpokladáme, že čítačka používa Linux, MacOS alebo emulátor Linuxu a má aspoň vyššie uvedené nástroje.

3.2.1 Stiahnutie vydania ns-3 ako zdrojového archívu

Toto je postup pre nového používateľa, ktorý si chce stiahnuť a experimentovať s najnovším vydaním a verziami balíkov ns-3. Vydania ns-3 sú publikované ako komprimované zdrojové archívy, niekedy tzv tarball. tarball je špeciálny formát softvérového archívu, v ktorom je niekoľko súborov spojených dohromady. Archív je zvyčajne komprimovaný. ns-3 zavádzací proces cez tarball je jednoduché, stačí si vybrať vydanie, stiahnuť a rozbaliť.

Predpokladajme, že ako používateľ chcete zostaviť ns-3 v lokálnom adresári s názvom pracovný priestor. Pracovnú kópiu vydania môžete získať zadaním nasledovného do konzoly Linuxu (samozrejme nahradením príslušných čísel 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 

Venujte pozornosť vyššie použitej pomôcke wget, čo je nástroj príkazového riadka na sťahovanie objektov z internetu. Ak ste ho nenainštalovali, môžete na to použiť svoj prehliadač.

Po týchto krokoch sa dostanete 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.py

Teraz ste pripravení zostaviť základnú distribúciu ns-3 a môžete prejsť na časť o budovaní ns-3.

3.3 Sťahovanie ns-3 pomocou Git

Kód ns-3 je dostupný v repozitároch Git na GitLab.com na adrese https://gitlab.com/nsnam/. Skupina nsnam spája rôzne úložiská používané projektom s otvoreným zdrojovým kódom.

Najjednoduchší spôsob, ako začať používať úložiská Git, je forkovať alebo klonovať prostredie ns-3-allinón. Ide o sadu skriptov, ktoré riadia načítanie a zostavenie najbežnejšie používaných subsystémov ns-3. Ak ste novým používateľom Git, výrazy „fork“ a „klon“ vám môžu byť neznáme; ak áno, odporúčame vám jednoducho naklonovať (vytvoriť si vlastnú kópiu) úložisko umiestnené na GitLab.com takto:

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

V tejto fáze pohľad na váš adresár ns-3-allinón mierne odlišný od adresára archívu vydania opísaného vyššie. Malo by to vyzerať asi takto:

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

Upozorňujeme, že existuje skript download.py, ktorý dodatočne extrahuje ns-3 a sprievodný zdrojový kód. Tu máte na výber: buď si stiahnite najnovšiu snímku vývoja ns-3:

$ python download.py

alebo uprednostnite uvoľnenie ns-3 pomocou príznaku -n uviesť číslo vydania:

$ python download.py -n ns-3.29

Po tomto kroku do adresára ns-3-allinón budú stiahnuté ďalšie úložiská ns-3, upiecť, pybindgen и netanim.

Poznámka
Na počítači s čistým Ubuntu16.04 som potreboval zmeniť príkaz na tento: $ sudo python3 download.py -n ns-3.29 (ďalej len poznámky prekladateľa).

3.3.1 Načítanie ns-3 pomocou funkcie Bake

Vyššie uvedené dve metódy (zdrojový archív alebo úložisko ns-3-allinón cez Git) sú užitočné na získanie najjednoduchšej inštalácie ns-3 s viacerými doplnkami (pybindgen na generovanie väzieb Pythonu a netanim pre sieťovú animáciu). Tretí archív, ktorý je štandardne poskytovaný v ns-3-allinone, sa nazýva upiecť.

upiecť je nástroj na koordinované budovanie softvéru z viacerých úložísk, vyvinutý pre projekt ns-3. upiecť možno použiť na získanie vývojových verzií ns-3, ako aj na stiahnutie a zostavenie rozšírení základnej verzie distribúcie ns-3, ako napr. Priame spustenie kódu, CradleNetwork Simulation Cradle, schopnosť vytvárať nové väzby Pythonu a rôzne „aplikácie ns-3“.

Poznámka
CradleNetwork Simulation Cradle je rámec, ktorý vám umožňuje používať skutočné sieťové zásobníky TCP/IP v rámci sieťového simulátora.

Ak očakávate, že vaša inštalácia ns-3 bude mať pokročilé alebo dodatočné funkcie, môžete postupovať podľa tejto inštalačnej cesty.

V najnovších vydaniach ns-3 upiecť bol pridaný k uvoľňovaniu dechtu. Vydanie obsahuje konfiguračný súbor, ktorý vám umožňuje stiahnuť aktuálne verzie softvéru v čase vydania. To je napríklad verzia upiecť, ktorý je distribuovaný s vydaním ns-3.29, možno použiť na získanie komponentov pre dané vydanie ns-3 alebo staršieho, ale nemožno ho použiť na získanie komponentov pre neskoršie vydania (ak súbor s popisom balíka bakeconf.xml neaktualizovaný).

Môžete tiež získať najnovšiu kópiu upiecťzadaním nasledujúceho príkazu do konzoly Linux (za predpokladu, že máte nainštalovaný Git):

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

Keď spustíte príkaz git, mali by ste vidieť niečo ako nasledovné:

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.

Po dokončení príkazu klonovať mali by ste mať pomenovaný adresár upiecť, ktorého obsah by mal vyzerať asi takto:

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

Všimnite si, že ste nahrali niekoľko skriptov Python, s názvom modulu Python upiecť a konfiguračný súbor XML. Ďalším krokom je 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 prispôsobenia:

  1. ns-3.29: modul zodpovedajúci uvoľneniu; stiahne komponenty podobné uvoľneniu v tarballe;

  2. ns-3-dev: podobný modul, ale s použitím kódu z vývojového stromu;

  3. ns-allinón-3.29: Modul, ktorý obsahuje ďalšie dodatočné funkcie, ako je smerovanie kliknutí a kolíska simulácie siete, Openflow pre ns-3.

  4. ns-3-allinón: podobne ako vo verzii modulu allinone, ale pre vývojový kód.

Poznámka
kliknite — modulárna softvérová architektúra na vytváranie smerovačov.

Openflow je protokol na riadenie procesu spracovania údajov prenášaných cez dátovú sieť smerovačmi a prepínačmi, ktorý implementuje softvérovo definovanú sieťovú technológiu.

Aktuálny stav vývoja (nevydaný) ns-3 nájdete na:https://gitlab.com/nsnam/ns-3-dev.git.

Vývojári sa snažia udržiavať tieto úložiská v konzistentnom funkčnom stave, ale sú vo vývojovej oblasti a obsahujú nevydaný kód, takže ak neplánujete používať nové funkcie, vyberte oficiálne vydanie.

Najnovšiu verziu kódu môžete nájsť prezeraním zoznamu repozitárov alebo na webovej stránke ns-3 Releases:https://www.nsnam.org/releases/ a kliknutím na odkaz na najnovšiu verziu. V tomto príklade budeme pokračovať s ns-3.29.

Teraz, aby sme získali komponenty ns-3, ktoré potrebujeme, použijeme tento nástroj upiecť. Povedzme si pár slov na úvod o diele upiecť.

Bake funguje načítaním zdrojov balíkov do adresára zdroj a inštalácia knižníc do adresára build. upiecť možno spustiť odkazovaním na binárne, ale ak chcete spustiť upiecť nie z adresára, do ktorého bol stiahnutý, je vhodné pridať cestu k upiecť k vašej ceste (premenná prostredia PATH), napríklad takto (príklad pre Linux bash shell). 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/lib

Toto umiestni program piecť.py na cestu k shellu a umožní iným programom nájsť spustiteľné súbory a knižnice, ktoré vytvoril upiecť. V niektorých prípadoch použitia upiecť, nastavenie PATH a PYTHONPATH popísané vyššie nie je potrebné, ale kompletná zostava ns-3-allinone (s ďalšími balíkmi) to zvyčajne vyžaduje.

Prejdite do svojho pracovného adresára a do konzoly zadajte nasledovné:

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

Ďalej sa budeme pýtať upiecť skontrolujte, či máme dostatok nástrojov na načítanie rôznych komponentov. Vytočiť:

$ ./bake.py check

Mali by ste vidieť niečo ako nasledovné:

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

V tomto kroku sú nevyhnutné najmä nástroje na nahrávanie, ako sú Mercurial, CVS, Git a Bazaar, pretože nám umožňujú získať kód. V tomto bode nainštalujte chýbajúce nástroje obvyklým spôsobom pre váš systém (ak viete ako) alebo požiadajte o pomoc správcu systému.

Potom skúste stiahnuť softvér:

$ ./bake.py download

výsledok by mal byť niečo ako:

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

To znamená, že boli stiahnuté tri zdroje. Teraz prejdite do zdrojového adresára a napíšte ls; Mali by ste vidieť:

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

Teraz ste pripravení zostaviť distribúciu ns-3.

3.4 Montáž ns-3

Rovnako ako pri sťahovaní ns-3 existuje niekoľko spôsobov, ako zostaviť ns-3. Hlavná vec, ktorú chceme zdôrazniť, je, že ns-3 je zostavený pomocou nástroja na zostavovanie tzv WAFpopísané nižšie. Väčšina používateľov bude pracovať s WAF, ale existuje niekoľko užitočných skriptov, ktoré vám pomôžu začať alebo organizovať zložitejšie zostavy. Takže prosím, predtým, ako si o tom prečítate WAF, pozri sa na build.py a montáž s upiecť.

3.4.1 Budova s ​​build.py

Varovanie! Tento krok zostavenia je dostupný len z verzie zdrojového archívu získanej tak, ako je popísané vyššie; a nie stiahnuté cez git alebo bake.

Pri práci s archívom vydania tarballV ns-3-allinón Existuje praktický skript, ktorý môže zjednodušiť zostavenie komponentov. Volá sa build.py. Tento program nastaví projekt za vás tým najužitočnejším spôsobom. Upozorňujeme však, že pokročilejšie nastavenie a práca s ns-3 zvyčajne zahŕňa použitie vlastného zostavovacieho systému ns-3, Waf, ktorý bude predstavený neskôr v tomto návode.

Ak ste stiahli pomocou tarball, potom vo vašom adresári ~/pracovný priestor adresár s názvom niečo ako ns-allinón-3.29. Zadaj nasledujúce:

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

Pri telefonovaní build.py Na zostavenie príkladov a testov použitých v tomto návode sme použili argumenty príkazového riadku, ktoré nie sú štandardne zostavené v ns-3. Štandardne program tiež zostavuje všetky dostupné moduly. Potom, ak chcete, 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 veľa výstupných správ kompilátora zobrazených skriptom pri vytváraní rôznych častí, ktoré ste načítali. Najprv sa scenár pokúsi zostaviť animátor netanim, potom generátor väzby pybindgen a nakoniec ns-3. Po dokončení 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.29

V posledných troch riadkoch výpisu vidíme správu o moduloch, ktoré neboli zostavené:

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

To jednoducho znamená, že niektoré moduly ns-3, ktoré závisia od externých knižníc, možno neboli zostavené, alebo že sa pre túto konfiguráciu nevyžaduje ich zostavenie. To neznamená, že simulátor nie je zostavený alebo že zostavené moduly nebudú správne fungovať.

3.4.2 Budovanie pomocou funkcie Bake

Ak ste použili bake vyššie na získanie zdrojového kódu z projektových úložísk, môžete ho naďalej používať na zostavenie ns-3. Vytočiť:

$ ./bake.py build

a mali by ste vidieť niečo ako:

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

pomôcť: Kroky sťahovania aj zostavovania môžete vykonať naraz volaním „bake.py deploy“.

Montáž všetkých komponentov môže zlyhať, ale ak komponent nie je potrebný, montáž bude pokračovať. Napríklad nedávny problém s prenosnosťou bol taký castxml možno zostaviť pomocou nástroja upiecť nie na všetkých platformách. V tomto prípade sa zobrazí správa ako je táto:

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

Ale castxml potrebné iba vtedy, ak chcete vytvoriť aktualizované väzby Pythonu. Pre väčšinu používateľov to nie je potrebné (aspoň kým nezmenia ns-3), takže takéto varovania môžu byť zatiaľ bezpečne ignorované.

Ak zlyhá, nasledujúci príkaz vám dá tip na chýbajúce závislosti:

$ ./bake.py show

Zobrazia sa rôzne závislosti balíkov, ktoré sa pokúšate zostaviť.

3.4.3 Zostavte pomocou Waf

Až do tohto bodu sme na začatie vytvárania ns-3 používali buď skript build.py, alebo nástroj upiecť. Tieto nástroje sú užitočné pri vytváraní ns-3 a údržbe knižníc. V skutočnosti na zostavenie spustia nástroj na zostavenie WAF z adresára ns-3. WAF nainštalovaný so zdrojovým kódom ns-3. Väčšina používateľov rýchlo prejde na priame použitie na konfiguráciu a zostavenie ns‑3 WAF. Ak chcete pokračovať, prejdite do adresára ns-3, ktorý ste pôvodne vytvorili.

V súčasnosti to nie je striktne vyžadované, ale bude užitočné trochu sa vrátiť a zistiť, ako vykonať zmeny v konfigurácii projektu. Pravdepodobne najužitočnejšou zmenou konfigurácie, ktorú môžete urobiť, je vytvorenie optimalizovanej verzie kódu. V predvolenom nastavení ste svoj projekt nakonfigurovali na vytvorenie verzie ladenia. Poďme sa pozrieť na projekt na vytvorenie optimalizovanej zostavy. Ak chcete Wafovi vysvetliť, že by mal vytvárať optimalizované zostavy, ktoré obsahujú príklady a testy, budete musieť spustiť nasledujúce príkazy:

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

Toto sa spustí WAF mimo lokálneho adresára (pre vaše pohodlie). Prvý príkaz vyčistí z predchádzajúcej zostavy, zvyčajne to nie je nevyhnutne potrebné, ale je to dobrá prax (pozri tiež profily zostavy nižšie); tým sa vymažú predtým vytvorené knižnice a súbory objektov umiestnené v adresári stavať/. Keď je projekt prekonfigurovaný a zostavovací systém skontroluje rôzne závislosti, mali by ste vidieť výstup podobný tomuto:

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)

Všimnite si prosím poslednú časť vyššie uvedeného zoznamu. Niektoré možnosti ns-3 nie sú predvolene povolené alebo vyžadujú podporu systému, aby správne fungovali. Ak chcete napríklad povoliť XmlTo, knižnica musí byť prítomná v systéme libxml-2.0. Ak sa táto knižnica nenašla a príslušná funkcia ns-3 nebola povolená, zobrazí sa hlásenie. Všimnite si tiež, že je možné použiť príkaz sudo na nastavenie suid bitu „nastaviť ID skupiny za behu“ pre určité programy. V predvolenom nastavení nie je povolená, a preto sa táto funkcia javí ako „nepovolená“. Nakoniec, ak chcete získať zoznam povolených možností, použite WAF s parametrom --check-config.

Teraz sa vráťme a prepnime späť na zostavenie ladenia obsahujúce príklady a testy.

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

Systém zostavovania je teraz nastavený a môžete zostavovať ladiace verzie programov ns-3 jednoduchým zadaním:

$ ./waf

Vyššie uvedené kroky vás možno prinútili zostaviť časť systému ns-3 dvakrát, ale teraz viete, ako zmeniť konfiguráciu a zostaviť optimalizovaný kód.

Ak chcete skontrolovať, ktorý profil je aktívny pre danú konfiguráciu projektu, existuje príkaz:

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

Vyššie uvedený scenár build.py podporuje aj argumenty --enable-examples и --enable-tests, ale iné možnosti WAF nepodporuje priamo. Napríklad toto nebude fungovať:

$ ./build.py --disable-python

reakcia bude takáto:

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

Špeciálny operátor -- však možno použiť na odovzdanie ďalších parametrov cez WAFtakže namiesto vyššie uvedeného bude fungovať nasledujúci príkaz:

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

pretože generuje hlavný príkaz ./waf configure --disable-python. Tu je niekoľko ďalších tipov na úvod o WAF.

Riešenie chýb zostavy

Vydania ns-3 sú testované na najnovších kompilátoroch C++ dostupných v čase vydania na bežných distribúciách Linuxu a MacOS. Postupom času sa však vydávajú nové distribúcie s novými kompilátormi a tieto novšie kompilátory majú tendenciu byť pedantickejšie k varovaniam. ns-3 nakonfiguruje svoju zostavu tak, aby považovala všetky upozornenia za chyby, takže niekedy, ak používate staršiu verziu na novšom systéme, varovanie kompilátora môže zastaviť zostavovanie.

Napríklad predtým bolo vydanie ns‑3.28 pre Fedora 28, ktoré obsahovalo novú hlavnú verziu gcc (gcc-8). Pri vytváraní vydania ns-3.28 alebo starších verzií pod Fedora 28 s nainštalovaným Gtk2+ sa vyskytne nasledujúca chyba:

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

Vo vydaniach od ns‑3.28.1, in WAF existuje možnosť riešenia týchto problémov. Zakáže nastavenie príznaku "-Werror" v g ++ a clang ++. Toto je možnosť „--disable-werror“ a musí sa použiť počas konfigurácie:

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

Nakonfigurujte alebo zostavte

Niektoré príkazy WAF majú význam iba vo fáze konfigurácie a niektoré sú platné iba vo fáze zostavovania. Napríklad, ak chcete použiť funkcie emulácie ns-3, môžete povoliť nastavenie bitov suid použitím sudo, ako je opísané vyššie. Toto prepíše príkazy konfiguračného kroku, a preto môžete zmeniť konfiguráciu pomocou nasledujúceho príkazu, ktorý obsahuje aj príklady a testy.

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

Ak to urobíte WAF sa spustí sudozmeniť programy na vytváranie soketov emulačného kódu tak, aby sa spúšťali s povoleniami koreň. V WAF Pre kroky konfigurácie a zostavenia je k dispozícii mnoho ďalších možností. Ak chcete preskúmať svoje možnosti, zadajte:

$ ./waf --help

V ďalšej časti použijeme niektoré možnosti súvisiace s testovaním.

Montážne profily

Už sme videli, ako môžete nakonfigurovať WAF pre zostavy ladiť и optimalizované:

$ ./waf --build-profile=debug

K dispozícii je tiež stredný montážny profil, uvoľnite. Možnosť -d je synonymom --build-profile. Profil zostavy riadi použitie protokolovania, výrazov a prepínačov optimalizácie kompilátora:

Návod na simulátor siete ns-3. Kapitola 3

Ako vidíte, protokolovanie a tvrdenia sú dostupné iba v zostavách ladenia. Odporúčaná prax je vyvinúť skript v režime ladenia a potom vykonať opakované spustenie (pre štatistiky alebo zmeny parametrov) v optimalizovanom profile zostavy.

Ak máte kód, ktorý by sa mal spúšťať iba v určitých profiloch zostavy, použite makro na obalenie kódu:

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

Predvolené, WAF umiestni artefakty zostavy do adresára zostavy. Pomocou tejto voľby môžete zadať iný výstupný adresár - -out, napríklad:

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

Ak to skombinujete s profilmi zostavy, môžete jednoducho prepínať medzi rôznymi možnosťami 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 zostavami bez toho, aby ste museli zakaždým prepisovať najnovšiu zostavu. Keď prepnete na iný profil, WAF skompiluje iba to, bez toho, aby úplne prekompiloval všetko.

Keď prepínate profily zostavy týmto spôsobom, musíte byť opatrní, aby ste zakaždým poskytli rovnaké možnosti konfigurácie. Definovanie niekoľkých premenných prostredia vám pomôže vyhnúť sa chybám:

$ 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

Kompilátory a vlajky

Vo vyššie uvedených príkladoch WAF na zostavenie ns-3 sa používa kompilátor C++ z GCC ( g ++). Môžete však zmeniť ten, ktorý používate WAF C++ kompilátor definovaním premennej prostredia CXX. Napríklad, ak chcete použiť kompilátor C++ Clang, clang++,

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

Rovnakým spôsobom môžete nakonfigurovať WAF použiť distribuovanú kompiláciu pomocou distcc:

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

Viac informácií o distcc a distribuovanej kompilácii nájdete na stránke projektu v sekcii Dokumentácia. Ak chcete pri konfigurácii ns-3 pridať príznaky kompilátora, použite premennú prostredia CXXFLAGS_EXTRA.

Inštalácia

WAF možno použiť na inštaláciu knižníc na rôznych miestach v systéme. V predvolenom nastavení sú skompilované knižnice a spustiteľné súbory umiestnené v adresári vybudovaťa keďže Waf pozná umiestnenie týchto knižníc a spustiteľných súborov, nie je potrebné inštalovať knižnice nikde inde.

Ak používatelia uprednostňujú inštaláciu mimo adresára zostavy, môžu spustiť príkaz ./waf nainštalovať. Predvolená predpona pre inštaláciu je / Usr / local, preto ./waf nainštalovať nainštaluje programy do / Usr / local / bin, knižnice v / Usr / local / lib a hlavičkových súborov v /usr/local/include. Práva superužívateľa je zvyčajne potrebné nastaviť s predvolenou predponou, takže typický príkaz by bol sudo ./waf nainštalovať. Po spustení sa Waf najprv rozhodne použiť zdieľané knižnice v adresári zostavy a potom bude hľadať knižnice pozdĺž cesty ku knižniciam nakonfigurovaným v lokálnom prostredí. Takže pri inštalácii knižníc do systému je dobrou praxou skontrolovať, či sa používajú správne knižnice. Používatelia si môžu zvoliť inštaláciu s inou predponou tak, že prejdú túto možnosť počas konfigurácie --prefix, napríklad:

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

Ak neskôr, po zostavení, používateľ zadá príkaz na inštaláciu ./waf, použije sa predpona /opt/local.

Tím ./waf clean musí byť použitý pred prekonfigurovaním projektu, ak sa bude inštalácia používať WAF pod inou predponou.

Preto na použitie ns-3 nie je potrebné volať ./waf install. Väčšina používateľov nebude tento príkaz potrebovať, pretože WAF prevezme aktuálne knižnice z adresára build, ale niektorí používatelia to môžu považovať za užitočné, ak ich aktivity zahŕňajú prácu s programami mimo adresára ns-3.

Waf single

Na najvyššej úrovni zdrojového stromu ns-3 je len jeden skript Waf. Akonáhle začnete pracovať, strávite v adresári veľa času scratch/ alebo hlbšie dosrc/... a zároveň musí bežať WAF. Môžete si len spomenúť, kde ste a utiecť WAF takto:

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

ale to bude únavné a náchylné na chyby, takže existujú lepšie riešenia. Jedným z bežných spôsobov je použitie textového editora ako napr emacs alebo elán, v ktorom sú otvorené dve terminálové relácie, jedna sa používa na zostavenie ns-3 a druhá sa používa na úpravu zdrojového kódu. Ak len máte tarball, potom môže premenná prostredia pomôcť:

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

$ cd scratch 
$ waff build

V adresári modulu môže byť lákavé pridať triviálny skript waf, ako je exec ../../waf. Prosím nerob to. Pre nováčikov je to mätúce a ak sa to robí zle, vedie to k ťažko odhaliteľným chybám zostavy. Vyššie uvedené riešenia predstavujú cestu, ktorá by sa mala použiť.

3.5 Testovanie ns-3

Jednotkové testy distribúcie ns-3 môžete spustiť spustením skriptu ./test.py:

$ ./test.py

Tieto testy prebiehajú súbežne s WAF. Nakoniec by ste mali vidieť správu, ktorá hovorí:

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

Toto je dôležitá správa na identifikáciu pádov, pádov alebo chýb valgrindu, čo naznačuje problémy s kódom alebo nekompatibilitu medzi nástrojmi a kódom.

Uvidíte aj konečný výstup z WAF a tester spúšťajúci každý test, ktorý bude vyzerať asi takto:

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)

Tento príkaz zvyčajne spúšťajú používatelia, aby si rýchlo overili, či je distribúcia ns-3 zostavená správne. (Upozorňujeme, že poradie riadkov "PASS: ..." sa môže líšiť, je to normálne. Dôležité je, že súhrnný riadok na konci správy ukazuje, že všetky testy prebehli úspešne, žiadne testy nezlyhali ani nezlyhali.) A WAFA test.py bude paralelizovať prácu medzi dostupnými procesorovými jadrami stroja.

3.6 Spustenie skriptu

Zvyčajne spúšťame skripty pod kontrolou WAF. To umožňuje zostavovaciemu systému zabezpečiť, aby boli cesty zdieľaných knižníc nastavené správne a aby boli knižnice dostupné za behu. Na spustenie programu stačí použiť WAF s parametrom - -run. Spustíme ekvivalent ns-3 všadeprítomného programu hello worldzadaním nasledovného:

$ ./waf --run hello-simulator

Waf najprv skontroluje, či je program zostavený správne a v prípade potreby ho zostaví. Potom WAF spustí program, ktorý vytvorí nasledujúci výstup.

Hello Simulator

Gratulujem! Teraz ste používateľom ns-3!

Čo mám robiť, ak nevidím výsledky?

Ak vidíte správy WAFčo znamená, že zostava bola úspešne dokončená, ale nevidíte výstup "Ahoj simulátor", potom existuje možnosť, že v sekcii [Build-with-Waf] ste prepli režim zostavovania optimalizované, ale zmeškal prepnutie späť do režimu ladiť. Všetok výstup konzoly použitý v tomto návode používa špeciálny komponent ns-3, ktorý vykonáva protokolovanie a používa sa na tlač vlastných správ do konzoly. Výstup z tohto komponentu je automaticky zakázaný pri kompilácii optimalizovaného kódu – je „optimalizovaný“. Ak nevidíte výstup „Hello Simulator“, zadajte nasledovné:

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

nakonfigurovať WAF vytvárať ladiace verzie programov ns-3, ktoré zahŕňajú príklady a testy. Potom by ste mali znova vytvoriť aktuálnu verziu ladiaceho kódu zadaním

$ ./waf

Teraz, ak spustíte program ahoj-simulátor, mali by ste vidieť očakávaný výsledok.

3.6.1 Argumenty príkazového riadku

Ak chcete odovzdať argumenty príkazového riadka programu ns-3, použite nasledujúci vzor:

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

Nahraďte názvom vášho programu a argumentmi. Argumentovať - -command-template pre WAF je v podstate recept na zostavenie skutočného príkazového riadku WAF používané na spustenie programu. Waf skontroluje, či je zostava dokončená, nastaví cesty zdieľanej knižnice, potom použije poskytnutú šablónu príkazového riadka a nahradí názov programu za zástupný symbol %s na volanie spustiteľného súboru. Ak sa vám zdá táto syntax komplikovaná, existuje jednoduchšia verzia, ktorá zahŕňa program ns-3 a jeho argumenty uzavreté v jednoduchých úvodzovkách:

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

Ďalším obzvlášť užitočným príkladom je selektívne spúšťanie testovacích sád. Predpokladajme, že existuje testovací balík s názvom mytest (v skutočnosti neexistuje). Vyššie sme použili skript ./test.py na paralelné spustenie niekoľkých testov, ktoré opakovane volajú testovací program skúšobný bežec. Zavolajte skúšobný bežec priamo na spustenie jedného testu:

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

Argumenty budú odovzdané programu skúšobný bežec. Keďže mytest neexistuje, vygeneruje sa chybové hlásenie. Ak chcete vytlačiť dostupné možnosti testovacieho programu, zadajte:

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

3.6.2 Ladenie

Ak chcete spustiť programy ns-3 pod iným nástrojom, ako je debugger (napr. gdb) alebo nástrojom na testovanie pamäte (napr. valgrind), použite podobný formulár - -command-template = "…". Napríklad spustiť v debuggeri gdb váš program hello-simulator ns-3 s argumentmi:

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

Všimnite si, že názov programu ns-3 prichádza s argumentom - -runa nástroj na správu (tu gdb) je prvý token v argumente - -command-template. Možnosť - -args správy gdbže zvyšok príkazového riadku patrí „nižšiemu“ programu. (Niektoré verzie gdb nerozumiem možnosti - -args. V tomto prípade odstráňte argumenty programu z - -command-template a použite sadu príkazov gdb args.) Tento recept môžeme skombinovať s predchádzajúcim, aby sme spustili test pod debuggerom:

$ ./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 miesta v hornej časti stromu ns-3. Tento priečinok sa stane pracovným adresárom, do ktorého sa budú zapisovať výstupné súbory. Ale čo ak chcete tieto súbory ponechať mimo zdrojového stromu ns-3? Použite argument - -cwd:

$ ./waf --cwd=...

Možno zistíte, že je pohodlnejšie získať výstupné súbory vo vašom pracovnom adresári. V tomto prípade môže pomôcť nasledujúca nepriama akcia:

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

Táto dekorácia predchádzajúcej verzie príkazu zachová aktuálny pracovný adresár, prejde do adresára WAFa potom inštruuje WAF zmeniť pracovný adresár späť na aktuálny pracovný adresár uložený pred spustením programu. Spomíname na mužstvo - -cwd Pre úplnosť, väčšina používateľov jednoducho spustí Waf z adresára najvyššej úrovne a vygeneruje výstupné súbory tam.

Pokračovanie: Kapitola 4

Zdroj: hab.com

Pridať komentár