Priručnik za simulator mreže ns-3. Poglavlje 3

Priručnik za simulator mreže ns-3. Poglavlje 3
glave 1,2

3 Početak rada
3.1 Pregled
3.2 Prethodni uvjeti
3.2.1 Preuzimanje ns-3 u obliku arhive sa izvorima
3.3 Preuzimanje ns-3 pomoću Gita
3.3.1 Preuzimanje ns-3 pomoću Bake
3.4 Izgradnja ns-3
3.4.1 Izgradnja pomoću build.py
3.4.2 Izgradnja pomoću Bake
3.4.3 Izgradnja pomoću Waf
3.5 Testiranje ns-3
3.6 Pokretanje skripte
3.6.1 Argumenti naredbenog retka
3.6.2 Debagiranje
3.6.3 Radna mapa

Poglavlje 3

Početak rada

Ovo poglavlje ima za cilj pripremiti čitatelja za rad na računalu na koje možda nikada nije instaliran ns‑3. Izlaganje pokriva podržane platforme, prethodne uvjete, načine dobivanja ns‑3, načine izgradnje ns‑3 i načine provjere vaše gradnje i pokretanja jednostavnih programa.

3.1 Pregled

Simulator ns‑3 izgrađen je kao sustav međusobno povezanih softverskih biblioteka. Tijekom izgradnje, kod korisničkih programa povezuje se s tim bibliotekama. Za pisanje korisničkih programa koriste se programski jezici C++ ili Python.

Ns‑3 se distribuira u obliku izvornog koda, što znači da ciljna sustav mora imati okruženje za razvoj softvera kako bi prvo izgradila biblioteke, a zatim izgradila korisnički program. U načelu, ns‑3 se može distribuirati kao gotove biblioteke za određeni sustav i u budućnosti se mogu tako distribuira. Ali trenutno mnogi korisnici zapravo obavljaju svoj posao uređujući sam ns‑3, stoga je korisno imati izvorni kod za izgradnju biblioteka. Ako netko želi preuzeti rad na izradi gotovih biblioteka i paketa za operacijske sustave, molimo vas da kontaktirate mailing listu. ns-developers.

Dalje, razmotrit ćemo tri načina preuzimanja i izgradnje ns‑3. Prvi je da preuzmemo i izgradimo službeni release s glavne stranice. Drugi je odabir i izgradnja kopija razvojnih verzija osnovne instalacije ns‑3. Treći je korištenje dodatnih alata za izgradnju kako bi se preuzelo više proširenja za ns‑3. Proći ćemo kroz svaki jer se alati malo razlikuju.

Iskusni korisnici Linuxa mogu se zapitati zašto ns-3 nije dostupan kao paket poput većine drugih biblioteka koje koriste upravitelje paketa? Iako postoje binarni paketi za razne distribucije Linuxa (npr. Debian), većina korisnika na kraju uređuje biblioteke i prisiljena je sama ponovno sastavljati ns-3, stoga je dostupnost izvornog koda korisna. Iz tog razloga, usredotočit ćemo se na instalaciju iz izvornog koda.

Za većinu primjena ns-3 prava root nisu potrebna, preporučuje se korištenje nepriviligiranog korisničkog računa.

3.2 Prethodni uvjeti

Cjelokupni skup dostupnih ns-3 biblioteka ima niz ovisnosti o vanjskim bibliotekama, ali većinom se ns-3 može sastaviti i koristiti uz podršku nekoliko uobičajenih (češće postavljenih prema zadanim postavkama) komponenti: C++ kompajler, Python, urednik izvornog koda (npr., vim, emacs ili Eclipse) i, ako se koriste razvojni repozitoriji, sustavi kontrole verzija Git. Većini početnih korisnika nije potrebno brinuti se ako njihova konfiguracija izvještava o nekim nedostajućim dodatnim funkcijama ns-3, ali za one koji žele potpunu instalaciju, projekt daje wiki koja uključuje stranice s mnoštvom korisnih savjeta i uputa. Jedna od takvih stranica je stranica 'Instalacija' s uputama za instalaciju za razne sustave, dostupne na adresi: https://www.nsnam.org/wiki/Installation.

Odjeljak 'Preduvjeti' ove wiki stranice objašnjava koji su paketi potrebni za podršku općim opcijama ns-3, kao i pruža naredbe koje se koriste za njihovu instalaciju u uobičajenim varijantama Linuxa ili macOS-a.

Možete iskoristiti mogućnost istraživanja wiki stranice ns-3 ili glavnog web mjesta: https://www.nsnam.org, jer tamo ima mnogo informacija. Počevši s najnovijom verzijom ns-3 (ns-3.29), sljedeći alati su potrebni za pokretanje ns-3:

Alat Paket/verzija

  • C++ kompajler
    clang++ ili g++ (g++ verzija 4.9 ili veća)
  • Python
    python2 verzija >= 2.7.10, ili python3 verzija >=3.4
  • Git
    bilo koja posljednja verzija (za pristup ns-3 na GitLab.com)
  • tar
    bilo koja posljednja verzija (za raspakiranje ns-3 izdanja)
  • bunzip2
    bilo koja nova verzija (za raspakiranje ns-3 izdanja)

Da biste provjerili verziju Python-a koja je postavljena kao zadana, unesite python -V. Da biste provjerili verziju g++, unesite g++ -v. Ako neki alati nedostaju ili su zastarjeli, obratite se vodiču za instalaciju na wiki stranici ns-3.

Od ovog trenutka smatramo da čitatelj radi u Linuxu, MacOS-u ili emulatoru Linux okruženja, i ima barem navedene alate.

3.2.1 Preuzimanje ns-3 u obliku arhive sa izvorima

Ovo je način rada novog korisnika koji želi preuzeti i eksperimentirati s najnovijim izdanjima i paketnim verzijama ns-3. Izdanje ns-3 objavljuje se kao komprimirani arhiv izvornog koda, ponekad nazvan tarball. tarball — to je poseban format softverskog arhiva u kojem je nekoliko datoteka spojeno zajedno. Arhiv je obično komprimiran. Proces preuzimanja ns-3 je tarball jednostavan, samo trebate odabrati izdanje, preuzeti i raspakirati ga.

Pretpostavimo da želite izgraditi ns-3 u lokalnom direktoriju nazvanom workspace. Možete dobiti radnu kopiju izdanja tako da u Linux konzolu unesete sljedeće (naravno, zamijenite odgovarajuće brojeve verzija)

$ 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 

Obratite pažnju na gornju korištenu alatku wget, koja je alat naredbenog retka za preuzimanje objekata s Interneta. Ako je niste instalirali, možete je preuzeti putem preglednika.

Slijedeći ove korake, preći ćete u direktorij ns-allinone-3.29, gdje biste trebali vidjeti nekoliko datoteka i direktorija

$ 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

Sada ste spremni izgraditi osnovni distribucijski paket ns-3 i možete preći na odjeljak posvećen izgradnji ns-3.

3.3 Preuzimanje ns-3 pomoću Gita

Kod ns-3 dostupan je u Git repozitorijima na servisu GitLab.com na adresi https://gitlab.com/nsnam/. Grupa nsnam spaja različite repozitorije korištene od strane projekta s otvorenim izvorom.

Najlakši način da započnete korištenje Git repozitorija je napraviti forku ili klonirati okruženje ns-3-allinone. To je skup skripti koji upravlja preuzimanjem i izgradnjom najčešće korištenih pod-sustava ns-3. Ako ste početnik u Gitu, pojmovi "fork" i "kloniranje" možda vam nisu poznati; ako je to slučaj, preporučujemo vam da jednostavno klonirate (napravite svoju vlastitu kopiju) repozitorija na GitLab.com na sljedeći način:

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

U ovoj fazi vidite vaš direktorij ns-3-allinone malo se razlikuje od gore opisane direktorije s arhivom izdanja. Trebala bi izgledati otprilike ovako:

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

Obratite pozornost na prisutnost skripte download.py, koja dodatno izvlači ns‑3 i prateći izvorni kod. Ovdje imate izbor: ili preuzeti najnoviju verziju razvojne verzije ns‑3:

$ python download.py

ili odabrati izdanje ns‑3, koristeći oznaku -n za označavanje broja izdanja:

$ python download.py -n ns-3.29

Nakon ovog koraka, dodatni repozitoriji ns-3-allinone bit će preuzeti u direktorij ns‑3, bake, pybindgen i netanim.

Napomena
Na računalu s čistom Ubuntu 16.04 trebalo mi je promijeniti naredbu u ovakav oblik: $ sudo python3 download.py -n ns-3.29 (napomene prevoditelja).

3.3.1 Preuzimanje ns-3 pomoću Bake

Dva prethodno spomenuta metoda (arhiv izvora ili repozitorij ns-3-allinone putem Gita) korisna su za najjednostavniju instalaciju ns‑3 s nekoliko dodataka (pybindgen za generiranje Python veza i netanim za animaciju mreže). Treći repozitorij, koji je zadan u ns‑3-allinone, naziva se bake.

Bake — to je alat za koordinirano sastavljanje softvera iz više repozitorija, razvijen za projekt ns‑3. Bake može se koristiti za dobivanje razvojnih verzija ns‑3, kao i za preuzimanje i sastavljanje proširenja osnovne verzije distribucije ns‑3, kao što su okruženje Direct Code Execution, CradleNetwork Simulation Cradle, mogućnost stvaranja novih Python veza i raznih 'aplikacija' ns‑3.

Napomena
CradleNetwork Simulation Cradle je okvir koji omogućuje korištenje stvarnih mrežnih steka TCP / IP unutar mrežnog simulatora.

Ako očekujete da vaša instalacija ns‑3 treba imati napredne ili dodatne funkcije, možete slijediti ovaj postupak instalacije.

U posljednjim izdanjima ns‑3 Bake dodana je u tar-izdanje. U izdanje je uključen konfiguracijski file koji omogućuje preuzimanje aktualnih verzija softvera u vrijeme stvaranja izdanja. To jest, primjerice, verzija Bake, koja se distribuira s izdanjem ns‑3.29, može se koristiti za dobivanje komponenti za ovo izdanje ns‑3 ili ranije, ali se ne može koristiti za izvlačenje komponenti za kasnija izdanja (ako datoteka opisa paketa bakeconf.xml nije ažurirana).

Također možete dobiti najnoviju kopiju bake, unesite sljedeću naredbu u svoju Linux konzolu (pod uvjetom da imate instaliran Git):

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

Kada izvršite git komandu, trebali biste vidjeti nešto poput sljedećeg:

Kloniranje u 'bake'...
remote: Brojanje objekata: 2086, gotovo. 
remote: Brojanje objekata: 100% (2086/2086), gotovo. 
remote: Kompresija objekata: 100% (649/649), gotovo. 
remote: Ukupno 2086 (delta 1404), ponovno korišteno 2078 (delta 1399) 
Primanje objekata: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, gotovo. 
Rješavanje delta: 100% (1404/1404), gotovo.

Nakon završetka komande clone trebali biste imati direktorij s imenom bake, čiji sadržaj bi trebao izgledati otprilike ovako:

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

Obratite pažnju na to da ste preuzeli nekoliko Python skripti, Python modul pod imenom bake i XML datoteku s konfiguracijom. Sljedeći korak će biti korištenje tih skripti za preuzimanje i izgradnju ns‑3 distribucije po vašem izboru. Dostupni su različiti ciljevi konfiguracije:

  1. ns‑3.29: modul koji odgovara izdanju; preuzimat će komponente slične onima iz tarball-a;

  2. ns‑3-dev: sličan modul, ali s korištenjem koda iz razvojnog stabla;

  3. ns-allinone-3.29: modul koji uključuje dodatne funkcije, poput Click usmjeravanja i Network Simulation Cradle, Openflow za ns-3.

  4. ns-3-allinone: slično kao verzija modula allinone, ali za kod razvoja.

Napomena
Click — modularna softverska arhitektura za stvaranje usmjerivača.

Openflow — protokol za upravljanje procesom obrade podataka koji se prenose putem mreže usmjerivačima i prijenosnicima, implementirajući tehnologiju softverski konfigurirane mreže.

Trenutni razvojni snimak (neizdano) ns‑3 može se pronaći na:https://gitlab.com/nsnam/ns-3-dev.git.

Programeri se trude održati ove repozitorije u koherentnom radnom stanju, ali su u razvoju i sadrže neizdani kod, stoga ako ne planirate koristiti nove funkcije, odaberite službeno izdanje.

Možete pronaći najnoviju verziju koda pregledavanjem popisa repozitorija ili odlaskom na web stranicu „ns‑3 Releases”:https://www.nsnam.org/releases/ i klikom na vezu za najnoviju verziju. U ovom primjeru nastavit ćemo s ns‑3.29.

Sada, da bismo dobili potrebne komponente ns‑3, primijenit ćemo alat Bake. Reći ćemo nekoliko uvodnih riječi o radu Bake.

Bake radi preuzimajući izvore paketa u direktorij source i instalirajući biblioteke u direktorij za izgradnju. Bake može se pokrenuti pozivajući se na binarni datoteku, ali ako želite pokretati Bake nije iz direktorija u koji je učitan, preporučuje se dodati put do bake vašeg puta (promenljive okoline PATH), na primer, na sledeći način (primer za Linux bash). Idite u direktorijum „bake“ i postavite sledeće promenljive okoline:

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

To će staviti program bake.py u put okruženja i omogućiti drugim programima da pronađu izvršne datoteke i biblioteke koje je kreirao bake. U nekim slučajevima korišćenja bake, postavljanje PATH i PYTHONPATH nije obavezno, ali za potpunu izgradnju ns‑3-allinone (sa dodatnim paketima) obično je potrebno.

Idite u radni direktorijum i otkucajte u konzolu sledeće:

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

Zatim ćemo vas zamoliti Bake da proverite imamo li dovoljno alata za preuzimanje raznih komponenti. Otucajte:

$ ./bake.py check

Trebalo bi da vidite nešto poput sledećeg:

> Python - OK 
> GNU C++ compiler - OK 
> Mercurial - OK 
> Git - OK 
> Tar tool - OK 
> Unzip tool - OK 
> Make - OK 
> cMake - OK 
> patch tool - OK 
> Put pretraženi za alate: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...

Pogotovo, alati za preuzimanje kao što su Mercurial, CVS, Git i Bazaar su ključni u ovom koraku, jer nam omogućavaju da dobijemo kod. U ovoj fazi instalirajte nedostajuće alate na uobičajen način za vaš sistem (ako znate) ili se obratite svom sistem administratoru.

Zatim pokušajte da preuzmete softver:

$ ./bake.py download

rezultat bi trebao biti nešto poput:

>> Traženje sistemske zavisnosti setuptools - OK 
>> Traženje sistemske zavisnosti libgoocanvas2 - OK 
>> Traženje sistemske zavisnosti gi-cairo - OK 
>> Traženje sistemske zavisnosti pygobject - OK 
>> Traženje sistemske zavisnosti pygraphviz - OK 
>> Traženje sistemske zavisnosti python-dev - OK 
>> Traženje sistemske zavisnosti qt - OK 
>> Traženje sistemske zavisnosti g++ - OK 
>> Preuzimanje pybindgen-0.19.0.post4+ng823d8b2 (ciljni direktorij:pybindgen) - OK 
>> Preuzimanje netanim-3.108 - OK 
>> Preuzimanje ns-3.29 - OK

To će značiti da su preuzeta tri izvora. Sada pređite u direktorijum source i otkucajte ls; trebali biste videti:

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

Sada ste spremni da izgradite distribuciju ns‑3.

3.4 Izgradnja ns-3

Kao i kod preuzimanja ns‑3, postoji nekoliko načina za izgradnju ns‑3. Najvažnije je napomenuti da se ns‑3 gradi pomoću alata za izgradnju nazvanog Waf, opisano u nastavku. Većina korisnika će raditi s Waf, ali postoje neki praktični scenariji koji će vam pomoći da započnete ili organizirate složenije kompilacije. Stoga, molimo vas, prije nego pročitate o Waf, pogledajte na build.py i kompilaciju s bake.

3.4.1 Izgradnja pomoću build.py

Pažnja! Ovaj korak kompilacije dostupan je samo iz verzije izvorne arhive, dobivene kao što je opisano gore; a ne preuzete putem gita ili bake.

Kada radite s verzijom arhive tarball, u ns‑3‑allinone ima praktični skript koji može olakšati kompilaciju komponenti. Zove se build.py. Ovaj program će postaviti projekt na najskoriji način. Međutim, imajte na umu da složenija podešavanja i rad s ns‑3 obično uključuju korištenje vlastitog sustava kompilacije ns‑3, Waf, koji će biti predstavljen kasnije u ovom vodiču.

Ako ste preuzeli putem tarball, tada bi u vašem direktoriju ~\/workspace trebala biti direktorij s imenom nešto poput ns-allinone-3.29. Unesite sljedeće:

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

Kada pozovete build.py primijenili smo argumente iz naredbenog retka kako bismo kompilirali primjere i testove koji se u ns‑3 po defaultu ne kompiliraju. Po defaultu, program također kompilira sve dostupne module. Kasnije, ako želite, možete kompilirati ns‑3 bez primjera i testova ili isključiti module koji vam nisu potrebni.

Vidjet ćete mnogo izlaznih poruka kompajlera koje skripta prikazuje tijekom kompilacije raznih dijelova koje ste preuzeli. Prvo, skript će pokušati kompilirati animator netanim, zatim generatore veziva pybindgen i, na kraju, ns‑3. Na kraju procesa, trebali biste vidjeti sljedeće:

Waf: Napuštanje direktorija '\/putanja\/do\/workspace\/ns-allinone-3.29\/ns-3.29\/build'\n'build' dovršen uspješno (6m25.032s) \n\nIzgrađeni moduli:\nantenna                aodv                     applications\nbridge                 buildings                config-store\ncore                   csma                     csma-layout\ndsdv                   dsr                      energy \nfd-net-device          flow-monitor             internet\ninternet-apps          lr-wpan                  lte\nmesh                   mobility                 mpi\nnetanim (bez Pythona)    network                  nix-vector-routing \nolsr                   point-to-point           point-to-point-layout \npropagation            sixlowpan                spectrum \nstats                  tap-bridge               test (bez Pythona) \ntopology-read          traffic-control          uan \nvirtual-net-device     visualizer               wave \nwifi                   wimax \n\nModuli nisu izgrađeni (vidi ns-3 vodič za objašnjenje):\nbrite                  click                    openflow \nNapuštanje direktorija .\/ns-3.29

U posljednja tri retka ispisivanja vidimo poruku o modulima koji nisu bili izgrađeni:

Moduli nisu sagrađeni (vidi ns-3 tutorijal za objašnjenje):
brite                     klikni

To jednostavno znači da neki ns-3 moduli koji ovise o vanjskim knjižnicama možda nisu bili sagrađeni ili da za ovu konfiguraciju njihova gradnja nije potrebna. To ne znači da simulator nije sagrađen ili da će sagrađeni moduli raditi pogrešno.

3.4.2 Izgradnja pomoću Bake

Ako ste iznad koristili bake za preuzimanje izvornog koda iz repozitorija projekta, možete ga nastaviti koristiti i za gradnju ns-3. Upisujte:

$ ./bake.py build

i trebali biste vidjeti nešto poput:

>> Gradnja pybindgen-0.19.0.post4+ng823d8b2 - U REDU 
>> Gradnja netanim-3.108 - U REDU 
>> Gradnja ns-3.29 - U REDU

Savjet: također možete izvršiti oba koraka odjednom, preuzimanje i gradnju, pozivajući «bake.py deploy.»

Pri gradnji svih komponenti mogu se dogoditi kvarovi, ali gradnja će se nastaviti ako komponenta nije obavezna. Na primjer, nedavni problem s prenosivošću bio je to što castxml može biti sagrađen alatom bake ne na svim platformama. U tom slučaju će se pojaviti obavijest u obliku:

>> Gradnja castxml - Problem 
> Problem: Opcionalna ovisnost, modul "castxml" nije uspio
To može smanjiti funkcionalnost konačne gradnje.
Međutim, bake će nastaviti jer "castxml" nije bitna ovisnost.
Za više informacija pozovite bake s -v ili -vvv za puni verbose način.

Međutim castxml neophodan je samo ako želite stvoriti ažurirane vezove za Python. Za većinu korisnika to nije potrebno (barem dok ne počnu mijenjati ns-3), tako da se ta upozorenja za sada mogu sigurno ignorirati.

Ako dođe do greške, sljedeća komanda će vam dati uvid o nedostajućim ovisnostima:

$ ./bake.py show

Bit će navedene razne ovisnosti paketa koje pokušavate sagraditi.

3.4.3 Izgradnja pomoću Waf

Do ovog trenutka, za početak gradnje ns-3, koristili smo ili skriptu build.py, ili alat bake. Ovi alati su korisni za gradnju ns-3 i podršku knjižnicama. U stvarnosti, za gradnju pokreću alat za gradnju Waf iz direktorija ns-3. Waf sprovodi se zajedno s izvorom ns-3. Većina korisnika za konfiguraciju i gradnju ns-3 brzo prelazi na izravnu uporabu Waf. Dakle, za nastavak, molimo vas da pređete u direktorij ns-3 koji ste prvotno stvorili.

Trenutno to nije strogo potrebno, ali bi bilo korisno napraviti kratko izlaganje o tome kako unijeti promjene u konfiguraciju projekta. Vjerojatno će najkorisnija promjena konfiguracije koju možete napraviti biti kreiranje optimizirane verzije koda. Po zadanim postavkama, postavili ste svoj projekt za izgradnju verzije za debagiranje. Pogledajmo projekt s ciljem izrade optimizirane verzije. Da biste objasnili Wafu da treba napraviti optimizirane verzije za izgradnju koje uključuju primjere i testove, trebat ćete izvršiti sljedeće naredbe:

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

To će pokrenuti Waf izvan lokalnog direktorija (za vaše lakše korištenje). Prva naredba izvodi čišćenje od prethodne izgradnje, što obično nije strogo neophodno, ali je dobra praksa (vidi i profile izgradnje u nastavku); to će ukloniti ranije stvorene biblioteke i objektne datoteke koje se nalaze u direktoriju build/. Kada je projekt ponovno konfiguriran i sustav za izgradnju provjerava razne ovisnosti, trebali biste vidjeti izlaz koji nalikuje sljedećem:

Postavljanje vrha na      : /home/ns3user/workspace/bake/source/ns-3-dev
Postavljanje izlaza na      : /home/ns3user/workspace/bake/source/ns-3-dev/build
Provjera za 'gcc' (C prevoditelj)        : /usr/bin/gcc 
Provjera verzije cc                : 7.3.0 
Provjera za 'g++' (C++ prevoditelj)      : /usr/bin/g++ 
Provjera za podršku za kompajlersku zastavicu -march=native : ok 
Provjera za podršku za kompajlersku zastavicu -Wl,--soname=foo : ok 
Provjera za podršku za kompajlersku zastavicu -std=c++11       : ok 
Provjera za Boost uključivanja   : zaglavlja nisu pronađena, molimo vas,!navedite argument --boost-includes (vidi pomoć) 
Provjera za Boost uključivanja   : zaglavlja nisu pronađena, molimo vas,!navedite argument --boost-includes (vidi pomoć) 
Provjera programa 'python'            : /usr/bin/python 
Provjera verzije Pythona >= 2.3       : 2.7.15 python-config                                                                     : /usr/bin/python-config
Traženje python-config za pyembed '--cflags --libs --ldflags' zastavice : da
Testiranje pyembed konfiguracije                                      : da
Traženje python-config za pyext '--cflags --libs --ldflags' zastavice   : da
Testiranje pyext konfiguracije                                        : da

Provjera za podršku za kompajlersku zastavicu -fvisibility=hidden          : ok 
Provjera za podršku za kompajlersku zastavicu -Wno-array-bounds            : ok 
Provjera lokacije pybindgen          : ../pybindgen ,!(pogađano) 
Provjera za Python modul 'pybindgen'   : 0.19.0. ,!post4+g823d8b2 
Provjera verzije pybindgen           : 0.19.0. ,!post4+g823d8b2 
Provjera za isječak koda                : da 
Provjera za ekvivalenciju vrsta uint64_t i unsigned long : ne 
Provjera za isječak koda                                 : ne 
Provjera za ekvivalenciju vrsta uint64_t i unsigned long long     : da 
Provjera za apidefs koje se mogu koristiti za Python vezanje                       : gcc-LP64 
Provjera za unutarnji GCC cxxabi         : završeno 
Provjera za Python modul 'pygccxml'    : nije pronađen 
Provjera lokacije klika               : nije pronađen 
Provjera programa 'pkg-config'        : /usr/bin/pkg- ,!config 
Provjera za 'gtk+-3.0'                  : nije pronađen 
Provjera za 'libxml-2.0'                : da 
provjera za uint128_t                   : nije pronađen 
provjera za __uint128_t                 : da 
Provjera implementacije visoke preciznosti   : 128-bitni cijeli broj ,!(zadano) 
Provjera za zaglavlje stdint.h             : da 
Provjera za zaglavlje inttypes.h           : da 
Provjera za zaglavlje sys/inttypes.h       : nije pronađen 
Provjera za zaglavlje sys/types.h          : da 
Provjera za zaglavlje sys/stat.h           : da 
Provjera za zaglavlje dirent.h             : da 
Provjera za zaglavlje stdlib.h             : da 
Provjera za zaglavlje signal.h             : da 
Provjera za zaglavlje pthread.h            : da 
Provjera za zaglavlje stdint.h             : da 
Provjera za zaglavlje inttypes.h           : da 
Provjera za zaglavlje sys/inttypes.h       : nije pronađen
Provjera za biblioteku rt                  : da 
Provjera za zaglavlje sys/ioctl.h          : da 
Provjera za zaglavlje net/if.h             : da 
Provjera za zaglavlje net/ethernet.h       : da 
Provjera za zaglavlje linux/if_tun.h       : da 
Provjera za zaglavlje netpacket/packet.h   : da 
Provjera lokacije NSC                : nije pronađena 
Provjera za 'sqlite3'                   : nije pronađen 
Provjera za zaglavlje linux/if_tun.h       : da 
Provjera za Python modul 'gi'          : 3.26.1 
Provjera za Python modul 'gi.repository.GObject'      : ok 
Provjera za Python modul 'cairo'                      : ok 
Provjera za Python modul 'pygraphviz'                 : 1.4rc1 
Provjera za Python modul 'gi.repository.Gtk'          : ok 
Provjera za Python modul 'gi.repository.Gdk'          : ok 
Provjera za Python modul 'gi.repository.Pango'        : ok 
Provjera za Python modul 'gi.repository.GooCanvas'    : ok 
Provjera programa 'sudo'                             : /usr/bin/sudo 
Provjera programa 'valgrind'                         : nije pronađen 
Provjera za 'gsl' : nije pronađen python-config            : nije pronađen 
Provjera za podršku za kompajlersku zastavicu -fstrict-aliasing : ok 
Provjera za podršku za kompajlersku zastavicu -fstrict-aliasing : ok 
Provjera za podršku za kompajlersku zastavicu -Wstrict-aliasing : ok 
Provjera za podršku za kompajlersku zastavicu -Wstrict-aliasing : ok 
Provjera programa 'doxygen'                          : /usr/bin/doxygen
---- Sažetak opcionalnih ns-3 značajki:
Profil izrade : optimizirano
Direktorij izrade : 
BRITE Integracija : nije omogućena (BRITE nije omogućeno (vidi opciju --with-,!brite)) 
DES Metrike skupljanje događaja : nije omogućeno (zadano je onemogućeno) 
Emulacija FdNetDevice        : omogućena 
Primjeri                     : omogućeni 
Datotečni opis NetDevice    : omogućeno 
GNU Znanstvena biblioteka (GSL) : nije omogućena (GSL nije pronađen) 
Gcrypt biblioteka               : nije omogućena
(libgcrypt nije pronađen: možete koristiti ,!libgcrypt-config za pronalaženje njegove lokacije.) GtkConfigStore               : nije omogućena (biblioteka 'gtk+-3.0 >= 3.0' nije pronađena)
MPI Podrška                  : nije omogućena (opcija --enable-mpi nije odabrana)
ns-3 Click Integracija       : nije omogućena (nsclick nije omogućeno (vidi opciju --with-,!nsclick))
ns-3 OpenFlow Integracija   : nije omogućena (Potrebne boost biblioteke nisu pronađene) 
Mrežna simulacija kolijevka    : nije omogućena (NSC nije pronađen (vidi opciju --with-nsc))
PlanetLab FdNetDevice         : nije omogućena (PlanetLab operativni sustav nije otkriven ,!(vidi opciju --force-planetlab)) PyViz vizualizator : omogućena 
Python API Skener podrška   : nije omogućena (Nedostaje 'pygccxml' Python modul)
Python Vezivanja : omogućena 
Simulator u stvarnom vremenu           : omogućena 
SQlite statistički izlaz podataka      : nije omogućena (biblioteka 'sqlite3' nije pronađena)
Tap Bridge                    : omogućena 
Tap FdNetDevice               : omogućena
Testovi                         : omogućeni 
Primitivi za višedretveno izvršavanje          : omogućeni 
Koristite sudo za postavljanje suid bita   : nije omogućena (opcija --enable-sudo nije odabrana)
XmlIo                         : omogućena
'configure' završeno uspješno (6.387s)

Obratite pažnju na posljednji dio gornjeg popisa. Neke opcije ns-3 nisu uključene po zadanim postavkama ili zahtijevaju podršku sustava za ispravan rad. Na primjer, za uključivanje XmlTo, sustav treba imati biblioteku libxml-2.0. Ako ova biblioteka nije pronađena i odgovarajuća funkcija ns-3 nije uključena, bit će prikazana poruka. Također, obratite pažnju da postoji mogućnost korištenja naredbe sudo za postavljanje suid bita "postavljanje ID grupe tijekom izvođenja" za određene programe. Prema zadanim postavkama nije uključen, pa se ova funkcija prikazuje kao "nije uključena". Konačno, da biste dobili popis uključenih opcija, koristite Waf s parametrom --check-config.

Sada se vraćamo i prebacujemo natrag na debug izgradnju koja sadrži primjere i testove.

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

Sustav za izgradnju je sada konfiguriran, i možete sastaviti debug verzije ns-3 programa jednostavno upisivanjem:

$ ./waf

Iako su gornji koraci mogli prisiliti vas da dva puta sastavite dio sustava ns-3, sada znate kako promijeniti konfiguraciju i izgraditi optimizirani kod.

Za provjeru koji profil je aktivan za ovu konfiguraciju projekta postoji naredba:

$ ./waf --check-profile 
Waf: Ulaz u direktorij `/path/to/ns-3-allinone/ns-3.29/build' 
Profil izgradnje: debug

Razmatrani scenarij iznad build.py također podržava argumente --enable-examples i --enable-tests, ali druge opcije Waf ne podržava izravno. Na primjer, ovo neće raditi:

$ ./build.py --disable-python

odgovor će biti sljedeći:

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

Međutim, posebni operator -- može se koristiti za prosljeđivanje dodatnih parametara kroz waf, tako da će sljedeća naredba raditi umjesto gore navedene:

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

jer generira glavnu naredbu ./waf configure --disable-python. Evo još nekoliko uvodnih savjeta o Waf.

Obrada pogrešaka pri izgradnji

Izdanja ns‑3 testirana su na najnovijim C++ kompajlerima dostupnim u trenutku izdanja na najrasprostranjenijim Linux i MacOS distribucijama. Međutim, kako vreme prolazi, izlaze nove distribucije sa novim kompajlerima, a ti noviji kompajleri obično su pedantniji u vezi sa upozorenjima. ns‑3 podešava svoju izgradnju tako da tretira sva upozorenja kao greške, pa ponekad, ako koristite stariju verziju na novijem sistemu, upozorenje kompajlera može zaustaviti izgradnju.

Na primer, ranije je bilo izdanja ns‑3.28 za Fedora 28, koja je uključivala novu glavnu verziju gcc (gcc-8). Izgradnja izdanja ns‑3.28 ili ranijih verzija na Fedora 28, uz instaliran Gtk2+, izazvaće ovakvu grešku:

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

U izdanjima počevši od ns‑3.28.1, Waf dostupna je opcija za rešavanje ovih problema. Ona isključuje postavljanje vektora „-Werror” u g++ i clang++. Ova opcija je „—disable-werror”, mora se primeniti tokom konfiguracije:

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

Konfiguracija ili izgradnja

Neke komande Waf ima smisla koristiti samo tokom faze konfiguracije, dok neki deluju samo tokom faze izgradnje. Na primer, ako želite koristiti funkcije emulacije ns‑3, možete uključiti postavljanje bita suid koristeći sudo, kako je opisano iznad. To će poništiti komande faze konfiguracije, a na taj način možete promeniti konfiguraciju koristeći sledeću komandu, koja takođe uključuje primere i testove.

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

Ako to učinite, Waf pokrenite sudo, da biste promenili programe za kreiranje soketa koda emulacije za pokretanje s pravima root. U Waf dostupno je mnogo drugih opcija za faze konfiguracije i izgradnje. Da biste istražili opcije, unesite:

$ ./waf --help

U sledećem odeljku koristićemo neke opcije povezane s testiranjem.

Profilirati izgradnje

Već smo videli kako se može konfigurisati Waf za izgradnje debug i optimized:

$ ./waf --build-profile=debug

Takođe postoji međufazni profil izgradnje, release. Opcija -d je sinonim --build-profile. Profil izgradnje upravlja korišćenjem logovanja, tvrdnji (assertions) i ključeva optimizacije kompajlera:

Priručnik za simulator mreže ns-3. Poglavlje 3

Kao što možete vidjeti, dnevnički zapisi i izjave dostupni su samo u verzijama za ispravku. Preporučena praksa je razvijati svoj skript u načinu ispravke, a zatim izvoditi ponovljene prozore (za statistiku ili promjenu parametara) u optimiziranom profilu izrade.

Ako imate kod koji se mora izvršavati samo u određenim profilima izrade, koristite makro Code Wrapper Macro:

NS_BUILD_DEBUG (std::cout << "Dio izlazne linije..." << std::flush; timer.Start, !()); DoLongInvolvedComputation();
NS_BUILD_DEBUG (timer.Stop(); std::cout << "Gotovo: " << timer << std::endl;)

Po defaultu, Waf smješta artefakte izrade u direktorij izrade. Možete navesti drugi izlazni direktorij koristeći opciju - -out, na primjer:

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

Kombinirajući ovo s profilima izrade, lako možete mijenjati između različitih opcija kompilacije:

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

Što vam omogućava rad s više izrada, bez ponovnog pisanja svake posljednje izrade. Kada prebacite na drugi profil, Waf kompiliraće samo njega, bez potpune ponovne kompilacije svega.

Kada tako prebacujete profile izrade, morate paziti da svaki put date iste konfiguracijske parametre. To će vam pomoći izbjeći greške definicija više varijabli okruženja:

$ 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

Kompajleri i zastavice

U gornjim primjerima Waf za izradu ns-3 koristi C++ kompajler iz GCC ( g++). Ipak, moguće je promijeniti korišteni Waf C++ kompajler, definiranjem varijable okruženja CXX. Na primjer, kako biste koristili C++ kompajler Clang, clang++,

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

Na sličan način, možete postaviti Waf za korištenje distribuirane kompilacije pomoću distcc:

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

Detaljnije informacije o distcc i distribuiranoj kompilaciji možete pronaći na stranici projekta u odjeljku 'Dokumentacija'. Da biste prilikom konfiguriranja ns-3 dodali zastavice kompilatora, koristite varijablu okruženja CXXFLAGS_EXTRA.

Instalacija

Waf može se koristiti za instalaciju biblioteka na različita mesta sistema. Zadano, prikupljene biblioteke i izvršni fajlovi nalaze se u direktorijumu build, i pošto Waf poznaje lokaciju ovih biblioteka i izvršnih fajlova, nije potrebno instalirati biblioteke nigdje drugdje.

Ako korisnici preferiraju instalaciju van direktorijuma građevine, mogu izvršiti komandu ./waf install. Zadani prefix za instalaciju je /usr/local, tako da ./waf install će instalirati programe u /usr/local/bin, biblioteke u /usr/local/lib i zaglavlja u /usr/local/include. Prava superkorisnika obično su potrebna za instalaciju sa zadatim prefixom, tako da će tipična komanda biti sudo ./waf install. Prilikom pokretanja, Waf će prvo pokušati koristiti zajedničke biblioteke u direktorijumu građevine, a zatim će tražiti biblioteke prema putu do biblioteka podešenih u lokalnom okruženju. Tako da, prilikom instalacije biblioteka u sistem, dobra praksa je proveriti da li se koriste potrebne biblioteke. Korisnici mogu izabrati instalaciju s drugim prefixom, prosledjujući tokom konfigurisanja opciju --prefix, na primjer:

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

Ako kasnije, nakon građevine, korisnik unese komandu instalacije ./waf, biće korišćen prefix /opt/local.

Komanda ./waf clean treba koristiti pre ponovne konfiguracije projekta, ako će se instalirati Waf pod drugim prefixom.

Dakle, za korišćenje ns‑3 nije potrebno pozivati ./waf install. Većini korisnika ova komanda neće biti potrebna, budući da Waf preuzima trenutne biblioteke iz direktorijuma građevine, ali neki korisnici mogu smatrati ovo korisnim ako im aktivnost uključuje rad s programima van direktorijuma ns‑3.

Waf je jedinstven

Na gornjem nivou stabla izvornog koda ns‑3 postoji samo jedan Waf-skriptu. Kada počnete da radite, provest ćete mnogo vremena u direktorijumu scratch/ ili dublje, usrc/... i pri tome imati potrebu da pokrenete Waf. Samo možete da se setite gde ste, i pokrenete Waf na sljedeći način:

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

ali to će biti zamorno i podložno greškama, pa postoje bolja rešenja. Jedan od uobičajenih načina je korišćenje tekstualnog editora, kao što je emacs ili vim, u kojem se otvaraju dve terminalne sesije, jedna se koristi za građevinu ns‑3, a druga za uređivanje izvornog koda. Ako imate samo tarball, to može pomoći varijabla okruženja:

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

$ cd scratch 
$ waff build

U direktoriju modula može izgledati primamljivo dodati trivijalni waf skript kao uzorak exec ../../waf. Molimo, nemojte to raditi. To zbunjuje novake, a lošim izvršenjem dovodi do teško uočljivih grešaka prilikom kompilacije. Rješenja prikazana iznad su put kojim trebate ići.

3.5 Testiranje ns-3

Možete provesti modularne testove distribucije ns-3 pokretanjem skripta ./test.py:

$ ./test.py

Ovi testovi se izvršavaju paralelno s Waf. Na kraju, trebali biste vidjeti poruku da

92 od 92 testa su prošla (92 prošlo, 0 neuspjeha, 0 srušeno, 0 valgrind grešaka)

Ova je poruka važna za otkrivanje neuspjeha, srušavanja ili valgrind grešaka, ukazuje na probleme s kodom ili nespojivosti između alata i koda.

Također ćete vidjeti konačni ishod od Waf i testera koji pokreće svaki test, koji će izgledati otprilike ovako:

Waf: Ulazim u direktorij `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
Waf: Napuštam direktorij `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
'build' završen uspješno (1.799s) 

Izgrađeni moduli:
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

PROŠLO: TestSuite ns3-wifi-interference
PROŠLO: TestSuite histogram 

...

PROŠLO: TestSuite object
PROŠLO: TestSuite random-number-generators
92 od 92 testa su prošla (92 prošlo, 0 neuspjeha, 0 srušeno, 0 valgrind grešaka)

Ova komanda obično se pokreće od strane korisnika za brzu provjeru ispravnosti izgradnje distribucije ns-3. (Imajte na umu da redoslijed redaka „PROŠLO: …” može varirati, to je u redu. Važno je da u konačnom retku na kraju izvještaja svi testovi budu provedeni; nijedan test nije završio neuspjehom ili se srušio.) I Waf, i test.py će paralelno rasporediti rad na dostupnim jezgrama procesora računala.

3.6 Pokretanje skripte

Obično pokrećemo skripte pod kontrolom Waf. Ovo omogućuje sustavu izgradnje da osigura da su putanje do zajedničke biblioteke ispravno postavljene i da su biblioteke dostupne tijekom izvođenja. Da biste pokrenuli program, jednostavno koristite Waf s parametrom - -run. Pokrenimo za ns-3 ekvivalent sveprisutnog programa hello world, unosom sljedećeg:

$ ./waf --run hello-simulator

Waf će prvo provjeriti da li je program ispravno sastavljen i, ako je potrebno, izvršiti kompilaciju. Zatim Waf izvršava program koji će dati sljedeći izlaz.

Hello Simulator

Čestitamo! Sada ste korisnik ns‑3!

Što da radim ako ne vidim rezultat?

Ako vidite poruke Waf, koje ukazuju da je kompilacija uspješno završena, ali ne vidite izlaz "Hello Simulator", postoji mogućnost da ste u sekciji [Kompilacija-s-Waf] prebacili svoj način kompilacije na optimized, ali ste propustili povratno prebacivanje u način debug. Sav izlaz konzole korišten u ovom vodiču koristi poseban komponent ns‑3, koji obavlja zapisivanje loga, i primjenjuje se za ispis korisničkih poruka na konzolu. Izlaz iz ove komponente automatski je isključen prilikom kompajliranja optimiziranog koda - on je "optimiran". Ako ne vidite izlaz "Hello Simulator", unesite sljedeće:

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

da biste postavili Waf na kompilaciju debug verzija programa ns‑3, koje uključuju primjere i testove. Zatim trebate ponovo skompajlirati aktuelnu debug verziju koda, kucajući

$ ./waf

Sada, ako pokrenete program hello-simulator, trebali biste vidjeti očekivani rezultat.

3.6.1 Argumenti naredbenog retka

Da biste proslijedili argumente komandne linije programu ns‑3, koristite sljedeći obrazac:

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

Zamijenite s imenom vašeg programa i s argumentima. Argument - -command-template za Waf je zapravo recept za izgradnju stvarne komandne linije Waf koja se koristi za izvršavanje programa. Waf provjerava da li je kompilacija završena, postavlja putanje do zajedničke biblioteke, a zatim, koristeći dostavljeni obrazac komandne linije i ubacivši ime programa umjesto zamjenskog znaka %s, poziva izvršni fajl. Ako vam se ova sintaksa čini složenom, postoji jednostavnija opcija koja uključuje program ns‑3 i njegove argumente u jednostrukim navodnicima:

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

Drugi, posebno korisni, primjer je selektivno pokretanje setova testova. Pretpostavimo da postoji testni set (suite) mytest (zapravo ga nema). Ranije smo koristili skriptu ./test.py za paralelno pokretanje niza testova, koji više puta poziva test program test-runner. Poziv test-runner izravno za pokretanje jednog testa:

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

Argumenti će biti proslijeđeni programu test-runner. Budući da mytest ne postoji, bit će generirana poruka o grešci. Da biste ispisali dostupne opcije test-runnera, unesite:

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

3.6.2 Debagiranje

Za pokretanje ns‑3 programa putem druge utilitiy, kao što je debugger (npr. gdb) ili alat za provjeru memorije (npr. valgrind), koristite sličnu formu - --command-template = "…". Na primjer, da biste pokrenuli vaš program hello-simulator ns‑3 s argumentima: gdb $ . /waf --run=hello-simulator --command-template="gdb %s --args "

Imajte na umu da ime ns‑3 programa slijedi uz argument

, a upravljačka utilitiy (ovdje - -run) je prvi token u argumentu gdb- --args - -command-template. Opcija , dok ostatak naredbene linije pripada "nižem" programu. (Neke verzije javlja gdbne razumiju opciju gdb . U tom slučaju, uklonite argumente programa iz , dok ostatak naredbene linije pripada "nižem" programu. (Neke verzijei koristite set naredbi - -command-template .) Možemo kombinirati ovu recepturu i prethodnu za pokretanje testa unutar debugggera: gdb args$ . /waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"

Waf bi trebao biti pokrenut iz svoje lokacije na vrhu drveta ns‑3. Ova mapa postaje radna direktorija u koju će biti zapisani izlazni datoteke. Ali što učiniti ako želite pohraniti te datoteke izvan drveta izvornog koda ns‑3? Upotrijebite argument

3.6.3 Radna mapa

- --cwd $ . /waf --cwd=...:

Možda će vam biti praktičnije primati izlazne datoteke u vašoj radnoj direktoriji. U tom slučaju može pomoći takva neizravna akcija:

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

Ova dekoracija prethodne verzije naredbe čuva trenutnu radnu direktoriju, prelazi u direktorij

, a zatim instruira Wafda se promijeni radna direktorija natrag na spremljenu trenutnu radnu direktoriju prije pokretanja programa. Spominjemo naredbu Waf radi cjelovitosti izlaganja, većina korisnika jednostavno pokreće Waf iz direktorija na vrhu i tamo generira izlazne datoteke. $ . /waf --cwd=... Nastavak: poglavlje 4

🥇Vodič za mrežni simulator ns-3. Poglavlje 3 | ProHoster

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster