Handbok för nÀtverkssimulatorn ns-3. Kapitel 3

Handbok för nÀtverkssimulatorn ns-3. Kapitel 3
kapitel 1,2

3 Börja arbeta
3.1 Översikt
3.2 FörutsÀttningar
3.2.1 Ladda ner ns-3 som ett kÀllkodsarkiv
3.3 Ladda ner ns-3 med Git
3.3.1 Ladda ner ns-3 med Bake
3.4 Bygga ns-3
3.4.1 Bygga med build.py
3.4.2 Bygga med Bake
3.4.3 Bygga med Waf
3.5 Testa ns-3
3.6 Köra skript
3.6.1 Kommandoradsargument
3.6.2 Felsökning
3.6.3 Arbetskatalog

Kapitel 3

Börja arbeta

Detta kapitel syftar till att förbereda lÀsaren för arbete, med en dator dÀr ns-3 kanske aldrig tidigare har installerats. Presentationen tÀcker stödda plattformar, förutsÀttningar, sÀtt att fÄ ns-3, sÀtt att bygga ns-3 och sÀtt att kontrollera din byggnad och köra enkla program.

3.1 Översikt

ns-3-simulatorn Àr konstruerad som ett system av samarbetande programbibliotek. Vid byggande lÀnkas koden för anvÀndarprogram med dessa bibliotek. För att skriva anvÀndarprogram anvÀnds programmeringssprÄken C++ eller Python.

ns-3 distribueras som kÀllkod, vilket innebÀr att mÄlsystemet mÄste ha en programvaruutvecklingsmiljö för att först bygga biblioteken och sedan bygga anvÀndarprogrammet. I princip kan ns-3 distribueras som fÀrdiga bibliotek för specifika system, och i framtiden kan de distribueras pÄ det sÀttet. Men för nÀrvarande utför mÄnga anvÀndare faktiskt sitt arbete genom att redigera sjÀlva ns-3, sÄ det Àr bra att ha kÀllkoden för att bygga biblioteken. Om nÄgon skulle vilja ta pÄ sig jobbet att skapa fÀrdiga bibliotek och paket för operativsystem, vÀnligen kontakta e-postlistan. ns-developers.

HÀr kommer vi att titta pÄ tre sÀtt att ladda ner och bygga ns-3. Den första Àr att ladda ner och bygga den officiella versionen frÄn huvudsidan. Den andra Àr att vÀlja och bygga kopior av utvecklingsversionerna av grundinstallationen av ns-3. Den tredje Àr att anvÀnda ytterligare byggverktyg för att ladda ner fler tillÀgg för ns-3. Vi kommer att gÄ igenom var och en, eftersom verktygen nÄgot skiljer sig Ät.

Erfarna Linux-anvÀndare kan undra varför ns-3 inte erbjuds som ett paket, som de flesta andra bibliotek som anvÀnder paketmanagern? Trots att det finns binÀrpaket för olika Linux-distributioner (t.ex. Debian), slutar de flesta anvÀndarna till slut med att redigera biblioteken och mÄste sjÀlva kompilera ns-3, sÄ tillgÄngen till kÀllkoden Àr bekvÀm. Av denna anledning kommer vi att fokusera pÄ installation frÄn kÀllkod.

För de flesta tillÀmpningar behövs inte ns-3-licenser root och det rekommenderas att anvÀnda ett icke-privilegerat anvÀndarkonto.

3.2 FörutsÀttningar

Hela uppsÀttningen av tillgÀngliga ns-3-bibliotek har en rad beroenden av externa bibliotek, men i de flesta fall kan ns-3 kompileras och anvÀndas med stöd för flera vanliga (ofta förinstallerade) komponenter: C++-kompilator, Python, kÀllkodsredigerare (t.ex. vim, emacs eller Eclipse) och, om utvecklingsförrÄd anvÀnds, versionshanteringssystemet Git. De flesta nybörjare behöver inte bekymra sig om deras konfiguration rapporterar nÄgra saknade extra funktioner för ns-3, men för dem som önskar en fullstÀndig installation erbjuder projektet en wiki som inkluderar sidor med mÄnga anvÀndbara tips och rÄd. En sÄdan sida Àr "Installations"-sidan med installationsinstruktioner för olika system, tillgÀngliga pÄ: https://www.nsnam.org/wiki/Installation.

Avsnittet "FörutsÀttningar" pÄ denna wiki-sida förklarar vilka paket som krÀvs för att stödja allmÀnna ns-3-alternativ, och ger Àven kommandon som anvÀnds för att installera dem i vanliga Linux- eller macOS-varianter.

Du kan dra nytta av möjligheten att utforska ns-3:s wiki-sida eller den huvudsakliga webbplatsen: https://www.nsnam.org, eftersom det finns mycket information dÀr. FrÄn och med den senaste versionen av ns-3 (ns-3.29) krÀvs följande verktyg för att köra ns-3:

Verktyg Paket/version

  • C++-kompilator
    clang++ eller g++ (g++ version 4.9 eller högre)
  • Python
    python2 version >= 2.7.10, eller python3 version >=3.4
  • Git
    vilken senaste version som helst (för Ätkomst till ns-3 pÄ GitLab.com)
  • tar
    vilken senaste version som helst (för att packa upp ns-3-release)
  • bunzip2
    vilken senaste version som helst (för att packa upp ns-3-release)

För att kontrollera den standardinstallerade versionen av Python, skriv python -VFör att kontrollera versionen av g++, skriv g++ -v. Om nÄgra verktyg saknas eller Àr för gamla, hÀnvisa till installationsguiden pÄ ns-3:s wiki-sida.

FrÄn och med nu antar vi att lÀsaren arbetar i Linux, MacOS eller en Linux-emulator och har minst de ovan nÀmnda verktygen.

3.2.1 Ladda ner ns-3 som ett kÀllkodsarkiv

Detta Ă€r en handlingsplan för en ny anvĂ€ndare som vill ladda ner och experimentera med de senaste utgivnings- och paketversionerna av ns-3. UtgĂ„vor av ns-3 publiceras i form av komprimerade kĂ€llkodspaket, ibland kallade tarball. tarball — ett speciellt format för programarkiv dĂ€r flera filer sammanfogas. Arkivet Ă€r vanligtvis komprimerat. Processen för att ladda ner ns-3 via tarball Ă€r enkel; du behöver bara vĂ€lja en utgĂ„va, ladda ner och packa upp den.

Anta att du som anvÀndare vill bygga ns-3 i en lokal katalog som heter workspace. Du kan fÄ en arbetskopia av utgÄvan genom att skriva följande i Linux-konsolen (sjÀlvklart med de korrekta versionsnumren)

$ 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 

TÀnk pÄ utilityn som anvÀndes ovan, wgetsom Àr ett kommandoradsverktyg för att ladda ner objekt frÄn internet. Om du inte har installerat det kan du anvÀnda din webblÀsare för detta.

Genom att följa dessa steg kommer du att gÄ till katalogen ns-allinone-3.29, dÀr du bör se flera filer och kataloger.

$ 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

Nu Àr du redo att bygga basdistributionsversionen av ns-3 och kan gÄ vidare till avsnittet som handlar om att bygga ns-3.

3.3 Ladda ner ns-3 med Git

Koden för ns-3 finns pÄ Git-repositorier pÄ GitLab.com pÄ adressen https://gitlab.com/nsnam/. Gruppen nsnam samlade olika repositorier som anvÀnds av det öppna kÀllkodsprojektet.

Det enklaste sÀttet att börja anvÀnda Git-repositorier Àr att göra en fork eller klona miljön ns-3-allinone. Detta Àr en samling skript som hanterar nedladdningen och byggandet av de mest anvÀnda delsystemen i ns-3. Om du Àr ny pÄ Git kan termerna "fork" och "kloning" vara okÀnda för dig; om sÄ Àr fallet rekommenderar vi att du bara klonar (skapar en egen kopia) av lagret som finns pÄ GitLab.com pÄ följande sÀtt:

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

Vid denna tidpunkt ser din katalog ut sÄ hÀr ns-3-allinone skiljer sig nÄgot frÄn den ovan beskrevna katalogen med versionsarkivet. Den ska se ut ungefÀr sÄ hÀr:

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

Observera att skriptet download.py, som dessutom hÀmtar ns-3 och den medföljande kÀllkoden. HÀr har du val: antingen ladda ner den senaste utvecklingssnapshoten av ns-3:

$ python download.py

eller föredra versionen av ns-3, med hjÀlp av flaggan -n för att ange versionsnumret:

$ python download.py -n ns-3.29

Efter detta steg kommer ytterligare förvar att laddas ner till katalogen ns-3-allinone ns-3 bake, pybindgen, netanim och PÄ en ren Ubuntu16.04-maskin behövde jag Àndra kommandot till följande:.

AnmÀrkning
$ sudo python3 download.py -n ns-3.29 (hÀr och framöver översÀttarens kommentarer). De tvÄ ovan nÀmnda metoderna (kÀllkodens arkiv eller förvaret

3.3.1 Ladda ner ns-3 med Bake

genom Git) Àr anvÀndbara för att erhÄlla den enklaste installationen av ns-3 med flera tillÀgg ( ns-3-allinone för att generera Python-bindningar ochnetanim för att animera nÀtverket). Det tredje förvaret, som tillhandahÄlls som standard i ns-3-allinone, kallas PÄ en ren Ubuntu16.04-maskin behövde jag Àndra kommandot till följande: Bake pybindgen.

— ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. kan anvĂ€ndas för att fĂ„ utvecklingsversioner av ns-3, samt för att ladda ner och bygga tillĂ€gg för basversionen av ns-3-distributionen, som miljön — ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. Direct Code Execution CradleNetwork Simulation Cradle, , möjligheten att skapa nya Python-bindningar och olika "appar" av ns-3.CradleNetwork Simulation Cradle Ă€r en ramverk som tillĂ„ter att anvĂ€nda verkliga nĂ€tverksstackar TCP / IP inom nĂ€tverkssimulatorn.

AnmÀrkning
Om du förvÀntar dig att din installation av ns-3 ska ha avancerade eller extra funktioner kan du följa denna installationsvÀg.

I de senaste versionerna av ns-3

har det lagts till i tar-versionen. I versionen ingĂ„r en konfigurationsfil som möjliggör nedladdning av aktuella programvaruversioner vid tidpunkten för versionens skapande. Det betyder till exempel att versionen — ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. , som distribueras med versionen ns-3.29, kan anvĂ€ndas för att fĂ„ komponenter för denna version av ns-3 eller tidigare, men kan inte anvĂ€ndas för att hĂ€mta komponenter för senare versioner (om paketbeskrivningsfilen — ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet.bakeconf.xml inte har uppdaterats). Du kan ocksĂ„ fĂ„ den senaste kopian

, genom att ange följande kommando i din Linux-konsol (förutsatt att du har Git installerat): pybindgen, skriv följande kommando i din Linux-konsol (förutsatt att du har Git installerat):

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

NÀr du kör git-kommandot bör du se nÄgot som liknar följande:

Klonar in i 'bake'...
remote: UpprÀkning av objekt: 2086, klart. 
remote: RĂ€kning av objekt: 100% (2086/2086), klart. 
remote: Komprimering av objekt: 100% (649/649), klart. 
remote: Totalt 2086 (delta 1404), ÄteranvÀnda 2078 (delta 1399) 
Mottar objekt: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, klart. 
Löser deltan: 100% (1404/1404), klart.

NÀr kommandot har slutförts clone ska du ha en katalog med namnet pybindgen, vars innehÄll ska se ut ungefÀr sÄ hÀr:

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

