ns-3 võrgusimulaatori õpetus. 3. peatükk

ns-3 võrgusimulaatori õpetus. 3. peatükk
1,2. peatükk

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: https://www.nsnam.org/wiki/Installation.

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: https://www.nsnam.org, sest seal on palju infot. Alates ns-3 uusimast versioonist (ns-3.29) on ns-3 käitamiseks vaja järgmisi tööriistu.

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 https://gitlab.com/nsnam/. Grupp nsnam koondab avatud lähtekoodiga projektis kasutatavad erinevad hoidlad.

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:

  1. ns-3.29: väljalaskele vastav moodul; see laadib alla tarballi väljalaskega sarnased komponendid;

  2. ns-3-dev: sarnane moodul, kuid kasutades arenduspuu koodi;

  3. ns-allinoon-3.29: moodul, mis sisaldab muid lisafunktsioone, nagu kliki marsruutimine ja võrgusimulatsiooni alus, Openflow for ns-3.

  4. 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:https://gitlab.com/nsnam/ns-3-dev.git.

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:https://www.nsnam.org/releases/ ja klõpsates uusima versiooni lingil. Selles näites jätkame ns-3.29-ga.

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:

ns-3 võrgusimulaatori õpetus. 3. peatükk

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

Jätkub: 4. peatükk

Allikas: www.habr.com

Lisa kommentaar