3 Začínáme
3.1 Přehled
3.2 Předpoklady
3.2.1 Stažení verze ns-3 jako zdrojového archivu
3.3 Stažení ns-3 pomocí Git
3.3.1 Načítání ns-3 pomocí Bake
3.4 Montáž ns-3
3.4.1 Budova s build.py
3.4.2 Budování pomocí Bake
3.4.3 Sestavení pomocí Waf
3.5 Testování ns-3
3.6 Spuštění skriptu
3.6.1 Argumenty příkazového řádku
3.6.2 Ladění
3.6.3 Pracovní adresář
Kapitola 3
Začínáme
Tato kapitola má připravit čtenáře na to, aby začal s počítačem, na kterém možná nikdy nebyl nainstalován ns-3. Pokrývá podporované platformy, předpoklady, jak získat ns-3, jak sestavit ns-3 a jak otestovat sestavování a spouštění jednoduchých programů.
3.1 Přehled
Simulátor ns-3 je postaven jako systém spolupracujících softwarových knihoven. Při sestavování je kód uživatelských programů propojen s těmito knihovnami. K psaní vlastních programů se používají programovací jazyky C++ nebo Python.
Ns-3 je distribuován jako zdrojový kód, což znamená, že cílový systém musí mít prostředí pro vývoj softwaru, aby bylo možné nejprve sestavit knihovny a poté vytvořit uživatelský program. V zásadě by ns-3 mohly být distribuovány jako hotové knihovny pro konkrétní systém a v budoucnu mohou být distribuovány tímto způsobem. Ale v dnešní době mnoho uživatelů skutečně dělá svou práci úpravou samotného ns-3, takže je užitečné mít zdrojový kód pro sestavení knihoven. Pokud by se někdo chtěl ujmout práce s tvorbou hotových knihoven a balíčků pro operační systémy, kontaktujte prosím mailing list ns-developers.
Dále se podíváme na tři způsoby, jak stáhnout a sestavit ns-3. Prvním je stažení a vytvoření oficiální verze z hlavní stránky. Druhým je výběr a sestavení kopií vývojových verzí základní instalace ns-3. Třetím je použití dalších nástrojů pro sestavení k načtení dalších rozšíření pro ns-3. Projdeme si každý z nich, protože nástroje se mírně liší.
Zkušení uživatelé Linuxu se mohou divit, proč není ns-3 poskytován jako balíček jako většina ostatních knihoven, které používají správce balíčků? Přestože existují binární balíčky pro různé distribuce Linuxu (např. Debian), většina uživatelů skončí tak, že knihovny upraví a budou muset ns-3 přebudovat sami, takže mít k dispozici zdrojový kód se hodí. Z tohoto důvodu se zaměříme na instalaci ze zdroje.
Pro většinu aplikací práva ns-3 kořen nejsou potřeba, doporučuje se použít neprivilegovaný uživatelský účet.
3.2 Předpoklady
Celá sada dostupných knihoven ns-3 má řadu závislostí na knihovnách třetích stran, ale z velké části lze ns-3 sestavit a používat s podporou několika běžných (často instalovaných ve výchozím nastavení) komponent: kompilátor C++, Python, editor zdrojového kódu (např. elán, emacs nebo Zatmění) a pokud se používají vývojová úložiště, systémy pro správu verzí Git. Většina začínajících uživatelů se nemusí obávat, pokud jejich konfigurace hlásí chybějící některé pokročilé funkce ns-3, ale pro ty, kteří chtějí plnou instalaci, projekt poskytuje wiki, která obsahuje stránky se spoustou užitečných tipů a triků. Jednou z takových stránek je stránka Instalace s pokyny k instalaci pro různé systémy, která je k dispozici na adrese:
Sekce Předpoklady na této wiki vysvětluje, které balíčky jsou vyžadovány pro podporu běžných možností ns-3, a také poskytuje příkazy používané k jejich instalaci na běžné verze Linuxu nebo macOS.
Můžete využít této příležitosti a prozkoumat wiki stránku ns-3 nebo hlavní web:
Balíček/verze nástroje
- C++ kompilátor
clang++ nebo g++ (g++ verze 4.9 nebo vyšší) - PYTHON
verze python2 >= 2.7.10 nebo verze python3 >= 3.4 - Git
jakákoli nejnovější verze (pro přístup k ns-3 na GitLab.com) - dehet
jakákoli nejnovější verze (pro rozbalení vydání ns‑3) - bunzip2
jakákoli nejnovější verze (pro rozbalení vydání ns‑3)
Chcete-li zkontrolovat výchozí verzi Pythonu, napište python -V
. Chcete-li zkontrolovat verzi g++, napište g++ -v
. Pokud nějaké nástroje chybí nebo jsou příliš staré, podívejte se na instalační příručku na wiki stránce ns-3.
Od této chvíle předpokládáme, že čtečka používá Linux, MacOS nebo emulátor Linuxu a má alespoň výše uvedené nástroje.
3.2.1 Stažení verze ns-3 jako zdrojového archivu
Toto je postup pro nového uživatele, který si chce stáhnout a experimentovat s nejnovější verzí a verzemi balíčků ns-3. Vydání ns-3 jsou publikována jako komprimované zdrojové archivy, někdy nazývané tarball. tarball je speciální formát softwarového archivu, ve kterém je několik souborů spojeno dohromady. Archiv je obvykle komprimovaný. ns-3 spouštěcí proces přes tarball je jednoduchý, stačí si vybrat vydání, stáhnout a rozbalit.
Předpokládejme, že jako uživatel chcete sestavit ns-3 v místním adresáři s názvem pracovní prostor. Pracovní kopii vydání můžete získat zadáním následujícího do konzole Linuxu (samozřejmě nahrazením příslušných čísel verzí)
$ 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ěnujte pozornost výše použitému nástroji wget, což je nástroj příkazového řádku pro stahování objektů z internetu. Pokud jste jej nenainstalovali, můžete k tomu použít svůj prohlížeč.
Následující kroky vás zavedou do adresáře ns-allinone-3.29, kde byste měli vidět několik souborů a adresářů
$ 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
Nyní jste připraveni sestavit základní distribuci ns-3 a můžete přejít k části o stavbě ns-3.
3.3 Stažení ns-3 pomocí Git
Kód ns-3 je k dispozici v repozitářích Git na GitLab.com na adrese
Nejjednodušší způsob, jak začít používat úložiště Git, je fork nebo klonování prostředí ns-3-allinon. Jedná se o sadu skriptů, která řídí načítání a sestavování nejběžněji používaných subsystémů ns-3. Pokud jste v Gitu noví, pojmy „fork“ a „klon“ vám mohou být neznámé; pokud ano, doporučujeme vám jednoduše naklonovat (vytvořit si vlastní kopii) úložiště umístěné na GitLab.com takto:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone
V této fázi pohled na váš adresář ns-3-allinon mírně odlišný od adresáře archivu vydání popsaného výše. Mělo by to vypadat nějak takto:
$ ls
build.py constants.py download.py README util.py
Vezměte prosím na vědomí, že existuje skript download.py, který bude dodatečně extrahovat ns-3 a doprovodný zdrojový kód. Zde máte na výběr: buď si stáhněte nejnovější snímek vývoje ns-3:
$ python download.py
nebo preferujte vydání ns-3 pomocí příznaku -n
pro uvedení čísla vydání:
$ python download.py -n ns-3.29
Po tomto kroku do adresáře ns-3-allinon budou stažena další úložiště ns-3, upéct, pybindgen и netaním.
Poznámka
Na počítači s čistým Ubuntu16.04 jsem potřeboval změnit příkaz na toto: $ sudo python3 download.py -n ns-3.29
(dále jen poznámky překladatele).
3.3.1 Načítání ns-3 pomocí Bake
Výše uvedené dvě metody (zdrojový archiv nebo úložiště ns-3-allinon přes Git) jsou užitečné pro získání nejjednodušší instalace ns-3 s více doplňky (pybindgen pro generování vazeb Pythonu a netaním pro síťovou animaci). Třetí úložiště poskytované standardně v ns-3-allinone se nazývá upéct.
Upéct je nástroj pro koordinované budování softwaru z více úložišť, vyvinutý pro projekt ns-3. Upéct lze použít k získání vývojových verzí ns-3 a také ke stažení a sestavení rozšíření základní verze distribuce ns-3, jako je prostředí Přímé spuštění kódu, CradleNetwork Simulation Cradle, schopnost vytvářet nové vazby Pythonu a různé „aplikace ns-3“.
Poznámka
CradleNetwork Simulation Cradle je rámec, který vám umožňuje používat skutečné síťové zásobníky TCP/IP v simulátoru sítě.
Pokud očekáváte, že vaše instalace ns-3 bude mít pokročilé nebo další funkce, můžete postupovat podle této instalační cesty.
V nejnovějších verzích ns-3 Upéct byla přidána k uvolnění dehtu. Vydání obsahuje konfigurační soubor, který vám umožňuje stáhnout aktuální verze softwaru v době vydání. Tedy například verze Upéct, který je distribuován s vydáním ns-3.29, lze použít k načtení komponent pro toto vydání ns-3 nebo starší, ale nelze jej použít k načtení komponent pro pozdější vydání (pokud soubor popisu balíčku bakeconf.xml neaktualizováno).
Můžete také získat nejnovější kopii upéctzadáním následujícího příkazu do konzole Linuxu (za předpokladu, že máte nainstalovaný Git):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.git
Když spustíte příkaz git, měli byste vidět něco jako následující:
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í příkazu klonovat měli byste mít pojmenovaný adresář upéct, jehož obsah by měl vypadat nějak takto:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO
Všimněte si, že jste nahráli několik skriptů Python, pojmenovaný modul Python upéct a konfigurační soubor XML. Dalším krokem je použití těchto skriptů ke stažení a sestavení distribuce ns-3 dle vašeho výběru. K dispozici je několik cílů přizpůsobení:
-
ns-3.29: modul odpovídající vydání; stáhne komponenty podobné verzi v tarballu;
-
ns-3-dev: podobný modul, ale používající kód z vývojového stromu;
-
ns-allinon-3.29: Modul, který obsahuje další doplňkové funkce, jako je směrování kliknutí a kolébka simulace sítě, Openflow pro ns-3.
-
ns-3-allinon: podobná verzi modulu allinone, ale pro vývojový kód.
Poznámka
klikněte — modulární softwarová architektura pro vytváření směrovačů.
Openflow je protokol pro řízení procesu zpracování dat přenášených přes datovou síť směrovači a přepínači, implementující softwarově definovanou síťovou technologii.
Aktuální vývojový snímek (nevydání) ns-3 lze nalézt na:
Vývojáři se snaží udržovat tato úložiště v konzistentním funkčním stavu, ale jsou ve vývojové oblasti a obsahují nevydaný kód, takže pokud neplánujete používat nové funkce, vyberte oficiální vydání.
Nejnovější verzi kódu můžete najít procházením seznamu úložišť nebo na webové stránce ns-3 Releases:
Nyní, abychom získali komponenty ns-3, které potřebujeme, použijeme nástroj Upéct. Řekněme si pár slov na úvod k dílu Upéct.
Bake funguje načítáním zdrojů balíčků do adresáře zdroj a instalaci knihoven do adresáře sestavení. Upéct lze spustit odkazem na binární soubor, ale pokud chcete spustit Upéct ne z adresáře, do kterého byl stažen, je vhodné přidat cestu ke upéct k vaší cestě (proměnná prostředí PATH), například takto (příklad pro Linux bash shell). Přejděte do adresáře "bake" a poté nastavte následující proměnné prostředí:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib
Tím se program umístí upéct.py k cestě shellu a umožní ostatním programům najít spustitelné soubory a knihovny, které vytvořil upéct. V některých případech použití upéct, výše popsané nastavení PATH a PYTHONPATH není vyžadováno, ale kompletní sestavení ns-3-allinone (s dalšími balíčky) jej obvykle vyžaduje.
Přejděte do svého pracovního adresáře a do konzoly zadejte následující:
$ ./bake.py configure -e ns-3.29
Dále se budeme ptát Upéct zkontrolujte, zda máme dostatek nástrojů k načtení různých komponent. Vytočit:
$ ./bake.py check
Měli byste vidět něco jako následující:
> 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 jsou nezbytné zejména nástroje pro nahrávání, jako je Mercurial, CVS, Git a Bazaar, protože nám umožňují získat kód. V tomto okamžiku nainstalujte chybějící nástroje obvyklým způsobem pro váš systém (pokud víte jak) nebo se požádejte o pomoc správce systému.
Dále zkuste stáhnout software:
$ ./bake.py download
výsledek by měl být něco jako:
>> 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 byly staženy tři zdroje. Nyní přejděte do zdrojového adresáře a zadejte ls; Měl bys vidět:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgen
Nyní jste připraveni vytvořit distribuci ns-3.
3.4 Montáž ns-3
Stejně jako u stahování ns-3 existuje několik způsobů, jak sestavit ns-3. Hlavní věc, kterou chceme zdůraznit, je, že ns-3 je sestaven pomocí nástroje pro sestavení tzv Wafpopsané níže. Většina uživatelů bude pracovat s Waf, ale existuje několik užitečných skriptů, které vám pomohou začít nebo organizovat složitější sestavení. Takže prosím, než o tom budete číst Waf, Podívejte se na build.py a montáž s upéct.
3.4.1 Budova s build.py
Varování! Tento krok sestavení je dostupný pouze z verze zdrojového archivu získané výše popsaným způsobem; a nestahují se přes git nebo bake.
Při práci s archivem vydání tarballV ns-3-allinon Existuje praktický skript, který může usnadnit sestavení komponent. Jmenuje se build.py. Tento program za vás nastaví projekt tím nejužitečnějším způsobem. Pamatujte však, že pokročilejší nastavení a práce s ns-3 obvykle zahrnuje použití vlastního systému sestavování ns-3, Waf, který bude představen později v tomto tutoriálu.
Pokud jste stáhli pomocí tarballa poté ve vašem adresáři ~/pracovní prostor adresář s názvem něco jako ns-allinon-3.29. Zadejte následující:
$ ./build.py --enable-examples --enable-tests
Při zavolání build.py Použili jsme argumenty příkazového řádku k vytvoření příkladů a testů použitých v tomto tutoriálu, které nejsou standardně sestaveny v ns-3. Ve výchozím nastavení program také sestaví všechny dostupné moduly. Pak, pokud si přejete, můžete sestavit ns-3 bez příkladů a testů, nebo vyloučit moduly, které pro vaši práci nepotřebujete.
Uvidíte spoustu výstupních zpráv kompilátoru zobrazených skriptem při vytváření různých částí, které jste načetli. Nejprve se skript pokusí postavit animátor netaním, pak generátor vazby pybindgen a nakonec ns-3. Po dokončení procesu byste měli vidět následující:
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 třech řádcích výpisu vidíme zprávu o modulech, které nebyly sestaveny:
Modules not built (see ns-3 tutorial for explanation):
brite click
To jednoduše znamená, že některé moduly ns-3, které jsou závislé na externích knihovnách, nemusely být sestaveny nebo že se pro tuto konfiguraci nevyžaduje jejich sestavování. To neznamená, že simulátor není sestaven nebo že sestavené moduly nebudou správně fungovat.
3.4.2 Budování pomocí Bake
Pokud jste použili bake výše k získání zdrojového kódu z repozitářů projektu, můžete jej nadále používat k sestavení ns-3. Vytočit:
$ ./bake.py build
a měli byste vidět něco jako:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OK
Popisek: Můžete také provést kroky stahování i sestavení najednou voláním „bake.py deploy“.
Sestavení všech komponent může selhat, ale pokud komponenta není vyžadována, bude montáž pokračovat. Například nedávný problém s přenositelností byl takový castxml lze sestavit pomocí nástroje upéct ne na všech platformách. V tomto případě se zobrazí zpráva podobná 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 potřeba pouze v případě, že chcete vytvořit aktualizované vazby Pythonu. Pro většinu uživatelů to není potřeba (alespoň dokud nezmění ns-3), takže taková varování lze prozatím bezpečně ignorovat.
Pokud selže, následující příkaz vám dá nápovědu o chybějících závislostech:
$ ./bake.py show
Zobrazí se různé závislosti balíčků, které se pokoušíte sestavit.
3.4.3 Sestavení pomocí Waf
Až do tohoto okamžiku jsme k zahájení sestavování ns-3 používali buď skript build.py, nebo nástroj upéct. Tyto nástroje jsou užitečné pro vytváření ns-3 a údržbu knihoven. Ve skutečnosti při sestavování spouštějí nástroj pro sestavení Waf z adresáře ns-3. Waf nainstalován se zdrojovým kódem ns-3. Většina uživatelů rychle přejde k přímému použití ke konfiguraci a sestavení ns‑3 Waf. Chcete-li tedy pokračovat, přejděte do adresáře ns-3, který jste původně vytvořili.
V tuto chvíli to není striktně vyžadováno, ale bude užitečné trochu ustoupit a podívat se, jak provést změny v konfiguraci projektu. Pravděpodobně nejužitečnější změnou konfigurace, kterou můžete provést, je vytvoření optimalizované verze kódu. Ve výchozím nastavení jste svůj projekt nakonfigurovali tak, aby vytvořil ladicí verzi. Pojďme se podívat na projekt vytvoření optimalizovaného sestavení. Abyste Wafu vysvětlili, že by měl vytvářet optimalizovaná sestavení, která obsahují příklady a testy, budete muset spustit následující příkazy:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
Tím se spustí Waf mimo místní adresář (pro vaše pohodlí). První příkaz vyčistí předchozí sestavení, obvykle to není nezbytně nutné, ale je to dobrá praxe (viz také profily sestavení níže); tím se odstraní dříve vytvořené knihovny a soubory objektů umístěné v adresáři stavět/. Když je projekt překonfigurován a sestavovací systém zkontroluje různé závislosti, měli byste vidět výstup podobný následujícímu:
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šimněte si prosím poslední části výše uvedeného seznamu. Některé možnosti ns-3 nejsou ve výchozím nastavení povoleny nebo vyžadují podporu systému, aby správně fungovaly. Chcete-li například povolit XmlTo, musí být knihovna přítomna v systému libxml-2.0. Pokud tato knihovna nebyla nalezena a odpovídající funkce ns-3 nebyla povolena, zobrazí se zpráva. Všimněte si také, že je možné použít příkaz sudo pro nastavení bitu suid „nastavení ID skupiny za běhu“ pro určité programy. Ve výchozím nastavení není povolena, a proto se tato funkce zobrazuje jako „nepovolená“. Nakonec, chcete-li získat seznam povolených možností, použijte Waf s parametrem --check-config
.
Nyní se vraťme a přepněte zpět na sestavení ladění obsahující příklady a testy.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
Systém sestavení je nyní nastaven a můžete sestavit ladicí verze programů ns-3 jednoduchým zadáním:
$ ./waf
Výše uvedené kroky vás možná donutily sestavit část systému ns-3 dvakrát, ale nyní víte, jak změnit konfiguraci a vytvořit optimalizovaný kód.
Chcete-li zkontrolovat, který profil je aktivní pro danou konfiguraci projektu, existuje příkaz:
$ ./waf --check-profile
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debug
Výše uvedený scénář build.py podporuje i argumenty --enable-examples
и --enable-tests
, ale další možnosti Waf nepodporuje přímo. Například toto nebude fungovat:
$ ./build.py --disable-python
reakce bude taková:
build.py: error: no such option: --disable-python
K předávání dalších parametrů však lze použít speciální operátor - - WAFtakže místo výše uvedeného bude fungovat následující příkaz:
$ ./build.py -- --disable-python
protože generuje hlavní příkaz ./waf configure --disable-python. Zde je několik dalších úvodních tipů o Waf.
Ošetření chyb sestavení
Vydání ns-3 jsou testována na nejnovějších kompilátorech C++ dostupných v době vydání na běžných distribucích Linuxu a MacOS. Postupem času však vycházejí nové distribuce s novými kompilátory a tyto novější kompilátory mají tendenci být k varováním pedantičtější. ns-3 nakonfiguruje své sestavení tak, aby všechna varování považovala za chyby, takže někdy, pokud používáte starší verzi na novějším systému, může varování kompilátoru zastavit sestavení.
Například dříve existovalo vydání ns‑3.28 pro Fedoru 28, které zahrnovalo novou hlavní verzi gcc (gcc-8). Při vytváření vydání ns-3.28 nebo starších verzí pod Fedora 28 s nainstalovaným Gtk2+ dojde k následující chybě:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);
Ve verzích počínaje ns‑3.28.1, in Waf existuje možnost řešení těchto problémů. Zakáže nastavení příznaku "-Werror" v g++ a clang++. Toto je možnost "--disable-werror" a musí být použita během konfigurace:
$ ./waf configure --disable-werror --enable-examples --enable-tests
Nakonfigurujte nebo sestavte
Některé příkazy Waf mají význam pouze ve fázi konfigurace a některé jsou platné pouze ve fázi sestavení. Pokud například chcete používat funkce emulace ns-3, můžete povolit nastavení bitů suid pomocí sudo, jak je popsáno výše. Tím přepíšete příkazy konfiguračního kroku, a proto můžete konfiguraci změnit pomocí následujícího příkazu, který také obsahuje příklady a testy.
$ ./waf configure --enable-sudo --enable-examples --enable-tests
Pokud to uděláte Waf se spustí sudozměnit programy pro vytváření soketů emulačního kódu tak, aby se spouštěly s oprávněními kořen. V Waf Pro kroky konfigurace a sestavení je k dispozici mnoho dalších možností. Chcete-li prozkoumat své možnosti, zadejte:
$ ./waf --help
V další části použijeme některé možnosti související s testováním.
Montážní profily
Již jsme viděli, jak můžete nakonfigurovat Waf pro montáže ladit и optimalizované:
$ ./waf --build-profile=debug
K dispozici je také mezilehlý montážní profil, uvolněte. Volba -d
je synonymem pro --build-profile
. Profil sestavení řídí použití protokolování, asercí a přepínačů optimalizace kompilátoru:
Jak vidíte, protokolování a aserce jsou k dispozici pouze v sestaveních ladění. Doporučená praxe je vyvinout skript v režimu ladění a poté provést opakované spuštění (pro statistiky nebo změny parametrů) v optimalizovaném profilu sestavení.
Pokud máte kód, který by se měl spouštět pouze v určitých profilech sestavení, použijte makro obálky 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;)
výchozí, Waf umístí artefakty sestavení do adresáře sestavení. Pomocí této volby můžete určit jiný výstupní adresář - -out
, Například:
$ ./waf configure --out=my-build-dir
Když to zkombinujete s profily sestavení, můžete snadno přepínat mezi různými možnostmi kompilace:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...
Což vám umožňuje pracovat s více sestavami, aniž byste museli pokaždé přepisovat nejnovější sestavu. Když přepnete na jiný profil, Waf zkompiluje pouze jej, aniž by kompletně překompiloval vše.
Když přepínáte profily sestavení tímto způsobem, musíte být opatrní, abyste pokaždé poskytli stejné možnosti konfigurace. Definování několika proměnných prostředí vám pomůže vyhnout se 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 příznaky
Ve výše uvedených příkladech Waf k sestavení ns-3 používá kompilátor C++ z GCC ( g ++). Můžete však změnit ten, který používáte Waf C++ kompilátor definováním proměnné prostředí CXX. Chcete-li například použít kompilátor C++ Clang, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build
Stejným způsobem můžete konfigurovat Waf použít distribuovanou kompilaci pomocí distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf build
Více informací o distcc a distribuované kompilaci naleznete na stránce projektu v sekci Dokumentace. Chcete-li při konfiguraci ns-3 přidat příznaky kompilátoru, použijte proměnnou prostředí CXXFLAGS_EXTRA.
Instalace
Waf lze použít k instalaci knihoven na různá místa v systému. Ve výchozím nastavení jsou zkompilované knihovny a spustitelné soubory umístěny v adresáři stavěta protože Waf zná umístění těchto knihoven a spustitelných souborů, není třeba instalovat knihovny nikam jinam.
Pokud uživatelé dávají přednost instalaci mimo adresář sestavení, mohou příkaz spustit ./waf instalace. Výchozí předpona pro instalaci je / usr / localTak ./waf instalace nainstaluje programy do / usr / local / bin, knihovny v / usr / local / lib a hlavičkové soubory v /usr/local/include. Práva superuživatele je obvykle třeba nastavit s výchozí předponou, takže typický příkaz by byl instalace sudo ./waf. Po spuštění se Waf nejprve rozhodne použít sdílené knihovny v adresáři sestavení a poté vyhledá knihovny podél cesty ke knihovnám nakonfigurovaným v místním prostředí. Při instalaci knihoven do systému je tedy dobrým zvykem zkontrolovat, zda jsou používány správné knihovny. Uživatelé si mohou zvolit instalaci s jinou předponou tím, že předají volbu během konfigurace --prefix
, Například:
./waf configure --prefix=/opt/local
Pokud později, po sestavení, uživatel zadá příkaz k instalaci ./waf
, použije se předpona /opt/local.
Tým ./waf clean
musí být použit před překonfigurováním projektu, pokud bude instalace používat Waf pod jinou předponou.
Pro použití ns-3 tedy není potřeba volat ./waf install
. Většina uživatelů nebude tento příkaz potřebovat, protože Waf převezme aktuální knihovny z adresáře sestavení, ale některým uživatelům to může být užitečné, pokud jejich činnosti zahrnují práci s programy mimo adresář ns-3.
Waf singl
Na nejvyšší úrovni zdrojového stromu ns-3 je pouze jeden skript Waf. Jakmile začnete pracovat, strávíte v adresáři spoustu času scratch/
nebo hloubějisrc/...
a zároveň musí běžet Waf. Můžete si jen vzpomenout, kde jste, a utéct Waf takto:
$ ../../../waf ...
ale to bude zdlouhavé a náchylné k chybám, takže existují lepší řešení. Jedním z běžných způsobů je použití textového editoru jako např emacs nebo elán, ve kterém jsou otevřeny dvě terminálové relace, jedna se používá k sestavení ns-3 a druhá se používá k úpravě zdrojového kódu. Pokud jen máte tarball, pak proměnná prostředí může pomoci:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff build
V adresáři modulu může být lákavé přidat triviální skript waf, jako je exec ../../waf
. Prosím nedělej to. To je pro nováčky matoucí a při špatném provedení to vede k těžko odhalitelným chybám sestavení. Výše uvedená řešení představují cestu, která by měla být použita.
3.5 Testování ns-3
Jednotkové testy distribuce ns-3 můžete spustit spuštěním skriptu ./test.py:
$ ./test.py
Tyto testy probíhají souběžně s Waf. Nakonec byste měli vidět zprávu:
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
Toto je důležitá zpráva pro identifikaci pádů, pádů nebo chyb valgrindu, což naznačuje problémy s kódem nebo nekompatibilitu mezi nástroji a kódem.
Uvidíte také konečný výstup z Waf a tester spouštějící každý test, který bude vypadat nějak 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 příkaz obvykle spouští uživatelé, aby rychle ověřili, že je distribuce ns-3 sestavena správně. (Všimněte si, že pořadí řádků "PASS: ..." se může lišit, to je normální. Důležité je, že souhrnný řádek na konci zprávy ukazuje, že všechny testy prošly úspěšně; žádné testy se nezdařily ani nezhroutily.) A WafA test.py bude paralelizovat práci napříč dostupnými procesorovými jádry stroje.
3.6 Spuštění skriptu
Obvykle spouštíme skripty pod kontrolou Waf. To umožňuje systému sestavení zajistit, aby cesty ke sdíleným knihovnám byly nastaveny správně a aby byly knihovny dostupné za běhu. Pro spuštění programu stačí použít Waf s parametrem - -run
. Spustíme ekvivalent ns-3 všudypřítomného programu hello worldzadáním následujícího:
$ ./waf --run hello-simulator
Waf nejprve zkontroluje, zda je program sestaven správně, a v případě potřeby sestaví. Pak Waf spustí program, který vytvoří následující výstup.
Hello Simulator
Gratulujeme! Nyní jste uživatelem ns-3!
Co mám dělat, když nevidím výsledky?
Pokud vidíte zprávy Wafcož znamená, že sestavení bylo úspěšně dokončeno, ale nevidíte výstup "Ahoj simulátor", pak je možné, že v sekci [Build-with-Waf] jste přepnuli svůj režim sestavení optimalizované, ale zmeškal přepnutí zpět do režimu ladit. Veškerý výstup konzoly použitý v tomto kurzu používá speciální komponentu ns-3, která provádí protokolování a používá se k tisku vlastních zpráv do konzoly. Výstup z této komponenty je automaticky deaktivován při kompilaci optimalizovaného kódu – je „optimalizován“. Pokud nevidíte výstup „Hello Simulator“, zadejte následující:
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
konfigurovat Waf vytvářet ladicí verze programů ns-3, které zahrnují příklady a testy. Poté byste měli znovu sestavit aktuální verzi ladění kódu zadáním
$ ./waf
Nyní, pokud spustíte program ahoj-simulátor, měli byste vidět očekávaný výsledek.
3.6.1 Argumenty příkazového řádku
Chcete-li předat argumenty příkazového řádku programu ns-3, použijte následující vzor:
$ ./waf --run <ns3-program> --command-template="%s <args>"
Nahradit na název vašeho programu a na argumenty. Argument - -command-template
pro Waf je v podstatě recept na sestavení skutečného příkazového řádku Waf slouží ke spuštění programu. Waf zkontroluje, že je sestavení dokončeno, nastaví cesty ke sdílené knihovně, poté použije poskytnutou šablonu příkazového řádku a nahradí zástupný symbol %s jménem programu pro volání spustitelného souboru. Pokud vám tato syntaxe připadá složitá, existuje jednodušší verze, která zahrnuje program ns-3 a jeho argumenty uzavřené v jednoduchých uvozovkách:
$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'
Dalším zvláště užitečným příkladem je selektivní spouštění testovacích sad. Předpokládejme, že existuje testovací sada nazvaná mytest (ve skutečnosti neexistuje). Výše jsme použili skript ./test.py ke spuštění řady testů paralelně, který opakovaně volá testovací program testovací běžec. Volání testovací běžec přímo ke spuštění jednoho testu:
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
Argumenty budou předány programu testovací běžec. Protože mytest neexistuje, vygeneruje se chybová zpráva. Chcete-li vytisknout dostupné možnosti testovacího běhu, zadejte:
$ ./waf --run test-runner --command-template="%s --help"
3.6.2 Ladění
Chcete-li spustit programy ns-3 pod jiným nástrojem, jako je debugger (např. gdb) nebo nástroj na testování paměti (např. valgrind), použijte podobný formulář - -command-template = "…"
. Například ke spuštění v debuggeru gdb váš program hello-simulator ns-3 s argumenty:
$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
Všimněte si, že název programu ns-3 je dodáván s argumentem - -run
a nástroj pro správu (zde gdb) je první token v argumentu - -command-template
. Volba - -args
zprávy gdbže zbytek příkazového řádku patří „nižšímu“ programu. (Některé verze gdb nerozumím možnosti - -args
. V tomto případě odeberte argumenty programu z - -command-template
a použijte sadu příkazů gdb args.) Můžeme zkombinovat tento recept a předchozí a spustit test pod debuggerem:
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
3.6.3 Pracovní adresář
Waf by měl být vypuštěn ze svého umístění v horní části stromu ns-3. Tato složka se stane pracovním adresářem, kam se budou zapisovat výstupní soubory. Ale co když chcete tyto soubory ponechat mimo zdrojový strom ns-3? Použijte argument - -cwd
:
$ ./waf --cwd=...
Možná bude pro vás pohodlnější získat výstupní soubory ve vašem pracovním adresáři. V tomto případě může pomoci následující nepřímá akce:
$ function waff {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd - >/dev/null
}
Tato dekorace předchozí verze příkazu zachová aktuální pracovní adresář, přejde do adresáře Wafa pak dává pokyn Waf změnit pracovní adresář zpět na aktuální pracovní adresář uložený před spuštěním programu. Zmiňujeme tým - -cwd
Pro úplnost, většina uživatelů jednoduše spustí Waf z adresáře nejvyšší úrovně a vygeneruje výstupní soubory tam.
Zdroj: www.habr.com