Tutorial simuladair lìonra ns-3. Caibideil 3

Tutorial simuladair lìonra ns-3. Caibideil 3
caibideil 1,2

3 Toiseach tòiseachaidh
3.1 Ro-shealladh
3.2 Ro-ghoireasan
3.2.1 A’ luchdachadh sìos an naidheachd ns-3 mar thasglann tùsail
3.3 A’ luchdachadh sìos ns-3 le Git
3.3.1 A’ luchdachadh ns-3 le Bake
3.4 Co-chruinneachadh ns-3
3.4.1 Togalach le build.py
3.4.2 Togalach le Bèicearachd
3.4.3 Togalach le Waf
3.5 Deuchainn ns-3
3.6 Ruith an sgriobt
3.6.1 Argamaidean loidhne-àithne
3.6.2 Debugging
3.6.3 Leabhar-seòlaidh obrach

Caibideil 3

A ’tòiseachadh

Tha a’ chaibideil seo ag amas air an leughadair ullachadh airson tòiseachadh air coimpiutair is dòcha nach deach ns-3 a chuir a-steach a-riamh. Tha e a’ còmhdach àrd-ùrlaran le taic, ro-ghoireasan, mar a gheibh thu ns-3, mar a thogas tu ns-3, agus mar a nì thu deuchainn air do thogail agus mar a ruitheas tu prògraman sìmplidh.

3.1 Ro-shealladh

Tha an simuladair ns-3 air a thogail mar shiostam de leabharlannan bathar-bog co-obrachail. Nuair a thèid a thogail, tha còd prògram cleachdaiche ceangailte ris na leabharlannan sin. Gus prògraman àbhaisteach a sgrìobhadh, thathas a’ cleachdadh C ++ no cànanan prògramadh Python.

Tha Ns-3 air a chuairteachadh mar chòd stòr, a tha a’ ciallachadh gum feum àrainneachd leasachaidh bathar-bog a bhith aig an t-siostam targaid gus na leabharlannan a thogail an toiseach agus an uairsin am prògram cleachdaiche a thogail. Ann am prionnsapal, faodar ns-3 a sgaoileadh mar leabharlannan deiseil airson siostam sònraichte, agus san àm ri teachd faodar an sgaoileadh san dòigh seo. Ach na làithean seo, bidh mòran de luchd-cleachdaidh a’ dèanamh an cuid obrach le bhith a’ deasachadh ns-3 fhèin, agus mar sin tha e feumail gum bi an còd stòr gus na leabharlannan a thogail. Ma tha cuideigin airson obair a dhèanamh gus leabharlannan agus pasganan deiseil a chruthachadh airson siostaman obrachaidh, cuir fios chun liosta puist ns-luchd-leasachaidh.

An ath rud, seallaidh sinn ri trì dòighean air luchdachadh sìos agus togail ns-3. Is e a’ chiad fhear an sgaoileadh oifigeil a luchdachadh sìos agus a thogail bhon phrìomh làrach. Is e an dàrna fear taghadh agus co-chruinneachadh lethbhric de dhreachan leasachaidh den stàladh bonn ns-3. Tha an treas fear a’ cleachdadh innealan togail a bharrachd gus barrachd leudachain a luchdachadh airson ns-3. Thèid sinn tro gach fear, oir tha na h-innealan beagan eadar-dhealaichte.

Is dòcha gum bi iongnadh air luchd-cleachdaidh eòlach Linux carson nach eil ns-3 air a thoirt seachad mar phasgan mar a’ mhòr-chuid de leabharlannan eile a ’cleachdadh manaidsear pacaid? Ged a tha pasganan binary ann airson diofar sgaoilidhean Linux (me Debian), bidh a’ mhòr-chuid de luchd-cleachdaidh a’ deasachadh nan leabharlannan agus feumaidh iad ns-3 ath-thogail iad fhèin, agus mar sin tha e goireasach an stòr a bhith ri fhaighinn. Air an adhbhar seo, cuiridh sinn fòcas air stàladh bhon stòr.

Airson a’ mhòr-chuid de thagraidhean ns-3 còraichean freumh Chan eil feum air, thathas a’ moladh cunntas cleachdaiche gun bhuannachd a chleachdadh.

3.2 Ro-ghoireasan

Tha grunn eisimeileachd aig an t-seata iomlan de leabharlannan ns-3 a tha rim faighinn air leabharlannan treas-phàrtaidh, ach sa mhòr-chuid faodar ns-3 a thogail agus a chleachdadh le taic airson grunn phàirtean cumanta (gu tric air an cur a-steach gu bunaiteach): C ++ compiler, Python , deasaiche còd stòr (mar eisimpleir, Vim, emacs no Eclipse) agus, ma thèid tasgaidhean leasachaidh a chleachdadh, siostaman smachd dreach Git. Chan fheum a’ mhòr-chuid de luchd-cleachdaidh ùr a bhith draghail ma tha an rèiteachadh aca ag aithris gu bheil cuid de fheartan ns-3 a bharrachd a dhìth, ach dhaibhsan a tha airson làn stàladh, tha am pròiseact a’ toirt seachad uicidh anns a bheil duilleagan le tòrr mholaidhean agus molaidhean feumail. Is e aon duilleag den leithid an duilleag stàlaidh le stiùireadh stàlaidh airson diofar shiostaman, ri fhaighinn aig: https://www.nsnam.org/wiki/Installation.

Tha an earrann “Ro-ghoireasan” den duilleag uici seo a’ mìneachadh dè na pacaidean a tha a dhìth gus taic a thoirt do roghainnean cumanta ns-3 agus cuideachd a’ toirt seachad na h-òrdughan a chleachdar airson an stàladh air blasan cumanta Linux no macOS.

Faodaidh tu an cothrom a ghabhail gus an uicidh ns-3 no am prìomh làrach-lìn a rannsachadh: https://www.nsnam.orgoir tha mòran fiosrachaidh ann. A’ tòiseachadh leis an tionndadh as ùire de ns-3 (ns-3.29), tha feum air na h-innealan a leanas gus ns-3 a ruith:

Pasgan Innealan / Tionndadh

  • C ++ neach-cruinneachaidh
    clang++ no g++ (g++ dreach 4.9 no nas ùire)
  • Python
    tionndadh python2> = 2.7.10, no tionndadh python3> = 3.4
  • dhol
    tionndadh as ùire sam bith (gus faighinn gu ns-3 air GitLab.com)
  • tarra
    tionndadh as ùire sam bith (airson dì-phapadh ns-3 release)
  • bunzip 2
    dreach sam bith o chionn ghoirid (airson sgaoileadh ns-3 a dhì-phapadh)

Gus sgrùdadh a dhèanamh air an tionndadh Python bunaiteach, dèan seòrsa python -V. Gus sùil a thoirt air an tionndadh de g ++, dèan seòrsa g++ -v. Ma tha innealan sam bith a dhìth no ro shean, thoir sùil air an stiùireadh stàlaidh air duilleag wiki ns-3.

Bho seo a-mach, tha sinn a’ gabhail ris gu bheil an leughadair a’ ruith Linux, MacOS, no emuladair àrainneachd Linux, agus gu bheil co-dhiù na h-innealan gu h-àrd aige.

3.2.1 A’ luchdachadh sìos an naidheachd ns-3 mar thasglann tùsail

Is e seo an dòigh air a dhol airson neach-cleachdaidh ùr a tha airson luchdachadh sìos agus cluich leis na dreachan foillseachaidh is pacaid as ùire de ns-3. Tha fiosan ns-3 air am foillseachadh mar thasglannan stòr teann, ris an canar uaireannan tarball. tarball na chruth tasglann bathar-bog sònraichte anns a bheil grunn fhaidhlichean gan cur còmhla. Mar as trice tha an tasglann air a dhlùthadh. pròiseas bròg ns-3 tro tarball tha e sìmplidh, cha leig thu leas ach brath a thaghadh, a luchdachadh sìos agus a dhì-phapadh.

Gabhamaid ris gu bheil thu fhèin, mar neach-cleachdaidh, airson ns-3 a thogail ann an eòlaire ionadail ainmichte àite-obrach. Gheibh thu leth-bhreac obrach den fhoillseachadh le bhith a’ taipeadh na leanas a-steach don consol Linux (cuir na h-àireamhan dreach iomchaidh an àite, gu dearbh)

$ 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 

Thoir aire don ghoireas a chaidh a chleachdadh gu h-àrd s an Iar-, a tha na inneal loidhne-àithne airson rudan a luchdachadh sìos bhon eadar-lìn. Mura h-eil thu air a stàladh, faodaidh tu do bhrobhsair a chleachdadh airson a dhèanamh.

Le bhith a’ leantainn nan ceumannan seo atharraichidh e gu eòlaire ns-allinone-3.29 far am bu chòir dhut grunn fhaidhlichean agus chlàran fhaicinn

$ 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

Tha thu a-nis deiseil gus an cuairteachadh bonn ns-3 a thogail agus faodaidh tu gluasad air adhart chun roinn air togalach ns-3.

3.3 A’ luchdachadh sìos ns-3 le Git

Tha an còd ns-3 ri fhaighinn ann an stòran Git air GitLab.com aig https://gitlab.com/nsnam/. Buidheann nsnam a’ toirt còmhla diofar thasgaidhean a chleachdar le pròiseact le còd fosgailte.

Is e an dòigh as fhasa tòiseachadh air stòran Git a chleachdadh a bhith a’ forc no a’ gleusadh na h-àrainneachd. ns-3-allinone. Is e seo seata de sgriobtaichean a bhios a’ riaghladh luchdachadh is togail nan fo-shiostaman ns-3 as cumanta. Ma tha thu ùr do Git, is dòcha nach eil na briathran "forc" agus "clone" eòlach ort; ma tha, tha sinn a’ moladh gun dèan thu dìreach clonadh (dèan do leth-bhreac fhèin de) stòr GitLab.com mar a leanas:

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

Aig an ìre seo, sealladh an eòlaire agad ns-3-allinone beagan eadar-dhealaichte bhon eòlaire tasglann fuasglaidh a chaidh a mhìneachadh gu h-àrd. Bu chòir dha coimhead air rudeigin mar seo:

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

Thoir aire do làthaireachd an sgriobt luchdaich sìos.py, a bheir a-mach cuideachd ns-3 agus an còd stòr na chois. An seo tha roghainn agad: an dàrna cuid luchdaich sìos an dealbh leasachaidh ns-3 as ùire:

$ python download.py

no b’ fheàrr leis an naidheachd ns-3 a’ cleachdadh a’ bhratach -n gus an àireamh fuasglaidh a shònrachadh:

$ python download.py -n ns-3.29

Às deidh a 'cheum seo san eòlaire ns-3-allinone thèid stòran a bharrachd a luchdachadh sìos ns-3, a 'fuine, pybindgen и lìontan.

thuirt
Air inneal glan Ubuntu16.04, dh'fheumadh mi an àithne atharrachadh airson coimhead mar seo: $ sudo python3 download.py -n ns-3.29 (notaichean an eadar-theangair an-seo).

3.3.1 A’ luchdachadh ns-3 le Bake

An dà dhòigh gu h-àrd (stòr tasglann no stòr ns-3-allinone via Git) feumail airson an stàladh ns-3 as sìmplidh fhaighinn le beagan addons (pybindgen gus ceanglachan Python a ghineadh, agus lìontan gus an lìonra a bheothachadh). Canar an treas stòr a chaidh a sholarachadh gu bunaiteach ann an ns-3-allinone a 'fuine.

Bèicear na inneal togail co-òrdanaichte ioma-stòrais a chaidh a leasachadh airson pròiseact ns-3. Bèicear faodar a chleachdadh gus dreachan leasachaidh de ns-3 fhaighinn, a bharrachd air a bhith a’ luchdachadh sìos agus a’ togail leudachaidhean air an dreach bunaiteach den sgaoileadh ns-3, leithid an àrainneachd Cur an gnìomh còd dìreach, Cradle Simulation Network Cradle, an comas ceanglachan Python ùra a chruthachadh, agus diofar “iarrtasan” ns-3.

thuirt
Tha CradleNetwork Simulation Cradle na fhrèam a leigeas leat cruachan lìonra TCP / IP fìor a chleachdadh taobh a-staigh simuladair lìonra.

Ma tha thu den bheachd gum bu chòir feartan adhartach no a bharrachd a bhith aig an stàladh ns-3 agad, faodaidh tu an t-slighe stàlaidh seo a leantainn.

Anns na foillseachaidhean o chionn ghoirid de ns-3 Bèicear air a chur ris an fhoillseachadh teàrr. Anns an fhoillseachadh tha faidhle rèiteachaidh a leigeas leat na dreachan as ùire den bhathar-bog a luchdachadh sìos aig an àm a chaidh an sgaoileadh a chruthachadh. Is e sin, mar eisimpleir, dreach Bèicear, a tha air a chuairteachadh leis an fhoillseachadh ns-3.29, a chleachdadh gus co-phàirtean fhaighinn air ais airson an sgaoileadh ns-3 sin no nas tràithe, ach chan urrainnear a chleachdadh gus co-phàirtean fhaighinn air ais airson fiosan nas fhaide air adhart (ma tha faidhle tuairisgeul a’ phacaid bakeconf.xml gun ùrachadh).

Gheibh thu cuideachd an leth-bhreac as ùire a 'fuinele bhith a’ cuir a-steach an àithne a leanas a-steach don chonsal Linux agad (a’ gabhail ris gu bheil Git agad air a chuir a-steach):

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

Fhad ‘s a tha thu a’ ruith an àithne git, bu chòir dhut rudeigin mar na leanas fhaicinn:

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.

Às deidh an àithne a chrìochnachadh clone bu chòir dhut eòlaire ainmeachadh a 'fuine, aig am bu chòir an susbaint a bhith a’ coimhead rudeigin mar seo:

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

Thoir an aire gu bheil thu air grunn sgriobtaichean Python a luchdachadh, modal Python air ainmeachadh a 'fuine agus faidhle rèiteachaidh XML. Is e an ath cheum na sgriobtaichean sin a chleachdadh gus an cuairteachadh ns-3 de do roghainn a luchdachadh sìos agus a thogail. Tha grunn thargaidean gnàthachaidh rim faighinn:

  1. ns-3.29: modal a fhreagras ris an fhoillseachadh; luchdaichidh e sìos co-phàirtean coltach ris an tarball fuasglaidh;

  2. ns-3-dev: modal coltach ris, ach a 'cleachdadh còd bhon chraobh leasachaidh;

  3. ns-allinone-3.29: Modal anns a bheil feartan adhartach eile leithid Click Routing agus Network Simulation Cradle, Openflow airson ns-3.

  4. ns-3-allinone: coltach ris an dreach fuasglaidh den mhodal allinone, ach airson còd leasachaidh.

thuirt
Put - ailtireachd bathar-bog modular airson routers a chruthachadh.

Tha Openflow na phròtacal airson a bhith a’ làimhseachadh dàta a thèid a ghluasad thairis air lìonra dàta le routers agus suidsichean, a bhios a’ cur an gnìomh teicneòlas lìonra a tha air a mhìneachadh le bathar-bog.

Gheibhear an dealbh leasachaidh làithreach (neo-sgaoilidh) de ns-3 aig:https://gitlab.com/nsnam/ns-3-dev.git.

Bidh an luchd-leasachaidh a’ feuchainn ris na tasgaidhean sin a chumail ann an staid obrach cunbhalach, ach tha iad anns an raon leasachaidh agus tha còd neo-sgaoilidh annta, mar sin mura h-eil thu an dùil feartan ùra a chleachdadh, tagh an sgaoileadh oifigeil.

Gheibh thu an tionndadh as ùire den chòd le bhith a’ brobhsadh liosta nan stòran, no le bhith a’ dol gu duilleag-lìn ns-3 Releases:https://www.nsnam.org/releases/ agus cliog air a’ cheangal airson an tionndadh as ùire. San eisimpleir seo, leanaidh sinn air adhart le ns-3.29.

A-nis, gus na pàirtean ns-3 a tha a dhìth oirnn fhaighinn, cleachdaidh sinn an inneal Bèicear. Canaidh sinn beagan fhaclan tòiseachaidh mun obair Bèicear.

Bidh bèicearachd ag obair le bhith a’ luchdachadh sìos stòran pacaid gu eòlaire an tùs agus a’ stàladh leabharlannan anns an eòlaire togail. Bèicear Faodar a ruith le bhith a’ toirt iomradh air an dàna, ach ma tha thu airson ruith Bèicear chan ann bhon eòlaire anns an deach a luchdachadh sìos, tha e ciallach an t-slighe a chuir ris a 'fuine gu do shlighe (caochladair àrainneachd PATH), mar eisimpleir, mar a leanas (eisimpleir airson slige bash Linux). Atharraich don eòlaire “bèicearachd” agus an uairsin suidhich na caochladairean àrainneachd a leanas:

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

Cuiridh seo am prògram air dòigh fuine.py gu slighe nan sligean agus leig le prògraman eile na gnìomhan agus na leabharlannan a chruthaich e a lorg a 'fuine. Ann an cuid de chùisean cleachdaidh a 'fuine, chan eil feum air an t-suidheachadh PATH agus PYTHONPATH a tha air a mhìneachadh gu h-àrd, ach mar as trice bidh togail iomlan de ns-3-allinone (le pasganan a bharrachd).

Rach don eòlaire obrach agus cuir a-steach na leanas sa chonsail:

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

An ath rud, bidh sinn a 'faighneachd Bèicear thoir sùil a bheil innealan gu leòr againn airson diofar phàirtean a luchdachadh sìos. Dial:

$ ./bake.py check

Bu chòir dhut rudeigin mar na leanas fhaicinn:

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

Gu sònraichte, tha innealan luchdachadh sìos mar Mercurial, CVS, Git, agus Bazaar riatanach airson a 'cheum seo, oir tha iad a' toirt cothrom dhuinn an còd fhaighinn. Aig an ìre seo, stàlaich na h-innealan a tha a dhìth san dòigh àbhaisteach airson an t-siostam agad (ma tha fios agad ciamar) no cuir fios gu rianadair an t-siostaim agad airson cuideachadh.

An ath rud, feuch am bathar-bog a luchdachadh sìos:

$ ./bake.py download

Bu chòir gum biodh an toradh rudeigin mar:

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

Bidh seo a’ ciallachadh gun deach trì stòran a luchdachadh sìos. A-nis atharraich chun eòlaire stòr agus dèan seòrsa ls; Bu chòir dhut faicinn:

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

Tha thu a-nis deiseil airson an cuairteachadh ns-3 a thogail.

3.4 Co-chruinneachadh ns-3

Coltach ri luchdachadh sìos ns-3, tha grunn dhòighean ann air ns-3 a thogail. Is e am prìomh rud a tha sinn airson cuideam a chuir air gu bheil ns-3 air a thogail le inneal togail ris an canar Ciair a mhìneachadh gu h-ìosal. Bidh a’ mhòr-chuid de luchd-cleachdaidh ag obair leis Ci, ach tha cuid de sgriobtaichean feumail ann a chuidicheas tu gus toglaichean nas iom-fhillte a thòiseachadh no a chuir air dòigh. Mar sin feuch an leugh thu mu dheidhinn Ci, thoir sùil air togail.py agus cruinneachadh le a 'fuine.

3.4.1 Togalach le build.py

Thoir aire! Chan eil an ceum togail seo ri fhaighinn ach bhon dreach den tasglann stòr a fhuaireadh mar a chaidh a mhìneachadh gu h-àrd; cha deach a luchdachadh sìos tro git no bèicearachd.

Nuair a bhios tu ag obair le tasglann foillseachaidh tarball, ann ns-3-allinone Tha sgriobt feumail ann a nì e nas fhasa co-phàirtean a chruinneachadh. Canar build.py ris. Stèidhichidh am prògram seo am pròiseact dhut anns an dòigh as fheumaile. Ach, thoir an aire gu bheil suidheachadh agus obair nas adhartaiche le ns-3 mar as trice a’ toirt a-steach cleachdadh siostam togail ns-3 fhèin, Waf, a thèid a thoirt a-steach nas fhaide air adhart san stiùireadh seo.

Ma luchdaich thu sìos le tarball, an uairsin anns an eòlaire agad ~/àite-obrach bu chòir eòlaire a bhith ann air ainmeachadh rudeigin mar ns-allinone-3.29. Cuir a-steach na leanas:

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

Nuair a chaidh a ghairm togail.py tha sinn air argamaidean loidhne-àithne a chleachdadh gus na h-eisimpleirean agus na deuchainnean a chaidh a chleachdadh san oideachadh seo a thogail nach eil air an togail gu bunaiteach ann an ns-3. Gu gnàthach, bidh am prògram cuideachd a’ togail a h-uile modal a tha ri fhaighinn. An uairsin, ma thogras tu, faodaidh tu ns-3 a thogail gun eisimpleirean agus deuchainnean, no cuir às do mhodalan nach eil a dhìth airson do chuid obrach.

Chì thu mòran teachdaireachdan toraidh cruinneachaidh air an taisbeanadh leis an sgriobt fhad ‘s a tha e a’ togail na diofar phàirtean a luchdaich thu sìos. An toiseach feuchaidh an sgriobt ris a’ bheòthadair a thogail lìontan, an uairsin an gineadair ceangail pybindgen agus mu dheireadh ns-3. Aig deireadh a 'phròiseis, bu chòir dhut na leanas fhaicinn:

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

Anns na trì loidhnichean mu dheireadh den liostadh, chì sinn teachdaireachd mu mhodalan nach deach a thogail:

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

Tha e dìreach a’ ciallachadh gur dòcha nach deach cuid de mhodalan ns-3 a tha an urra ri leabharlannan taobh a-muigh a thogail, no nach fheum iad a bhith air an togail airson an rèiteachaidh seo. Chan eil seo a 'ciallachadh nach deach an simuladair a thogail no nach obraich na modalan cruinnichte gu ceart.

3.4.2 Togalach le Bèicearachd

Ma chleachd thu bèicearachd gu h-àrd gus an còd tùsail fhaighinn bho stòran a’ phròiseict, faodaidh tu leantainn air adhart ga chleachdadh gus ns-3 a thogail cuideachd. Dial:

$ ./bake.py build

agus bu chòir dhut rudeigin mar seo fhaicinn:

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

Tooltip: Faodaidh tu cuideachd an dà chuid ceumannan a luchdachadh sìos agus a thogail aig an aon àm le bhith a 'gairm "bake.py deploy".

Nuair a bhios tu a’ togail a h-uile pàirt, tha fàilligeadh comasach, ach leanaidh an co-chruinneachadh mura h-eil feum air a’ phàirt. Mar eisimpleir, b’ e cùis so-ghiùlain o chionn ghoirid a bha sin casxml faodar a chruinneachadh le inneal a 'fuine chan ann air a h-uile àrd-ùrlar. Anns a 'chùis seo, nochdaidh teachdaireachd mar seo:

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

Ach, casxml chan eil feum air ach ma tha thu airson ceanglaichean Python ùraichte a chruthachadh. Airson a’ mhòr-chuid de luchd-cleachdaidh, chan eil feum air seo (co-dhiù gus an atharraich iad ns-3), agus mar sin faodar na rabhaidhean sin a leigeil seachad gu sàbhailte airson a-nis.

Ma dh’ fhailicheas e, bheir an àithne a leanas beachd dhut mu eisimeileachd a tha a dhìth:

$ ./bake.py show

Bidh na diofar eisimeileachd de na pacaidean a tha thu a’ feuchainn ri thogail air an liostadh.

3.4.3 Togalach le Waf

Suas chun na h-ìre seo, gus tòiseachadh air togail ns-3, tha sinn air an sgriobt a chleachdadh togail.py, no inneal a 'fuine. Tha na h-innealan sin feumail airson ns-3 a thogail agus leabharlannan a chumail suas. Gu dearbh, airson togail bidh iad a 'ruith an inneal togail Ci bhon eòlaire ns-3. Ci air a chuir a-steach leis a’ chòd stòr ns-3. Bidh a’ mhòr-chuid de luchd-cleachdaidh airson ns-3 a rèiteachadh agus a thogail gu sgiobalta a’ gluasad gu cleachdadh dìreach Ci. Mar sin, airson leantainn air adhart, feuch an atharraich thu dhan eòlaire ns-3 a chruthaich thu an toiseach.

Chan eil e gu tur riatanach aig an ìre seo, ach tha e feumail ceum air ais a ghabhail agus faicinn mar a nì thu atharrachadh air rèiteachadh a’ phròiseict. Is dòcha gur e an atharrachadh rèiteachaidh as fheumaile as urrainn dhut a dhèanamh gus dreach leasaichte den chòd a chruthachadh. Gu gnàthach, tha thu air do phròiseact a rèiteachadh gus an tionndadh deasbaid a thogail. Bheir sinn sùil air a’ phròiseact gus togalach làn-leasaichte a chruthachadh. Gus mìneachadh dha Waf gum bu chòir dha togalaichean làn-leasaichte a dhèanamh a tha a’ toirt a-steach eisimpleirean agus deuchainnean, feumaidh tu na h-òrdughan a leanas a ruith:

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

Thèid seo a chuir air bhog Ci taobh a-muigh an eòlaire ionadail (airson do ghoireasachd). Bidh a 'chiad àithne a' glanadh an togail a bh 'ann roimhe, mar as trice chan eil e riatanach, ach tha e na dheagh chleachdadh (faic cuideachd pròifilean togail gu h-ìosal); bheir seo air falbh na leabharlannan a chaidh a chruthachadh roimhe agus na faidhlichean nì a chaidh a lorg san eòlaire togail / togail. Nuair a thèid am pròiseact ath-dhealbhadh agus an siostam togail a’ sgrùdadh airson diofar eisimeileachd, bu chòir dhut toradh coltach ris na leanas fhaicinn:

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)

Thoir aire don phàirt mu dheireadh den liostadh gu h-àrd. Chan eil cuid de roghainnean ns-3 air an comasachadh gu bunaiteach no tha feum aca air taic bhon t-siostam gus obrachadh mar bu chòir. Mar eisimpleir, gus XmlTo a chomasachadh, feumaidh an leabharlann a bhith aig an t-siostam libxml-2.0. Mura deach an leabharlann seo a lorg agus nach biodh am feart ns-3 co-fhreagarrach air a chomasachadh, thèid teachdaireachd a thaisbeanadh. Thoir an aire cuideachd gu bheil e comasach an àithne a chleachdadh sudo gus am pìos suid “suidhich ID buidhne aig àm ruith” airson prògraman sònraichte. Chan eil e air a chomasachadh gu bunaiteach agus mar sin tha am feart seo air a thaisbeanadh mar “chan eil e comasach”. Mu dheireadh, gus liosta de roghainnean comasach fhaighinn, cleachd Ci le paramadair --check-config.

A-nis rachamaid air ais agus tionndaidh air ais chun togalach deasbaid anns a bheil na h-eisimpleirean agus na deuchainnean.

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

Tha an siostam togail a-nis stèidhichte agus faodaidh tu dreachan deasbaid de phrògraman ns-3 a thogail le bhith dìreach a’ taipeadh:

$ ./waf

Ged is dòcha gu bheil na ceumannan gu h-àrd air toirt ort pàirt den t-siostam ns-3 a thogail dà uair, a-nis tha fios agad mar a nì thu ath-dhealbhadh agus còd làn-leasaichte a thogail.

Gus faighinn a-mach dè am pròifil a tha gnìomhach airson rèiteachadh pròiseict sònraichte, tha òrdugh ann:

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

An suidheachadh gu h-àrd togail.py cuideachd a’ toirt taic do argamaidean --enable-examples и --enable-tests, ach roghainnean eile Ci chan eil e a’ toirt taic dìreach. Mar eisimpleir, chan obraich seo:

$ ./build.py --disable-python

bidh am freagairt mar seo:

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

Ach, faodar an gnìomhaiche sònraichte - - a chleachdadh gus crìochan a bharrachd a thoirt seachad tro waf, mar sin obraichidh an àithne a leanas an àite na tha gu h-àrd:

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

oir tha e a 'cruthachadh a' phrìomh àithne ./waf rèiteachadh --disable-python. Seo cuid de mholaidhean tòiseachaidh eile mu dheidhinn Ci.

Togail Làimhseachadh Mearachd

Thathas a’ dèanamh deuchainn air fiosan ns-3 air na compilearan C ++ as ùire a tha rim faighinn aig àm an sgaoilidh air sgaoilidhean cumanta Linux agus MacOS. Ach, thar ùine, thèid sgaoilidhean ùra a leigeil ma sgaoil le luchd-cruinneachaidh ùra, agus tha na companaich ùra sin buailteach a bhith nas pedantic mu rabhaidhean. Bidh ns-3 a’ rèiteachadh an togail aige gus a h-uile rabhadh a làimhseachadh mar mhearachdan, mar sin uaireannan ma tha thu a’ ruith dreach nas sine air siostam nas ùire, faodaidh rabhadh cruinneachaidh stad a chuir air an togail.

Mar eisimpleir, chaidh ns-3.28 a leigeil ma sgaoil roimhe seo airson Fedora 28 a bha a’ toirt a-steach prìomh dhreach ùr gcc (gcc-8). Cruthaichidh sgaoileadh togail ns-3.28 no nas tràithe fo Fedora 28 le Gtk2+ a’ mhearachd a leanas:

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

Ann am fiosan a’ tòiseachadh le ns-3.28.1, Ci tha roghainn ri fhaighinn gus na duilgheadasan sin fhuasgladh. Cuiridh e à comas a’ bhratach “-Werror” a shuidheachadh ann an g++ agus clang++. Is e seo an roghainn "--disable-werror", feumar a chuir an sàs rè rèiteachadh:

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

rèiteachadh no cruinneachadh

Cuid de òrdughan Ci chan eil iad brìoghmhor ach anns an ìre rèiteachaidh, agus tha cuid dligheach a-mhàin aig ìre togail. Mar eisimpleir, ma tha thu airson na feartan emulation ns-3 a chleachdadh, faodaidh tu an suidheachadh bit a thionndadh air deas a ’cleachdadh sudomar a chaidh a mhìneachadh gu h-àrd. Cuiridh seo thairis na h-òrdughan ceum rèiteachaidh, gus an urrainn dhut an rèiteachadh atharrachadh leis an àithne a leanas, anns a bheil eisimpleirean agus deuchainnean cuideachd.

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

Ma nì thu seo Ci Thèid a chuir air bhog sudogus prògraman socaid còd emulation atharrachadh gus ruith le còraichean freumh. Tha a ' Ci tha mòran a bharrachd roghainnean rim faighinn airson na ceumannan rèiteachaidh agus togail. Gus sgrùdadh a dhèanamh air roghainnean, dèan seòrsa:

$ ./waf --help

Anns an ath earrann, cleachdaidh sinn cuid de roghainnean co-cheangailte ri deuchainn.

Tog pròifilean

Tha sinn mu thràth air faicinn mar a thèid a stèidheachadh Ci airson co-chruinneachaidhean debug и leasaichte:

$ ./waf --build-profile=debug

Tha ìomhaigh togail eadar-mheadhanach ann cuideachd, release. Roghainn -d tha co-chosmhail ri --build-profile. Bidh am pròifil togail a’ cumail smachd air cleachdadh logadh, dearbhaidhean, agus suidsichean optimization cruinneachaidh:

Tutorial simuladair lìonra ns-3. Caibideil 3

Mar a chì thu, chan eil logadh agus dearbhaidhean rim faighinn ach ann an toglaichean deasbaid. Is e an cleachdadh a thathar a’ moladh do sgriobt a leasachadh ann am modh deasbaid, an uairsin ruith gu ath-aithriseach (airson staitistig no atharrachaidhean paramadair) ann am pròifil togail làn-leasaichte.

Ma tha còd agad nach bu chòir a ruith ach ann an cuid de phròifil togail, cleachd an 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;)

Default, Ci cuir na stuthan togail anns an eòlaire togail. Faodaidh tu eòlaire toraidh eile a shònrachadh leis an roghainn - -outmar eisimpleir:

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

Le bhith ga chur còmhla ri pròifilean togail, is urrainn dhut gu furasta gluasad eadar diofar roghainnean cruinneachaidh:

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

Leigidh seo leat obrachadh le grunn thogalaichean gun a bhith agad ri an togalach as ùire ath-sgrìobhadh gach turas. Nuair a thionndaidheas tu gu pròifil eile, Ci cha chuir e ri chèile ach e, gun a h-uile càil ath-chruinneachadh gu tur.

Nuair a thionndaidheas tu pròifilean togail san dòigh seo, feumar a bhith faiceallach na h-aon roghainnean rèiteachaidh a thoirt seachad gach turas. Faodaidh tu mearachdan a sheachnadh le bhith a’ mìneachadh beagan caochladairean àrainneachd:

$ 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 agus brataichean

Anns na h-eisimpleirean gu h-àrd Ci gus ns-3 a thogail a’ cleachdadh an compiler C++ bho GCC ( g ++). Ge-tà, faodaidh tu an cleachdadh atharrachadh Ci C ++ compiler, le bhith a’ mìneachadh caochladair àrainneachd CXX. Mar eisimpleir, gus an compiler C ++ Clang, clang ++ a chleachdadh,

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

San aon dòigh, faodaidh tu a shuidheachadh Ci cleachdadh co-chruinneachadh sgaoilte le discc:

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

Gheibhear tuilleadh fiosrachaidh mu distcc agus cruinneachadh sgaoilte air duilleag a’ phròiseict anns an roinn Sgrìobhainnean. Gus brataichean cruinneachaidh a chuir ris nuair a bhios tu a’ rèiteachadh ns-3, cleachd caochladair àrainneachd CXXFLAGS_EXTRA.

suidheachadh

Ci faodar a chleachdadh gus leabharlannan a chuir a-steach ann an diofar àiteachan air an t-siostam. Gu gnàthach, tha na leabharlannan togte agus na gnìomhan so-ghnìomhaichte suidhichte san eòlaire togail, agus leis gu bheil fios aig Waf far a bheil na leabharlannan sin agus na rudan so-ghnìomhaichte sin, chan fheumar na leabharlannan a chuir a-steach an àite sam bith eile.

Mas fheàrr le luchd-cleachdaidh stàladh taobh a-muigh an eòlaire togail, faodaidh iad an àithne a ruith ./waf stàladh. Is e an ro-leasachan bunaiteach airson an stàladh / usr / ionadailmar sin ./waf stàladh stàlaichidh e prògraman ann an / usr / ionadail / bin, leabharlannan ann an / usr / local / lib agus faidhlichean cinn a-steach /usr/ionadail/ cuir a-steach. Mar as trice feumar ceadan superuser a shuidheachadh leis an ro-leasachan bunaiteach, agus mar sin bhiodh òrdugh àbhaisteach sudo ./waf stàladh. Nuair a thòisicheas e, taghaidh Waf an-toiseach na leabharlannan co-roinnte a chleachdadh anns an eòlaire togail, an uairsin coimheadaidh e airson leabharlannan ann an slighe nan leabharlannan a tha air an rèiteachadh san àrainneachd ionadail. Mar sin nuair a bhios tu a’ stàladh leabharlannan air siostam, tha e na chleachdadh math dèanamh cinnteach gu bheil na leabharlannan ceart gan cleachdadh. Faodaidh luchd-cleachdaidh roghnachadh stàladh le ro-leasachan eile le bhith a’ dol seachad air an roghainn rè rèiteachadh --prefixmar eisimpleir:

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

Ma tha nas fhaide air adhart, às deidh an togail, thèid an cleachdaiche a-steach don àithne stàlaidh ./waf, thèid ro-leasachan a chleachdadh /roghainn/ionadail.

sgioba ./waf clean feumar a chleachdadh mus imrich pròiseict ma chleachdas an stàladh Ci fo ro-leasachan eile.

Mar sin, airson ns-3 a chleachdadh, chan eil feum air fònadh ./waf install. Cha bhith feum aig a’ mhòr-chuid de luchd-cleachdaidh air an àithne seo oir Ci togaidh iad na leabharlannan gnàthach bhon chlàr togail, ach dh’ fhaodadh gum bi seo feumail do chuid de luchd-cleachdaidh ma tha an gnìomhachd aca a’ toirt a-steach a bhith ag obair le prògraman taobh a-muigh an eòlaire ns-3.

waf singilte

Aig ìre àrd na craoibhe stòr ns-3, chan eil ann ach aon sgriobt Waf. Cho luath ‘s a thòisicheas tu ag obair, caithidh tu tòrr ùine san eòlaire scratch/ no nas doimhne a-steachsrc/... agus aig an aon àm tha feum air ruith Ci. Faodaidh tu dìreach cuimhneachadh far a bheil thu agus ruith Ci mar a leanas:

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

ach bidh sin tedious agus buailteach do mhearachdan gus am bi fuasglaidhean nas fheàrr ann. Is e aon dòigh cumanta deasaiche teacsa leithid emacs no Vim, a dh’ fhosglas dà sheisean crìochnachaidh, aon air a chleachdadh airson ns-3 a thogail agus am fear eile airson an còd tùsail a dheasachadh. Ma tha agad a-mhàin tarball, an uairsin faodaidh caochladair àrainneachd cuideachadh:

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

$ cd scratch 
$ waff build

Ann an eòlaire a’ mhodalan dh’ fhaodadh gum biodh e tàmailteach sgriobt waf beag a chur ris mar exec ../../waf. Feuch, na dèan sin. Tha seo troimh-a-chèile do luchd-tòiseachaidh agus, ma thèid a dhèanamh gu dona, leanaidh e gu mearachdan togail a tha doirbh a lorg. Is e na fuasglaidhean gu h-àrd an dòigh air adhart.

3.5 Deuchainn ns-3

Faodaidh tu an sgaoileadh ns-3 a dhearbhadh le bhith a’ ruith an sgriobt ./deuchainn.py:

$ ./test.py

Tha na deuchainnean sin air an ruith ann an co-shìnte ri Ci. Mu dheireadh bu chòir dhut teachdaireachd fhaicinn ag ràdh sin

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

Is e teachdaireachd chudromach a tha seo airson a bhith ag aithneachadh tubaistean valgrind, tubaistean no mearachdan, duilgheadasan còd no neo-fhreagarrachd eadar innealan agus còd.

Chì thu cuideachd an toradh deireannach bho Ci agus neach-deuchainn a 'ruith gach deuchainn, a bhiodh a' coimhead rudeigin mar seo:

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)

Mar as trice bidh an àithne seo air a ruith le luchd-cleachdaidh gus dearbhadh gu sgiobalta gu bheil an cuairteachadh ns-3 air a thogail ceart. (Thoir an aire gum faod òrdugh nan loidhnichean "PASS: ..." a bhith eadar-dhealaichte, tha seo àbhaisteach. Is e an rud as cudromaiche gu bheil a h-uile deuchainn a 'dol seachad air an loidhne geàrr-chunntas aig deireadh na h-aithisg; chan eil deuchainn a 'fàilligeadh no a' tuiteam.) Agus Ciagus deuchainn.py nì e co-shìnte obair thairis air na coraichean pròiseasar a tha rim faighinn san inneal.

3.6 Ruith an sgriobt

Mar as trice bidh sinn a’ ruith sgriobtaichean fo smachd Ci. Leigidh seo leis an t-siostam togail dèanamh cinnteach gu bheil na slighean leabharlainn co-roinnte air an suidheachadh gu ceart agus gu bheil na leabharlannan rim faighinn aig àm ruith. Gus am prògram a ruith, dìreach cleachd Ci le paramadair - -run. Ruith an co-ionann ns-3 den phrògram uile-làthaireach Hàlo a Shaoghaille bhith a’ sgrìobhadh na leanas:

$ ./waf --run hello-simulator

Nì Waf cinnteach an-toiseach gu bheil am prògram air a thogail ceart agus togaidh e ma tha sin riatanach. An uair sin Ci cuiridh e an gnìomh prògram a bheir a-mach an toradh a leanas.

Hello Simulator

Mealaibh ur naidheachd! Tha thu a-nis nad neach-cleachdaidh ns-3!

Dè bu chòir dhomh a dhèanamh mura faic mi toraidhean?

Ma chì thu teachdaireachdan Ci, a’ nochdadh gun deach an togail a chrìochnachadh gu soirbheachail, ach chan fhaic thu an toradh "Hello simulator", an uairsin tha coltas ann gun do thionndaidh thu san roinn [Build-with-Waf] am modh togail agad gu leasaichte, ach chaill sinn tionndadh air ais chun mhodh debug. Bidh a h-uile toradh tòcan a thèid a chleachdadh san oideachadh seo a’ cleachdadh pàirt logaidh sònraichte ns-3 agus tha e air a chleachdadh gus teachdaireachdan àbhaisteach a chlò-bhualadh chun consol. Tha an toradh bhon cho-phàirt seo à comas gu fèin-ghluasadach nuair a thèid an còd làn-leasaichte a chuir ri chèile - tha e “optimized”. Mura faic thu an toradh "Hello Simulator", dèan na leanas:

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

a ghnàthachadh Ci gus dreachan deasbaid de phrògraman ns-3 a thogail anns a bheil eisimpleirean agus deuchainnean. Feumaidh tu an uairsin an tionndadh deasbaid làithreach den chòd ath-thogail le bhith a’ taipeadh

$ ./waf

A-nis ma tha thu a 'ruith a' phrògram Hello simulator, bu chòir dhut an toradh ris a bheil dùil fhaicinn.

3.6.1 Argamaidean loidhne-àithne

Gus argamaidean loidhne-àithne a thoirt gu prògram ns-3, cleachd am pàtran seo:

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

Cuir na àite ri ainm a' phrògraim agad agus ris na h-argamaidean. Argumaid - -command-template airson Ci gu bunaiteach mar reasabaidh airson an fhìor loidhne-àithne a thogail Ci chleachdadh airson am prògram a chur an gnìomh. Bidh Waf a’ dèanamh cinnteach gu bheil an togail deiseil, a’ suidheachadh nan slighean dhan leabharlann cho-roinnte, an uairsin a’ cleachdadh teamplaid na loidhne-àithne a chaidh a sholarachadh agus a’ cur ainm a’ phrògraim an àite an neach-àite %s, a’ gairm an gnìomh. Ma tha coltas gu bheil an co-chòrdadh seo iom-fhillte dhut, tha dreach nas sìmplidh ann a tha a’ toirt a-steach am prògram ns-3 agus na h-argamaidean aige ann an luachan singilte:

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

Is e eisimpleir eile a tha gu sònraichte feumail ruith roghnach nan seòmraichean deuchainn. Gabhamaid ris gu bheil sreath deuchainn (suite) mytest ann (gu dearbh, chan eil e ann). Gu h-àrd, chleachd sinn an sgriobt ./test.py gus grunn dheuchainnean a ruith aig an aon àm, a bhios tric a’ gairm am prògram deuchainn ruitheadair deuchainn. Call ruitheadair deuchainn gu dìreach airson aon deuchainn a ruith:

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

Thèid argamaidean a chuir chun phrògram ruitheadair deuchainn. Leis nach eil mytest ann, thèid teachdaireachd-mearachd a chruthachadh. Gus na roghainnean a tha rim faighinn airson ruitheadair deuchainn a chlò-bhualadh, dèan seòrsa:

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

3.6.2 Debugging

Gus prògraman ns-3 a ruith fo ghoireas eile, leithid dì-bhugadair (mar eisimpleir, gdb) no inneal deuchainn cuimhne (mar eisimpleir, valgrind), cleachd foirm coltach ris - -command-template = "…". Mar eisimpleir, airson ruith anns an debugger gdb am prògram hello-simulator ns-3 agad le argamaidean :

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

Thoir an aire gu bheil ainm a’ phrògraim ns-3 a’ tighinn le argamaid - -run, agus an goireas smachd (an seo gdb) a' chiad chomharra anns an argamaid - -command-template. Roghainn - -args ag innse gdbgu bheil an còrr den loidhne-àithne a' buntainn ris a' phrògram "inferior". (Cuid de dhreachan gdb chan eil thu a’ tuigsinn an roghainn - -args. Anns a 'chùis seo, thoir air falbh argamaidean a' phrògraim - -command-template agus cleachd an t-seata àithne gdb argan.) Is urrainn dhuinn an reasabaidh seo agus an tè mu dheireadh a chur còmhla gus an deuchainn a ruith fo debugger:

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

3.6.3 Leabhar-seòlaidh obrach

Feumar Waf a chuir air bhog bhon àite aige aig mullach na craoibhe ns-3. Bidh am pasgan seo na eòlaire obrach far an tèid na faidhlichean toraidh a sgrìobhadh. Ach dè ma tha thu airson na faidhlichean sin a chumail taobh a-muigh craobh stòr ns-3? Cleachd argamaid - -cwd:

$ ./waf --cwd=...

Is dòcha gum bi e nas fhasa dhut na faidhlichean toraidh fhaighinn san eòlaire obrach agad. Anns a 'chùis seo, faodaidh an gnìomh neo-dhìreach seo cuideachadh:

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

Bidh an sgeadachadh seo den tionndadh roimhe den àithne a’ sàbhaladh an eòlaire-obrach làithreach, ag atharrachadh air an eòlaire Ciagus an uairsin a’ stiùireadh Ci gus an eòlaire obrach atharrachadh air ais chun an eòlaire obrach gnàthach a chaidh a shàbhaladh mus tòisich thu air a’ phrògram. Tha sinn a 'toirt iomradh air an sgioba - -cwd air sgàth iomlanachd, bidh a’ mhòr-chuid de luchd-cleachdaidh dìreach a’ ruith Waf bhon eòlaire àrd-ìre agus a’ gineadh faidhlichean toraidh an sin.

A’ leantainn: Caibideil 4

Source: www.habr.com

Cuir beachd ann