3 Hasteko
3.1 Ikuspegi orokorra
3.2 Aurrebaldintzak
3.2.1 ns-3 bertsioa deskargatu iturri artxibo gisa
3.3 ns-3 deskargatzea Git erabiliz
3.3.1 Bake erabiliz ns-3 kargatzea
3.4 Muntaketa ns-3
3.4.1 build.py-rekin eraikitzea
3.4.2 Bake-rekin eraikitzea
3.4.3 Waf-ekin eraiki
3.5 Proba ns-3
3.6 Gidoia exekutatzen
3.6.1 Komando-lerroko argumentuak
3.6.2 Arazketa
3.6.3 Laneko direktorioa
3 kapitulua
Hasten
Kapitulu honek irakurlea prestatu nahi du agian ns-3 inoiz instalatu ez duen ordenagailu batekin hasteko. Onartutako plataformak, aurrebaldintzak, ns-3 nola lortu, ns-3 nola eraiki eta zure eraikitze eta programa sinpleak nola probatu eta exekutatu ditu.
3.1 Ikuspegi orokorra
ns-3 simulagailua lankidetzako software liburutegien sistema gisa eraiki da. Muntatzean, erabiltzaile-programen kodea liburutegi hauekin lotzen da. C++ edo Python programazio lengoaiak programa pertsonalizatuak idazteko erabiltzen dira.
Ns-3 iturburu-kode gisa banatzen da, hau da, xede-sistemak software garapen-ingurune bat izan behar du lehenik liburutegiak eraikitzeko eta ondoren erabiltzailearen programa eraikitzeko. Printzipioz, ns-3 sistema zehatz baterako prest egindako liburutegi gisa banatu liteke, eta etorkizunean horrela banatu daitezke. Baina gaur egun erabiltzaile askok ns-3 bera editatuz egiten dute lana, beraz, erabilgarria da iturburu-kodea edukitzea liburutegiak eraikitzeko. Norbaitek sistema eragileetarako prest dauden liburutegiak eta paketeak sortzeko lana bere gain hartu nahi badu, jarri harremanetan posta-zerrendara. ns-garatzaileak.
Ondoren, ns-3 deskargatzeko eta eraikitzeko hiru modu aztertuko ditugu. Lehenengoa oharra ofiziala gune nagusitik deskargatu eta eraikitzea da. Bigarrena, oinarrizko ns-3 instalazioaren garapen bertsioen kopiak hautatzea eta muntatzea da. Hirugarrena ns-3rako luzapen gehiago kargatzeko eraikuntza-tresna osagarriak erabiltzea da. Bakoitzak aztertuko ditugu tresnak zertxobait desberdinak direlako.
Linux-eko erabiltzaile esperientziadunek galdetu dezakete zergatik ns-3 ez den pakete gisa eskaintzen pakete-kudeatzailea erabiltzen duten beste liburutegi gehienak bezala? Linux banaketa ezberdinetarako (adibidez, Debian) pakete bitarrak badaude ere, erabiltzaile gehienek liburutegiak editatzen eta ns-3 beraiek berreraiki behar izaten dute, beraz, iturburu-kodea eskura edukitzea erabilgarria da. Hori dela eta, iturritik instalatzen zentratuko gara.
Aplikazio gehienetarako ns-3 eskubideetarako root ez dira beharrezkoak, pribilegiorik gabeko erabiltzaile-kontu bat erabiltzea gomendatzen da.
3.2 Aurrebaldintzak
Eskuragarri dauden ns-3 liburutegien multzo osoak menpekotasun batzuk ditu hirugarrenen liburutegiekiko, baina gehienetan ns-3 osagai arrunt (sarritan lehenespenez instalatuta) laguntzarekin eraiki eta erabil daiteke: C++ konpilatzailea, Python, iturburu-kode editorea (adibidez, vim, emacs edo Eclipse) eta, garapen-biltegiak erabiltzen badira, Git bertsioak kontrolatzeko sistemak. Lehen aldiz erabiltzaile gehienek ez dute kezkatu beharko euren konfigurazioak ns-3 funtzio aurreratu batzuk falta direla jakinarazten badu, baina instalazio osoa nahi dutenentzat, proiektuak aholku eta trikimailu erabilgarriak dituen orrialdeak biltzen dituen wiki bat eskaintzen du. Horrelako orrialde bat Instalazio orria da, hainbat sistemaren instalaziorako argibideekin, hemen eskuragarri:
Wiki honetako Aurrebaldintzak atalean ns-3 aukera arruntak onartzeko beharrezkoak diren paketeak azaltzen dira eta Linux edo macOSen ohiko zaporeetan instalatzeko erabiltzen diren komandoak ere ematen ditu.
Aukera hau aprobetxa dezakezu ns-3 wiki orria edo webgune nagusia arakatzeko:
Tresna paketea/bertsioa
- C++ konpilatzailea
clang++ edo g++ (g++ 4.9 bertsioa edo berriagoa) - Python
python2 bertsioa >= 2.7.10 edo python3 bertsioa >=3.4 - Git
edozein azken bertsioa (ns-3 GitLab.com-en sartzeko) - tar
edozein azken bertsioa (ns-3 bertsioa deskonprimitzeko) - bunzip2
edozein azken bertsioa (ns-3 bertsioa deskonprimitzeko)
Python-en bertsio lehenetsia egiaztatzeko, idatzi python -V
. g++ bertsioa egiaztatzeko, idatzi g++ -v
. Tresnaren bat falta bada edo zaharregia bada, ikusi ns-3 wiki orrialdeko instalazio-gidara.
Hemendik aurrera, irakurleak Linux, MacOS edo Linux emuladore bat exekutatzen ari dela suposatzen dugu, eta gutxienez goiko tresnak dituela.
3.2.1 ns-3 bertsioa deskargatu iturri artxibo gisa
Hau da ns-3-ren azken bertsio eta paketeen bertsioak deskargatu eta esperimentatu nahi dituen erabiltzaile berri baten jardunbidea. ns-3 bertsioak iturburu-artxibo konprimitu gisa argitaratzen dira, batzuetan deitzen zaie tarball. tarball software artxibo formatu berezi bat da eta bertan hainbat fitxategi konbinatzen dira. Artxiboa konprimitu ohi da. ns-3 abio prozesuaren bidez tarball erraza da, bertsio bat hautatu, deskargatu eta deskonprimitu besterik ez duzu behar.
Demagun, erabiltzaile gisa, deitutako tokiko direktorio batean ns-3 eraiki nahi duzula lan eremua. Argitalpenaren kopia bat lor dezakezu Linux kontsolan honako hau sartuta (bertsio-zenbaki egokiak ordezkatuz, noski)
$ 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
Erreparatu goian erabilitako erabilgarritasunari wget, Internetetik objektuak deskargatzeko komando lerroko tresna bat da. Ez baduzu instalatu, zure arakatzailea erabil dezakezu horretarako.
Pauso hauek jarraituz ns-allinone-3.29 direktoriora eramango zaitu, bertan hainbat fitxategi eta direktorio ikusi beharko zenuke
$ 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
Orain prest zaude ns-3 oinarrizko banaketa eraikitzeko eta ns-3 eraikitzeko atalera joan zaitezke.
3.3 ns-3 deskargatzea Git erabiliz
ns-3 kodea GitLab.com-eko Git biltegietan dago eskuragarri
Git biltegiak erabiltzen hasteko modurik errazena ingurunea bifurkatzea edo klonatzea da ns-3-allinona. Gehien erabiltzen diren ns-3 azpisistemen karga eta muntaketa kudeatzen dituen script multzo bat da. Git-en berria bazara, baliteke "fork" eta "klona" terminoak ezezagunak izatea; bada, GitLab.com-en dagoen biltegia honela klonatu (zure kopia propioa) gomendatzen dugu:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone
Fase honetan, zure direktorioaren ikuspegia ns-3-allinona goian deskribatutako oharra artxibo-direktoriotik apur bat desberdina. Honelako itxura izan beharko luke:
$ ls
build.py constants.py download.py README util.py
Kontuan izan gidoi bat dagoela deskargatu.py, ns-3 eta horrekin batera datorren iturburu kodea ere aterako dituena. Hemen duzu aukera: edo deskargatu ns-3 garapenaren azken argazkia:
$ python download.py
edo nahiago ns-3 oharra bandera erabiliz -n
kaleratze-zenbakia adierazteko:
$ python download.py -n ns-3.29
Pauso honen ondoren direktoriora ns-3-allinona biltegi osagarriak deskargatuko dira ns-3, bake, pybindgen ΠΈ netanim.
Kontuan izan
Ubuntu16.04 garbia duen makina batean, komandoa honetara aldatu behar nuen: $ sudo python3 download.py -n ns-3.29
(aurrerantzean itzultzailearen oharrak).
3.3.1 Bake erabiliz ns-3 kargatzea
Goiko bi metodoak (iturburu artxiboa edo biltegia ns-3-allinona Git bidez) erabilgarriak dira ns-3 instalazio errazena lortzeko gehigarri anitzekin (pybindgen Python loturak sortzeko eta netanim sareko animaziorako). ns-3-allinone-n lehenespenez emandako hirugarren biltegiari deitzen zaio bake.
Labean ns-3 proiekturako garatua den biltegi anitzetako softwarea koordinatuko eraikitzeko tresna da. Labean ns-3-ren garapen-bertsioak lortzeko erabil daiteke, baita ns-3 banaketaren oinarrizko bertsioaren luzapenak deskargatzeko eta eraikitzeko ere, hala nola ingurunea. Kode Zuzeneko Exekuzioa, CradleNetwork Simulazio Sehaska, Python lotura berriak eta hainbat ns-3 "aplikazio" sortzeko gaitasuna.
Kontuan izan
CradleNetwork Simulation Cradle sare-simulagailu baten barruan TCP/IP sare-pilak errealak erabiltzeko aukera ematen duen esparru bat da.
Zure ns-3 instalazioak funtzio aurreratu edo osagarriak izatea espero baduzu, instalazio bide hau jarraitu dezakezu.
Azken ns-3 bertsioetan Labean tar oharra gehitu zen. Argitalpenak bertsioaren unean uneko software-bertsioak deskargatzeko aukera ematen duen konfigurazio-fitxategi bat dakar. Hori da, adibidez, bertsioa Labean, ns-3.29 bertsioarekin banatzen dena, ns-3 bertsio horren edo lehenagoko osagaiak berreskuratzeko erabil daiteke, baina ezin da erabili geroagoko bertsioetarako osagaiak berreskuratzeko (paketearen deskribapen fitxategia bada. bakeconf.xml eguneratu gabe).
Azken kopia ere lor dezakezu bakekomando hau zure Linux kontsolan sartuz (Git instalatuta duzula suposatuz):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.git
Git komandoa exekutatzen duzunean, honelako zerbait ikusi beharko zenuke:
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.
Komandoa amaitu ondoren klonatu direktorio bat izan beharko zenuke bake, horren edukiak honelako itxura izan beharko luke:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO
Kontuan izan hainbat Python script kargatu dituzula, izeneko Python modulua bake eta XML konfigurazio fitxategi bat. Hurrengo urratsa script hauek erabiltzea da nahi duzun ns-3 banaketa deskargatzeko eta eraikitzeko. Hainbat pertsonalizazio helburu eskuragarri daude:
-
ns-3.29: oharrari dagokion modulua; bertsioaren antzeko osagaiak deskargatuko ditu tarball-ean;
-
ns-3-garapena: antzeko modulua, baina garapen zuhaitzeko kodea erabiliz;
-
ns-allinona-3.29: Klik-bideraketa eta Network Simulation Cradle, Openflow ns-3-rako beste ezaugarri osagarri batzuk biltzen dituen modulua.
-
ns-3-allinona: moduluaren bertsioaren antzekoa allinone, baina garapen kodearako.
Kontuan izan
Klikatu β Routerrak sortzeko software-arkitektura modularra.
Openflow router eta kommutadoreek datu-sare batean transmititutako datuak prozesatzeko prozesua kudeatzeko protokoloa da, softwareak definitutako sare-teknologia ezarriz.
Gaur egungo garapenaren argazkia (argitaratzerik gabekoa) ns-3 helbidean aurki daiteke:
Garatzaileak biltegi hauek funtzionamendu koherentean mantentzen saiatzen dira, baina garapen-eremuan daude eta kaleratu gabeko kodea dute, beraz, funtzio berriak erabiltzeko asmoa ez baduzu, hautatu bertsio ofiziala.
Kodearen azken bertsioa biltegien zerrendan arakatuz edo ns-3 Releases web orrira joanda aurki dezakezu:
Orain, behar ditugun ns-3 osagaiak lortzeko, tresna erabiliko dugu Labean. Esan ditzagun lanaren sarrerako hitz batzuk Labean.
Bake-k paketeen iturriak direktorio batean kargatuz funtzionatzen du iturri eta liburutegiak eraikitze direktorioan instalatzea. Labean bitarrari erreferentzia eginez exekutatu daiteke, baina exekutatu nahi baduzu Labean ez deskargatu den direktoriotik, bidea gehitzea komeni da bake zure bidera (PATH ingurune-aldagaia), adibidez, honela (adibidea Linux bash shell-erako). Joan "bake" direktoriora eta ezarri ondoko ingurune-aldagaiak:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib
Honek programa jarriko du labean.py shell bidera eta beste programa batzuei aukera emango die berak sortutako exekutagarriak eta liburutegiak aurkitzeko bake. Erabilera kasu batzuetan bake, goian deskribatutako PATH eta PYTHONPATH ezarpena ez da beharrezkoa, baina ns-3-allinone-ren eraikuntza osoa (pakete gehigarriekin) normalean eskatzen du.
Joan zure laneko direktoriora eta sartu honako hau kontsolan:
$ ./bake.py configure -e ns-3.29
Jarraian galdetuko dugu Labean egiaztatu osagai ezberdinak kargatzeko behar adina tresna dugun. Markatu:
$ ./bake.py check
Horrelako zerbait ikusi beharko zenuke:
> 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 ...
Bereziki, Mercurial, CVS, Git eta Bazaar bezalako kargatzeko tresnak ezinbestekoak dira urrats honetan, kodea lortzeko aukera ematen digutelako. Une honetan, instalatu falta diren tresnak zure sistemarako ohiko moduan (nola badakizu) edo jarri harremanetan zure sistema-administratzailearekin laguntza eskatzeko.
Ondoren, saiatu softwarea deskargatzen:
$ ./bake.py download
emaitza bezalako zerbait izan beharko litzateke:
>> 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
Horrek esan nahi du hiru iturri deskargatu direla. Orain joan iturburu-direktoriora eta idatzi ls; Ikusi beharko zenuke:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgen
Orain prest zaude ns-3 banaketa eraikitzeko.
3.4 Muntaketa ns-3
ns-3 deskargatzean bezala, ns-3 eraikitzeko hainbat modu daude. Azpimarratu nahi dugun gauza nagusia da ns-3 izeneko eraikitze-tresna baten bidez eraikitzen dela Wafjarraian deskribatzen da. Erabiltzaile gehienekin lan egingo dute Waf, baina badaude script erabilgarri batzuk hasteko edo eraikuntza konplexuagoak antolatzen laguntzeko. Beraz, mesedez, buruz irakurri aurretik Waf, begiratu eraiki.py eta muntaia-rekin bake.
3.4.1 build.py-rekin eraikitzea
Arreta! Eraikitze-urrats hau goian deskribatutako moduan lortutako iturburu-artxiboaren bertsiotik bakarrik dago eskuragarri; eta ez git edo bake bidez deskargatu.
Oharra artxibo batekin lan egitean tarballin ns-3-allinona Osagaiak muntatzea erraztu dezakeen script erabilgarri bat dago. build.py deitzen da. Programa honek proiektua konfiguratuko dizu modurik erabilgarrienean. Hala ere, kontuan izan konfigurazio aurreratuagoak eta ns-3-rekin lan egitea normalean ns-3-ren eraikitze-sistema propioa erabiltzea dakar, Waf, tutoretza honetan geroago aurkeztuko dena.
erabiliz deskargatu baduzu tarball, gero zure direktorioan ~/lan-eremua antzeko zerbait duen direktorio bat ns-allinona-3.29. Hurrengoa sartu:
$ ./build.py --enable-examples --enable-tests
Deitzean eraiki.py Komando-lerroko argumentuak erabili ditugu tutorial honetan erabilitako adibideak eta probak eraikitzeko, ns-3-n lehenespenez eraikiak ez direnak. Lehenespenez, programak erabilgarri dauden modulu guztiak ere eraikitzen ditu. Ondoren, nahi baduzu, ns-3 eraiki dezakezu adibiderik eta probarik gabe, edo zure lanerako beharrezkoak ez diren moduluak baztertu.
Konpiladorearen irteera-mezu asko ikusiko dituzu gidoiak bistaratzen dituena, kargatu dituzun zati desberdinak eraikitzen dituen heinean. Lehenik eta behin gidoia animatzailea eraikitzen saiatuko da netanim, gero lotura-sorgailua pybindgen eta azkenik ns-3. Prozesua amaitutakoan, honako hau ikusi beharko zenuke:
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
Zerrendaren azken hiru lerroetan eraiki gabeko moduluei buruzko mezu bat ikusten dugu:
Modules not built (see ns-3 tutorial for explanation):
brite click
Horrek esan nahi du, besterik gabe, kanpoko liburutegien menpe dauden ns-3 modulu batzuk ez direla eraikitzea edo konfigurazio honetarako eraiki behar ez direla. Horrek ez du esan nahi simulagailua muntatuta ez dagoenik edo muntatutako moduluak behar bezala funtzionatuko ez dutenik.
3.4.2 Bake-rekin eraikitzea
Goiko bakea erabili baduzu proiektuaren biltegietatik iturburu kodea lortzeko, ns-3 eraikitzeko erabiltzen jarraitu dezakezu. Markatu:
$ ./bake.py build
eta horrelako zerbait ikusi beharko zenuke:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OK
lagundu: deskargatu eta eraikitzeko urratsak aldi berean egin ditzakezu "bake.py deploy" deituz.
Osagai guztiak muntatzeak huts egin dezake, baina muntaketak jarraituko du osagairen bat behar ez bada. Adibidez, azken eramangarritasun arazo bat hori izan zen castxml erreminten bidez munta daiteke bake ez plataforma guztietan. Kasu honetan, honelako mezu bat agertuko da:
>> 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.
Baina castxml bakarrik beharrezkoa da Python lotura eguneratuak sortu nahi badituzu. Erabiltzaile gehienentzat ez dago horren beharrik (ns-3 aldatzen duten arte behintzat), beraz, oraingoz abisu horiek modu seguruan baztertu daitezke.
Huts egiten badu, komando honek falta diren mendekotasunei buruzko iradokizun bat emango dizu:
$ ./bake.py show
Eraikitzen saiatzen ari zaren paketeen menpekotasun desberdinak zerrendatuko dira.
3.4.3 Waf-ekin eraiki
Orain arte, ns-3 eraikitzen hasteko, script-a erabili dugu eraiki.py, edo tresna bake. Tresna hauek erabilgarriak dira ns-3 eraikitzeko eta liburutegiak mantentzeko. Izan ere, eraikitzeko eraikitzeko tresna exekutatzen dute Waf ns-3 direktoriotik. Waf ns-3 iturburu-kodearekin instalatuta. Erabiltzaile gehienak azkar pasatzen dira erabilera zuzenera nsβ3 konfiguratzeko eta muntatzeko Waf. Beraz, jarraitzeko, joan hasiera batean sortu zenuen ns-3 direktoriora.
Hau ez da guztiz beharrezkoa une honetan, baina erabilgarria izango da pixka bat atzera egitea eta proiektuaren konfigurazioan aldaketak nola egin ikustea. Seguruenik, egin dezakezun konfigurazio-aldaketarik erabilgarriena kodearen bertsio optimizatua sortzea da. Lehenespenez, zure proiektua konfiguratu duzu arazketa-bertsio bat eraikitzeko. Ikus dezagun proiektu bat muntaketa optimizatu bat sortzeko. Waf-i adibideak eta probak barne hartzen dituzten eraikuntza optimizatuak egin behar dituela azaltzeko, komando hauek exekutatu beharko dituzu:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
Hau martxan jarriko da Waf tokiko direktoriotik kanpo (zure erosotasunerako). Lehenengo komandoa aurreko eraikuntzatik garbitzen da, normalean hau ez da guztiz beharrezkoa, baina praktika ona da (ikusi behean eraikitzeko profilak ere); honek aldez aurretik sortutako liburutegiak eta direktorioan dauden objektu-fitxategiak ezabatuko ditu eraiki/. Proiektua birkonfiguratzen denean eta eraikitze-sistemak mendekotasun desberdinak egiaztatzen dituenean, irteera honen antzekoa ikusi beharko zenuke:
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)
Kontuan izan goiko zerrendaren azken zatia. Ns-3 aukera batzuk ez daude lehenespenez gaituta edo sistemaren laguntza behar dute behar bezala funtzionatzeko. Adibidez, XmlTo gaitzeko, liburutegiak sisteman egon behar du libxml-2.0. Liburutegi hau aurkitu ez bada eta dagokion ns-3 funtzioa gaituta ez badago, mezu bat bistaratuko da. Kontuan izan komandoa erabil daitekeela ere sudo programa jakin batzuetarako "set group ID at runtime" suid bit ezartzeko. Lehenespenez ez dago gaituta eta, beraz, funtzio hau "ez gaituta" agertzen da. Azkenik, gaituta dauden aukeren zerrenda bat lortzeko, erabili Waf parametroarekin --check-config
.
Orain atzera egin dezagun eta itzul gaitezen adibide eta probak dituen arazketa-eraikitzera.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
Eraikitze-sistema konfiguratuta dago eta ns-3 programen arazketa-bertsioak eraiki ditzakezu, besterik gabe idatzita:
$ ./waf
Baliteke goiko urratsek ns-3 sistemaren zati bat bi aldiz eraikitzera behartu izana, baina orain badakizu nola aldatu konfigurazioa eta kode optimizatua eraikitzen.
Proiektuaren konfigurazio jakin baterako zein profil aktibo dagoen egiaztatzeko, komando bat dago:
$ ./waf --check-profile
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debug
Goiko eszenatokia eraiki.py argudioak ere onartzen ditu --enable-examples
ΠΈ --enable-tests
, baina beste aukera batzuk Waf ez du zuzenean onartzen. Adibidez, honek ez du funtzionatuko:
$ ./build.py --disable-python
erreakzioa hau izango da:
build.py: error: no such option: --disable-python
Hala ere, operadore berezia - - parametro gehigarriak pasatzeko erabil daiteke wafberaz, aurrekoaren ordez komando honek funtzionatuko du:
$ ./build.py -- --disable-python
komando nagusia sortzen duelako ./waf konfiguratu --disable-python. Hona hemen sarrerako aholku gehiago Waf.
Eraikuntza-erroreak kudeatzea
ns-3 bertsioak Linux eta MacOS banaketa arruntetan argitaratzen den unean eskuragarri dauden C++ konpiladore berrienetan probatzen dira. Hala ere, denboraren poderioz, banaketa berriak konpilatzaile berriekin kaleratzen dira, eta konpilatzaile berri hauek abisuei buruz pedanteagoak izan ohi dira. ns-3-k bere eraikuntza konfiguratzen du abisu guztiak errore gisa tratatzeko, beraz, batzuetan, bertsio zaharrago bat sistema berriago batean exekutatzen ari bazara, konpiladorearen abisu batek eraikuntza geldiarazi dezake.
Adibidez, aurretik ns-3.28 bertsioa zegoen Fedora 28rako, bertsio nagusi berri bat barne. gcc (gcc-8). Fedora 3.28-n ns-28 bertsioa edo aurreko bertsioak eraikiz, Gtk2+ instalatuta, errore hau gertatuko da:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of β__gtk_reserved1β [-Werror=parentheses] void (*__gtk_reserved1);
nsβ3.28.1-tik hasitako bertsioetan, in Waf aukera bat dago arazo hauek konpontzeko. "-Werror" bandera ezartzea desgaitzen du g++ eta clang++-n. Hau "--disable-werror" aukera da eta konfigurazioan aplikatu behar da:
$ ./waf configure --disable-werror --enable-examples --enable-tests
Konfiguratu edo muntatu
Agindu batzuk Waf konfigurazio fasean soilik dute esanahia, eta batzuk eraikitze fasean bakarrik balio dute. Adibidez, ns-3 emulazio funtzioak erabili nahi badituzu, bit ezarpena gaitu dezakezu hegoaldera erabiliz sudo, goian azaldu bezala. Honek konfigurazio-urratseko komandoak gainidatziko ditu, eta, beraz, konfigurazioa alda dezakezu honako komando hau erabiliz, adibideak eta probak ere biltzen dituena.
$ ./waf configure --enable-sudo --enable-examples --enable-tests
Hau egiten baduzu Waf abiaraziko da sudoemulazio kodea socket sortzeko programak baimenekin exekutatzeko aldatzeko root. Urtean Waf Beste aukera asko daude eskuragarri konfiguratzeko eta eraikitzeko urratsetarako. Zure aukerak aztertzeko, sartu:
$ ./waf --help
Hurrengo atalean probarekin lotutako aukera batzuk erabiliko ditugu.
Muntaia-profilak
Dagoeneko ikusi dugu nola konfigura dezakezun Waf batzarretarako arazteko ΠΈ optimizada:
$ ./waf --build-profile=debug
Tarteko muntaia-profila ere badago, askatu. Aukera -d
-ren sinonimoa da --build-profile
. Eraikitze-profilak erregistroa, baieztapenak eta konpiladoreen optimizazio etengailuen erabilera kontrolatzen du:
Ikus dezakezunez, erregistroa eta baieztapenak arazketa-eraiketetan soilik daude eskuragarri. Gomendatutako praktika zure script-a arazketa-moduan garatzea da, ondoren errepikatu exekuzioak egitea (estatistikak edo parametroak aldatzeko) profil optimizatu batean.
Konpilazio profil jakin batzuetan bakarrik exekutatu behar den kodea baduzu, erabili Code Wrapper Makroa:
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;)
Lehenetsia, Waf eraikitzeko artefaktuak tokiak eraikitze direktorioan. Irteera direktorio ezberdin bat zehaztu dezakezu aukera erabiliz -β―-out
, adibidez:
$ ./waf configure --out=my-build-dir
Hau eraikitze-profilekin konbinatuz, erraz alda dezakezu konpilazio-aukera desberdinetatik:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...
Horrek askotariko muntaketarekin lan egiteko aukera ematen dizu, aldi bakoitzean azken muntaia berridatzi beharrik gabe. Beste profil batera aldatzen zarenean, Waf hura bakarrik konpilatuko du, dena guztiz birkonpilatu gabe.
Era honetan eraikitze-profilak aldatzen dituzunean, kontuz ibili behar duzu aldi bakoitzean konfigurazio-aukera berdinak ematen. Hainbat ingurune-aldagai definitzeak akatsak saihesten lagunduko dizu:
$ 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
Konpilatzaileak eta banderak
Goiko adibideetan Waf ns-3 eraikitzeko GCC-ko C++ konpilatzailea erabiltzen du ( g ++). Hala ere, erabiltzen duzuna alda dezakezu Waf C++ konpilatzailea, CXX ingurune-aldagaia definituz. Adibidez, C++ konpilatzailea Clang, clang++ erabiltzeko,
$ CXX="clang++" ./waf configure
$ ./waf build
Modu berean konfigura dezakezu Waf erabiliz konpilazio banatua erabiltzeko distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf build
Distcc eta banatutako konpilazioari buruzko informazio gehiago dokumentazioa atalean proiektuaren orrian aurki daiteke. ns-3 konfiguratzean konpiladore-markak gehitzeko, erabili CXXFLAGS_EXTRA ingurune-aldagaia.
Instalazio-
Waf liburutegiak sistemako leku ezberdinetan instalatzeko erabil daiteke. Lehenespenez, konpilatutako liburutegiak eta exekutagarriak direktorioan daude eraikitzeko, eta Wafek liburutegi eta exekutagarri horien kokapena ezagutzen duenez, ez dago liburutegiak beste inon instalatu beharrik.
Erabiltzaileek eraikitze-direktoriotik kanpo instalatu nahi badute, komandoa exekutatu dezakete ./waf instalatu. Instalaziorako aurrizki lehenetsia da / Usr / localBeraz, ./waf instalatu programak instalatuko ditu / Usr / local / bin, liburutegiak / Usr / local / lib eta goiburuko fitxategiak /usr/local/include. Supererabiltzaileen eskubideak normalean aurrizki lehenetsi batekin ezarri behar dira, beraz, komando tipikoa izango litzateke sudo ./waf instalatu. Abian jartzen denean, Wafek lehenik eta behin aukeratuko du partekatutako liburutegiak eraikitze-direktorioan erabiltzea, eta gero liburutegiak bilatuko ditu tokiko ingurunean konfiguratutako liburutegietarako bidetik. Beraz, sistema batean liburutegiak instalatzean, praktika ona da liburutegi egokiak erabiltzen ari direla egiaztatzea. Erabiltzaileek beste aurrizki batekin instalatzea aukera dezakete konfigurazioan aukera emanez --prefix
, adibidez:
./waf configure --prefix=/opt/local
Geroago, eraiki ondoren, erabiltzaileak instalazio komandoa sartzen du ./waf
, aurrizkia erabiliko da /opt/local.
Team ./waf clean
erabili behar da proiektua birkonfiguratu aurretik instalazioak erabiliko badu Waf beste aurrizki baten azpian.
Horrela, ns-3 erabiltzeko ez dago dei beharrik ./waf install
. Erabiltzaile gehienek ez dute komando hau beharko Waf eraikitze-direktoriotik uneko liburutegiak jasoko ditu, baina erabiltzaile batzuek baliagarria izan dezakete haien jarduerak ns-3 direktoriotik kanpoko programekin lan egiten badute.
Waf singlea
ns-3 iturburu-zuhaitzaren goiko mailan, Waf script bakarra dago. Lanean hasten zarenean, denbora asko igaroko duzu direktorioan scratch/
edo sakonagosrc/...
eta aldi berean korrika egin behar Waf. Non zauden gogoratu eta korrika egin dezakezu Waf honela:
$ ../../../waf ...
baina hau aspergarria eta akatsak izango dira, beraz, irtenbide hobeak daude. Modu arrunt bat testu-editore bat erabiltzea da emacs edo vim, zeinetan bi terminal saio irekitzen diren, bata ns-3 eraikitzeko erabiltzen da, eta bigarrena iturburu-kodea editatzeko. Bakarrik baduzu tarball, orduan ingurune-aldagai batek lagun dezake:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff build
Modulu-direktorioan tentagarria izan liteke waf script hutsal bat gehitzea exec ../../waf
. Mesedez, ez egin hori. Hau nahasgarria da hasiberrientzat eta, gaizki egiten denean, detektatzeko zailak diren eraikuntza-akatsak eragiten ditu. Goian agertzen diren irtenbideak erabili beharreko bidea dira.
3.5 Proba ns-3
ns-3 banaketaren unitate-probak exekutatu ditzakezu scripta exekutatuz ./test.py:
$ ./test.py
Proba hauek paraleloki egiten dira Waf. Azkenean, mezu bat ikusi beharko zenuke esaten duena:
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
Valgrind-en hutsegite, hutsegite edo akatsak identifikatzeko mezu garrantzitsua da, kodearekin arazoak edo tresnen eta kodearen arteko bateraezintasuna adierazteko.
Azken irteera ere ikusiko duzu Waf eta proba bakoitza exekutatzen ari den probatzaile bat, itxura hau izango duena:
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)
Komando hau normalean erabiltzaileek exekutatzen dute ns-3 banaketa behar bezala eraikita dagoela azkar egiaztatzeko. (Kontuan izan "GAIA: ..." lerroen ordena ezberdina izan daitekeela, hau normala da. Garrantzitsua da txostenaren amaierako laburpen-lerroak froga guztiak gainditu direla; probak ez direla huts egin edo huts egin duela.) Eta WafEta proba.py makinaren prozesadore-nukleoen artean lana paralelizatuko du.
3.6 Gidoia exekutatzen
Normalean kontrolpean exekutatzen ditugu scriptak Waf. Horri esker, eraikuntza-sistema partekatutako liburutegien bideak behar bezala ezarrita daudela eta liburutegiak exekuzioan erabilgarri daudela ziurtatzen du. Programa exekutatzeko, erabili Waf parametroarekin -β―-run
. Exekutatu dezagun nonahiko programaren ns-3 baliokidea kaixo munduahonako hau idatziz:
$ ./waf --run hello-simulator
Waf-ek programa behar bezala eraikita dagoela egiaztatuko du lehenik eta behar izanez gero. Gero Waf honako irteera hau sortzen duen programa bat exekutatuko du.
Hello Simulator
Zorionak! Orain ns-3 erabiltzailea zara!
Zer egin behar dut emaitzarik ikusten ez badut?
Mezuak ikusten badituzu Waferaikuntza behar bezala amaitu dela adieraziz, baina ez duzu irteera ikusten "Kaixo simulatzailea", orduan [Eraiki-with-Waf] atalean zure eraikuntza modura aldatzeko aukera dago optimizada, baina galdu egin du modura itzultzea arazteko. Tutorial honetan erabilitako kontsola-irteera guztiek ns-3 osagai berezi bat erabiltzen dute, erregistroa egiten duena eta kontsolan mezu pertsonalizatuak inprimatzeko erabiltzen dena. Osagai honen irteera automatikoki desgaitzen da optimizatutako kodea konpilatzen denean - "optimizatua" da. "Hello Simulator" irteera ikusten ez baduzu, idatzi honako hau:
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
pertsonalizatzeko Waf ns-3 programen arazketa bertsioak eraikitzeko, adibideak eta probak barne. Ondoren, kodearen uneko arazketa bertsioa birsortu beharko zenuke idatziz
$ ./waf
Orain programa exekutatzen baduzu kaixo-simulatzailea, espero den emaitza ikusi beharko zenuke.
3.6.1 Komando-lerroko argumentuak
Komando-lerroko argumentuak ns-3 programara pasatzeko, erabili eredu hau:
$ ./waf --run <ns3-program> --command-template="%s <args>"
Ordezkatu zure programaren izenari eta argudioei. Argudioa -β―-command-template
egiteko Waf funtsean, benetako komando-lerroa eraikitzeko errezeta bat da Waf programa exekutatzeko erabiltzen da. Waf-ek eraikuntza osatuta dagoela egiaztatzen du, liburutegi partekatuko bideak ezartzen ditu, ondoren emandako komando lerroko txantiloia erabiltzen du eta %s leku-markaren ordez programaren izena ordezkatzen du exekutagarria deitzeko. Sintaxi hau konplikatua iruditzen bazaizu, badago bertsio sinpleago bat ns-3 programa eta bere argumentuak komatxo bakarren artean sartuta:
$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'
Bereziki erabilgarria den beste adibide bat proba-suiteak modu selektiboan exekutatzen dira. Demagun mytest izeneko proba-multzo bat dagoela (hain zuzen ere, ez dago). Goian ./test.py script-a erabili dugu hainbat proba paraleloan exekutatzeko, proba-programari behin eta berriz deitzen diona proba-korrikalari. Deitu proba-korrikalari zuzenean proba bat egiteko:
$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
Argudioak programara pasatuko dira proba-korrikalari. Mytest existitzen ez denez, errore-mezu bat sortuko da. Test-runner eskuragarri dauden aukerak inprimatzeko, idatzi:
$ ./waf --run test-runner --command-template="%s --help"
3.6.2 Arazketa
ns-3 programak beste utilitate batean exekutatzeko, esate baterako, arazketa bat (adibidez, gdb) edo memoria probatzeko tresna bat (adibidez, valgrind), erabili antzeko forma bat -β―-command-template = "β¦"
. Adibidez, arazketan exekutatzeko gdb zure hello-simulator ns-3 programa argumentuekin:
$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
Kontuan izan ns-3 programaren izena argumentuarekin datorrela -β―-run
, eta kudeaketa-erabilgarritasuna (hemen gdb) argumentuko lehen seinalea da -β―-command-template
. Aukera -β―-args
txostenak gdbkomando-lerroaren gainerakoa "beheko" programari dagokiola. (Bertsio batzuk gdb ez dut ulertzen aukera -β―-args
. Kasu honetan, kendu programaren argumentuak -β―-command-template
eta erabili komando multzoa gdb args.) Errezeta hau eta aurrekoa konbina ditzakegu proba araztearen azpian egiteko:
$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
3.6.3 Laneko direktorioa
Waf-a ns-3 zuhaitzaren goiko kokapenetik abiarazi behar da. Karpeta hau irteerako fitxategiak idatziko diren laneko direktorio bihurtzen da. Baina zer gertatzen da fitxategi hauek ns-3 iturburu-zuhaitzetik kanpo mantendu nahi badituzu? Erabili argumentua -β―-cwd
:
$ ./waf --cwd=...
Baliteke erosoagoa irudituko zaizu irteerako fitxategiak zure lan-direktorioan jasotzea. Kasu honetan, zeharkako ekintza hauek lagun dezakete:
$ function waff {
CWD="$PWD"
cd $NS3DIR >/dev/null
./waf --cwd="$CWD" $*
cd - >/dev/null
}
Komandoaren aurreko bertsioaren dekorazio honek uneko lan-direktorioa gordetzen du, direktoriora doa Wafeta gero agintzen du Waf lan-direktorioa programa hasi aurretik gordetako uneko lan-direktoriora itzultzeko. taldea aipatzen dugu -β―-cwd
Osotasunerako, erabiltzaile gehienek Waf goi-mailako direktoriotik exekutatu eta irteera-fitxategiak sortzen dituzte bertan.
Iturria: www.habr.com