3 Alustamine
3.1 Ülevaade
3.2 Eeldused
3.2.1 ns-3 väljalase allalaadimine lähtearhiivina
3.3 Ns-3 allalaadimine Giti abil
3.3.1 Ns-3 laadimine, kasutades funktsiooni Bake
3.4 Kokkupanek ns-3
3.4.1 Ehitus koos build.py-ga
3.4.2 Bake'iga ehitamine
3.4.3 Wafiga ehitamine
3.5 ns-3 testimine
3.6 Skripti käitamine
3.6.1 Käsurea argumendid
3.6.2 Silumine
3.6.3 Töökataloog
Peatükk 3
Alustamine
See peatükk on mõeldud lugeja ettevalmistamiseks alustamiseks arvutiga, kuhu pole võib-olla kunagi ns-3 installitud. See hõlmab toetatud platvorme, eeltingimusi, ns-3 hankimist, ns-3 koostamist ning ehitamist ja lihtsate programmide käivitamist.
3.1 Ülevaade
ns-3 simulaator on üles ehitatud koostöös kasutatavate tarkvarateekide süsteemina. Koostamise ajal seotakse kasutajaprogrammide kood nende raamatukogudega. Kohandatud programmide kirjutamiseks kasutatakse C++ või Pythoni programmeerimiskeeli.
Ns-3 levitatakse lähtekoodina, mis tähendab, et sihtsüsteemil peab olema tarkvaraarenduskeskkond, et esmalt saaks ehitada teegid ja seejärel kasutajaprogramm. Põhimõtteliselt võiks ns-3 levitada konkreetse süsteemi jaoks valmis teekidena ja tulevikus võidakse neid ka sellisel viisil levitada. Kuid tänapäeval teevad paljud kasutajad oma tööd ns-3 ise redigeerides, nii et teekide koostamiseks on kasulik omada lähtekoodi. Kui kellelgi on soov operatsioonisüsteemidele valmis teekide ja pakettide loomisega tegeleda, võtke ühendust meililistiga ns-arendajad.
Järgmisena vaatleme kolme võimalust ns-3 allalaadimiseks ja ehitamiseks. Esimene on ametliku väljalase allalaadimine ja koostamine põhisaidilt. Teine on ns-3 põhiinstalli arendusversioonide koopiate valimine ja kokkupanek. Kolmas on täiendavate ehitustööriistade kasutamine, et laadida ns-3 jaoks rohkem laiendusi. Vaatame igaüks neist läbi, kuna tööriistad on veidi erinevad.
Kogenud Linuxi kasutajad võivad küsida, miks ns-3 ei pakuta paketina nagu enamik teisi paketihaldurit kasutavaid teeke? Kuigi erinevate Linuxi distributsioonide jaoks on olemas binaarpakette (nt Debian), redigeerib enamik kasutajaid teeke ja peab ise ns-3 ümber ehitama, nii et lähtekoodi olemasolu on mugav. Sel põhjusel keskendume allikast installimisele.
Enamiku rakenduste jaoks on ns-3 õigused juur pole vaja, on soovitatav kasutada privilegeerimata kasutajakontot.
3.2 Eeldused
Kogu saadaolevate ns-3 teekide komplektil on mitmeid sõltuvusi kolmandate osapoolte teekidest, kuid enamasti saab ns-3 luua ja kasutada koos mitme tavalise (sageli vaikimisi installitud) komponendi toega: C++ kompilaator, Python, lähtekoodi redaktor (näiteks tarm, emacs või särakaotus) ja kui kasutatakse arendushoidlaid, siis Giti versioonikontrollisüsteemid. Enamik esmakordseid kasutajaid ei pea muretsema, kui nende konfiguratsioonist teatatakse, et mõned ns-3 täiustatud funktsioonid puuduvad, kuid neile, kes soovivad täielikku installimist, pakub projekt viki, mis sisaldab palju kasulikke näpunäiteid ja nippe. Üks selline lehekülg on installileht, kus on installimisjuhised erinevatele süsteemidele ja mis on saadaval aadressil:
Selle viki jaotises Eeltingimused selgitatakse, milliseid pakette on vaja levinud ns-3 suvandite toetamiseks, ning sisaldab ka käske, mida kasutatakse nende installimiseks tavapärastele Linuxi või macOS-i versioonidele.
Saate kasutada seda võimalust ns-3 vikilehe või peamise veebisaidi uurimiseks:
Tööriistapakett/versioon
- C++ kompilaator
clang++ või g++ (g++ versioon 4.9 või uuem) - Python
python2 versioon >= 2.7.10 või python3 versioon >= 3.4 - Git
mis tahes uusim versioon (juurdepääs ns-3-le saidil GitLab.com) - tõrv
mis tahes uusim versioon (ns-3 väljalaske lahtipakkimiseks) - bunzip2
mis tahes uusim versioon (ns-3 versiooni lahtipakkimiseks)
Pythoni vaikeversiooni kontrollimiseks tippige python -V
. G++ versiooni kontrollimiseks tippige g++ -v
. Kui mõni tööriist puudub või on liiga vana, vaadake ns-3 wiki lehel olevat paigaldusjuhendit.
Edaspidi eeldame, et lugeja kasutab Linuxi, MacOS-i või Linuxi emulaatorit ning sellel on vähemalt ülaltoodud tööriistad.
3.2.1 ns-3 väljalase allalaadimine lähtearhiivina
See on tegevussuund uuele kasutajale, kes soovib ns-3 uusimaid väljalaseid ja paketiversioone alla laadida ja nendega katsetada. ns-3 väljaanded avaldatakse tihendatud lähtekoodiarhiividena, mida mõnikord nimetatakse tarball. tarball on spetsiaalne tarkvaraarhiivivorming, milles kombineeritakse mitu faili. Arhiiv on tavaliselt tihendatud. ns-3 alglaadimisprotsess läbi tarball on lihtne, peate lihtsalt valima väljalase, alla laadima ja lahti pakkima.
Oletame, et kasutajana soovite ehitada ns-3 kohalikku kataloogi nimega tööruum. Väljalase töökoopia saate hankida, kui sisestate Linuxi konsooli (muidugi asendades vastavad versiooninumbrid)
$ 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
Pöörake tähelepanu ülaltoodud utiliidile wget, mis on käsurea tööriist objektide Internetist allalaadimiseks. Kui te pole seda installinud, saate selleks kasutada oma brauserit.
Nende sammude järgimine viib teid kataloogi ns-allinone-3.29, kus peaksite nägema mitut faili ja kataloogi
$ 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
Nüüd olete valmis ns-3 baasjaotuse loomiseks ja võite liikuda ns-3 ehitamise jaotisesse.
3.3 Ns-3 allalaadimine Giti abil
Ns-3 kood on saadaval Git-hoidlates saidil GitLab.com aadressil
Lihtsaim viis Giti hoidlate kasutamise alustamiseks on keskkonda hargida või kloonida ns-3-allinoon. See on skriptide komplekt, mis haldab kõige sagedamini kasutatavate ns-3 alamsüsteemide laadimist ja kokkupanekut. Kui olete Gitis uus, võivad terminid "kahvel" ja "kloon" olla teile võõrad; kui jah, siis soovitame lihtsalt kloonida (teha oma koopia) GitLab.com-is asuv hoidla järgmiselt:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone
Selles etapis teie kataloogi vaade ns-3-allinoon veidi erinev ülalkirjeldatud väljalaskearhiivi kataloogist. See peaks välja nägema umbes selline:
$ ls
build.py constants.py download.py README util.py
Pange tähele, et on olemas skript download.py, mis ekstraheerib lisaks ns-3 ja sellega kaasneva lähtekoodi. Siin on teil valida: laadige alla uusim ns-3 arenduse hetktõmmis:
$ python download.py
või eelistage lipu abil ns-3 vabastamist -n
väljalaskenumbri märkimiseks:
$ python download.py -n ns-3.29
Pärast seda sammu kataloogi ns-3-allinoon alla laaditakse täiendavad hoidlad ns-3, bake, pybindgen и netanim.
Märkus
Puhta Ubuntu16.04-ga masinas pidin käsu muutma selliseks: $ sudo python3 download.py -n ns-3.29
(edaspidi tõlkija märkused).
3.3.1 Ns-3 laadimine, kasutades funktsiooni Bake
Ülaltoodud kaks meetodit (allikaarhiiv või hoidla ns-3-allinoon Giti kaudu) on kasulikud lihtsaima ns-3 installimiseks koos mitme lisandmooduliga (pybindgen Pythoni sidemete genereerimiseks ja netanim võrguanimatsiooni jaoks). Kutsutakse välja kolmas ns-3-allinone'i vaikimisi pakutav hoidla bake.
Küpseta on tööriist tarkvara koordineeritud ehitamiseks mitmest hoidlast, mis on välja töötatud ns-3 projekti jaoks. Küpseta saab kasutada ns-3 arendusversioonide hankimiseks, samuti ns-3 distributsiooni baasversiooni laienduste allalaadimiseks ja ehitamiseks, näiteks keskkonnas. Koodi otsene täitmine, CradleNetworki simulatsioonihäll, võimalus luua uusi Pythoni sidumisi ja erinevaid ns-3 “äppe”.
Märkus
CradleNetwork Simulation Cradle on raamistik, mis võimaldab teil võrgusimulaatoris kasutada tõelisi TCP/IP-võrgu virnu.
Kui eeldate, et teie ns-3 installil on täiustatud või lisafunktsioonid, võite järgida seda installiteed.
Viimastes ns-3 väljaannetes Küpseta lisati tõrva vabastamisele. Väljalase sisaldab konfiguratsioonifaili, mis võimaldab teil alla laadida väljalaske hetkel kehtivad tarkvaraversioonid. See on näiteks versioon Küpseta, mida levitatakse väljalaskega ns-3.29, saab kasutada selle ns-3 või varasema versiooni komponentide toomiseks, kuid seda ei saa kasutada komponentide toomiseks hilisemate versioonide jaoks (kui paketi kirjeldusfail bakeconf.xml pole värskendatud).
Samuti saate hankida uusima eksemplari bakesisestades oma Linuxi konsooli järgmise käsu (eeldusel, et Git on installitud):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.git
Kui käivitate käsu git, peaksite nägema midagi sellist:
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.
Pärast käsu täitmist kloonida sul peaks olema kataloog nimega bake, mille sisu peaks välja nägema umbes selline:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO
Pange tähele, et olete laadinud mitu Pythoni skripti, mille nimi on Pythoni moodul bake ja XML-konfiguratsioonifail. Järgmine samm on kasutada neid skripte enda valitud ns-3 distributsiooni allalaadimiseks ja koostamiseks. Saadaval on mitu kohandamise sihtmärki:
-
ns-3.29: väljalaskele vastav moodul; see laadib alla tarballi väljalaskega sarnased komponendid;
-
ns-3-dev: sarnane moodul, kuid kasutades arenduspuu koodi;
-
ns-allinoon-3.29: moodul, mis sisaldab muid lisafunktsioone, nagu kliki marsruutimine ja võrgusimulatsiooni alus, Openflow for ns-3.
-
ns-3-allinoon: sarnane mooduli väljalaskeversiooniga kõik ühes, vaid arenduskoodi jaoks.
Märkus
Click — modulaarne tarkvaraarhitektuur ruuterite loomiseks.
Openflow on ruuterite ja kommutaatorite kaudu andmevõrgu kaudu edastatavate andmete töötlemise protsessi haldamise protokoll, rakendades tarkvaraga määratletud võrgutehnoloogiat.
Praeguse arenduse hetktõmmise (väljastamata) ns-3 leiate aadressilt:
Arendajad püüavad hoida neid hoidlaid järjepidevas töökorras, kuid need asuvad arendusalal ja sisaldavad avaldamata koodi, nii et kui te ei plaani uusi funktsioone kasutada, valige ametlik väljalase.
Koodi uusima versiooni leiate hoidlate loendit sirvides või ns-3 väljaannete veebilehelt:
Nüüd kasutame vajalike ns-3 komponentide hankimiseks tööriista Küpseta. Ütleme paar sissejuhatavat sõna teose kohta Küpseta.
Bake töötab pakettide allikate laadimisega kataloogi allikas ja teekide installimine ehituskataloogi. Küpseta saab käivitada kahendkoodile viidates, kuid kui soovite käivitada Küpseta mitte kataloogist, kuhu see alla laaditi, on soovitatav lisada tee bake teie teele (PATH keskkonnamuutuja), näiteks järgmiselt (näide Linuxi bash-shelli jaoks). Minge kataloogi "bake" ja määrake järgmised keskkonnamuutujad:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib
See asetab programmi bake.py shelliteele ja võimaldab teistel programmidel leida selle loodud käivitatavad failid ja teegid bake. Mõnel kasutusjuhtumil bake, ei ole ülalkirjeldatud PATH ja PYTHONPATH seadistus nõutav, kuid ns-3-allinone'i täielik ehitamine (koos lisapakettidega) nõuab seda tavaliselt.
Minge oma töökataloogi ja sisestage konsooli järgmine teave:
$ ./bake.py configure -e ns-3.29
Järgmisena küsime Küpseta kontrollige, kas meil on erinevate komponentide laadimiseks piisavalt tööriistu. Helista:
$ ./bake.py check
Peaksite nägema midagi sellist:
> 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 ...
Eelkõige on selles etapis olulised üleslaadimistööriistad, nagu Mercurial, CVS, Git ja Bazaar, kuna need võimaldavad meil koodi hankida. Siinkohal installige puuduvad tööriistad oma süsteemile tavapärasel viisil (kui teate, kuidas) või võtke abi saamiseks ühendust oma süsteemiadministraatoriga.
Järgmisena proovige tarkvara alla laadida:
$ ./bake.py download
tulemus peaks olema midagi sellist:
>> 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
See tähendab, et alla on laaditud kolm allikat. Nüüd minge lähtekataloogi ja tippige ls; Peaksite nägema:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgen
Nüüd olete valmis ns-3 distributsiooni üles ehitama.
3.4 Kokkupanek ns-3
Nagu ns-3 allalaadimisel, on ns-3 loomiseks mitu võimalust. Peamine asi, mida tahame rõhutada, on see, et ns-3 on ehitatud kasutades ehitustööriista nimega Wafallpool kirjeldatud. Enamik kasutajaid töötab Waf, kuid on mõned käepärased skriptid, mis aitavad teil alustada või korraldada keerukamaid ehitusi. Nii et palun, enne kui selle kohta loete Waf, viska pilk peale build.py ja kokkupanek koos bake.
3.4.1 Ehitus koos build.py-ga
Hoiatus! See ehitusetapp on saadaval ainult ülalkirjeldatud viisil saadud lähtearhiivi versioonist; ja seda ei laadita alla git või bake kaudu.
Väljalaskearhiiviga töötades tarballSisse ns-3-allinoon Seal on mugav skript, mis muudab komponentide kokkupaneku lihtsamaks. Seda nimetatakse build.pyks. See programm seadistab teie jaoks projekti kõige kasulikumal viisil. Pange tähele, et täpsem seadistamine ja töö ns-3-ga hõlmab tavaliselt ns-3 enda ehitussüsteemi Waf kasutamist, mida tutvustatakse hiljem selles õpetuses.
Kui laadisite alla kasutades tarball, seejärel oma kataloogis ~/tööruum kataloog, mille nimi on midagi sarnast ns-allinoon-3.29. Sisestage järgmised:
$ ./build.py --enable-examples --enable-tests
Helistades build.py Kasutasime selles õpetuses kasutatud näidete ja testide koostamiseks käsurea argumente, mida ns-3 vaikimisi ei ehitata. Vaikimisi koostab programm ka kõik saadaolevad moodulid. Seejärel saate soovi korral ehitada ns-3 ilma näidete ja testideta või välistada moodulid, mida teie tööks ei vajata.
Näete palju kompilaatori väljundteateid, mida skript kuvab, kui see koostab teie laaditud erinevaid osi. Kõigepealt proovib skript luua animaatorit netanim, seejärel sidumisgeneraator pybindgen ja lõpuks ns-3. Kui protsess on lõppenud, peaksite nägema järgmist.
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
Kirje kolmel viimasel real näeme teadet moodulite kohta, mida ei ehitatud:
Modules not built (see ns-3 tutorial for explanation):
brite click
See tähendab lihtsalt, et mõned välistest teegidest sõltuvad ns-3 moodulid ei pruugi olla ehitatud või et neid ei pea selle konfiguratsiooni jaoks ehitama. See ei tähenda, et simulaator pole kokku pandud või et kokkupandud moodulid ei tööta korralikult.
3.4.2 Bake'iga ehitamine
Kui kasutasite projektihoidlatest lähtekoodi hankimiseks ülaltoodud käsku bake, saate jätkata selle kasutamist ns-3 ehitamiseks. Helista:
$ ./bake.py build
ja sa peaksid nägema midagi sellist:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OK
Tööriistavihje: Samuti saate teha nii allalaadimise kui ka koostamise etapid korraga, kutsudes esile "bake.py deploy".
Kõigi komponentide kokkupanek võib ebaõnnestuda, kuid kokkupanek jätkub, kui komponenti pole vaja. Näiteks hiljutine kaasaskantavuse probleem oli see castxml saab kokku panna tööriistaga bake mitte kõigil platvormidel. Sel juhul kuvatakse selline teade:
>> 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.
Kuid castxml on vajalik ainult siis, kui soovite luua uuendatud Pythoni sidemeid. Enamiku kasutajate jaoks pole seda vaja (vähemalt kuni ns-3 muutmiseni), seega võib selliseid hoiatusi praegu ohutult ignoreerida.
Kui see ebaõnnestub, annab järgmine käsk teile vihje puuduvate sõltuvuste kohta:
$ ./bake.py show
Loetletakse nende pakettide erinevad sõltuvused, mida proovite luua.
3.4.3 Wafiga ehitamine
Seni kasutasime ns-3 ehitamise alustamiseks kas skripti build.pyvõi tööriist bake. Need tööriistad on kasulikud ns-3 ehitamiseks ja teekide haldamiseks. Tegelikult käitavad nad ehitamiseks ehitustööriista Waf kataloogist ns-3. Waf installitud ns-3 lähtekoodiga. Enamik kasutajaid läheb ns-3 konfigureerimiseks ja kokkupanemiseks kiiresti otsekasutusele Waf. Seega jätkamiseks minge algselt loodud ns-3 kataloogi.
See ei ole praegu rangelt nõutav, kuid kasulik on veidi tagasi minna ja vaadata, kuidas projekti konfiguratsioonis muudatusi teha. Tõenäoliselt kõige kasulikum konfiguratsioonimuudatus, mida saate teha, on luua koodi optimeeritud versioon. Vaikimisi olete oma projekti konfigureerinud silumisversiooni loomiseks. Vaatame optimeeritud ehituse loomiseks projekti. Et selgitada Wafile, et see peaks tegema optimeeritud järge, mis sisaldavad näiteid ja teste, peate käivitama järgmised käsud:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
See käivitub Waf väljaspool kohalikku kataloogi (teie mugavuse huvides). Esimene käsk puhastab eelmisest järgust, tavaliselt pole see tingimata vajalik, kuid see on hea tava (vt ka altpoolt ehitusprofiile); see kustutab kataloogis asuvad varem loodud teegid ja objektifailid ehitada/. Kui projekt on ümber konfigureeritud ja ehitussüsteem kontrollib erinevaid sõltuvusi, peaksite nägema järgmisega sarnast väljundit:
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)
Pange tähele ülaltoodud loendi viimast osa. Mõned ns-3 valikud ei ole vaikimisi lubatud või vajavad nõuetekohaseks toimimiseks süsteemituge. Näiteks XmlTo lubamiseks peab teek süsteemis olemas olema libxml-2.0. Kui seda teeki ei leitud ja vastav ns-3 funktsioon ei olnud lubatud, kuvatakse teade. Pange tähele ka seda, et käsku on võimalik kasutada sudo et määrata teatud programmide jaoks suid bit "set group ID at runtime". See ei ole vaikimisi lubatud ja seetõttu kuvatakse see funktsioon kui "pole lubatud". Lõpuks kasutage lubatud valikute loendi vaatamiseks Waf parameetriga --check-config
.
Nüüd läheme tagasi ja lülitume tagasi näiteid ja teste sisaldavale silumisjärgule.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
Koostamissüsteem on nüüd seadistatud ja saate luua ns-3 programmide silumisversioone, lihtsalt tippides:
$ ./waf
Ülaltoodud sammud võisid sundida teid osa ns-3 süsteemist kaks korda koostama, kuid nüüd teate, kuidas konfiguratsiooni muuta ja optimeeritud koodi koostada.
Et kontrollida, milline profiil on antud projekti konfiguratsiooni jaoks aktiivne, on käsk:
$ ./waf --check-profile
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debug
Ülaltoodud stsenaarium build.py toetab ka argumente --enable-examples
и --enable-tests
, aga muud võimalused Waf see ei toeta otseselt. Näiteks see ei tööta:
$ ./build.py --disable-python
reaktsioon saab olema selline:
build.py: error: no such option: --disable-python
Spetsiaalset operaatorit - - saab aga kasutada täiendavate parameetrite edastamiseks WAFnii et ülaltoodu asemel töötab järgmine käsk:
$ ./build.py -- --disable-python
sest see genereerib põhikäsu ./waf configure --disable-python. Siin on veel mõned sissejuhatavad näpunäited Waf.
Ehitusvigade käsitlemine
ns-3 väljaandeid testitakse tavalistes Linuxi ja MacOS-i distributsioonides uusimates C++ kompilaatorites, mis on avaldamise ajal saadaval. Kuid aja jooksul ilmuvad uued distributsioonid koos uute kompilaatoritega ja need uuemad kompilaatorid kipuvad hoiatuste osas olema pedantsemad. ns-3 konfigureerib oma järgu käsitlema kõiki hoiatusi vigadena, nii et mõnikord võib kompilaatori hoiatus uuemas süsteemis vanema versiooni käivitamisel peatada.
Näiteks oli varem Fedora 3.28 jaoks välja antud ns-28, mis sisaldas uut suuremat versiooni gcc (gcc-8). Väljalaske ns-3.28 või varasemate versioonide loomisel Fedora 28 all, kui Gtk2+ on installitud, ilmneb järgmine tõrge:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);
Versioonides alates ns-3.28.1, in Waf nende probleemide lahendamiseks on saadaval valik. See keelab g++ ja clang++ lipu "-Werror" seadmise. See on suvand "--disable-werror" ja seda tuleb konfigureerimisel rakendada:
$ ./waf configure --disable-werror --enable-examples --enable-tests
Seadistage või monteerige
Mõned käsud Waf omavad tähendust ainult konfiguratsioonifaasis ja mõned kehtivad ainult koostamisetapis. Näiteks kui soovite kasutada ns-3 emulatsioonifunktsioone, saate lubada bitisätte suid kasutades sudo, nagu eespool kirjeldatud. See alistab konfiguratsiooni sammude käsud ja seega saate konfiguratsiooni muuta järgmise käsuga, mis sisaldab ka näiteid ja teste.
$ ./waf configure --enable-sudo --enable-examples --enable-tests
Kui teete seda Waf käivitatakse sudoemulatsioonikoodi pesa loomise programmide muutmiseks lubadega töötamiseks juur. Sisse Waf Seadistamise ja ehitamise etappide jaoks on saadaval palju muid võimalusi. Oma valikute uurimiseks sisestage:
$ ./waf --help
Järgmises jaotises kasutame mõningaid testimisega seotud valikuid.
Montaažiprofiilid
Oleme juba näinud, kuidas saate konfigureerida Waf koostude jaoks siluda и optimeeritud:
$ ./waf --build-profile=debug
Olemas on ka vahepealne montaažiprofiil, vabastama. Võimalus -d
on sünonüüm --build-profile
. Ehitusprofiil juhib logimise, väidete ja kompilaatori optimeerimise lülitite kasutamist:
Nagu näete, on logimine ja väited saadaval ainult silumisjärgudes. Soovitatav on arendada skripti silumisrežiimis, seejärel teha optimeeritud ehitusprofiilis korduvaid käitusi (statistika või parameetrite muutmiseks).
Kui teil on kood, mis peaks töötama ainult teatud ehitusprofiilides, kasutage koodimähise makrot:
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;)
Vaikimisi, Waf kohad ehituse artefakte ehituskataloogis. Suvandi abil saate määrata erineva väljundkataloogi - -out
, näiteks:
$ ./waf configure --out=my-build-dir
Kombineerides selle koostamise profiilidega, saate hõlpsalt lülituda erinevate kompileerimisvalikute vahel:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...
See võimaldab teil töötada mitme koostuga, ilma et peaksite iga kord uusimat koostu ümber kirjutama. Kui lülitute teisele profiilile, Waf kompileerib ainult selle, ilma kõike täielikult ümber kompileerimata.
Kui vahetate ehitusprofiile sel viisil, peate olema ettevaatlik, et anda iga kord samad konfiguratsioonisuvandid. Mitme keskkonnamuutuja määratlemine aitab teil vigu vältida:
$ 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
Koostajad ja lipud
Ülaltoodud näidetes Waf ns-3 ehitamiseks kasutab C++ kompilaatorit GCC ( g ++). Siiski saate kasutatavat muuta Waf C++ kompilaator, määratledes keskkonnamuutuja CXX. Näiteks C++ kompilaatori kasutamiseks Clang, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build
Samamoodi saate seadistada Waf kasutada hajutatud kompileerimist kasutades distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf build
Lisateavet distcc ja hajutatud kompileerimise kohta leiate projekti lehelt jaotisest Dokumentatsioon. Kompilaatori lippude lisamiseks ns-3 konfigureerimisel kasutage keskkonnamuutujat CXXFLAGS_EXTRA.
Paigaldamine
Waf saab kasutada teekide installimiseks süsteemi erinevatesse kohtadesse. Vaikimisi asuvad kompileeritud teegid ja käivitatavad failid kataloogis ehitama, ja kuna Waf teab nende teekide ja käivitatavate failide asukohta, ei ole vaja teeke mujale installida.
Kui kasutajad eelistavad installida väljaspool ehituskataloogi, saavad nad käsu käivitada ./waf install. Installimise vaikeprefiks on / usr / localNii ./waf install installib programmid sisse / usr / local / bin, raamatukogud sisse / usr / local / lib ja päisefailid sisse /usr/local/include. Superkasutaja õigused tuleb tavaliselt määrata vaikeprefiksiga, nii et tüüpiline käsk oleks sudo ./waf install. Käivitamisel valib Waf esmalt ehituskataloogi jagatud teekide kasutamise ja seejärel otsib teeke kohalikus keskkonnas konfigureeritud teekide kaudu. Seega on teekide süsteemi installimisel hea tava kontrollida, kas kasutatakse õigeid teeke. Kasutajad saavad valida, kas installida teise eesliitega, jättes valiku konfigureerimise ajal edasi --prefix
, näiteks:
./waf configure --prefix=/opt/local
Kui hiljem, pärast ehitamist, sisestab kasutaja installikäsu ./waf
, kasutatakse eesliidet /opt/local.
Meeskond ./waf clean
tuleb kasutada enne projekti ümberkonfigureerimist, kui install kasutab Waf erineva eesliite all.
Seega pole ns-3 kasutamiseks vaja helistada ./waf install
. Enamik kasutajaid ei vaja seda käsku, kuna Waf korjab praegused teegid ehituskataloogist, kuid mõnele kasutajale võib see kasulikuks osutuda, kui nende tegevus hõlmab töötamist programmidega väljaspool ns-3 kataloogi.
Waf singel
Ns-3 lähtepuu ülemisel tasemel on ainult üks Wafi skript. Kui hakkate tööle, veedate palju aega kataloogis scratch/
või sügavamalesrc/...
ja samal ajal peab jooksma Waf. Saate lihtsalt meeles pidada, kus te olete, ja joosta Waf järgmiselt:
$ ../../../waf ...
kuid see on tüütu ja veatundlik, seega on paremaid lahendusi. Üks levinud viis on kasutada tekstiredaktorit nagu emacs või tarm, milles avatakse kaks terminaliseanssi, millest ühte kasutatakse ns-3 koostamiseks ja teist lähtekoodi redigeerimiseks. Kui teil on ainult tarball, siis võib keskkonnamuutuja aidata:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff build
Mooduli kataloogis võib olla kiusatus lisada triviaalne waf-skript, näiteks exec ../../waf
. Palun ära tee seda. See tekitab algajatele segadust ja kui seda tehakse halvasti, põhjustab see raskesti tuvastatavaid ehitusvigu. Eespool näidatud lahendused on tee, mida tuleks kasutada.
3.5 ns-3 testimine
Saate käivitada ns-3 distributsiooni ühikuteste, käivitades skripti ./test.py:
$ ./test.py
Need testid viiakse läbi paralleelselt Waf. Lõpuks peaksite nägema sõnumit, mis ütleb:
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
See on oluline teade valgrindi krahhide, krahhide või tõrgete tuvastamiseks, mis viitab probleemidele koodiga või tööriistade ja koodi kokkusobimatusest.
Näete ka lõplikku väljundit Waf ja iga testi käivitav tester, mis näeb välja umbes selline:
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)
Seda käsku käitavad tavaliselt kasutajad, et kiiresti kontrollida, kas ns-3 jaotus on õigesti üles ehitatud. (Pange tähele, et ridade "PASS: ..." järjekord võib olla erinev, see on normaalne. Oluline on see, et aruande lõpus olev kokkuvõtlik rida näitab, et kõik testid läbisid; ükski test ei ebaõnnestunud ega jooksnud kokku.) Ja WafJa test.py paralleelseks töö masina saadaolevate protsessorituumade vahel.
3.6 Skripti käitamine
Tavaliselt käitame skripte kontrolli all Waf. See võimaldab ehitussüsteemil tagada, et jagatud teegi teed on õigesti seadistatud ja teegid on käitusajal saadaval. Programmi käivitamiseks kasutage lihtsalt Waf parameetriga - -run
. Käivitame üldlevinud programmi ns-3 ekvivalendi Tere maailmtippides järgmise:
$ ./waf --run hello-simulator
Waf kontrollib esmalt, et programm on õigesti üles ehitatud ja vajadusel ehitab. Siis Waf käivitab programmi, mis toodab järgmise väljundi.
Hello Simulator
Palju õnne! Olete nüüd ns-3 kasutaja!
Mida peaksin tegema, kui ma tulemusi ei näe?
Kui näete sõnumeid Wafmis näitab, et ehitamine on edukalt lõpule viidud, kuid te ei näe väljundit "Tere simulaator", siis on võimalik, et lülitasite jaotises [Build-with-Waf] oma ehitusrežiimiks optimeeritud, kuid režiimile tagasi lülitumata jäi siluda. Kõik selles õpetuses kasutatud konsooli väljundid kasutavad spetsiaalset ns-3 komponenti, mis logib ja mida kasutatakse kohandatud sõnumite konsooli printimiseks. Selle komponendi väljund lülitatakse optimeeritud koodi koostamisel automaatselt välja – see on "optimeeritud". Kui te ei näe väljundit "Tere simulaator", sisestage järgmine:
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
kohandada Waf ns-3 programmide silumisversioonide loomiseks, mis sisaldavad näiteid ja teste. Seejärel peaksite koodi praeguse silumisversiooni uuesti üles ehitama, tippides
$ ./waf
Nüüd, kui käivitate programmi tere-simulaator, peaksite nägema oodatud tulemust.
3.6.1 Käsurea argumendid
Käsurea argumentide edastamiseks ns-3 programmile kasutage järgmist mustrit:
$ ./waf --run <ns3-program> --command-template="%s <args>"
Asenda oma programmi nime ja argumentide juurde. Argument - -command-template
eest Waf on sisuliselt retsept tegeliku käsurea loomiseks Waf mida kasutatakse programmi täitmiseks. Waf kontrollib, kas ehitamine on lõpetatud, määrab jagatud teegi teed, seejärel kasutab käsureamalli ja asendab käivitatava faili kutsumiseks kohahoidja %s programmi nimega. Kui leiate, et see süntaks on keeruline, on olemas lihtsam versioon, mis hõlmab programmi ns-3 ja selle argumente, mis on ümbritsetud jutumärkidega:
$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'
Veel üks eriti kasulik näide on testkomplektide valikuline käitamine. Oletame, et on olemas testkomplekt nimega mytest (tegelikult seda pole). Eespool kasutasime mitme testi paralleelseks käitamiseks skripti ./test.py, mis kutsub korduvalt testprogrammi proovijooksja. Helistama proovijooksja otse ühe testi käivitamiseks:
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
Argumendid edastatakse programmile proovijooksja. Kuna mytest pole olemas, genereeritakse veateade. Saadaolevate testimissuvandite printimiseks sisestage:
$ ./waf --run test-runner --command-template="%s --help"
3.6.2 Silumine
ns-3 programmide käitamiseks mõne muu utiliidi, näiteks siluri all (näiteks gdb) või mälutesti tööriista (näiteks valgrind), kasutage sarnast vormi - -command-template = "…"
. Näiteks siluris käivitamiseks gdb teie programm hello-simulator ns-3 argumentidega:
$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
Pange tähele, et ns-3 programmi nimi tuleb koos argumendiga - -run
ja haldusutiliit (siin gdb) on argumendi esimene märk - -command-template
. Võimalus - -args
aruanded gdbet ülejäänud käsurida kuulub "madalama" programmi alla. (Mõned versioonid gdb ei saa variandist aru - -args
. Sel juhul eemaldage programmi argumendid - -command-template
ja kasutage käsukomplekti gdb vaidleb vastu.) Saame selle retsepti ja eelmise kombineerida, et käivitada test siluri all:
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
3.6.3 Töökataloog
Waf tuleks käivitada selle asukohast ns-3 puu tipus. Sellest kaustast saab töökataloog, kuhu väljundfailid kirjutatakse. Aga mis siis, kui soovite hoida neid faile väljaspool ns-3 lähtepuud? Kasutage argumenti - -cwd
:
$ ./waf --cwd=...
Teil võib olla mugavam hankida väljundfailid oma töökataloogi. Sel juhul võib abi olla järgmistest kaudsetest toimingutest:
$ function waff {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd - >/dev/null
}
See käsu eelmise versiooni kaunistus säilitab praeguse töökataloogi, läheb kataloogi Wafja siis juhendab Waf et muuta töökataloog tagasi praeguseks töökataloogiks, mis on salvestatud enne programmi käivitamist. Mainime meeskonda - -cwd
Täielikkuse huvides käivitab enamik kasutajaid Wafi lihtsalt tipptaseme kataloogist ja genereerib seal väljundfaile.
Allikas: www.habr.com