
3 Munka megkezdése
3.1 Áttekintés
3.2 Előfeltételek
3.2.1 A ns-3 kiadásának letöltése forráskód archívumként
3.3 A ns-3 letöltése Git segítségével
3.3.1 A ns-3 letöltése Bake segítségével
3.4 A ns-3 felépítése
3.4.1 Felépítés a build.py segítségével
3.4.2 Felépítés Bake-kel
3.4.3 Felépítés Waf-fal
3.5 A ns-3 tesztelése
3.6 A szkript futtatása
3.6.1 Parancssori argumentumok
3.6.2 Hibakeresés
3.6.3 Munkakönyvtár
3. fejezet
Munka megkezdése
Ez a fejezet a célja, hogy előkészítse az olvasót a munkára, kezdve egy olyan számítógéppel, amelyre valószínűleg még sosem telepítették a ns-3-at. Az alapvető platformok, előfeltételek, a ns-3 beszerzésének módjai, a ns-3 felépítése és az építés ellenőrzésének valamint egyszerű programok futtatásának módszereit tartalmazza.
3.1 Áttekintés
A ns-3 szimulátor olyan együttműködő programkönyvtárakból épül fel. Felépítés során a felhasználói programok kódja ezekkel a könyvtárakkal kapcsolódik össze. A felhasználói programok írásához C++ vagy Python programozási nyelvek használhatók.
A ns-3 forráskód formájában terjed, ami azt jelenti, hogy a célrendszernek rendelkeznie kell szoftverfejlesztési környezettel ahhoz, hogy először a könyvtárakat felépítse, majd a felhasználói programot elkészítse. Elvileg a ns-3 kész könyvtárakként is terjeszthető egy adott rendszerhez, ami a jövőben megvalósulhat. Jelenleg azonban sok felhasználó valójában a ns-3 forráskódjának szerkesztésével végzi a munkáját, így hasznos, ha rendelkezésre áll a forráskód a könyvtárak felépítéséhez. Ha valaki szeretné vállalni a kész könyvtárak és csomagok létrehozását operációs rendszerekhez, kérem lépjen kapcsolatba a levelezőlistával. ns-developers.
A következőkben három módszert tekintünk át a ns-3 letöltésére és felépítésére. Az első, hogy letöltjük és felépítjük a hivatalos kiadást az alapwebhelyről. A második a fejlesztési verziók másolatainak válogatása és felépítése a ns-3 alaptelepítéshez. A harmadik az, hogy kiegészítő felépítési eszközöket használunk a ns-3 további kiterjesztéseinek letöltéséhez. Mindegyiken végigvezetünk, mivel az eszközök némileg eltérnek.
A tapasztalt Linux-felhasználókat érdekelheti, miért nem érhető el az ns-3 a legtöbb más könyvtárhoz hasonlóan csomagként, amelyet a csomagkezelő használ? Bár léteznek bináris csomagok különféle Linux-disztribúciókhoz (például Debian), a legtöbb felhasználó végül módosítja a könyvtárakat, és kénytelen újra lefordítani az ns-3-at, ezért a forráskód elérhetősége kényelmes. Ezért a forráskódból való telepítésre összpontosítunk.
A legtöbb ns-3 alkalmazáshoz nem szükségesek az engedélyek, ezért javasolt egy nem privilegizált felhasználói fiók használata. , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik. Az összes elérhető ns-3 könyvtár számos harmadik féltől származó könyvtár függőséggel rendelkezik, de főként az ns-3 összeállítható és használható néhány elterjedt (gyakran alapértelmezés szerint telepített) komponens támogatásával: C++ fordító, Python, forráskód szerkesztő (például
3.2 Előfeltételek
emacs vim-ben., ) és ha fejlesztési tárolókat használnak, a verzióellenőrző rendszerek Git. A legtöbb kezdő felhasználónak nem kell aggódnia, ha a konfigurációja hiányzó ns-3 funkciókat jelez, de azok számára, akik teljes telepítést szeretnének, a projekt egy wikivel is rendelkezik, amely hasznos tanácsokat és útmutatásokat tartalmaz. Az egyik ilyen oldal az „Installáció” oldal, amely telepítési utasításokat tartalmaz különböző rendszerekhez, elérhető a következő címen: vagy EclipseA wiki oldal „Előfeltételek” szakasza magyarázza el, hogy mely csomagokra van szükség a közös ns-3 opciók támogatásához, és megadja azokat a parancsokat, amelyekkel ezeket a gyakori Linux vagy macOS változatokban telepíthetők. .
Használhatja azt a lehetőséget, hogy átnézi az ns-3 wiki oldalát vagy a fő webhelyet:
, mivel ott sok információ található. Az ns-3 legújabb verziójának (ns-3.29) használatához a következő eszközök szükségesek: Eszköz Csomag/verzió
C++ fordító
- clang++ vagy g++ (g++ verzió 4.9 vagy újabb)
python2 verzió >= 2.7.10, vagy python3 verzió >= 3.4 - Python
bármelyik legfrissebb verzió (a ns-3 GitLab.com-on való eléréséhez) - Konténerizálás
bármelyik legfrissebb verzió (az ns-3 kiadásának kibővítéséhez) - tar
bunzip2 - bármelyik friss verzió (az ns-3 kiadásának kibővítéséhez)
A Python alapértelmezett verziójának ellenőrzéséhez írja be
python -V python -V. A g++ verzió ellenőrzéséhez írja be g++ -v. Ha bizonyos eszközök hiányoznak vagy túl régiek, kérjük, nézze meg az ns-3 telepítési útmutatóját a wikioldalon.
Ezúttal azt feltételezzük, hogy az olvasó Linuxon, MacOS-en vagy Linux környezet emulátorban dolgozik, és legalább az említett eszközökkel rendelkezik.
3.2.1 A ns-3 kiadásának letöltése forráskód archívumként
Ez a lépés egy új felhasználó számára, aki szeretné letölteni és kísérletezni a legújabb kiadási és csomagolt változatokkal az ns-3-ból. Az ns-3 kiadások tömörített forrásarchívumok formájában jelennek meg, amelyeket néha tarball. tarball — ez egy speciális programarchívum formátuma, amelyben több fájl van egyesítve. Az archívum általában tömörítve van. Az ns-3 letöltése tarball egyszerű, csak választania kell a kiadást, letöltenie és kicsomagolnia.
Tegyük fel, hogy Ön, mint felhasználó, szeretné összegyűjteni az ns-3-at egy " workspace" nevű helyi könyvtárba. A következő parancsokat kell beírnia a Linux konzolba (természetesen a megfelelő verziószámokat kicserélve)
$ 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 Figyeljen a fent használt segédprogramra, wget, amely egy parancssori eszköz, amellyel fájlokat tölthet le az interneten. Ha ezt nem telepítette, akkor használhatja a böngészőt is.
Ezeket a lépéseket követve belép a ns-allinone-3.29 könyvtárba, ahol több fájlt és könyvtárat kell látnia.
$ 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.pyMost készen áll a alap ns-3 disztribúció összeállítására, és átugorhat a ns-3 összeállításával foglalkozó részhez.
3.3 A ns-3 letöltése Git segítségével
Az ns-3 kód elérhető a GitLab.com-on található Git tárolókban a következő címen . A csoport nsnam különféle tárolókat fog össze, amelyeket a nyílt forráskódú projekt használ.
A legegyszerűbb módja a Git tárolók használatának, ha készít egy forkot vagy klónozza az ns-3-allinonekörnyezetet. Ez egy olyan szkriptekből álló csomag, amely kezeli az ns-3 leggyakrabban használt alrendszereinek letöltését és összeállítását. Ha Ön új a Git-ben, a "fork" és a "klónozás" kifejezések ismeretlenek lehetnek Önnek; ha így van, ajánljuk, hogy klónozza (készítse el a saját másolatát) a GitLab.com-on található tárolót a következőképpen:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone Ezen a ponton a könyvtárának a megjelenése ns-3-allinone kicsit eltér a fenti leírt archívumkönyvtártól. Körülbelül így kell kinéznie:
$ ls
build.py constants.py download.py README util.pyFigyeljen a download.py, amely további módon ki fogja nyerni az ns‑3-at és a kapcsolódó forráskódokat. Itt választása van: vagy letöltheti az ns‑3 legfrissebb fejlesztési pillanatképét:
$ python download.pyvagy az ns‑3 kiadását részesítheti előnyben a -n flag megadásával a kiadás számának jelzésére:
$ python download.py -n ns-3.29E lépés után a könyvtárba ns-3-allinone további tárolók lesznek letöltve ns‑3, bake, pybindgen és netanim.
Megjegyzés
A tiszta Ubuntu16.04 gépen a parancsot a következő formára kellett módosítanom: $ sudo python3 download.py -n ns-3.29 (itt és a továbbiakban a fordító megjegyzései).
3.3.1 A ns-3 letöltése Bake segítségével
A fent említett két módszer (forrásarchívum vagy Git tároló) ns-3-allinone hasznos a legegyszerűbb ns‑3 telepítés beszerzéséhez néhány kiegészítővel (pybindgen a Python-bekötések generálásához és netanim a hálózat animálásához). Az ns‑3-allinone-ban alapértelmezettként biztosított harmadik tároló a bake.
Bake — egy több tárolóból készült szoftver építkezés koordinációjának eszköze, amelyet az ns‑3 projekthez fejlesztettek ki. Bake használható az ns‑3 fejlesztői verzióinak beszerzésére, valamint az alapverziós disztribúció kiterjesztéseinek letöltésére és összeállítására, mint például a környezet Direct Code Execution, CradleNetwork Simulation Cradle, új Python-hidak létrehozásának lehetősége, és különböző "alkalmazások" ns‑3-hoz.
Megjegyzés
A CradleNetwork Simulation Cradle egy keretrendszer, amely lehetővé teszi a valós TCP/IP hálózati verem használatát a hálózati szimulátor belsejében.
Ha úgy gondolja, hogy az ns‑3 telepítése kibővített vagy további funkciókkal bír, követheti ezt a telepítési utat.
Az ns‑3 legutóbbi kiadásaiban Bake tartalmazva lett a tar-kiadásban. A kiadás tartalmaz egy konfigurációs fájlt, amely lehetővé teszi a kiadás készítésekor elérhető szoftververziók letöltését. Vagyis például a Bake, amely az ns‑3.29 kiadással kerül megosztásra, felhasználható e kiadás ns‑3 komponenseinek beszerzésére vagy korábbiakra, de nem használható fel újabb kiadások komponenseinek kiaknázására (ha a csomagleíró fájl bakeconf.xml nincs frissítve).
A legfrissebb másolatot bakeis beszerezheti, ha a következő parancsot beírja a Linux konzoljába (ha telepítve van a Git):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.gitA git parancs végrehajtása során ilyesmit kell látnod:
Klónozás a következőbe: 'bake'...
remote: Az objektumok enumerálása: 2086, kész.
remote: Az objektumok számlálása: 100% (2086/2086), kész.
remote: Az objektumok tömörítése: 100% (649/649), kész.
remote: Összesen 2086 (delta 1404), felhasználva 2078 (delta 1399)
Objektumok fogadása: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, kész.
Delta-k feloldása: 100% (1404/1404), kész.A parancs végrehajtása után clone egy könyvtárnak kell megjelennie a nevén bake, amelynek tartalma körülbelül így néz ki:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOVegye figyelembe, hogy több Python szkriptet töltött le, valamint egy Python modult, amelynek neve bake és egy XML konfigurációs fájl. A következő lépés ezeknek a szkripteknek a használata a kívánt ns-3 disztribúció letöltésére és összeállítására. Számos konfigurálási cél érhető el:
ns-3.29: modul, amely megfelel a kiadásnak; komponenseket fog letölteni, amelyek hasonlítanak a tarball kiadásához;
ns-3-dev: hasonló modul, de a fejlesztési fából származó kóddal;
ns-allinone-3.29: modul, amely tartalmaz más kiegészítő funkciókat, mint például Click routerezés és Network Simulation Cradle, Openflow a ns-3 számára.
ns-3-allinone: hasonlóan a kiadási verzió moduljához allinone, de a fejlesztési kód alapján.
Megjegyzés
Click – egy moduláris szoftverarchitektúra routerek létrehozásához.
Openflow – a folyamatok kezelésére szolgáló protokoll, amely a hálózati adatok továbbítását kezeli routerek és switchek által, megvalósítva a szoftveresen konfigurálható hálózati technológiát.
A legfrissebb fejlesztési (nem kiadott) ns-3 pillanatfelvételt itt találja:.
A fejlesztők igyekeznek ezeket a tárolókat egyetemes munkaként fenntartani, de ezek fejlesztési területen vannak, és nem kiadott kódot tartalmaznak, ezért ha nem tervezi új funkciók használatát, válassza az hivatalos kiadást.
A kód legfrissebb verzióját a tárolók listájának átnézésével találhatja meg, vagy látogasson el a „ns-3 Releases” weboldalra: és kattintson az utolsó verzió hivatkozására. Ebben a példában folytatjuk a ns-3.29-t el.
Most, hogy megkapjuk a szükséges ns-3 összetevőket, használjuk az eszközt Bake. Mondjunk néhány szót Bake.
A Bake azzal működik, hogy letölti a csomagok forrásait a könyvtárba forrás és a könyvtárba telepíti a könyvtárakat. Bake elindítható, hivatkozva a bináris fájlra, de ha szeretné futtatni Bake nem a mappából, ahová feltöltötték, hanem javasolt az elérési út hozzáadása bake az elérési utadhoz (PATH környezeti változó), például a következő módon (példa Linux bash shellhez). Menj a "bake" mappába, majd állítsd be a következő környezeti változókat:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libEz be fogja helyezni a programot bake.py az elérési útba, és lehetővé teszi más programok számára, hogy megtalálják a futtatható fájlokat és a könyvtárakat, amelyeket létrehoztál. bakeBizonyos esetekben a fenti PATH és PYTHONPATH beállításokra nincs szükség, de a ns-3-allinone teljes buildeléséhez (további csomagokkal) általában szükséges. bakeLépj be a munkakönyvtárba, és írd be a konzolba a következőt:
$ ./bake.py configure -e ns-3.29
Ezután megkérdezzük, ellenőrzöd-e, hogy elegendő eszközünk van a különböző komponensek letöltéséhez. Írd be:$ ./bake.py check Bake Látnod kell valami ilyesmit:
> 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 ...Különösen a Mercurial, CVS, Git és Bazaar letöltőeszközök alapvetőek ebben a lépésben, mivel lehetővé teszik számunkra a kód beszerzését. Ezen a ponton telepítsd a hiányzó eszközöket a rendszered megszokott módján (ha tudod), vagy kérd a segítséget a rendszeradminisztrátorodtól.
Ezután próbálkozz meg a szoftver letöltésével:$ ./bake.py download
az eredménynek valami ilyesminek kell lennie:
>> 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 - OKEz azt jelenti, hogy három forrást töltöttek le. Most lépj be a source könyvtárba és írd be az ls; látnod kell:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenMost készen állsz a ns-3 disztribúció összeállítására.
A ns-3 letöltéséhez hasonlóan, több módja is van a ns-3 összeállításának. A legfontosabb, hogy hangsúlyozzuk, hogy a ns-3 egynevű build eszközzel készül, amely alább található. A legtöbb felhasználó ezzel fog dolgozni.
3.4 A ns-3 felépítése
Akárcsak az ns-3 letöltésénél, az ns-3 összegyűjtésének is több módja van. A legfontosabb, hogy hangsúlyozzuk, hogy az ns-3 egy "build" nevű eszközzel készült. Waf, amit az alábbiakban ismertetünk. A legtöbb felhasználó a Waf, de van néhány kényelmes forgatókönyv, amely segíthet a kezdésben, vagy a bonyolultabb összeszerelések megszervezésében. Kérjük, hogy mielőtt tovább olvasna, Wafparanccsal, nézze meg a build.py és az összeszereléshez bake.
3.4.1 Felépítés a build.py segítségével
Figyelem! Ez az összeszerelési lépés csak az előzőleg leírt módon, a forrásarchívumból érhető el; nem a git vagy bake segítségével letöltve.
Ha a kiadási archívummal dolgozik, tarball, in ns‑3‑allinone van egy kényelmes forgatókönyv, amely egyszerűsítheti az összetevők összeszerelését. A neve build.py. Ez a program a leghasznosabb módon konfigurálja a projektet Önnek. Fontos megjegyezni, hogy a bonyolultabb beállítások és a ns‑3-mal való munka tipikusan magában foglalja az ns‑3 saját összeszerelő rendszerének, a Waf-nak a használatát, amelyről később ebben az útmutatóban lesz szó.
Ha letöltötte tarball, akkor a könyvtárában ~/workspace kell, hogy legyen egy körülbelül ilyen nevű könyvtár ns-allinone-3.29. Írja be a következőt:
$ ./build.py --enable-examples --enable-tests
Ez megtehető JSON formátumban is. build.py a parancssori argumentumokat használtuk, hogy összegyűjtsük azokat a példákat és teszteket, amelyeket ebben az útmutatóban használtunk, amelyek alapértelmezés szerint nincsenek összegyűjtve a ns‑3-ban. Alapértelmezés szerint a program minden elérhető modult is felépít. Később, ha szükséges, összegyűjtheti a ns‑3-at példák és tesztek nélkül, vagy kihagyhatja azokat a modulokat, amelyekre nincs szüksége.
Sok kimeneti üzenetet fog látni a fordítótól a szkript által összegyűjtött különböző részeknél. Először a szkript megpróbálja összegyűjteni az animátort, netanimmajd a kötésgenerátort, pybindgen és végül a ns‑3-at. A folyamat végén a következőt kell látnia:
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.29A listing utolsó három sorában látjuk a nem összegyűjtött modulok üzenetét:
Modules not built (see ns-3 tutorial for explanation):
brite clickEz csak azt jelenti, hogy néhány ns-3 modul, amely külső könyvtáraktól függ, lehet, hogy nem lett összeállítva, vagy hogy a megadott konfigurációhoz nem szükséges annak összeállítása. Ez nem jelenti azt, hogy a szimulátor ne épült volna fel, vagy hogy az összeállított modulok nem fognak helyesen működni.
3.4.2 Felépítés Bake-kel
Ha az előzőleg a projekt repozitóriumaiból való forráskód beszerzéséhez a bake-et használta, akkor ezt továbbra is használhatja az ns-3 összeállításához is. Írja be:
$ ./bake.py buildés valami ilyesmit kell látnia:
>> pybindgen-0.19.0.post4+ng823d8b2 - OK
>> netanim-3.108 - OK
>> ns-3.29 - OKNyom.: egy lépésben elvégezheti a letöltést és az összesítést is, ha a "bake.py deploy" parancsot használja.
Minden összesítő komponensnél lehetnek hibák, de az összesítés akkor is folytatódik, ha a komponens nem kötelező. Például a közelmúltban a hordozhatósággal kapcsolatos probléma az volt, hogy castxml eszközzel nem minden platformon építhető. Ilyen esetekben a következő hibaüzenet jelenik meg: bake >> castxml összeállítása - Probléma > Probléma: Opcionális függőség, a "castxml" modul megbukott Ez csökkentheti a végső összeállítás funkcionalitását. A bake azonban folytatódik, mivel a "castxml" nem alapvető függőség. További információért hívja meg a bake-t -v vagy -vvv opcióval, az összes részletes módhoz.
Decsak akkor szükséges, ha frissített Python kötéseket szeretne létrehozni. A legtöbb felhasználónak erre nincs szüksége (legalábbis addig, amíg nem kezdik el módosítani az ns-3-at), így ezeket a figyelmeztetéseket egyelőre biztonságosan figyelmen kívül hagyhatja. castxml Ha hiba lép fel, a következő parancs útmutatást ad a hiányzó függőségekről:
$ ./bake.py show
Különböző csomagfüggőségek lesznek felsorolva, amelyeket megpróbál összeállítani.Eddig az ns-3 összeállításához vagy a
3.4.3 Felépítés Waf-fal
szkriptet, vagy a build.pyeszközt használtuk. Ezek az eszközök hasznosak az ns-3 összesítéséhez és a könyvtárak támogatásához. Valójában az összeállításhoz az bakeeszközt indítják el az ns-3 könyvtárból. Waf az ns-3 forráskódjával együtt telepítve van. A legtöbb felhasználó az ns-3 gyors beállításához és összeállításához közvetlenül az Waf használatára vált. Tehát a folytatáshoz, kérem, lépjen az ns-3 könyvtárba, amelyet eredetileg létrehozott. Waf. Tehát a folytatáshoz kérjük, lépjen be az ns-3 könyvtárba, amelyet eredetileg létrehozott.
Jelenleg ez szigorúan nem szükséges, de hasznos lehet egy kis kitérőt tenni, és megnézni, hogyan lehet módosítani a projekt konfigurációját. Valószínűleg a legjobban hasznosítható konfigurációs módosítás, amit végezhet, az optimalizált kódváltozat létrehozása. Alapértelmezésben a projektje a hibakereső verzió összeállítására van beállítva. Nézzük meg a projektet az optimalizált összeállítás létrehozására. Ahhoz, hogy a Waf értesüljön arról, hogy optimalizált összeállításokat kell végrehajtania, példákkal és tesztekkel együtt, a következő parancsokat kell végrehajtanod:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-testsEz elindítja Waf a mappán kívül (az Ön kényelmét szolgálva). Az első parancs a korábbi összeállítás eltávolítását végzi, ez általában nem szigorúan szükséges, de jó gyakorlat (lásd az összeállítási profilokat is alább); ez eltávolítja a korábban létrehozott könyvtárakat és objektumfájlokat, amelyek a következő mappában találhatók: build/. Amikor a projekt átkonfigurálódik, és a build rendszer ellenőrzi a különböző függőségeket, a következőhöz hasonló kimenetet kell látnod:
A legmagasabb beállítása: /home/ns3user/workspace/bake/source/ns-3-dev
A kimeneti könyvtár beállítása: /home/ns3user/workspace/bake/source/ns-3-dev/build
'gcc' (C fordító) ellenőrzése: /usr/bin/gcc
cc verzió ellenőrzése: 7.3.0
'g++' (C++ fordító) ellenőrzése: /usr/bin/g++
Kompilálási zászló -march=native támogatás ellenőrzése: rendben
Kompilálási zászló -Wl,--soname=foo támogatás ellenőrzése: rendben
Kompilálási zászló -std=c++11 támogatás ellenőrzése: rendben
Boost include ellenőrzése: fejlécek nem találhatók, kérjük, adjon meg egy --boost-includes érvet (lásd a súgót)
Boost include ellenőrzése: fejlécek nem találhatók, kérjük, adjon meg egy --boost-includes érvet (lásd a súgót)
'python' program ellenőrzése: /usr/bin/python
Python verzió ellenőrzése >= 2.3: 2.7.15 python-config: /usr/bin/python-config
A python-config-től pyembed '--cflags --libs --ldflags' zászlók lekérdezése: igen
pyembed konfiguráció tesztelése: igen
A python-config-től pyext '--cflags --libs --ldflags' zászlók lekérdezése: igen
pyext konfiguráció tesztelése: igen
Kompilálási zászló -fvisibility=hidden támogatás ellenőrzése: rendben
Kompilálási zászló -Wno-array-bounds támogatás ellenőrzése: rendben
pybindgen hely ellenőrzése: ../pybindgen, (találgatva)
Python modul 'pybindgen' ellenőrzése: 0.19.0. ,!post4+g823d8b2
pybindgen verzió ellenőrzése: 0.19.0. ,!post4+g823d8b2
Kód példány ellenőrzése: igen
uint64_t és unsigned long egyenértékek ellenőrzése: nem
Kód példány ellenőrzése: nem
uint64_t és unsigned long long egyenértékek ellenőrzése: igen
Az apidef-ek ellenőrzése, amelyek használhatók Python kötéseknél: gcc-LP64
Belső GCC cxxabi ellenőrzése: teljes
Python modul 'pygccxml' ellenőrzése: nem található
Click hely ellenőrzése: nem található
'pkg-config' program ellenőrzése: /usr/bin/pkg-config
'gtk+-3.0' ellenőrzése: nem található
'libxml-2.0' ellenőrzése: igen
a uint128_t ellenőrzése: nem található
__uint128_t ellenőrzése: igen
Magas precizitású implementáció ellenőrzése: 128-bit integer, (alapértelmezett)
stdint.h fejléc ellenőrzése: igen
inttypes.h fejléc ellenőrzése: igen
sys/inttypes.h fejléc ellenőrzése: nem található
sys/types.h fejléc ellenőrzése: igen
sys/stat.h fejléc ellenőrzése: igen
dirent.h fejléc ellenőrzése: igen
stdlib.h fejléc ellenőrzése: igen
signal.h fejléc ellenőrzése: igen
pthread.h fejléc ellenőrzése: igen
stdint.h fejléc ellenőrzése: igen
inttypes.h fejléc ellenőrzése: igen
sys/inttypes.h fejléc ellenőrzése: nem található
rt könyvtár ellenőrzése: igen
sys/ioctl.h fejléc ellenőrzése: igen
net/if.h fejléc ellenőrzése: igen
net/ethernet.h fejléc ellenőrzése: igen
linux/if_tun.h fejléc ellenőrzése: igen
netpacket/packet.h fejléc ellenőrzése: igen
NSC hely ellenőrzése: nem található
'sqlite3' ellenőrzése: nem található
linux/if_tun.h fejléc ellenőrzése: igen
Python modul 'gi' ellenőrzése: 3.26.1
Python modul 'gi.repository.GObject' ellenőrzése: rendben
Python modul 'cairo' ellenőrzése: rendben
Python modul 'pygraphviz' ellenőrzése: 1.4rc1
Python modul 'gi.repository.Gtk' ellenőrzése: rendben
Python modul 'gi.repository.Gdk' ellenőrzése: rendben
Python modul 'gi.repository.Pango' ellenőrzése: rendben
Python modul 'gi.repository.GooCanvas' ellenőrzése: rendben
'sudo' program ellenőrzése: /usr/bin/sudo
'valgrind' program ellenőrzése: nem található
'gsl' ellenőrzése: nem található python-config: nem található
Kompilálási zászló -fstrict-aliasing támogatás ellenőrzése: rendben
Kompilálási zászló -fstrict-aliasing támogatás ellenőrzése: rendben
Kompilálási zászló -Wstrict-aliasing támogatás ellenőrzése: rendben
Kompilálási zászló -Wstrict-aliasing támogatás ellenőrzése: rendben
'doxygen' program ellenőrzése: /usr/bin/doxygen
---- Az ns-3 opcionális jellemzőinek összefoglalása:
Építési profilt: optimalizált
Építési könyvtár:
BRITE Integráció: nem engedélyezve (BRITE nem engedélyezve (lásd az --with- ,!brite lehetőséget))
DES Metikai eseménygyűjtés: nem engedélyezve (alapértelmezés szerint letiltva)
Emuláció FdNetDevice: engedélyezve
Példák: engedélyezve
Fájl leíró NetDevice: engedélyezve
GNU Tudományos Könyvtár (GSL): nem engedélyezve (GSL nem található)
Gcrypt könyvtár: nem engedélyezve
(libgcrypt nem található: a helyének megkereséséhez használhatja az ,!libgcrypt-config parancsot.) GtkConfigStore: nem engedélyezve (a 'gtk+-3.0 >= 3.0' könyvtár nem található)
MPI Támogatás: nem engedélyezve (az --enable-mpi lehetőség nem lett kiválasztva)
ns-3 Click Integráció: nem engedélyezve (nsclick nem engedélyezve (lásd az --with- ,!nsclick lehetőséget))
ns-3 OpenFlow Integráció: nem engedélyezve (Szükséges boost könyvtárak nem találhatók)
Hálózati Szimulációs Bölcső: nem engedélyezve (NSC nem található (lásd az --with-nsc lehetőséget))
PlanetLab FdNetDevice: nem engedélyezve (PlanetLab operációs rendszer nem észlelhető (lásd az --force-planetlab lehetőséget))
PyViz vizualizáló: engedélyezve
Python API Keresés Támogatás: nem engedélyezve (Hiányzó 'pygccxml' Python modul)
Python Kötések: engedélyezve
Valós Idejű Szimulátor: engedélyezve
SQlite statisztikai adat kiírás: nem engedélyezve (a 'sqlite3' könyvtár nem található)
Tap Híd: engedélyezve
Tap FdNetDevice: engedélyezve
Tesztelés: engedélyezve
Szál Primitívek: engedélyezve
Használja a sudo-t a suid bit beállításához: nem engedélyezve (az --enable-sudo lehetőség nem lett kiválasztva)
XmlIo: engedélyezve
'A configure' sikeresen befejeződött (6.387s)Figyeljen a fenti lista utolsó részére. Néhány ns-3 opció alapértelmezés szerint nincs bekapcsolva, vagy a megfelelő működéshez rendszeroldali támogatást igényel. Például az XmlTo bekapcsolásához a rendszernek tartalmaznia kell a könyvtárat libxml-2.0. Ha ez a könyvtár nem található, és a megfelelő ns-3 funkció nem lett bekapcsolva, akkor egy hibaüzenet jelenik meg. Figyeljen arra is, hogy van lehetőség arra, hogy alkalmazza a parancsot sudo a suid bit (a csoportazonosító futás közbeni beállítása) bizonyos programoknál. Alapértelmezés szerint ez nincs bekapcsolva, ezért ez a funkció "nem engedélyezett" néven jelenik meg. Végül, a bekapcsolt opciók listájának megtekintéséhez használja a Waf a beállítással --check-config.
Most térjünk vissza és kapcsoljunk vissza a hibakeresési buildre, amely példákat és teszteket tartalmaz.
$ ./waf clean
$ . /waf configure --build-profile=debug --enable-examples --enable-testsA build rendszer most be van állítva, és a hibakeresési verziókat az ns-3 programokból egyszerűen össze tudja állítani a következő parancs megadásával:
$ . /wafBár a fent említett lépések arra késztették, hogy kétszer állítsa össze az ns-3 rendszert, most már tudja, hogyan lehet módosítani a konfigurációt és optimalizált kódot építeni.
A projekt konfigurációjához aktív profil ellenőrzésére van egy parancs:
$ . /waf --check-profile
Waf: Belépés a könyvtárba `/path/to/ns-3-allinone/ns-3.29/build`
Build profil: debugA fent tárgyalt szcenario build.py támogatja az argumentumokat --enable-examples és --enable-tests, de más opciókat Waf nem támogat közvetlenül. Például ez nem működik:
$ . /build.py --disable-pythona reakció az alábbi lesz:
build.py: hiba: nincs ilyen opció: --disable-pythonEnnek ellenére a különleges operátor - - használható további paraméterek átadására waf, ezért a fent említett helyett a következő parancs fog működni:
$ . /build.py -- --disable-pythonmivel ez generálja a fő parancsot . /waf configure —disable-python. Íme még néhány további javaslat az Waf.
Hibakezelés a build során
Az ns-3 kiadások a legújabb C++ fordítókon lettek tesztelve, amelyek elérhetőek voltak a kiadás idején, népszerű Linux és MacOS terjesztéseken. Azonban idővel újabb terjesztések jelennek meg új fordítókkal, és ezek a frissebb fordítók általában szigorúbbak a figyelmeztetések kezelésében. Az ns-3 úgy konfigurálja a felépítését, hogy az összes figyelmeztetést hibaüzenetként kezelje, így néha, ha régebbi verziót használsz újabb rendszeren, a fordító figyelmeztetése megakadályozhatja a felépítést.
Például korábban megjelent az ns-3.28 kiadás a Fedora 28 számára, amely egy új főverziót tartalmazott. gcc (gcc-8). Az ns-3.28 vagy korábbi verziók Fedora 28 alatt, ha telepítve van a Gtk2+, a következő hiba fog jelentkezni:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);Az ns-3.28.1-től kezdődően Waf elérhető egy opció a problémák megoldására. Ez letiltja a „-Werror” jelző beállítását a g++ és clang++ számára. Ez az opció a „--disable-werror”, ezt a konfigurálás során kell alkalmazni:
$ ./waf configure --disable-werror --enable-examples --enable-testsKonfigurálás vagy építés
Néhány parancs Waf csak a konfigurálás fázisában van értelme, míg mások csak az építési fázisban működnek. Például, ha szeretnéd használni az ns-3 emulációs funkcióit, akkor beállíthatod a bitet suid használatával sudo, ahogy fentebb leírtuk. Ez megváltoztatja a konfigurációs fázis parancsait, így módosíthatod a konfigurációt a következő parancs használatával, amely szintén magában foglalja a példákat és teszteket.
$ ./waf configure --enable-sudo --enable-examples --enable-testsHa ezt megteszed, Waf elindítja sudo, hogy megváltoztassa az emulációs kód socket létrehozó programjait futtatásra jogosultságokkal. , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik.. A Waf Számos más opció is elérhető a konfigurálási és építési fázisokhoz. A lehetőségek megismeréséhez írd be:
$ ./waf --helpA következő szakaszban néhány tesztelési opciót fogunk használni.
Építési profilok
Már láttuk, hogyan lehet konfigurálni Waf építésekhez debug és optimized:
$ ./waf --build-profile=debugVan egy közbenső építési profil is, release. Opció -d amely szinonimája --build-profile. Az építési profil kezeli a naplózás, az állítások (assertions) és a fordító optimalizálási kulcsok használatát:

Amint az látható, a naplózás és az állítások csak a hibakeresési build-ekben érhetők el. A javasolt gyakorlat az, hogy fejlessze az alkalmazását hibakeresési módban, majd hajtson végre ismételt futásokat (statisztikákért vagy paraméterek megváltoztatásáért) az optimalizált build profilban.
Ha van kódja, amelyet csak bizonyos build profilokban kell végrehajtani, használja a Code Wrapper Macro makrót:
NS_BUILD_DEBUG (std::cout << "Egy kimeneti sor része..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Kész: " << timer << std::endl;)By default, Waf a build artefaktumait a build könyvtárba helyezi. Más kimeneti könyvtárat is megadhat a következő opcióval - -out, például:
$ .\/waf configure --out=my-build-dirEzt a build profilokkal kombinálva könnyedén válthat különböző fordítási opciók között:
$ .\/waf configure --build-profile=debug --out=build\/debug
$ .\/waf build
...
$ .\/waf configure --build-profile=optimized --out=build\/optimized
$ .\/waf build
...Ez lehetővé teszi, hogy több build-el dolgozzon anélkül, hogy minden alkalommal újra írná az utolsó build-et. Amikor vált a másik profilra, Waf csak azt fogja lefordítani, anélkül, hogy az egészet újra le kellene fordítani.
Amikor így váltogatja a build profilokat, ügyeljen arra, hogy minden alkalommal azonos konfigurációs paramétereket adjon meg. Segíthet elkerülni a hibákat, ha több környezeti változót definiál:
$ 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 buildFordítók és zászlók
A fenti példákban Waf a ns-3 építéséhez a GCC-ből származó C++ fordítót használ ( g++). Mindazonáltal meg lehet változtatni a használt Waf C++ fordítót, ha definiálja a CXX környezeti változót. Például, hogy a Clang C++ fordítót, clang++-t használja,
$ CXX="clang++" .\/waf configure
$ .\/waf build Hasonló módon beállíthatja Waf a elosztott fordítás használatára a distcc:
$ CXX="distcc g++" .\/waf configure
$ .\/waf buildA distcc-ről és az elosztott fordításról további információt a projekt dokumentációs részében találhat. A ns-3 konfigurálásakor a fordítózás zászlóinak hozzáadásához használja a CXXFLAGS_EXTRA környezeti változót.
Telepítés
Waf használható könyvtárak különböző helyekre történő telepítésére a rendszeren belül. Alapértelmezés szerint a lefordított könyvtárak és végrehajtható fájlok a következő könyvtárban találhatók build, és mivel a Waf ismeri ezeknek a könyvtáraknak és végrehajtható fájloknak a helyét, nincs szükség könyvtárak máshová történő telepítésére.
Ha a felhasználók a telepítést a fordítási könyvtáron kívül szeretnék végezni, futtathatják a parancsot .\/waf install. Alapértelmezés szerint a telepítési előtag /usr/local, így a .\/waf install programok a következő helyre lesznek telepítve /usr/local/bin, a könyvtárak a következő helyre /usr/local/lib és a fejléc fájlok a következő helyre /usr/local/include. A superuser jogok általában szükségesek az alapértelmezett előtagú telepítéshez, így a tipikus parancs sudo .\/waf install. Indításkor a Waf először a fordítási könyvtárban található közös könyvtárakat preferálja, aztán a helyi környezetben beállított könyvtárakban keres könyvtárakat. Tehát könyvtárak telepítésekor jó gyakorlat ellenőrizni, hogy a szükséges könyvtárakat használják. A felhasználók választhatják a másik előtaggal történő telepítést a konfigurálás során az alábbi opció megadásával --prefix, például:
.\/waf configure --prefix=\/opt\/localHa később, a fordítás után a felhasználó beírja a telepítési parancsot ./waf, az előtag /opt/local.
A parancs .\/waf clean először használható a projekt újbóli beállítása előtt, ha a telepítéshez Waf másik előtagot használnak.
Így az ns‑3 használatához nem szükséges hívni .\/waf install. A legtöbb felhasználó számára ez a parancs nem lesz szükséges, mivel Waf a fordítási könyvtárból veszi a jelenlegi könyvtárakat, de egyes felhasználók hasznosnak találhatják, ha tevékenységük magában foglalja a ns‑3 könyvtáron kívüli programokkal való munkát.
A Waf egységes
A ns‑3 forráskód fájlfájl keménylevelén csak egy Waf-szkript található. Amikor elkezdi használni, sok időt fog eltölteni a következő könyvtárban scratch\/ vagy mélyebben, asrc\/... és lehet, hogy szüksége van a következő parancs futtatására Waf. Csak emlékeznie kell arra, hol vagy, és futtatni a Waf így:
$ ..\/..\/..\/waf ..., de ez fárasztó és hajlamos a hibákra, így vannak jobb megoldások. Az egyik elterjedt megoldás, hogy egy szövegszerkesztőt használ, például ) és ha fejlesztési tárolókat használnak, a verzióellenőrző rendszerek Git. A legtöbb kezdő felhasználónak nem kell aggódnia, ha a konfigurációja hiányzó ns-3 funkciókat jelez, de azok számára, akik teljes telepítést szeretnének, a projekt egy wikivel is rendelkezik, amely hasznos tanácsokat és útmutatásokat tartalmaz. Az egyik ilyen oldal az „Installáció” oldal, amely telepítési utasításokat tartalmaz különböző rendszerekhez, elérhető a következő címen: vagy vim-ben., amelyben két terminál session nyílik meg, az egyik a ns‑3 fordítására, a másik a forráskód szerkesztésére szolgál. Ha csak egy van, tarball, akkor segíthet a környezeti változó:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff buildA modul könyvtárában csábító lehet egy triviális waf szkriptet hozzáadni a példa szerint exec ../..../waf. Kérjük, ne tegye ezt. Ez összezavarhatja az újoncokat, és rossz végrehajtás esetén rejtett fordítási hibákhoz vezethet. A fent említett megoldások azok az irányok, amelyeket követni kell.
3.5 A ns-3 tesztelése
A ns-3 disztribúció moduláris tesztjeit a ./test.py:
$ ./test.pyEzek a tesztek párhuzamosan futnak Waf. Végül látnia kell egy üzenetet, amely azt jelzi, hogy
92-ből 92 teszt sikeresen teljesült (92 átment, 0 megbukott, 0 összeomlott, 0 valgrind hibák)Ez egy fontos üzenet a hibák, összeomlások vagy valgrind hibák azonosításához, és problémákat jelez a kódban vagy az eszközök és kód közötti inkompatibilitással.
Továbbá látni fogja a végső kimenetet a Waf és a tesztelő, amely minden tesztet végrehajt, körülbelül így fog kinézni:
Waf: Belépés a könyvtárba `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: Kilépés a könyvtárból `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'a build' sikeresen befejeződött (1.799s)
Készített modulok:
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-ből 92 teszt sikeresen teljesült (92 átment, 0 megbukott, 0 összeomlott, 0 valgrind hibák)
Ezt a parancsot általában a felhasználók futtatják az ns-3 disztribúció fordításának gyors ellenőrzésére. (Vegye figyelembe, hogy a "PASS: ..." sorok sorrendje eltérhet, ez rendben van. Ami számít, az a végső sorban van, hogy minden teszt sikeresen teljesült; egy teszt sem bukott meg vagy omlott össze.) És Waf, és a test.py párhuzamosítani fogják a gépen elérhető CPU-magok között.
3.6 A szkript futtatása
Általában a szkripteket a Waf. Futtatásához a build rendszer biztosítani tudja, hogy a közös könyvtárak útvonalai helyesen be legyenek állítva, és hogy a könyvtárak elérhetőek legyenek a futás során. A program futtatásához egyszerűen használja a Waf a beállítással - -run. Indítsuk el az ns-3 ekvivalentét mindenütt jelenlévő programnak hello world, írja be a következőt:
$ ./waf --run hello-simulatorA Waf először ellenőrzi, hogy a program helyesen van-e összeállítva, és ha szükséges, elvégzi az összeállítást. Ezután Waf futtatja a programot, amely a következő kimenetet adja.
Hello SimulatorGratulálunk! Most már ns‑3 felhasználó vagy!
Mit tegyek, ha nem látom az eredményt?
Ha üzeneteket látsz Waf, amelyek arra utalnak, hogy az összeállítás sikeresen befejeződött, de nem látod a kimenetet „Hello Simulator”, akkor valószínű, hogy a [Waf-összeállítás] szakaszban átállítottad az összeállítási módot optimized, de kihagytad a visszakapcsolást a debugmódba. A dokumentumban használt összes konzolkimenet egy speciális ns‑3 komponenst használ, amely naplózást végez, és felhasználói üzeneteket nyomtat a konzolra. Ennek a komponensnek a kimenete automatikusan ki van kapcsolva optimalizált kód fordítása esetén — ez „optimalizált”. Ha nem látod a „Hello Simulator” kimenetet, írd be a következőt:
$ ./waf configure --build-profile=debug --enable-examples --enable-testsaz ns‑3 programok hibakeresési verzióinak összeállításához, amelyek példákat és teszteket tartalmaznak. Ezután újra kell fordítanod a legfrissebb hibakeresési verziót a következő begépelésével: Waf Most, ha elindítod a programot
$ . /wafhello-simulator , látnod kell a várt eredményt.A parancssori argumentumok átadásához az ns‑3 programnak használj egy ilyen sablont:
3.6.1 Parancssori argumentumok
$ ./waf --run --command-template="%s "
Cseréld le a programod nevére és az argumentumokra. Az argumentum-command-template tulajdonképpen egy recept a tényleges parancssor felépítéséhez a Waf amelyet a program futtatásához használnak. A Waf ellenőrzi, hogy az összeállítás befejeződött, beállítja a közös könyvtárak elérési útjait, majd a megadott parancssor-sablon használatával és a program nevének %s helyett történő behelyettesítésével meghívja az végrehajtó fájlt. Ha ez a szintaxis bonyolultnak tűnik számodra, van egy egyszerűbb opció, amely az ns‑3 programot és annak argumentumait egyetlen idézőjelbe foglalja: Waf $ ./waf --run ' --arg1=value1 --arg2=value2 ...'
Egy másik, különösen hasznos példa a tesztek választékos futtatása. Tegyük fel, hogy van egy tesztsorozat (suite) mytest (valójában nem létezik). Az előbb a ./test.py szkriptet használtuk egy sor teszt párhuzamos futtatására, amely többször meghívja a tesztelési programottest-runner . Meghívás. Hívja meg . Meghívás közvetlenül egy teszt végrehajtásához:
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"Az argumentumok átkerülnek a programnak . Meghívás. Mivel a mytest nem létezik, hibaüzenet fog generálódni. Az elérhető test-runner paraméterek kiírásához írja be:
$ ./waf --run test-runner --command-template="%s --help"3.6.2 Hibakeresés
Az ns-3 programok más segédprogramok, például hibakeresők (mint például gdb) vagy memóriavizsgálók (mint például valgrind), hasonló formátumot használva indíthatók - -command-template = "…". Például, hogy elindítsa a hello-simulator ns-3 programját argumentumokkal: gdb $ ./waf --run=hello-simulator --command-template="gdb %s --args "
Vegye figyelembe, hogy az ns-3 program neve argumentummal rendelkezik, és a vezérlőeszköz (itt - -run) az argumentumban az első token. gdb- -args tulajdonképpen egy recept a tényleges parancssor felépítéséhez. Opció , ami a parancssor többi része a "belső" programhoz tartozik. (Néhány verzió jelzi gdbnem érti az opciót gdb . Ebben az esetben távolítsa el a program argumentumait , ami a parancssor többi része a "belső" programhoz tartozik. (Néhány verzióés használjon parancskészletet tulajdonképpen egy recept a tényleges parancssor felépítéséhez .) Ezt a receptet és az előzőt kombinálhatjuk teszt debugging alatt történő futtatásához: gdb args$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
A Waf-nak a ns-3 fájlfa tetejéről kell futnia. Ez a mappa válik munkakönyvtárrá, ahová a kimeneti fájlok kerülnek. De mi van, ha ezeket a fájlokat az ns-3 forráskódfájlon kívül szeretné megőrizni? Használja az argumentumot3.6.3 Munkakönyvtár
- -cwd $ ./waf --cwd=...:
Lehet, hogy kényelmesebb, ha a kimeneti fájlokat a munkakönyvtárában kapja. Ebben az esetben hasznos lehet az alábbi közvetett akció:$ function waff { CWD="$PWD" cd $NS3DIR >/dev/null ./waf --cwd="$CWD" $* cd - >/dev/null }
Ez a parancs előző verziójának dekorációja megőrzi a jelenlegi munkakönyvtárat, átlép akönyvtárba, majd utasítja Waf, hogy a munkakönyvtárat visszaállítsa a futás előtt mentett aktuális munkakönyvtárra. A parancsot említeni kell a teljesség kedvéért, a legtöbb felhasználó egyszerűen a Waf-ot a legfelső szintről indítja és ott generálja a kimeneti fájlokat. Waf Folytatás: 4. fejezet $ ./waf --cwd=... 🥇ns-3 hálózati szimulátor bemutató. 3. fejezet | ProHoster
Forrás: habr.com