Observera att du har laddat ner flera Python-skript, en Python-modul med namnet pybindgen och en konfigurationsfil i XML. NÀsta steg blir att anvÀnda dessa skript för att ladda ner och bygga den ns-3-distribution du vÀljer. Det finns flera konfigurationsmÄl tillgÀngliga:

  1. ns-3.29: en modul som motsvarar en version; den kommer att ladda ner komponenter som liknar versionen i tarball;

  2. ns-3-dev: en liknande modul, men med kod frÄn utvecklingsgrenen;

  3. ns-allinone-3.29: en modul som inkluderar andra tillÀggsfunktioner, sÄsom Click-routing och Network Simulation Cradle, Openflow för ns-3.

  4. ns-3-allinone: liknande den stabila versionen av modulen allinone, men för utvecklingskoden.

AnmÀrkning
Click — en modulĂ€r programvaruarkitektur för att skapa routrar.

Openflow Àr en protokoll för hantering av processen för databehandling som passerar genom datanÀtverk av routrar och switchar, vilket implementerar teknik för programvarukonfigurerade nÀtverk.

Den aktuella utvecklingssnapshot (icke-releaserad) av ns-3 kan hittas pÄ:https://gitlab.com/nsnam/ns-3-dev.git.

Utvecklarna strÀvar efter att hÄlla dessa arkiv i ett sammanhÀngande arbetsförhÄllande, men de Àr under utveckling och innehÄller icke-releasad kod, sÄ om du inte planerar att anvÀnda nya funktioner bör du vÀlja den officiella releasen.

Du kan hitta den senaste versionen av koden genom att blÀddra igenom listan över arkiv, eller genom att besöka webbplatsen för 'ns-3 Releases':https://www.nsnam.org/releases/ och klicka pÄ lÀnken för den senaste versionen. I det hÀr exemplet kommer vi att fortsÀtta med ns-3.29.

Nu för att fĂ„ de nödvĂ€ndiga komponenterna av ns-3, kommer vi att anvĂ€nda verktyget — ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet.. LĂ„t oss sĂ€ga nĂ„gra inledande ord om hur — ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet..

Bake fungerar, genom att ladda ner kĂ€llfiler för paketen till katalogen source och installera biblioteken i byggkatalogen. — ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. kan startas genom att referera till den binĂ€ra filen, men om du vill köra — ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. inte frĂ„n den katalog den laddades upp till, det Ă€r önskvĂ€rt att lĂ€gga till sökvĂ€gen till pybindgen din sökvĂ€g (miljövariabel PATH), till exempel pĂ„ följande sĂ€tt (exempel för kommandotolk Linux bash). GĂ„ till katalogen "bake" och stĂ€ll sedan in följande miljövariabler:

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

Detta kommer att placera programmet bake.py i kommandotolkens sökvĂ€g och tillĂ„ta andra program att hitta de körbara filer och bibliotek som skapades av pybindgen. I vissa anvĂ€ndningsfall pybindgen, den ovan beskrivna installationen av PATH och PYTHONPATH krĂ€vs inte, men för en fullstĂ€ndig installation av ns‑3-allinone (med ytterligare paket) Ă€r den vanligtvis nödvĂ€ndig.

GÄ till arbetskatalogen och skriv följande i kommandotolken:

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

Sedan kommer vi att be — ett verktyg för samordnad mjukvarubyggnad frĂ„n flera förvar, utvecklat för ns-3-projektet. att kontrollera om vi har tillrĂ€ckligt med verktyg för att ladda ner olika komponenter. Skriv:

$ ./bake.py check

Du bör se nÄgot liknande följande:

> Python - OK 
> GNU C++ compiler - OK 
> Mercurial - OK 
> Git - OK 
> Tar-tool - OK 
> Unzip-tool - OK 
> Make - OK 
> cMake - OK 
> patch tool - OK 
> SökvÀg som söks för verktyg: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...

Specifikt Àr laddningsverktyg som Mercurial, CVS, Git och Bazaar grundlÀggande i detta steg, eftersom de gör det möjligt för oss att hÀmta koden. Vid detta stadium installerar du de saknade verktygen pÄ det vanliga sÀttet för ditt system (om du kan) eller ber om hjÀlp frÄn din systemadministratör.

Försök sedan ladda ner programvaran:

$ ./bake.py download

resultatet bör vara nÄgot i stil med:

>> Söker efter systemberoende setuptools - OK 
>> Söker efter systemberoende libgoocanvas2 - OK 
>> Söker efter systemberoende gi-cairo - OK 
>> Söker efter systemberoende pygobject - OK 
>> Söker efter systemberoende pygraphviz - OK 
>> Söker efter systemberoende python-dev - OK 
>> Söker efter systemberoende qt - OK 
>> Söker efter systemberoende g++ - OK 
>> Laddar ner pybindgen-0.19.0.post4+ng823d8b2 (mÄlkatalog: pybindgen) - OK 
>> Laddar ner netanim-3.108 - OK 
>> Laddar ner ns-3.29 - OK

Detta betyder att tre kÀllkoder har laddats ner. GÄ nu till kÀllkatalogen och skriv ls; du bör se:

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

Nu Ă€r du redo att bygga distributionen av ns‑3.

3.4 Bygga ns-3

Precis som vid nedladdning av ns‑3 finns det flera sĂ€tt att bygga ns‑3. Det viktigaste Ă€r att vi vill betona att ns‑3 byggs med ett byggverktyg som kallas Waf, beskrivet nedan. De flesta anvĂ€ndare kommer att arbeta med Waf, men det finns flera anvĂ€ndbara skript som kan hjĂ€lpa dig att komma igĂ„ng eller organisera mer komplexa byggen. SĂ„, vĂ€nligen lĂ€s först om Waf, ta en titt pĂ„ build.py och bygget med pybindgen.

3.4.1 Bygga med build.py

Varning! Detta byggsteg Àr endast tillgÀngligt frÄn versionspaketet som erhÄllits enligt ovan, och inte nedladdat via git eller bake.

Vid arbete med release-paketet tarball, i ns‑3‑allinone finns det ett anvĂ€ndbart skript som kan förenkla uppbyggnaden av komponenter. Det heter build.py. Detta program kommer att konfigurera projektet pĂ„ det mest anvĂ€ndbara sĂ€ttet för dig. Observera dock att mer komplexa konfigurationer och arbete med ns‑3 vanligtvis involverar anvĂ€ndning av det egna byggsystemet ns‑3, Waf, som kommer att presenteras senare i denna handbok.

Om du har laddat ner via tarball, bör det finnas en katalog i din mapp ~/workspace med ett namn som Àr nÄgot i stil med ns-allinone-3.29. Skriv följande:

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

Vid anrop av build.py vi tillĂ€mpade kommandoradsargument för att bygga de exempel och tester som anvĂ€nds i denna handbok, vilka inte byggs som standard i ns‑3. Som standard bygger programmet Ă€ven alla tillgĂ€ngliga moduler. Sedan, om du önskar, kan du bygga ns‑3 utan exempel och tester eller utesluta moduler som inte behövs för ditt arbete.

Du kommer att se mĂ„nga utdata frĂ„n kompileraren som visas av skriptet nĂ€r det bygger olika delar som du har laddat ner. Först kommer skriptet att försöka bygga animatorn PĂ„ en ren Ubuntu16.04-maskin behövde jag Ă€ndra kommandot till följande:, sedan bindningsgeneratorn netanim och slutligen ns‑3. NĂ€r processen Ă€r klar bör du se följande:

Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s) 

Built modules:
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

I de sista tre raderna av listan ser vi ett meddelande om moduler som inte har byggts:

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

Det betyder helt enkelt att vissa ns-3-moduler som Àr beroende av externa bibliotek kanske inte har kompilerats, eller att deras kompilering inte krÀvs för den aktuella konfigurationen. Det betyder inte att simulatorn har misslyckats med att byggas eller att de kompilerade modulerna kommer att fungera felaktigt.

3.4.2 Bygga med Bake

Om du anvÀnde bake för att hÀmta kÀllkoden frÄn projektets repositories, kan du fortsÀtta anvÀnda det för att bygga ns-3. Skriv:

$ ./bake.py build

och du bör se nÄgot liknande:

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

Tips: du kan ocksÄ utföra bÄda stegen, nedladdning och byggande, genom att anropa "bake.py deploy".

Vid byggande av alla komponenter kan det uppstÄ fel, men byggandet fortsÀtter om komponenten inte Àr obligatorisk. Till exempel var ett nyligen problem med portabilitet att castxml kan kompileras med verktyget pybindgen inte pÄ alla plattformar. I sÄ fall kommer ett meddelande som följer:

>> Bygger castxml - Problem 
> Problem: Valfri beroende, modul "castxml" misslyckades
Detta kan minska funktionaliteten i den slutliga byggnaden.
Dock kommer bake att fortsÀtta eftersom "castxml" inte Àr en vÀsentlig beroende.
För mer information, kör bake med -v eller -vvv för fullt detaljerat lÀge.

Men castxml Àr endast nödvÀndig om du vill skapa uppdaterade Python-bindningar. För de flesta anvÀndare Àr detta inte nödvÀndigt (Ätminstone tills de börjar Àndra ns-3), sÄ sÄdana varningar kan för tillfÀllet sÀkert ignoreras.

Om ett fel intrÀffar, kommer nÀsta kommando att ge dig en antydan om saknade beroenden:

$ ./bake.py show

Olika paketberoenden som du försöker bygga kommer att listas.

3.4.3 Bygga med Waf

Vid denna tidpunkt, för att pÄbörja byggandet av ns-3, har vi anvÀnt antingen skriptet build.py, eller verktyget pybindgen. Dessa verktyg Àr anvÀndbara för att bygga ns-3 och hantera biblioteken. Faktiskt kör de byggverktyget Waf frÄn ns-3-katalogen. Waf följer med kÀllkoden för ns-3. De flesta anvÀndare gÄr snabbt över till direkt anvÀndning av Waf. SÄ för att fortsÀtta, vÀnligen gÄ till ns-3-katalogen som du först skapade.

För tillfÀllet Àr detta inte strÀngt nödvÀndigt, men det kan vara bra att göra en liten avstickare och titta pÄ hur man gör Àndringar i projektkonfigurationen. Troligtvis Àr det mest anvÀndbara Àndringen av konfigurationen som du kan göra att skapa en optimerad version av koden. Som standard har du stÀllt in ditt projekt för att bygga en debug-version. LÄt oss titta pÄ projektet för att skapa en optimerad byggning. För att förklara för Waf att det ska göra optimerade byggningar som inkluderar exempel och tester, behöver du köra följande kommandon:

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

Detta kommer att köra Waf utanför den lokala katalogen (för din bekvÀmlighet). Det första kommandot utför en rengöring av den tidigare byggningen, vilket vanligtvis inte Àr strÀngt nödvÀndigt, men det Àr en bra praxis (se ocksÄ byggprofilerna nedan); detta kommer att ta bort tidigare skapade bibliotek och objektfiler som finns i katalogen build/. NÀr projektet har omkonfigurerats och byggsystemet kontrollerar olika beroenden, bör du se en utskrift som liknar följande:

StÀller in top till      : \/home\/ns3user\/workspace\/bake\/source\/ns-3-dev
StÀller ut till      : \/home\/ns3user\/workspace\/bake\/source\/ns-3-dev\/build
Kontrollerar för 'gcc' (C kompilator)        : \/usr\/bin\/gcc 
Kontrollerar för cc-version                : 7.3.0 
Kontrollerar för 'g++' (C++ kompilator)      : \/usr\/bin\/g++ 
Kontrollerar för kompilering flagga -march=native stöd : ok 
Kontrollerar för kompilering flagga -Wl,--soname=foo stöd : ok 
Kontrollerar för kompilering flagga -std=c++11 stöd       : ok 
Kontrollerar boost-includes   : rubriker hittades inte, vÀnligen,!ange en --boost-includes argument (se hjÀlp) 
Kontrollerar boost-includes   : rubriker hittades inte, vÀnligen,!ange en --boost-includes argument (se hjÀlp) 
Kontrollerar för program 'python'            : \/usr\/bin\/python 
Kontrollerar för python-version >= 2.3       : 2.7.15 python-config                                                                     : \/usr\/bin\/python-config
FrÄgar python-config för pyembed '--cflags --libs --ldflags' flaggor : yes
Testar pyembed konfiguration                                      : yes
FrÄgar python-config för pyext '--cflags --libs --ldflags' flaggor   : yes
Testar pyext konfiguration                                        : yes

Kontrollerar för kompilering flagga -fvisibility=hidden stöd          : ok 
Kontrollerar för kompilering flagga -Wno-array-bounds stöd            : ok 
Kontrollerar för pybindgen plats          : ..\/pybindgen ,!(gissat) 
Kontrollerar för python modul 'pybindgen'   : 0.19.0. ,!post4+g823d8b2 
Kontrollerar för pybindgen version           : 0.19.0. ,!post4+g823d8b2 
Kontrollerar för kodsnutt                : yes 
Kontrollerar för typer uint64_t och unsigned long ekvivalens : no 
Kontrollerar för kodsnutt                                 : no 
Kontrollerar för typer uint64_t och unsigned long long ekvivalens     : yes 
Kontrollerar för apidefs som kan anvÀndas för Python bindningar                       : gcc-LP64 
Kontrollerar för intern GCC cxxabi         : komplett 
Kontrollerar för python modul 'pygccxml'    : inte hittad 
Kontrollerar för klick plats              : inte hittad 
Kontrollerar för program 'pkg-config'        : \/usr\/bin\/pkg- ,!config 
Kontrollerar för 'gtk+-3.0'                  : inte hittad 
Kontrollerar för 'libxml-2.0'                : yes 
kontrollerar för uint128_t                   : inte hittad 
kontrollerar för __uint128_t                 : yes 
Kontrollerar hög precision implementering   : 128-bit integer ,!(standard) 
Kontrollerar för header stdint.h             : yes 
Kontrollerar för header inttypes.h           : yes 
Kontrollerar för header sys\/inttypes.h       : inte hittad 
Kontrollerar för header sys\/types.h          : yes 
Kontrollerar för header sys\/stat.h           : yes 
Kontrollerar för header dirent.h             : yes 
Kontrollerar för header stdlib.h             : yes 
Kontrollerar för header signal.h             : yes 
Kontrollerar för header pthread.h            : yes 
Kontrollerar för header stdint.h             : yes 
Kontrollerar för header inttypes.h           : yes 
Kontrollerar för header sys\/inttypes.h       : inte hittad
Kontrollerar för bibliotek rt                  : yes 
Kontrollerar för header sys\/ioctl.h          : yes 
Kontrollerar för header net\/if.h             : yes 
Kontrollerar för header net\/ethernet.h       : yes 
Kontrollerar för header linux\/if_tun.h       : yes 
Kontrollerar för header netpacket\/packet.h   : yes 
Kontrollerar för NSC plats                : inte hittad 
Kontrollerar för 'sqlite3'                   : inte hittad 
Kontrollerar för header linux\/if_tun.h       : yes 
Kontrollerar för python modul 'gi'          : 3.26.1 
Kontrollerar för python modul 'gi.repository.GObject'      : ok 
Kontrollerar för python modul 'cairo'                      : ok 
Kontrollerar för python modul 'pygraphviz'                 : 1.4rc1 
Kontrollerar för python modul 'gi.repository.Gtk'          : ok 
Kontrollerar för python modul 'gi.repository.Gdk'          : ok 
Kontrollerar för python modul 'gi.repository.Pango'        : ok 
Kontrollerar för python modul 'gi.repository.GooCanvas'    : ok 
Kontrollerar för program 'sudo'                             : \/usr\/bin\/sudo 
Kontrollerar för program 'valgrind'                         : inte hittad 
Kontrollerar för 'gsl' : inte hittad python-config            : inte hittad 
Kontrollerar för kompilering flagga -fstrict-aliasing stöd : ok 
Kontrollerar för kompilering flagga -fstrict-aliasing stöd : ok 
Kontrollerar för kompilering flagga -Wstrict-aliasing stöd : ok 
Kontrollerar för kompilering flagga -Wstrict-aliasing stöd : ok 
Kontrollerar för program 'doxygen'                          : \/usr\/bin\/doxygen
---- Sammanfattning av valfria ns-3-funktioner:
Byggprofil : optimerad
Byggkatalog : 
BRITE Integration : inte aktiverad (BRITE inte aktiverad (se alternativ --with- ,!brite)) 
DES Metrics hÀndelseinsamling : inte aktiverad (standardeinstÀllningar till inaktiverad) 
Emulation FdNetDevice        : aktiverad 
Exempel                     : aktiverad 
Filbeskrivare NetDevice    : aktiverad 
GNU Scientific Library (GSL) : inte aktiverad (GSL hittades inte) 
Gcrypt bibliotek               : inte aktiverad
(libgcrypt hittades inte: du kan anvÀnda ,!libgcrypt-config för att hitta dess plats.) GtkConfigStore               : inte aktiverad (bibliotek 'gtk+-3.0 >= 3.0' inte hittades)
MPI Stödt                  : inte aktiverad (alternativ --enable-mpi inte valt)
ns-3 Click Integration       : inte aktiverad (nsclick inte aktiverad (se alternativ --with- ,!nsclick))
ns-3 OpenFlow Integration   : inte aktiverad (KrÀvde boost-bibliotek hittades inte) 
Network Simulation Cradle    : inte aktiverad (NSC hittades inte (se alternativ --with-nsc))
PlanetLab FdNetDevice         : inte aktiverad (PlanetLab operativsystem upptÀcktes inte ,!(se alternativ --force-planetlab)) PyViz visualizer : aktiverad 
Python API Skanning Stöd   : inte aktiverad (missing 'pygccxml' python-modul)
Python Bindningar : aktiverad 
Real Time Simulator           : aktiverad 
SQlite stats data utdata      : inte aktiverad (bibliotek 'sqlite3' hittades inte)
Tap Bridge                    : aktiverad 
Tap FdNetDevice               : aktiverad
Tester                         : aktiverad 
TrÄdning Primtiver          : aktiverad 
AnvÀnd sudo för att stÀlla in suid bit   : inte aktiverad (alternativ --enable-sudo inte valt)
XmlIo                         : aktiverad
'configure' avslutades framgÄngsrikt (6.387s)

Observera den sista delen av listan ovan. Vissa ns-3-alternativ Àr inte aktiverade som standard eller krÀver systemstöd för att fungera korrekt. Till exempel, för att aktivera XmlTo, mÄste biblioteket libxml-2.0vara nÀrvarande. Om detta bibliotek inte kunde hittas och motsvarande ns-3-funktion inte var aktiverad, kommer ett meddelande att visas. Observera ocksÄ att det finns möjlighet att anvÀnda kommandot sudo för att stÀlla in suid-bit, "installera grupp-ID vid körning", pÄ vissa program. Denna funktion Àr inte aktiverad som standard och visas dÀrför som "inte aktiverad". Slutligen, för att fÄ en lista över aktiverade alternativ, anvÀnd Waf med parametern --check-config.

LÄt oss nu gÄ tillbaka och vÀxla tillbaka till debug-byggnaden som innehÄller exempel och tester.

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

Byggsystemet Àr nu konfigurerat, och du kan kompilera debug-versioner av ns-3-program helt enkelt genom att skriva:

$ .\/waf

Även om de ovan beskrivna stegen tvingade dig att bygga delar av ns-3-systemet tvĂ„ gĂ„nger, vet du nu hur man Ă€ndrar konfigurationen och bygger optimerad kod.

För att kontrollera vilken profil som Àr aktiv för den aktuella projektkonfigurationen finns det ett kommando:

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

Det scenari som diskuterats ovan build.py stöder ocksÄ argumenten --enable-examples och --enable-tests, men andra alternativ Waf stöder den inte direkt. Till exempel, detta kommer inte att fungera:

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

reaktionen kommer att vara:

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

Det bör noteras att specialoperatorn - - kan anvĂ€ndas för att skicka ytterligare parametrar genom waf, sĂ„ istĂ€llet för ovanstĂ„ende kommer följande kommando att fungera:

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

eftersom det genererar huvudkommandot .\/waf configure —disable-python. HĂ€r Ă€r nĂ„gra ytterligare inledande rĂ„d om Waf.

Felhantering vid kompilering

ns-3-utgÄvor har testats pÄ de senaste tillgÀngliga C++-kompilatorerna vid tidpunkten för utgivning pÄ vanliga Linux- och MacOS-distributioner. Med tiden slÀpps nya distributioner med nya kompilatorer, och dessa nyare kompilatorer Àr vanligtvis mer nogrÀknade nÀr det kommer till varningar. ns-3 konfigurerar sin byggprocess för att behandla alla varningar som fel, sÄ ibland, om du anvÀnder en Àldre version pÄ ett nyare system, kan en kompilatorvarning stoppa bygget.

Till exempel fanns tidigare ns-3.28 tillgÀnglig för Fedora 28, som inkluderade en ny huvudversion. gcc (gcc-8). Att bygga ns-3.28 eller tidigare versioner under Fedora 28, med Gtk2+ installerat, kan leda till följande fel:

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

I utgÄvor frÄn och med ns-3.28.1 Waf finns det ett alternativ för att lösa dessa problem. Det inaktiverar installationen av flaggan "-Werror" i g++ och clang++. Det hÀr alternativet "--disable-werror" ska anvÀndas under konfigurationen:

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

Att konfigurera eller bygga

Vissa kommandon Waf Àr meningsfulla endast under konfigurationsfasen, medan andra fungerar bara under byggfasen. Till exempel, om du vill anvÀnda ns-3:s emuleringsfunktioner, kan du aktivera bitinstÀllningen suid genom att anvÀnda sudo, som beskrivits ovan. Detta kommer att ogiltigförklara kommandon frÄn konfigurationssteget, och sÄ kan du Àndra konfigurationen med följande kommando, som ocksÄ inkluderar exempel och tester.

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

Om du gör detta, Waf kommer att köra sudo, för att Àndra program för att skapa emuleringssockel för att köras med rÀttigheter. root. I Waf Det finns mÄnga andra alternativ för konfigurations- och byggstegen. För att utforska alternativen, skriv:

$ ./waf --help

I nÀsta avsnitt kommer vi att anvÀnda nÄgra alternativ relaterade till testning.

Byggprofiler

Vi har redan sett hur man kan anpassa Waf för byggen. debug och optimized:

$ ./waf --build-profile=debug

Det finns ocksÄ en mellanprofil för byggen, release. Alternativet -d Àr en synonym för --build-profile. Byggprofilen styr anvÀndningen av loggning, assertions och kompilatorns optimeringsnycklar:

Handbok för nÀtverkssimulatorn ns-3. Kapitel 3

Som man kan se Àr loggning och pÄstÄenden endast tillgÀngliga i debugbyggnader. Den rekommenderade metoden Àr att utveckla ditt skript i debuglÀge och sedan utföra flera körningar (för statistik eller parameterÀndringar) i den optimerade byggprofilen.

Om du har kod som endast ska köras i vissa byggprofiler, anvÀnd makrot Code Wrapper Macro:

NS_BUILD_DEBUG (std::cout << "En del av en utmatningsrad..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "FĂ€rdig: " << timer << std::endl;)

Som standard, Waf placerar byggartefakter i byggmappen. Du kan ange en annan utmatningsmapp med hjĂ€lp av alternativet - -out, till exempel:

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

Genom att kombinera detta med byggprofiler kan du enkelt vÀxla mellan olika kompilationsalternativ:

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

vilket gör att du kan arbeta med flera byggnader utan att behöva skriva om den senaste byggningen varje gÄng. NÀr du vÀxlar till en annan profil, Waf kommer den endast att kompilera den, utan att Äterkompilera allt.

NÀr du pÄ detta sÀtt vÀxlar byggprofiler, krÀvs det att du alltid anger samma konfigurationsparametrar. Du kan undvika misstag genom att definiera flera miljövariabler:

$ 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

Kompilatorer och flaggor

I ovanstÄende exempel Waf för att bygga ns-3 anvÀnds C++-kompilatorn frÄn GCC ( g++). Men det gÄr att Àndra den anvÀnda Waf C++-kompilatorn genom att definiera miljövariabeln CXX. Till exempel, för att anvÀnda C++-kompilatorn Clang, clang++,

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

PÄ liknande sÀtt kan du konfigurera Waf för att anvÀnda distribuerad kompilering med hjÀlp av distcc:

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

Mer information om distcc och distribuerad kompilering finns pÄ projektets sida under avsnittet "Dokumentation". För att lÀgga till kompilatorflaggor vid konfiguration av ns-3, anvÀnd miljövariabeln CXXFLAGS_EXTRA.

Installation

Waf kan anvÀndas för att installera bibliotek pÄ olika stÀllen i systemet. Som standard ligger de insamlade biblioteken och körbara filer i katalogen build, och eftersom Waf kÀnner till platsen för dessa bibliotek och körbara filer, finns det inget behov av att installera biblioteken nÄgon annanstans.

Om anvĂ€ndarna föredrar att installera utanför byggkatalogen kan de köra kommandot .\/waf install. Som standard Ă€r prefixet för installationen — /usr/local, dĂ€rför .\/waf install kommer att installera program i /usr/local/bin, bibliotek i /usr/local/lib och header-filer i /usr/local/include. SuperanvĂ€ndarrĂ€ttigheter behövs vanligtvis för att installera med standardprefix, sĂ„ det vanliga kommandot blir sudo .\/waf install. NĂ€r Waf körs kommer det först att föredra att anvĂ€nda gemensamma bibliotek i byggkatalogen, och sedan leta efter bibliotek i bibliotekssökvĂ€gen som Ă€r instĂ€lld i den lokala miljön. SĂ„ nĂ€r bibliotek installeras i systemet Ă€r det bra praxis att kontrollera att de rĂ€tta biblioteken anvĂ€nds. AnvĂ€ndarna kan vĂ€lja att installera med ett annat prefix genom att skicka alternativet --prefix, till exempel:

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

Om anvÀndaren senare, efter byggandet, kör installationskommandot .\/waf, kommer prefixet att anvÀndas /opt/local.

Team .\/waf clean bör anvÀndas innan projektet omkonfigureras om installationen skall göras Waf med ett annat prefix.

SĂ„ledes finns det inget behov av att kalla pĂ„ ns‑3 .\/waf install. För de flesta anvĂ€ndare kommer det hĂ€r kommandot att vara onödigt, eftersom Waf kommer att plocka de aktuella biblioteken frĂ„n byggkatalogen, men vissa anvĂ€ndare kan tycka att det Ă€r anvĂ€ndbart om deras verksamhet involverar arbete med program utanför ns‑3 katalogen.

Waf Àr enhetlig

I toppnivĂ„n av ns‑3:s kĂ€llkodstrĂ€d finns det bara ett Waf-skript. NĂ€r du har börjat arbeta kommer du att spendera mycket tid i katalogen scratch\/ eller djupare, isrc\/... och du kommer att behöva köra Waf. Du kan helt enkelt komma ihĂ„g var du Ă€r och köra Waf pĂ„ följande sĂ€tt:

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

men det kommer att vara tröttsamt och utsatt för fel, sĂ„ det finns bĂ€ttre lösningar. Ett vanligt sĂ€tt Ă€r att anvĂ€nda en textredigerare, som emacs eller vim, dĂ€r tvĂ„ terminalsessioner öppnas, en för att bygga ns‑3 och den andra för att redigera kĂ€llkoden. Om du bara har tarball, sĂ„ kan en miljövariabel hjĂ€lpa:

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

$ cd scratch 
$ waff build

I modulens katalog kan det se frestande ut att lÀgga till ett trivialt waf-skript som exempel exec ..\/..\/waf. VÀnligen gör inte detta. Det förvirrar nybörjare och kan leda till svÄrupptÀckta byggfel om det görs dÄligt. Lösningarna som visas ovan Àr vÀgen att följa.

3.5 Testa ns-3

Du kan köra modultester av ns‑3-distributionen genom att köra skriptet .\/test.py:

$ .\/test.py

Dessa tester körs parallellt med Waf. I slutÀndan ska du se ett meddelande om att

92 av 92 tester passerade (92 passerade, 0 misslyckades, 0 kraschade, 0 valgrind-fel)

Detta Àr ett viktigt meddelande för att identifiera fel, kraschningar eller valgrind-fel, och indikerar problem med koden eller inkompatibilitet mellan verktyg och kod.

Du kommer ocksÄ att se slutlig utdata frÄn Waf och testaren som kör varje test, vilket kommer att se ut ungefÀr sÄ hÀr:

Waf: GÄr in i katalogen `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build' 
Waf: LĂ€mnar katalogen `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build' 
'built' avslutad framgÄngsrikt (1.799s) 

Byggda moduler:
aodv           applikationer          bro
click          config-store          kÀrna
csma           csma-layout           dsdv
emu            energi                flow-monitor
internet       lte                   mesh
mobility       mpi                   netanim
nÀtverk        nix-vector-routing    ns3tcp
ns3wifi        olsr                  openflow
punkt-till-punkt punkt-till-punkt-layout propagation
spektrum       stats                 tap-bridge
mall          test                  verktyg
topologi-lÀsa  uan                   virtuell-nÀtdel
visualizer     wifi                  wimax

PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram 

...

PASS: TestSuite objekt
PASS: TestSuite slump-numer-generatorer
92 av 92 tester passerade (92 passerade, 0 misslyckades, 0 kraschade, 0 valgrind-fel)

Detta kommando körs vanligtvis av anvĂ€ndare för att snabbt kontrollera att ns‑3-distributionens byggnad Ă€r korrekt. (Observera att ordningen pĂ„ raderna "PASS: ..." kan variera, detta Ă€r normalt. Viktigt Ă€r att den slutgiltiga raden i slutet av rapporten visar att alla kontroller passerade; ingen test misslyckades eller kraschade.) Och Waf, och test.py kommer att parallellisera arbetet över de tillgĂ€ngliga kĂ€rnorna i maskinens processor.

3.6 Köra skript

Vanligtvis kör vi skript under kontroll av Waf. Detta gör att byggsystemet kan garantera att vĂ€gar till gemensamma bibliotek Ă€r korrekt instĂ€llda och att biblioteken finns tillgĂ€ngliga under körning. För att köra programmet, anvĂ€nd bara Waf med parametern - -run. Vi kommer att köra motsvarigheten till den allestĂ€des nĂ€rvarande programmet för ns‑3 hej vĂ€rlden, genom att skriva in följande:

$ .\/waf --run hello-simulator

Waf kommer först att kontrollera att programmet Àr korrekt sammanstÀllt och kommer att utföra sammanstÀllningen vid behov. Sedan Waf kommer det att köra programmet som ger följande utdata.

Hello Simulator

Grattis! Du Àr nu anvÀndare av ns-3!

Vad ska jag göra om jag inte ser resultatet?

Om du ser meddelanden Waf, som indikerar att sammanstĂ€llningen lyckades, men du inte ser utdata «Hello Simulator», finns det en möjlighet att du i avsnittet [SammanstĂ€llning-s-Waf] har bytt din sammanstĂ€llningslĂ€ge till optimized, men missade att Ă„tergĂ„ till lĂ€get debug. All utdata frĂ„n konsolen som anvĂ€nds i denna handledning anvĂ€nder en speciell komponent ns-3 som loggar och anvĂ€nds för att skriva ut anvĂ€ndarmeddelanden i konsolen. Utdata frĂ„n denna komponent Ă€r automatiskt avstĂ€ngt nĂ€r den optimerade koden kompileras — den Ă€r "optimerad". Om du inte ser utdata "Hello Simulator", skriv följande:

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

för att konfigurera Waf för en sammanstÀllning av debugversioner av ns-3-program som inkluderar exempel och tester. Du bör sedan Äterkompilera den aktuella debugversionen av koden genom att skriva

$ .\/waf

Nu, om du kör programmet hello-simulator, bör du se det förvÀntade resultatet.

3.6.1 Kommandoradsargument

För att skicka kommandoradsargument till ns-3-programmet, anvÀnd följande mall:

$ .\/waf --run  --command-template="%s "

ErsĂ€tt med namnet pĂ„ ditt program och med argumenten. Argumentet - -command-template för Waf Ă€r i sjĂ€lva verket ett recept för att bygga den faktiska kommandoraden Waf som anvĂ€nds för att köra programmet. Waf kontrollerar att sammanstĂ€llningen Ă€r klar, stĂ€ller in sökvĂ€gar till det gemensamma biblioteket, och sedan, med hjĂ€lp av den angivna kommandoradsmallen och placerar programmets namn istĂ€llet för platsinnehavaren %s, anropar det körbar fil. Om du tycker att detta syntax verkar komplicerat, finns det ett enklare alternativ som inkluderar ns-3-programmet och dess argument inneslutna i enkla citattecken:

$ .\/waf --run ' --arg1=value1 --arg2=value2 ...'

Ett annat, sÀrskilt anvÀndbart, exempel Àr att selektivt köra testuppsÀttningar. Anta att det finns en testuppsÀttning (suite) mytest (som inte egentligen finns). Tidigare anvÀnde vi skriptet .\/test.py för att parallellt köra en hel uppsÀttning tester, vilket flera gÄnger anropar testprogrammet test-runner. Anrop test-runner direkt för att köra ett test:

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

Argumenten kommer att skickas till programmet test-runner. Eftersom mytest inte finns, kommer ett felmeddelande att genereras. För att skriva ut tillgÀngliga parametrar för test-runner, skriv:

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

3.6.2 Felsökning

För att starta ns-3 program under kontroll av ett annat verktyg, som en debugger (till exempel, gdb) eller minneskontrollverktyg (till exempel, valgrind), anvĂ€nd en liknande form - -command-template = "
". Till exempel för att starta debuggern gdb ditt ns-3-program hello-simulator med argument:

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

Observera att namnet pĂ„ ns-3-programmet följs av argumentet - -run, och kontrollverktyget (hĂ€r gdb) Ă€r den första token i argumentet - -command-template. Alternativet - -args rapporterar gdb, vilket innebĂ€r att resten av kommandoraden tillhör det "lĂ€gre" programmet. (Vissa versioner gdb förstĂ„r inte alternativet - -args. I sĂ„ fall ta bort programmets argument frĂ„n - -command-template och anvĂ€nd kommandosatsen gdb args.) Vi kan kombinera detta recept och det föregĂ„ende för att köra testet under en debugger:

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

3.6.3 Arbetskatalog

Waf mĂ„ste köras frĂ„n sin plats högst upp i ns-3-trĂ€det. Denna mapp blir arbetskatalogen dĂ€r utdatafilerna kommer att sparas. Men vad hĂ€nder om du vill spara dessa filer utanför kĂ€llkodstrĂ€det för ns-3? AnvĂ€nd argumentet - -cwd:

$ .\/waf --cwd=...

Det kan vara bekvÀmare för dig att fÄ utdatafilerna i din arbetskatalog. I sÄ fall kan en sÄdan indirekt ÄtgÀrd hjÀlpa:

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

Denna dekoration av den tidigare kommandot bevarar nuvarande arbetskatalog, gĂ„r till katalogen Waf, och instruerar Waf att Ă„terstĂ€lla arbetskatalogen till den som sparades innan programmet startades. Vi nĂ€mner kommandot - -cwd för fullstĂ€ndighetens skull, de flesta anvĂ€ndare kör helt enkelt Waf frĂ„n översta nivĂ„n och genererar dĂ€r utdatafiler.

FortsÀttning: kapitel 4

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster