ns-3 casharrada simulator network. Cutubka 3aad

ns-3 casharrada simulator network. Cutubka 3aad
cutubka 1,2

3 Bilaabidda
3.1 Dulmar
3.2 Shuruudaha
3.2.1 Soo dejinta ns-3 siideynta sida kaydka isha
3.3 Soo dejinta ns-3 adoo isticmaalaya Git
3.3.1 Soo dejinta ns-3 adoo isticmaalaya Dubo
3.4 Golaha ns-3
3.4.1 Dhisme leh dhismo.py
3.4.2 Dhisidda Dubo
3.4.3 Ku dhis Waf
3.5 Tijaabinta ns-3
3.6 Ku socodsiinta qoraalka
3.6.1 Doodaha khadka taliska
3.6.2 Dejinta
3.6.3 Hagaha shaqada

Cutubka 3

Bilaabayaa

Cutubkan waxaa loogu talagalay in uu u diyaariyo akhristaha inuu ku bilaabo kombuyuutar aan waligiis rakibin ns-3. Waxay dabooshaa aaladaha la taageeray, shuruudaha, sida loo helo ns-3, sida loo dhiso ns-3, iyo sida loo tijaabiyo dhismahaaga iyo socodsiinta barnaamijyada fudud.

3.1 Dulmar

Simulator-ka ns-3 waxa loo dhisay hab ka mid ah maktabadaha software-ka ee iskaashiga ah. Inta lagu jiro kulanka, koodhka barnaamijyada isticmaaluhu wuxuu ku xidhan yahay maktabadahan. Luuqadaha barnaamijka C++ ama Python waxaa loo isticmaalaa in lagu qoro barnaamijyo gaar ah.

Ns-3 waxaa loo qaybiyaa sida koodka isha, taas oo macnaheedu yahay in nidaamka bartilmaameedku uu leeyahay jawi horumarinta software si marka hore loo dhiso maktabadaha kadibna loo dhiso barnaamijka isticmaalaha. Mabda 'ahaan, ns-3 waxaa loo qaybin karaa sidii maktabad diyaarsan oo loogu talagalay nidaam gaar ah, mustaqbalkana waxaa loo qaybin karaa habkan. Laakiin maalmahan isticmaaleyaal badan ayaa run ahaantii shaqadooda ku sameeya tafatirka ns-3 laftiisa, marka waa faa'iido in la haysto koodhka isha si loo dhiso maktabadaha. Haddii qof uu jeclaan lahaa inuu qabto shaqada abuurista maktabado diyaarsan iyo xirmooyinka nidaamyada hawlgalka, fadlan la xiriir liiska boostada ns-horumariyeyaasha.

Marka xigta, waxaan eegi doonaa seddex siyaabood oo loo soo dejiyo oo loo dhiso ns-3. Midda koowaad waa in la soo dejiyo oo la dhiso siideynta rasmiga ah ee goobta weyn. Midda labaad waa xulashada iyo isu-ururinta koobiyada noocyada horumarinta ee rakibaadda aasaasiga ah ee ns-3. Midda saddexaad waa in la isticmaalo qalab dhisme oo dheeraad ah si loogu shubo kordhin dheeraad ah ns-3. Mid walba waan dhex mari doonaa mar haddii qalabku xoogaa kala duwan yahay.

Isticmaalayaasha Linux ee khibradda leh ayaa laga yaabaa inay la yaabaan sababta ns-3 loogu bixin waayay xirmo ahaan sida inta badan maktabadaha kale ee isticmaala maareeyaha xirmada? In kasta oo ay jiraan xidhmooyin binary ah oo loogu talagalay qaybinta Linux ee kala duwan (tusaale Debian), isticmaaleyaasha badankood waxay ku dhameeyaan tafatirka maktabadaha oo ay dib u dhis ku sameeyaan ns-3 laftooda, markaa haysashada koodhka isha ee la heli karo waa anfacaya. Sababtan awgeed, waxaan diirada saari doonaa ku rakibida ilaha.

Inta badan codsiyada ns-3 xuquuqaha xidid Looma baahna, waxaa lagu talinayaa in la isticmaalo akoonka isticmaalaha aan mudnaanta lahayn.

3.2 Shuruudaha

Dhammaan maktabadaha ns-3 ee la heli karo waxay leeyihiin tiro ku tiirsanaansho ah maktabadaha qolo saddexaad, laakiin inta badan ns-3 waa la dhisi karaa oo loo isticmaali karaa taageero dhowr qaybood oo caadi ah (badanaa lagu rakibay default) qaybaha: C ++ compiler, Python, tifaftiraha koodhka isha (tusaale ahaan, sababtoo ah, emacs ama madoobaad) iyo, haddii kaydka horumarinta la isticmaalo, nidaamyada xakamaynta nooca Git. Inta badan isticmaalayaasha ugu horreeya uma baahna inay ka walwalaan haddii qaabayntooda ay soo sheegaan qaar ka mid ah ns-3 sifooyin horumarsan oo maqan, laakiin kuwa doonaya rakibid buuxda, mashruucu wuxuu bixiyaa wiki oo ay ku jiraan bogag leh talooyin iyo tabo badan oo faa'iido leh. Mid ka mid ah boggan waa bogga Rakibaadda, oo leh tilmaamaha rakibidda ee nidaamyada kala duwan, ee laga heli karo: https://www.nsnam.org/wiki/Installation.

Qaybta Shuruudaha looga baahan yahay ee wiki-kan ayaa sharxaya xirmooyinka loo baahan yahay si ay u taageeraan xulashooyinka ns-3 ee caadiga ah iyo sidoo kale waxay bixiyaan amarrada loo isticmaalo in lagu rakibo dhadhanka caadiga ah ee Linux ama macOS.

Waxaad ka faa'iidaysan kartaa fursadan si aad u sahamiso bogga ns-3 wiki ama mareegaha ugu muhiimsan: https://www.nsnam.org, sababtoo ah waxaa jira macluumaad badan oo halkaas. Laga bilaabo nooca ugu dambeeyay ee ns-3 (ns-3.29), agabyada soo socda ayaa looga baahan yahay si ay u socodsiiyaan ns-3:

Xidhmada/Nooca Qalabka

  • C++ compiler
    clang++ ama g++ (g++ nooca 4.9 ama ka sareeya)
  • Python
    nooca Python2>= 2.7.10, ama python3 nooca>=3.4
  • tag
    nooc kasta oo u dambeeyay (si aad u gasho ns-3 ee GitLab.com)
  • daamur
    Nooc kasta oo ugu dambeeyay (si aad u furto ns-3 siideynta)
  • bunzip2
    Nooc kasta oo u dambeeyay (si aad u furto xirmada ns-3 siideynta)

Si aad u hubiso nooca caadiga ah ee Python, ku qor python -V. Si aad u hubiso nooca g++, ku qor g++ -v. Haddii qalab uu maqan yahay ama aad duugoobay, fadlan tixraac hagaha rakibaadda ee bogga ns-3 wiki.

Hadda wixii ka dambeeya, waxaan u qaadaneynaa in akhristuhu uu wado Linux, MacOS, ama Linux emulator, oo uu leeyahay ugu yaraan qalabka kor ku xusan.

3.2.1 Soo dejinta ns-3 siideynta sida kaydka isha

Tani waa koorsada ficilka isticmaale cusub ee raba inuu soo dejiyo oo tijaabiyo sii deynta ugu dambeysay iyo noocyada xirmada ee ns-3. ns-3 siideynta waxaa loo daabacaa sida kaydka isha la cufan, mararka qaarkoodna loo yaqaan kubbadda cagta. kubbadda cagta waa qaab kayd software gaar ah kaas oo dhowr fayl la isku daray. Kaydka inta badan waa la cufan ns-3 habka boot via kubbadda cagta Way fududahay, kaliya waxaad u baahan tahay inaad doorato sii-deynta, soo dejiso oo ka furto.

Aynu ka soo qaadno in adiga, isticmaale ahaan, aad rabto in aad ku dhisto ns-3 hage maxalli ah oo la yiraahdo goobta shaqada. Waxaad heli kartaa nuqul shaqo oo siideynta ah adiga oo gelaya kuwan soo socda console-ka Linux (bedelaya nambarada nooca ku habboon, dabcan)

$ 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 

U fiirso utility ee kor lagu isticmaalo wget, kaas oo ah aaladda khadka taliska ee walxaha laga soo dejiyo internetka. Haddii aadan rakibin, waxaad taas u isticmaali kartaa biraawsarkaaga.

Tallaabooyinkan soo socda waxay ku geyn doonaan tusaha ns-allinone-3.29, halkaas waa inaad ku aragto dhowr faylal iyo hagayaal.

$ 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

Hadda waxaad diyaar u tahay inaad dhisto qaybinta saldhiga ns-3 waxaadna u gudbi kartaa qaybta dhismaha ns-3.

3.3 Soo dejinta ns-3 adoo isticmaalaya Git

Koodhka ns-3 waxa laga heli karaa meelaha Git ee GitLab.com at https://gitlab.com/nsnam/. Koox nsnam waxay isu keentaa kaydadka kala duwan ee loo isticmaalo mashruuca il furan.

Habka ugu fudud ee lagu bilaabi karo isticmaalka kaydka Git waa in la fargeeto ama la xidho deegaanka ns-3-allinone. Kani waa qoraallo badan oo maamula rarista iyo isku xidhka nidaamyada hoose ee aadka loo isticmaalo ee ns-3 Haddii aad ku cusub tahay Git, ereyada "fargeeto" iyo "clone" ayaa laga yaabaa inayan ku aqoon; Hadday sidaas tahay, waxaan kugula talineynaa inaad si fudud u xirto (ka sameyso nuqul kuu gaar ah) kaydka ku yaal GitLab.com sidan oo kale:

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

Marxaladdan, aragtida hagahaaga ns-3-allinone wax yar ka duwan hagaha kaydka siidaynta ee kor lagu sharaxay. Waa inay u ekaato sidatan:

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

Fadlan ogow in uu jiro qoraal soo dejiso.py, kaas oo sidoo kale soo saari doona ns-3 iyo koodhka isha ee la socda. Halkan waxaad haysataa doorasho: midkoodna soo deji sawirkii ugu dambeeyay ee horumarinta ns-3:

$ python download.py

ama doorbido sii daynta ns-3 adoo isticmaalaya calanka -n si loo muujiyo lambarka siideynta:

$ python download.py -n ns-3.29

Tallaabadan kadib u gudub hagaha ns-3-allinone kayd dheeraad ah ayaa la soo dejin doonaa ns-3, dubi, pybindgen ΠΈ netanim.

tacliiq
Mashiin leh Ubuntu16.04 nadiif ah, waxaan u baahday inaan u beddelo amarka sidan: $ sudo python3 download.py -n ns-3.29 (hadda dambe qoraallada tarjumaanka).

3.3.1 Soo dejinta ns-3 adoo isticmaalaya Dubo

Labada hab ee kor ku xusan ( kaydka isha ama kaydka ns-3-allinone via Git) ayaa faa'iido u leh helitaanka ns-3 ugu fudud ee rakibaadda oo leh dhowr addons (pybindgen si loo soo saaro xirmooyinka Python iyo netanim loogu talagalay animation network). Kaydka saddexaad ee lagu bixiyo si toos ah ns-3-allinone ayaa loo yaqaan dubi.

Dubo waa qalab loogu talagalay dhisidda iskudubarid ee software-ka laga soo aruuriyay meelo badan, oo loo sameeyay mashruuca ns-3. Dubo waxaa loo isticmaali karaa in lagu helo noocyada horumarinta ee ns-3, iyo sidoo kale in la soo dejiyo oo la dhiso kordhinta nooca saldhigga ah ee qaybinta ns-3, sida deegaanka Fulinta Xeerka Tooska ah, CradleNetwork Simulation Cradle, Awoodda lagu abuurayo xirmooyinka Python cusub iyo ns-3 "apps" oo kala duwan.

tacliiq
CradleNetwork Simulation Cradle waa qaab-dhismeed kuu oggolaanaya inaad isticmaasho xirmooyin shabakad TCP/IP oo dhab ah gudaha jiliyaha shabakadda.

Haddii aad filayso in rakibaada ns-3 ay leedahay astaamo horumarsan ama dheeraad ah, waxaad raaci kartaa dariiqan rakibaadda.

Siidaynta ns-3 ee ugu dambeysay Dubo ayaa lagu daray daamurka sii daynta. Siideynta waxaa ku jira faylka qaabeynta kaas oo kuu ogolaanaya inaad soo dejiso noocyada software-ka ee wakhtiga la sii daayo. Taasi waa, tusaale ahaan, nooca Dubo, kaas oo lagu qaybiyo sii daynta ns-3.29, waxaa loo isticmaali karaa in lagu soo saaro qaybaha siideynta ns-3 ama ka hor, laakiin looma isticmaali karo in lagu soo celiyo qaybaha siidaynta dambe (haddii faylka sharaxaadda xirmada bakeconf.xml aan la cusbooneysiin).

Waxaad sidoo kale heli kartaa nuqulkii ugu dambeeyay dubiAdigoo gelaya amarka soo socda gudaha kumbuyuutarkaaga Linux (malaha inaad Git ku rakibtay):

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

Markaad socodsiiso amarka git, waa inaad aragto wax sidan oo kale ah:

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.

Kadib marka amarka la dhameeyo Gadzhiyev waa in aad haysatid hagaha magaciisu yahay dubi, nuxurka ku jira waa inuu u ekaado sidan:

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

Ogsoonow inaad rartay dhowr qoraal oo Python ah, module Python ah oo la magacaabay dubi iyo faylka qaabeynta XML. Talaabada xigta waa inaad isticmaasho qoraaladan si aad u soo dejiso oo aad u dhisto qaybinta ns-3 ee aad dooratay. Dhowr bartilmaameed ayaa la heli karaa:

  1. ns-3.29: module u dhigma siideynta; waxay soo dejisan doontaa qaybo la mid ah sii daynta kubbadda daamurka;

  2. ns-3-dev: module la mid ah, laakiin la isticmaalayo code ka geedka horumarinta;

  3. ns-allinone-3.29: Module ay ku jiraan astaamo kale oo dheeri ah sida Click routing iyo Network Simulation Cradle, Openflow for ns-3.

  4. ns-3-allinone: oo la mid ah nooca sii daynta ee moduleka allinone, laakiin loogu talagalay code horumarinta.

tacliiq
Riix - qaab dhismeedka software modular ee abuurista router.

Openflow waa hab-maamuus lagu maareeyo habka habaynta xogta lagu gudbiyo shabakada xogta ee router-yada iyo furayaasha, hirgalinta tignoolajiyada shabakada software-qeexee.

Sawirka horumarka hadda jira (aan la sii dayn) ns-3 waxaa laga heli karaa:https://gitlab.com/nsnam/ns-3-dev.git.

Horumariyayaashu waxay isku dayaan inay ku hayaan bakhaarradan si joogto ah oo shaqeynaya, laakiin waxay ku yaalaan aagga horumarinta waxayna ka kooban yihiin kood aan la sii dayn, markaa haddii aadan qorsheyneynin inaad isticmaasho sifooyin cusub, ka dibna dooro siideynta rasmiga ah.

Waxaad ka heli kartaa nuqulkii ugu dambeeyay ee koodka adiga oo baadhaya liiska meelaha kaydka ah, ama aad tagto bogga ns-3 ee sii daynta:https://www.nsnam.org/releases/ oo gujinaya isku xirka nooca ugu dambeeyay. Tusaalahan waxaan ku sii wadi doonaa ns-3.29.

Hadda, si aan u helno qaybaha ns-3 ee aan u baahanahay, waxaan isticmaali doonaa qalabka Dubo. Aynu nidhaahno dhawr eray oo hordhac ah oo ku saabsan shaqada Dubo.

Dubo waxay u shaqeysaa adigoo ku shubaya ilaha baakadka tusaha Ilo iyo ku rakibida maktabadaha tusaha dhismaha. Dubo waxaa lagu socodsiin karaa iyadoo la tixraacayo binary-ga, laakiin haddii aad rabto inaad ordo Dubo ma aha tusaha lagu soo dejiyey, waxaa habboon in lagu daro jidka dubi jidkaaga (doorsoomiyaha deegaanka PATH), tusaale ahaan sida soo socota (tusaale Linux bash shell). Tag tusaha "dubi" ka dibna deji doorsoomayaasha deegaanka ee soo socda:

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

Tani waxay dejin doontaa barnaamijka dubi.py jidka qolofka oo u oggolaan doona barnaamijyada kale si ay u helaan fulinta iyo maktabadaha in ay abuurtay dubi. Xaaladaha qaarkood isticmaalka dubi, goobta PATH iyo PYTHONPATH ee kor lagu sharaxay looma baahna, laakiin dhisme dhamaystiran ee ns-3-allinone (oo leh baakado dheeraad ah) ayaa badanaa u baahan.

Tag hagahaaga shaqada oo geli waxa soo socda console-ka:

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

Marka xigta waxaan weydiin doonaa Dubo hubi haddii aan haysano qalab ku filan oo lagu shubo qaybaha kala duwan. garaac:

$ ./bake.py check

Waa inaad aragto wax sidan oo kale ah:

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

Gaar ahaan, soo dejinta qalabka sida Mercurial, CVS, Git iyo Bazaar ayaa lagama maarmaan u ah tallaabadan maadaama ay noo oggolaadaan inaan helno koodka. Halkaa marka ay marayso, ku rakib qalabka maqan habka caadiga ah ee nidaamkaaga (haddii aad taqaanid sida) ama la xidhiidh maamulaha nidaamka wixii caawimo ah.

Marka xigta, isku day inaad soo dejiso software-ka:

$ ./bake.py download

natiijadu waa inay noqotaa sida:

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

Tani waxay ka dhigan tahay in saddex ilood la soo dejiyay. Hadda u gudub tusaha isha oo ku qor ls; Waa inaad aragto:

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

Hadda waxaad diyaar u tahay inaad dhisto qaybinta ns-3.

3.4 Golaha ns-3

Sida soo dejinta ns-3, waxaa jira dhowr siyaabood oo loo dhiso ns-3. Waxa ugu weyn ee aan rabno inaan xoogga saarno waa ns-3 waxaa la dhisay iyadoo la adeegsanayo qalab dhisme oo la yiraahdo Wafhoos lagu tilmaamay. Isticmaalayaasha badankoodu way la shaqayn doonaan Waf, laakiin waxaa jira dhawr qoraal oo anfacaya oo kaa caawinaya inaad bilowdo ama abaabulo dhismayaal kakan. Markaa fadlan, ka hor intaadan wax akhriyin Waf, eega dhis.py iyo kulan leh dubi.

3.4.1 Dhisme leh dhismo.py

Digniin Tallaabadan dhismuhu waxa kaliya oo laga heli karaa nooca kaydka isha ee la helay sida kor lagu sharaxay; oo aan lagu soo dejin git ama dub

Markaad la shaqaynayso kaydka siidaynta kubbadda cagtagudaha ns-3-allinone Waxaa jira qoraal wax ku ool ah oo ka dhigi kara isu-ururinta qaybaha mid fudud. Waxaa loo yaqaan build.py. Barnaamijkani waxa uu mashruuca kuugu dejin doonaa habka ugu faa'iidada badan. Si kastaba ha ahaatee, ogow in habayn aad u horumarsan oo la shaqaynaysa ns-3 ay inta badan ku lug leedahay isticmaalka ns-3 nidaamkeeda dhisme, Waf, kaas oo la soo bandhigi doono hadhow casharkan.

Haddii aad soo dejisay adigoo isticmaalaya kubbadda cagta, ka dibna ku jira hagahaaga ~/goobta shaqada hage leh magac wax u eg ns-allinone-3.29. Geli kuwa soo socda:

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

Marka loo yeero dhis.py Waxaan isticmaalnay xujooyinka khadka taliska si aan u dhisno tusaalooyinka iyo imtixaanada lagu isticmaalay casharkan, kuwaas oo aan si caadi ah loogu dhisin ns-3. Sida caadiga ah, barnaamijku wuxuu sidoo kale dhisayaa dhammaan qaybaha la heli karo. Kadib, haddii aad rabto, waxaad dhisi kartaa ns-3 la'aanteed iyo imtixaan la'aan, ama ka saar modules aan looga baahnayn shaqadaada.

Waxaad arki doontaa farriimo badan oo soo-saarka soo-saarka ah oo ay soo bandhigayaan qoraalku marka ay dhisayaan qaybaha kala duwan ee aad ku shubtay. Marka hore qoraalku wuxuu isku dayi doonaa inuu dhiso animator-ka netanim, ka dibna koronto dhaliyaha pybindgen iyo ugu dambeyntii ns-3. Marka hawshu dhammaato, waa inaad aragto kuwa soo socda:

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

Saddexda sadar ee ugu dambeeya liiska waxaan ku aragnaa fariin ku saabsan cutubyada aan la dhisin:

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

Tani waxay si fudud uga dhigan tahay in qaybo ns-3 ah oo ku xidhan maktabadaha dibadda laga yaabo inaan la dhisin, ama aan loo baahnayn in loo dhiso qaabayntan. Tani macnaheedu maaha in simulator-ka aan la soo ururin ama in qaybaha la ururiyay aysan si sax ah u shaqeyn doonin.

3.4.2 Dhisidda Dubo

Haddii aad u isticmaashay dubista sare si aad u hesho koodka isha meelaha mashruuca, waxaad sii wadi kartaa inaad u isticmaasho si aad u dhisto ns-3. garaac:

$ ./bake.py build

waana inaad aragto wax sida:

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

Tilmaam: Waxa kale oo aad samayn kartaa labadaba soo dejinta oo aad dhisto tillaabooyinka hal mar adiga oo wacaya "bake.py deploy".

Isku-dubarid dhammaan qaybaha ayaa laga yaabaa inay guul-darraystaan, laakiin isu-ururinta ayaa sii socon doona haddii qayb aan loo baahnayn. Tusaale ahaan, arrin la qaadi karo dhawaan ayaa ahayd taas castxml waxaa lagu soo ururin karaa by qalab dubi ma aha dhammaan dhufto ee. Xaaladdan oo kale, fariintan oo kale ah ayaa soo bixi doonta:

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

Si kastaba ha ahaatee, castxml kaliya loo baahan yahay haddii aad rabto inaad abuurto xirmooyinka Python la cusbooneysiiyay. Inta badan isticmaalayaasha looma baahna tan (ugu yaraan ilaa ay ka beddelayaan ns-3), markaa digniinaha noocan oo kale ah si badbaado leh ayaa hadda la iskaga indho tiri karaa.

Haddii ay guuldareysato, amarka soo socda ayaa ku siin doona tilmaam ku saabsan ku tiirsanaanta maqan:

$ ./bake.py show

Ku-tiirsanaanta kala duwan ee xirmooyinka aad isku dayeyso inaad dhisto ayaa la qori doonaa.

3.4.3 Ku dhis Waf

Ilaa hadda, si aan u bilowno dhisidda ns-3, waxaan isticmaalnay qoraalka midkood dhis.py, ama qalab dubi. Qalabkan ayaa faa'iido u leh dhisidda ns-3 iyo ilaalinta maktabadaha. Dhab ahaantii, si ay u dhisaan waxay maamulaan qalabka dhismaha Waf ka tusaha ns-3. Waf lagu rakibay koodhka isha ns-3. Isticmaalayaasha intooda badani waxay si dhakhso ah ugu dhaqaaqaan isticmaalka tooska ah si ay u habeeyaan oo isugu keenaan ns-3 Waf. Markaa, si aad u sii waddo, fadlan tag ns-3 hagaha aad markii hore abuurtay.

Tani si adag looguma baahna wakhtigan, laakiin waxa ay faa'iido u yeelan doontaa in dib loogu noqdo wax yar oo la arko sida isbeddel loogu sameeyo qaabeynta mashruuca. Malaha isbeddel qaabeynta ugu faa'iidada badan ee aad samayn karto waa inaad abuurto nooc la hagaajiyay ee koodka. Sida caadiga ah, waxaad u habaysay mashruucaaga si aad u dhisto nooca qaladka. Aan eegno mashruuc si loo abuuro dhismo la hagaajiyay. Si aad u sharaxdo Waf in ay tahay in ay samayso dhismo la hagaajiyay oo ay ku jiraan tusaalooyin iyo imtixaano, waxaad u baahan doontaa inaad socodsiiso amarada soo socda:

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

Tani waxay bilaabi doontaa Waf meel ka baxsan hagaha deegaanka (si kugu habboon). Amarka ugu horreeya wuxuu ka nadiifiyaa dhismihii hore, tani inta badan maaha mid si adag loo baahan yahay, laakiin waa dhaqan wanaagsan (sidoo kale eeg dhismooyinka hoose); Tani waxay tirtiri doontaa maktabadaha hore loo abuuray iyo faylalka walxaha ku yaal tusaha dhis/. Marka mashruuca dib loo habeeyo oo nidaamka dhismuhu hubiyo ku tiirsanaanta kala duwan, waa inaad aragto wax soo saar la mid ah kuwan soo socda:

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)

Fadlan la soco qaybta ugu dambeysa ee liiska kore. Qaar ka mid ah xulashooyinka ns-3 laguma sahlo si toos ah ama waxay u baahan yihiin taageero nidaam si ay si sax ah u shaqeeyaan. Tusaale ahaan, si loo suurtageliyo XmlTo, maktabaddu waa inay ku jirtaa nidaamka libxml-2.0. Haddii maktabaddan aan la helin oo shaqada ns-3 ee u dhiganta aan la hawlgelin, farriin ayaa la soo bandhigi doonaa. Sidoo kale ogow in ay suurtagal tahay in la isticmaalo amarka sudo si aad u dejiso suid bit "ku dheji aqoonsiga kooxda wakhtiga runtime" ee barnaamijyada qaarkood. Looma hawlgelin si caadi ah oo sidaas darteed sifadaani waxay u muuqataa mid "aan shaqayn". Ugu dambeyntii, si aad u hesho liiska fursadaha karti leh, isticmaal Waf oo leh halbeeg --check-config.

Hadda aan dib u laabano oo aan ku laabano dhismihii cilladaha oo ka kooban tusaalooyin iyo imtixaanno.

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

Nadaamka dhismuhu hadda waa la dejiyay oo waxaad dhisi kartaa noocyada cilladaha barnaamijyada ns-3 adigoo si fudud u qoraya:

$ ./waf

Tallaabooyinka kor ku xusan waxaa laga yaabaa inay kugu qasbeen inaad dhisto qayb ka mid ah nidaamka ns-3 laba jeer, laakiin hadda waxaad taqaanaa sida loo beddelo qaabeynta oo loo dhiso kood la hagaajiyay.

Si aad u hubiso astaanta u shaqaynaysa qaabaynta mashruuca, waxa jira amar:

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

Muuqaalka kore dhis.py sidoo kale waxay taageertaa doodaha --enable-examples ΠΈ --enable-tests, laakiin doorashooyin kale Waf si toos ah uma taageerto. Tusaale ahaan, tani ma shaqayn doonto:

$ ./build.py --disable-python

falcelintu waxay noqon doontaa sidatan:

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

Si kastaba ha ahaatee, hawl wadeenka gaarka ah -- waxa loo isticmaali karaa in lagu gudbiyo cabbiro dheeraad ah iyada oo loo marayo waabhadaba bedelka kan kore waxaa shaqayn doona amarka soo socda:

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

sababtoo ah waxay abuurtaa amarka ugu weyn ./waf configure --disable-python. Halkan waxaa ah qaar ka mid ah talooyin hordhac ah oo ku saabsan Waf.

Wax ka qabashada khaladaadka dhismaha

ns-3 siidaynta waxa lagu tijaabiyaa isku xidheyaashii ugu dambeeyay ee C++ ee la heli karo wakhtiga la sii daayo Linux iyo MacOS wadaaga Si kastaba ha ahaatee, wakhti ka dib, qaybin cusub ayaa la sii daayaa iyada oo la socota iskudubaridyo cusub, kuwan cusubi waxay u muuqdaan inay aad uga taxadaraan digniinaha. ns-3 waxay u habaysaa dhismaheeda si uu dhammaan digniinaha ugula dhaqmo sidii khaladaad, marka mararka qaarkood haddii aad ku shaqaynayso nooc ka da'weyn nidaam cusub, digniin ururiye ayaa joojin karta dhismaha.

Tusaale ahaan, waxaa hore u jiray sii deynta ns-3.28 ee Fedora 28, kaas oo ay ku jiraan nooc cusub oo weyn gcc (gcc-8). Dhisidda sii deynta ns-3.28 ama noocyadii hore ee hoos yimaada Fedora 28, oo leh Gtk2+ lagu rakibay, qaladka soo socda ayaa dhici doona:

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

Siidaynta laga bilaabo ns-3.28.1, in Waf ikhtiyaar ayaa diyaar ah si loo xalliyo dhibaatooyinkan. Waxay joojisaa dejinta calanka "-Werror" ee g++ iyo qabiil++. Tani waa ikhtiyaarka "--disable-werror" waana in lagu dabaqaa inta lagu jiro qaabeynta:

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

Habee ama ururi

Amarrada qaar Waf waxay leeyihiin macnaha kaliya ee wajiga qaabeynta, iyo qaar ka mid ah oo kaliya ansax in wajiga dhismaha. Tusaale ahaan, haddii aad rabto inaad isticmaasho astaamaha ku dayashada ns-3, waxaad awood u yeelan kartaa dejinta xoogaa suud isticmaalaya sudo, sida kor lagu sharaxay. Tani waxay meesha ka saari doontaa amarrada tallaabada qaabeynta, oo markaa waxaad bedeli kartaa qaabeynta adoo isticmaalaya amarka soo socda, kaas oo sidoo kale ku jira tusaalooyin iyo imtixaanno.

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

Haddii aad tan sameyso Waf bilaabi doonaa sudoin la beddelo ku dayashada barnaamijyada godka abuurista code si ay ula socdaan ogolaanshaha xidid. The Waf Waxaa jira xulashooyin kale oo badan oo diyaar u ah qaabeynta iyo dhisidda tallaabooyinka. Si aad u sahamiso fursadahaaga, geli:

$ ./waf --help

Qaybta soo socota waxaan ku isticmaali doonaa qaar ka mid ah fursadaha la xiriira baaritaanka.

Profiles Golaha

Waxaan horay u aragnay sida aad u habayn karto Waf ee shirarka Debug ΠΈ ku habboon:

$ ./waf --build-profile=debug

Waxa kale oo jira profile shirka dhexe, sii daayo. Ikhtiyaarka -d waxay la mid tahay --build-profile. Astaanta dhismuhu waxay xakamaysaa isticmaalka gaynta, sheegashooyinka, iyo isku xidhka hagaajinta furayaasha:

ns-3 casharrada simulator network. Cutubka 3aad

Sida aad arki karto, gaynta iyo sheegashooyinka waxa kaliya oo lagu heli karaa dhismooyinka cilladaha. Dhaqanka lagu taliyay ayaa ah in lagu horumariyo qoraalkaaga qaab cilladaysan, ka dibna la sameeyo orod soo noqnoqda (tirokoobyada ama isbeddellada cabbirka) qaab dhismeed la hagaajiyay.

Haddii aad haysatid kood u shaqaynaya oo keliya qaar ka mid ah profile-yada dhismaha, isticmaal Code Wrapper Macro:

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;)

Asal ahaan, Waf meeluhu waxay ka dhisaan agab tusaha dhismaha. Waxaad qeexi kartaa hagaha wax soo saarka ee ka duwan adiga oo isticmaalaya ikhtiyaarka -β€―-out, tusaale ahaan:

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

Markaad tan ku darto profiles-ka dhismaha, waxaad si fudud u kala beddeli kartaa xulashooyinka isu-ururinta ee kala duwan:

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

Kaas oo kuu ogolaanaya inaad la shaqeyso shirar badan adiga oo aan dib u qorin shirkii ugu dambeeyay mar kasta. Markaad u beddesho profile kale, Waf waxa uu ururin doonaa oo kaliya, iyada oo aan si buuxda loo ururin wax walba.

Markaad qaabkan u beddesho profile-ka dhismaha, waxaad u baahan tahay inaad ka taxadirto inaad siiso isla doorashooyin isku mid ah wakhti kasta. Qeexida dhowr doorsoomayaal deegaan ayaa kaa caawin doona inaad ka fogaato khaladaadka:

$ 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

Compilers iyo calamada

Tusaalooyinka kor ku xusan Waf si loo dhiso ns-3 waxay isticmaashaa C++ compiler ka GCC ( g ++). Si kastaba ha ahaatee, waxaad bedeli kartaa mid aad isticmaasho Waf C++ compiler, iyadoo la qeexayo doorsoomiyaha deegaanka CXX. Tusaale ahaan, si aad u isticmaasho C++ compiler Clang, clang++,

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

Si la mid ah ayaad u habeyn kartaa Waf si loo isticmaalo isku-dubbarid la qaybiyey iyadoo la isticmaalayo discc:

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

Macluumaad dheeraad ah oo ku saabsan distcc iyo ururinta la qaybiyey waxaa laga heli karaa bogga mashruuca ee qaybta Dukumentiyada. Si aad ugu darto calamada iskudubaridyada marka aad habaynayso ns-3, isticmaal doorsoomiyaha deegaanka CXXFLAGS_EXTRA.

Ku rakibida

Waf waxaa loo isticmaali karaa in lagu rakibo maktabado meelo kala duwan nidaamka. Sida caadiga ah, maktabadaha la soo ururiyey iyo kuwa la fulin karo waxay ku yaalaan buugga hagaha dhiso, iyo mar haddii Waf uu yaqaan goobta maktabadahan iyo kuwa la fulin karo, looma baahna in la rakibo maktabadaha meel kale.

Haddii isticmaalayaashu door bidaan inay ku rakibaan meel ka baxsan tusaha dhismaha, waxay maamuli karaan amarka ./waf rakib. Horgalaha hore ee rakibidda waa / usr / degaanka, sidaas darteed ./waf rakib waxay ku rakibi doontaa barnaamijyada / usr / maxaliga / bin, maktabadaha gudaha / usr / maxaliga / lib iyo faylalka madaxa ee gudaha /usr/maxalli/ku dar. Xuquuqda isticmaalaha badanaa waxay u baahan yihiin in lagu dejiyo horgale aan caadi ahayn, marka amarka caadiga ah wuxuu ahaan lahaa sudo ./waf install. Marka la bilaabo, Waf wuxuu marka hore dooran doonaa inuu isticmaalo maktabadaha la wadaago ee ku jira hagaha dhismaha, ka dibna ka raadiyo maktabado ku teedsan dariiqa loo maro maktabadaha lagu habeeyay deegaanka deegaanka. Markaa marka maktabadaha lagu rakibayo nidaamka, waa dhaqan wanaagsan in la hubiyo in maktabadaha saxda ah la isticmaalay. Isticmaalayaashu waxay dooran karaan inay ku rakibaan horgale kale iyagoo gudbinaya ikhtiyaarka inta lagu jiro qaabeynta --prefix, tusaale ahaan:

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

Haddii dambe, ka dib dhismaha, isticmaaluhu wuxuu galaa amarka rakibidda ./waf, horgalaha ayaa la isticmaali doonaa /opt/maxali ah.

kooxda ./waf clean waa in la isticmaalo ka hor inta aan dib loo habeynin mashruuca haddii rakibiddu ay isticmaali doonto Waf hoos horgale kale.

Sidaa darteed, si loo isticmaalo ns-3 looma baahna in la waco ./waf install. Isticmaalayaasha badankoodu uma baahna amarkan sababtoo ah Waf waxay maktabadaha hadda jira ka soo qaadan doonaan buugga tusaha, laakiin isticmaalayaasha qaar ayaa laga yaabaa inay tan faa'iido u yeeshaan haddii hawlahooda ay ku lug leeyihiin la shaqaynta barnaamijyada ka baxsan tusaha ns-3.

Waf kali ah

Heerka sare ee geedka isha ns-3, waxaa jira hal qoraal oo Waf ah. Marka aad bilowdo shaqada, waxaad waqti badan ku qaadan doontaa buugga hagaha scratch/ ama ka sii qoto dheersrc/... isla markaasna waa in ay ordaan Waf. Meesha aad joogto waad xasuusan kartaa oo orod Waf sida soo socota:

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

laakiin tani waxay noqon doontaa mid caajis ah oo khaladku u nugul yahay, markaa waxaa jira xalal ka wanaagsan. Hal dariiqo oo caadi ah ayaa ah in la isticmaalo tifaftiraha qoraalka sida emacs ama sababtoo ah, kaas oo laba terminal la furay, mid waxaa loo isticmaalaa in lagu dhiso ns-3, ka labaadna waxaa loo isticmaalaa in lagu saxo code-ka. Haddii aad leedahay oo kaliya kubbadda cagta, markaas doorsoome deegaan ayaa ku caawin kara:

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

$ cd scratch 
$ waff build

Buuga tusaha cutubka waxa laga yaabaa in ay ku dadaasho in lagu daro qoraal yar oo waf ah sida exec ../../waf. Fadlan, ha samayn taas. Tani waxay jahawareer ku tahay kuwa cusub, marka si liidata loo sameeyo, waxay keentaa khaladaad dhisme oo adag in la ogaado. Xalalka kor ku xusan waa dariiqa ay tahay in la isticmaalo.

3.5 Tijaabinta ns-3

Waxaad samayn kartaa imtixaanada qaybinta ns-3 adigoo socodsiinaya qoraalka ./tijaabada.py:

$ ./test.py

Tijaabooyinkan waxa loo wadaa si barbar socda Waf. Ugu dambeyntii waa inaad aragto fariin leh:

92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

Tani waa fariin muhiim ah oo lagu aqoonsanayo shilalka valgrind, shilalka ama khaladaadka, taasoo tusinaysa dhibaatooyinka koodka ama iswaafaqla'aanta u dhaxaysa qalabka iyo koodka.

Waxaad sidoo kale arki doontaa natiijada kama dambaysta ah ee ka timid Waf iyo tijaabiyaha ordaya imtixaan kasta, kaas oo u ekaan doona sidan:

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)

Amarkan waxaa sida caadiga ah maamula isticmaalayaasha si ay dhaqso u xaqiijiyaan in qaybinta ns-3 si sax ah loo dhisay. (Ogsoonow in nidaamka "PASS: ..." ay u kala horreeyaan laga yaabaa inay ka duwan yihiin, tani waa caadi. Waxa muhiim ah in xariiqda kooban ee dhamaadka warbixinta ay muujinayso in dhammaan imtixaanadii la gudbay, ma jiraan wax imtixaan ah oo fashilmay ama burburay.) Iyo Wafiyo imtixaan.py waxay barbardhigi doontaa shaqada guud ahaan qaybaha processor-ka ee la heli karo ee mishiinka.

3.6 Ku socodsiinta qoraalka

Caadi ahaan waxaan maamulnaa qoraallada hoos yimaada Waf. Tani waxay u oggolaanaysaa nidaamka dhisidda si loo hubiyo in waddooyinka maktabadda la wadaago si sax ah loo dejiyay iyo in maktabadaha la heli karo wakhtiga runtime. Si aad u socodsiiso barnaamijka, si fudud u isticmaal Waf oo leh halbeeg -β€―-run. Aynu wadno ns-3 u dhigma barnaamijka meel walba hello adduunkaadoo ku qoraya kuwan soo socda:

$ ./waf --run hello-simulator

Waf ayaa marka hore hubin doona in barnaamijka si sax ah loo dhisay oo uu dhisi doonaa haddii loo baahdo. Markaa Waf wuxuu fulin doonaa barnaamij soo saaraya soo-saarka soo socda.

Hello Simulator

Hambalyo! Hadda waxaad tahay isticmaale ns-3!

Maxaan sameeyaa haddii aanan arkin natiijooyin?

Haddii aad aragto fariimaha Waftaasoo muujinaysa in dhismuhu si guul leh u dhammaaday, laakiin ma arkaysid wax-soo-saarka "Hello Simulator", markaa waxaa jirta suurtogal ah in qaybta [Build-with-Waf] aad u beddeshay qaabkaaga wax-dhisidda ku habboon, laakiin way seegtay ku noqoshada qaabka Debug. Dhammaan wax-soo-saarka console-ka ee loo isticmaalo casharradan waxay adeegsadaan qayb gaar ah oo ns-3 ah oo qabata qorista oo loo isticmaalo in lagu daabaco farriimaha gaarka ah console-ka. Wax soo saarka qaybtan si toos ah ayaa loo curyaamiyaa marka koodhka la hagaajiyay la ururiyo - waa "la hagaajiyey". Haddii aadan arkin wax soo saarka "Hello Simulator", geli kuwa soo socda:

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

si loo habeeyo Waf in la dhiso versions debug ee ns-3 barnaamijyada, oo ay ku jiraan tusaalayaal iyo imtixaano. Waa in aad dib u dhistaa nooca qaladka hadda ee koodka adiga oo ku qoraya

$ ./waf

Hadda haddii aad socodsiiso barnaamijka hello-simulator, waa inaad aragto natiijada la filayo.

3.6.1 Doodaha khadka taliska

Si aad u gudbiso xujooyinka khadka taliska barnaamijka ns-3, isticmaal qaabka soo socda:

$ ./waf --run <ns3-program> --command-template="%s <args>"

Ku beddel magaca barnaamijkaaga iyo doodaha. Dood -β€―-command-template si ay u Waf Asal ahaan waa cunto karinta lagu dhisayo khadka taliska dhabta ah Waf loo isticmaalo fulinta barnaamijka. Waf waxay hubisaa in dhismuhu uu dhammaystiran yahay, dejiyo dariiqyada maktabadda ee la wadaago, ka dib waxay isticmaashaa qaab-dhismeedka khadka taliska ee la bixiyay oo waxay ku beddeshaa magaca barnaamijka %s holder si uu ugu yeero fulinta. Haddii aad u aragto syntax-kan mid adag, waxaa jira nooc ka fudud oo ku lug leh barnaamijka ns-3 iyo doodihiisa oo ku lifaaqan hal xigasho:

$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'

Tusaalaha kale ee gaarka ah ee faa'iidada leh ayaa ah in si xul ah loo wado qolalka imtixaanada. Aynu ka soo qaadno inuu jiro qol tijaabo ah oo loo yaqaan mytest (runtii ma jiro). Xagga sare waxaan u isticmaalnay qoraalka ./test.py si aan u wadno tiro imtixaano isbarbar socda, kuwaas oo si isdaba joog ah ugu yeera barnaamijka imtixaanka tijaabiye. Wac tijaabiye si toos ah in loo sameeyo hal imtixaan:

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

Doodaha ayaa loo gudbin doonaa barnaamijka tijaabiye. Maaddaama qarsoodiga aanu jirin, fariin khalad ah ayaa la soo saari doonaa. Si aad u daabacdo ikhtiyaarada la heli karo ee imtaxaanka, geli:

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

3.6.2 Dejinta

Si loo socodsiiyo barnaamijyada ns-3 ee hoos yimaada utility kale, sida cilladaha (tusaale ahaan, gdb) ama aalad tijaabinta xusuusta (tusaale ahaan, valgrind), isticmaal qaab la mid ah -β€―-command-template = "…". Tusaale ahaan, in lagu dhex ordo cilladaha gdb barnaamijkaaga hello-simulator ns-3 oo leh doodo:

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

Ogow in magaca barnaamijka ns-3 uu la socdo doodda -β€―-run, iyo utility maamulka (halkan gdb) waa calaamadda ugu horreysa ee doodda -β€―-command-template. Ikhtiyaarka -β€―-args wargeliyaa gdbin inta kale ee talisku ay ka tirsan tahay barnaamijka "hoose". (Noocyada qaar gdb ha fahmin ikhtiyaarka -β€―-args. Xaaladdan, ka saar doodaha barnaamijka -β€―-command-template oo isticmaal amarka amarka gdb qaanso.) Waxaan isku dari karnaa habkan iyo tii hore si aan u wadno imtixaanka hoostiisa cilladaha:

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

3.6.3 Hagaha shaqada

Wafku waa in laga soo saaraa meesha uu ku yaal xagga sare ee geedka ns-3. Galkani waxa uu noqdaa hagaha shaqada ee lagu qori doono faylasha wax soo saarka. Laakiin maxaa dhacaya haddii aad rabto inaad ku ilaaliso faylashan meel ka baxsan geedka isha ns-3? Isticmaal dood -β€―-cwd:

$ ./waf --cwd=...

Waxaa laga yaabaa inaad u aragto inay ku habboon tahay inaad hesho faylasha wax soo saarka ee hagahaaga shaqada. Xaaladdan, ficillada aan tooska ahayn ee soo socda ayaa ku caawin kara:

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

Qurxintan nuqulkii hore ee amarka ayaa ilaalinaya tusaha shaqada ee hadda, wuxuu tagaa tusaha Wafka dibna u tilmaamo Waf in hagaha shaqada lagu celiyo tusaha shaqada ee hadda la kaydiyay ka hor inta aan la bilaabin barnaamijka. Waxaan xusnaa kooxda -β€―-cwd Dhamaystirka, isticmaaleyaasha intooda badani waxay si fudud Waf uga wadaan tusaha heerka ugu sarreeya oo ay ku soo saaraan faylal wax soo saar ah halkaas.

Sii wad: cutubka 4aad

Source: www.habr.com

Add a comment