Tutorial simulatora torê ns-3. Beşa 3

Tutorial simulatora torê ns-3. Beşa 3
beşa 1,2

3 Destpêkirin
3.1 Serpêhatî
3.2 Pêwîst
3.2.1 Daxistina serbestberdana ns-3 wekî arşîva çavkaniyê
3.3 Daxistina ns-3 bi karanîna Git
3.3.1 Barkirina ns-3 bi karanîna Bake
3.4 Meclîsa ns-3
3.4.1 Avakirina bi build.py
3.4.2 Avakirina bi Bake
3.4.3 Bi Waf re ava bikin
3.5 Testkirina ns-3
3.6 Sazkirina senaryoyê
3.6.1 Argumanên rêzika fermanê
3.6.2 Debugging
3.6.3 Peldanka xebatê

Chapter 3

Destpêkirin

Ev beş armanc e ku xwendevan amade bike ku bi komputerek ku dibe ku qet ns-3 saz nekiribe dest pê bike. Ew platformên piştgirî, şertên pêşîn, meriv çawa ns-3-ê peyda dike, meriv çawa ns-3-ê ava dike, û meriv çawa çêkirina xwe ceribandin û bernameyên hêsan dimeşîne vedigire.

3.1 Serpêhatî

Simulatora ns-3 wekî pergalek pirtûkxaneyên nermalava hevkar hatî çêkirin. Di dema kombûnê de, koda bernameyên bikarhêner bi van pirtûkxaneyan ve girêdayî ye. Zimanên bernamenûs C++ an Python ji bo nivîsandina bernameyên xwerû têne bikar anîn.

Ns-3 wekî koda çavkaniyê tê belav kirin, ku tê vê wateyê ku pergala armanc divê xwedan hawîrdorek pêşkeftina nermalavê be da ku pêşî pirtûkxaneyan ava bike û dûv re bernameya bikarhêner ava bike. Di prensîbê de, ns-3 dikare wekî pirtûkxaneyên amadekirî yên ji bo pergalek taybetî were belav kirin, û di pêşerojê de dibe ku ew bi vî rengî bêne belav kirin. Lê naha gelek bikarhêner bi rastî karê xwe bi sererastkirina ns-3-ê bi xwe dikin, ji ber vê yekê ji bo avakirina pirtûkxaneyan xwedî koda çavkaniyê kêrhatî ye. Ger kesek bixwaze karê çêkirina pirtûkxane û pakêtên amade yên ji bo pergalên xebitandinê bigire ser milê xwe, ji kerema xwe bi navnîşa posteyê re têkilî daynin. ns-pêşdebiran.

Dûv re, em ê li sê awayên dakêşandin û avakirina ns-3 binêrin. Ya yekem dakêşandin û avakirina serbestberdana fermî ji malpera sereke ye. Ya duyemîn hilbijartin û komkirina kopiyên guhertoyên pêşkeftinê yên sazkirina bingehîn a ns-3 e. Ya sêyem ev e ku hûn amûrên avakirina zêde bikar bînin da ku ji bo ns-3 bêtir pêvekan bar bikin. Em ê her yekê derbas bikin ji ber ku amûr hinekî cûda ne.

Bikarhênerên Linux-ê yên ezmûndar dikarin bipirsin çima ns-3 wekî pakêtek wekî pir pirtûkxaneyên din ên ku rêveberek pakêtê bikar tînin nayê peyda kirin? Her çend ji bo belavkirinên cihêreng ên Linux-ê pakêtên binary hene (mînak Debian), piraniya bikarhêneran dawî li pirtûkxaneyan diguherînin û neçar in ku xwe ns-3 ji nû ve ava bikin, ji ber vê yekê hebûna koda çavkaniyê bikêr e. Ji bo vê yekê, em ê li ser sazkirina ji çavkaniyê bisekinin.

Ji bo piraniya serîlêdanên mafên ns-3 reh ne hewce ne, tê pêşniyar kirin ku hesabek bikarhênerek bêdestûr bikar bînin.

3.2 Pêwîst

Tevahiya pirtûkxaneyên ns-3 yên berdest çend girêdan bi pirtûkxaneyên partiya sêyem ve hene, lê bi piranî ns-3 dikare bi piştgirîya çend hêmanên hevpar (pir caran ji hêla xwerû ve têne saz kirin) were çêkirin û bikar anîn: berhevkarek C++, Python, edîtorek koda çavkaniyê (mînak, vim, emacs an Tarîreş) û, heke depoyên pêşkeftinê têne bikar anîn, pergalên kontrolkirina guhertoya Git. Pir bikarhênerên ku cara yekemin ne hewce ne xemê bin heke veavakirina wan hin taybetmendiyên pêşkeftî yên ns-3 winda nebin, lê ji bo kesên ku sazkirinek tam dixwazin, proje wikiyek peyda dike ku rûpelan bi gelek serişte û hîleyên bikêr vedihewîne. Rûpelek weha rûpela Sazkirinê ye, bi rêwerzên sazkirinê yên ji bo pergalên cihêreng, li ser peyda dibe: https://www.nsnam.org/wiki/Installation.

Beşa Pêşdibistanê ya vê wiki rave dike ka kîjan pakêt ji bo piştgirîkirina vebijarkên hevpar ên ns-3 hewce ne û di heman demê de fermanên ku ji bo sazkirina wan li ser çêjên hevpar ên Linux an macOS têne bikar anîn peyda dike.

Hûn dikarin ji vê derfetê sûd werbigirin ku hûn rûpela wiki ns-3 an malpera sereke bigerin: https://www.nsnam.org, ji ber ku li wir gelek agahdarî hene. Bi guhertoya herî dawî ya ns-3 (ns-3.29) dest pê dike, amûrên jêrîn hewce ne ku ns-3 bixebitin:

Pakêta Amûra / Versiyon

  • Berhevkarê C++
    clang++ an g++ (g++ guhertoya 4.9 an mezintir)
  • python
    guhertoya python2 >= 2.7.10, an guhertoya python3 >=3.4
  • herin
    guhertoya herî dawî (ji bo gihîştina ns-3 li ser GitLab.com)
  • zift
    her guhertoya herî dawî (ji bo vekirina ns‑3 serbestberdanê)
  • bunzip2
    her guhertoya herî dawî (ji bo rakirina berdana ns‑3)

Ji bo kontrolkirina guhertoya xwerû ya Python, binivîsin python -V. Ji bo kontrolkirina guhertoya g++, binivîsin g++ -v. Ger amûrek wenda bin an jî pir kevn bin, ji kerema xwe serî li rêbernameya sazkirinê ya li ser rûpela wiki ns-3 bidin.

Ji niha û pê ve, em texmîn dikin ku xwendevan Linux, MacOS, an emulatorek Linux-ê dimeşîne, û bi kêmî ve amûrên jorîn hene.

3.2.1 Daxistina serbestberdana ns-3 wekî arşîva çavkaniyê

Ev qursa çalakiyê ji bo bikarhênerek nû ye ku dixwaze bi guhertoyên nûvekirî û pakêtê yên ns-3 dakêşîne û ceribandinê bike. Daxuyaniyên ns-3 wekî arşîvên çavkaniyê yên pêçandî têne weşandin, carinan têne gotin tarball. tarball formatek arşîva nermalava taybetî ye ku tê de çend pel bi hev re têne hev kirin. Arşîv bi gelemperî tê pêçandin. ns-3 pêvajoya boot bi rêya tarball hêsan e, hûn tenê hewce ne ku berdanek hilbijêrin, dakêşin û jê pak bikin.

Ka em bihesibînin ku hûn, wekî bikarhêner, dixwazin ns-3 di pelrêça herêmî ya ku jê re tê gotin de ava bikin qada xebatê. Hûn dikarin kopiyek xebitandinê ya serbestberdanê bi têketina jêrîn li konsolê Linux-ê bistînin (bê guman li şûna hejmarên guhertoya guncan)

$ 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 

Bala xwe bidin amûra ku li jor hatî bikar anîn wget, ku amûrek rêzika fermanê ye ji bo daxistina tiştan ji Înternetê. Ger we ew saz nekiribe, hûn dikarin geroka xwe ji bo vê bikar bînin.

Li dû van gavan dê we bibe pelrêça ns-allinone-3.29, li wir divê hûn çend pel û peldankan bibînin

$ 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

Naha hûn amade ne ku dabeşkirina bingehê ns-3 ava bikin û dikarin biçin beşa li ser avakirina ns-3.

3.3 Daxistina ns-3 bi karanîna Git

Koda ns-3 di depoyên Git-ê yên li ser GitLab.com de heye https://gitlab.com/nsnam/. Kom nsnam depoyên cihêreng ên ku ji hêla projeyek çavkaniyek vekirî ve têne bikar anîn berhev dike.

Rêya herî hêsan a destpêkirina karanîna depoyên Git ev e ku meriv jîngehê qul bike an klon bike ns-3-allinone. Ev komek skrîptan e ku barkirin û komkirina jêrpergalên ns-3 yên herî gelemperî têne bikar anîn birêve dibe. Ger hûn nû li Git in, dibe ku têgînên "fork" û "clone" ji we re nenas bin; heke wusa be, em pêşniyar dikin ku hûn bi vî rengî depoya ku li ser GitLab.com-ê ye bi tenê klon bikin (kopiya xwe çêbikin):

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

Di vê qonaxê de, dîtina pelrêça we ns-3-allinone hinekî cuda ji pelrêça arşîva berdanê ya ku li jor hatî destnîşan kirin. Divê tiştek mîna vê xuya bike:

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

Ji kerema xwe not bikin ku skrîptek heye download.py, ku dê ns-3 û koda çavkaniyê ya pê re jî derxe. Li vir vebijarkek we heye: an wêneya pêşkeftina herî dawî ya ns-3 dakêşin:

$ python download.py

an serbestberdana ns-3 bi karanîna ala tercîh bikin -n ji bo nîşankirina hejmara berdanê:

$ python download.py -n ns-3.29

Piştî vê gavê berbi pelrêça ns-3-allinone depoyên zêde dê werin daxistin ns-3, birajtin, pybindgen и netanim.

bingotin
Li ser makîneyek bi Ubuntu16.04 paqij, min hewce kir ku emrê bi vî rengî biguherim: $ sudo python3 download.py -n ns-3.29 (li vir têbînîyên wergêr).

3.3.1 Barkirina ns-3 bi karanîna Bake

Du rêbazên jorîn (arşîva çavkanî an depo ns-3-allinone bi rêya Git) ji bo sazkirina ns-3 ya herî hêsan bi gelek pêvekan re kêrhatî ne(pybindgen ji bo afirandina girêdanên Python û netanim ji bo anîmasyona torê). Depoya sêyemîn ku ji hêla xwerû ve di ns-3-allinone de hatî peyda kirin tê gotin birajtin.

Birajtin amûrek ji bo avakirina hevrêziya nermalava ji gelek depoyan e, ku ji bo projeya ns-3 hatî pêşve xistin. Birajtin dikare ji bo bidestxistina guhertoyên pêşkeftinê yên ns-3, û hem jî ji bo dakêşandin û avakirina pêvekên guhertoya bingehîn a belavkirina ns-3, wekî jîngehê were bikar anîn. Pêkanîna Code Direct, CradleNetwork Simulation Cradle, şiyana afirandina girêdanên nû yên Python û "sepanên" cihêreng ên ns-3.

bingotin
CradleNetwork Simulation Cradle çarçoveyek e ku dihêle hûn di hundurê simulatorek torê de stûnên torê yên TCP/IP yên rastîn bikar bînin.

Heke hûn hêvî dikin ku sazkirina ns-3-a we taybetmendiyên pêşkeftî an zêde hebe, hûn dikarin vê riya sazkirinê bişopînin.

Di serbestberdana ns-3 ya herî dawî de Birajtin li berdana tar hate zêdekirin. Serlêdan pelek vesazkirinê vedihewîne ku dihêle hûn di dema berdanê de guhertoyên nermalava heyî dakêşin. Ev e, ji bo nimûne, Versiyon ji Birajtin, ku bi serbestberdana ns-3.29 ve tê belav kirin, dikare were bikar anîn da ku beşên ji bo wê berdana ns-3 an berê were hilanîn, lê nikare were bikar anîn ji bo vegirtina pêkhateyên ji bo berdanên paşîn (eger pelê danasîna pakêtê be bakeconf.xml nayê nûve kirin).

Hûn dikarin kopiya herî dawî jî bistînin birajtinbi ketina fermana jêrîn di konsolê xweya Linux-ê de (bihesibînin ku we Git saz kiriye):

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

Dema ku hûn fermana git dimeşînin, divê hûn tiştek mîna jêrîn bibînin:

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.

Piştî ku emrê temam dike clone divê tu pelrêça bi navê birajtin, naveroka ku divê tiştek weha xuya bike:

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

Bala xwe bidinê ku we çend nivîsarên Python bar kirine, modulek Python bi navê birajtin û pelê veavakirina XML. Pêngava paşîn ev e ku hûn van nivîsan bikar bînin da ku belavkirina ns-3 ya bijartina xwe dakêşin û ava bikin. Gelek armancên xwerûkirinê hene:

  1. ns-3.29: modula ku bi berdanê re têkildar e; ew ê pêkhateyên mîna berdana di tarballê de dakêşîne;

  2. ns-3-dev: modulek wekhev, lê koda ji dara pêşveçûnê bikar tîne;

  3. ns-allinone-3.29: Modulek ku taybetmendiyên din ên din ên wekî rêvekirina bitikîne û Cradle Simulation Network, Openflow ji bo ns-3 vedihewîne.

  4. ns-3-allinone: dişibihe guhertoya berdana modulê allinone, lê ji bo koda pêşveçûnê.

bingotin
Watch - mîmariya nermalava modular a ji bo afirandina routeran.

Openflow protokolek e ji bo birêvebirina pêvajoya hilberandina daneya ku li ser tora daneyê ji hêla router û guhastinê ve hatî veguheztin, bicîhkirina teknolojiya torê ya nermalava diyarkirî.

Wêneya pêşkeftina heyî (ne berdan) ns-3 dikare li vir were dîtin:https://gitlab.com/nsnam/ns-3-dev.git.

Pêşdebir hewl didin ku van depoyan di rêziknameyek xebatê ya domdar de bihêlin, lê ew di qada pêşkeftinê de ne û kodek nederbasdar hene, ji ber vê yekê heke hûn plan nakin ku taybetmendiyên nû bikar bînin, wê hingê serbestberdana fermî hilbijêrin.

Hûn dikarin guhertoya herî paşîn a kodê bi gerandina navnîşa depoyan, an jî bi çûna ser malpera ns-3 Releases bibînin:https://www.nsnam.org/releases/ û li ser girêdana guhertoya herî dawî bikirtînin. Di vê nimûneyê de em ê bi ns-3.29 berdewam bikin.

Naha, ji bo ku em hêmanên ns-3 bistînin, em ê amûrê bikar bînin Birajtin. Ka em çend gotinên destpêkê li ser xebatê bibêjin Birajtin.

Bake bi barkirina çavkaniyên pakêtê di pelrêçekê de dixebite kanî û sazkirina pirtûkxaneyan di pelrêça çêkirinê de. Birajtin dikare bi referanskirina binaryê were meşandin, lê heke hûn dixwazin birevin Birajtin ne ji pelrêça ku tê de hatî dakêşandin, tê pêşniyar kirin ku rê lê zêde bikin birajtin li ser riya we (guhêrbar jîngeha PATH), mînakî wekî jêrîn (mînakek ji bo şêlê bash Linux). Biçe pelrêça "bake" û dûv re guhêrbarên hawîrdorê yên jêrîn bicîh bikin:

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

Ev ê bernameyê cîh bike bake.py ber bi riya şêlê ve diçe û dê destûrê bide bernameyên din ku kargêr û pirtûkxaneyên ku wê afirandine bibînin birajtin. Di hin rewşan de bi kar tînin birajtin, mîhenga PATH û PYTHONPATH ku li jor hatî destnîşan kirin ne hewce ye, lê bi gelemperî avakirina ns-3-allinone (bi pakêtên zêde) hewce dike.

Herin pelrêça xweya xebatê û jêrîn di konsolê de têkevin:

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

Piştre em ê bipirsin Birajtin kontrol bikin ka têra me amûrên barkirina pêkhateyên cihêreng hene. Helbijartin:

$ ./bake.py check

Divê hûn tiştek mîna jêrîn bibînin:

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

Bi taybetî, amûrên barkirinê yên wekî Mercurial, CVS, Git û Bazaar di vê gavê de bingehîn in ji ber ku ew dihêlin em kodê bistînin. Di vê nuqteyê de, amûrên winda bi awayê gelemperî ji bo pergala xwe saz bikin (heke hûn çawa dizanin) an ji bo alîkariyê bi rêvebirê pergala xwe re têkilî daynin.

Piştre, biceribînin ku nermalavê dakêşin:

$ ./bake.py download

encam divê tiştek wekî:

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

Ev tê wê wateyê ku sê çavkanî hatine daxistin. Niha herin pelrêça çavkaniyê û ls binivîse; Divê hûn bibînin:

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

Naha hûn amade ne ku belavkirina ns-3 ava bikin.

3.4 Meclîsa ns-3

Mîna dakêşana ns-3, çend awayên avakirina ns-3 hene. Tişta sereke ku em dixwazin tekez bikin ev e ku ns-3 bi karanîna amûrek çêkirinê ya ku jê re tê gotin tête çêkirin wafli jêr hatiye diyarkirin. Pir bikarhêner dê bi wan re bixebitin waf, lê çend nivîsarên bikêr hene ku ji we re dibin alîkar ku hûn dest pê bikin an avahîyên tevlihevtir organîze bikin. Ji ber vê yekê ji kerema xwe, berî ku hûn li ser bixwînin waf, lê binêre build.py û civîn bi birajtin.

3.4.1 Avakirina bi build.py

Hişyariya kerema xwe! Vê gavê avakirinê tenê ji guhertoya arşîva çavkaniyê ya ku li jor hatî destnîşan kirin peyda dibe; û bi git an bake nayê daxistin.

Dema ku bi arşîvek berdanê re dixebitin tarballin ns-3-allinone Nivîsarek bikêr heye ku dikare komkirina pêkhateyan hêsantir bike. Jê re build.py tê gotin. Ev bername dê bi awayê herî bikêrhatî ji we re projeyê saz bike. Lêbelê, bala xwe bidin ku sazkirin û xebata pêşkeftî ya bi ns-3 re bi gelemperî pergala avakirina xweya ns-3, Waf, ya ku dê paşê di vê tutoriyê de were destnîşan kirin pêk tîne.

Ger we dakêşand bi karanîna tarball, paşê di pelrêça we de ~/qada xebatê pelrêçek bi navek tiştek mîna ns-allinone-3.29. Ya jêrîn binivîse:

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

Dema ku tê gotin build.py Me argumanên rêzika fermanê bikar anîn da ku nimûne û ceribandinên ku di vê tutoriyê de hatine bikar anîn ava bikin, yên ku di ns-3-ê de ji hêla xwerû ve nehatine çêkirin. Bi xwerû, bername hemî modulên berdest jî ava dike. Dûv re, heke hûn bixwazin, hûn dikarin ns-3 bêyî mînak û ceribandinan ava bikin, an modulên ku ji bo xebata we ne hewce ne derxînin.

Gava ku ew beşên cihêreng ên ku we barkirî ava dike, hûn ê gelek peyamên derana berhevkerê bibînin ku ji hêla skrîptê ve têne xuyang kirin. Pêşî senaryo dê hewl bide ku anîmatorê ava bike netanim, paşê jeneratorê girêdanê pybindgen û di dawiyê de ns-3. Dema ku pêvajo qediya, divê hûn jêrîn bibînin:

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

Di sê rêzên paşîn ên navnîşê de em peyamek li ser modulên ku nehatine çêkirin dibînin:

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

Ev bi hêsanî tê vê wateyê ku hin modulên ns-3 yên ku bi pirtûkxaneyên derveyî ve girêdayî ne hatine çêkirin, an jî ew ne hewce ne ku ji bo vê veavakirinê bêne çêkirin. Ev nayê vê wateyê ku simulator nayê civandin an ku modulên berhevkirî dê rast nexebitin.

3.4.2 Avakirina bi Bake

Ger we li jor bake bikar anî da ku koda çavkaniyê ji depoyên projeyê werbigire, hûn dikarin karanîna wê berdewam bikin da ku ns-3 ava bikin. Helbijartin:

$ ./bake.py build

û divê hûn tiştek wekî bibînin:

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

derhal: Her weha hûn dikarin bi gazîkirina "bake.py deploy" hem dakêşanê û hem jî gavan ava bikin.

Dibe ku berhevkirina hemî pêkhateyan têk neçe, lê heke pêkhateyek ne hewce be dê civîn berdewam bike. Mînakî, pirsgirêkek veguheztinê ya dawî ew bû castxml dikare bi amûrekê were civandin birajtin ne li ser hemû platforman. Di vê rewşê de, peyamek bi vî rengî dê xuya bibe:

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

Lêbelê, castxml tenê hewce ye ku hûn dixwazin girêdanên Python-ê yên nûvekirî biafirînin. Ji bo pir bikarhêneran hewcedariya vê yekê tune (qet nebe heya ku ew ns-3 biguhezînin), ji ber vê yekê hişyariyên weha dikarin ji bo nuha bi ewlehî werin paşguh kirin.

Ger ew têk neçe, emrê jêrîn dê di derheqê girêdanên winda de îşaretek bide we:

$ ./bake.py show

Girêdanên cihêreng ên pakêtên ku hûn hewl didin ku çêbikin dê bêne navnîş kirin.

3.4.3 Bi Waf re ava bikin

Heya vê nuqteyê, ji bo destpêkirina avakirina ns-3, me an skrîptê bikar anî build.py, an amûrek birajtin. Van amûran ji bo avakirina ns-3 û domandina pirtûkxaneyan bikêr in. Bi rastî, ji bo avakirinê ew amûra avakirinê dimeşînin waf ji pelrêça ns-3. waf bi koda çavkaniya ns-3 ve hatî saz kirin. Pir bikarhêner bi lez diçin ku rasterast ns‑3 bikar bînin da ku mîheng bikin û kom bikin waf. Ji ber vê yekê, ji bo berdewamkirinê, ji kerema xwe biçin pelrêça ns-3 ya ku we di destpêkê de çêkiriye.

Ev di vê demê de bi hişkî ne hewce ye, lê ew ê kêrhatî be ku meriv hinekî paşde bikişîne û bibîne ka meriv çawa di veavakirina projeyê de guhertinan çêdike. Dibe ku guhertina mîhengê ya herî bikêr a ku hûn dikarin bikin ev e ku hûn guhertoyek xweşbînkirî ya kodê biafirînin. Bi xwerû, we projeya xwe mîheng kiriye da ku guhertoyek debugê ava bike. Ka em li projeyek binihêrin ku meclîsek xweşbînkirî biafirîne. Ji bo ku ji Waf re rave bike ku divê ew avahiyên xweşbînkirî yên ku mînak û ceribandinan vedihewîne çêbike, hûn ê hewce bikin ku emrên jêrîn bimeşînin:

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

Ev dê dest pê bike waf li derveyî pelrêça herêmî (ji bo rehetiya we). Fermana yekem ji avakirina berê paqij dike, ev bi gelemperî ne hewce ye, lê pratîkek baş e (li jêr jî li profîlên çêkirinê binêre); ev ê pirtûkxaneyên ku berê hatine afirandin û pelên tiştên ku di pelrêçê de ne jê bibe avakirin/. Dema ku proje ji nû ve were mîheng kirin û pergala çêkirinê pêwendiyên cihêreng kontrol dike, divê hûn encamek mîna ya jêrîn bibînin:

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)

Ji kerema xwe beşa paşîn a navnîşa jorîn bala xwe bidin. Hin vebijarkên ns-3 ji hêla xwerû ve nehatine çalak kirin an jî ji bo ku bi rêkûpêk kar bikin piştgirîya pergalê hewce ne. Mînakî, ji bo çalakkirina XmlTo, divê pirtûkxane li ser pergalê hebe libxml-2.0. Ger ev pirtûkxane nehate dîtin û fonksiyona ns-3 ya têkildar nehatibe çalak kirin, dê peyamek were xuyang kirin. Di heman demê de bîr bînin ku ew gengaz e ku emrê bikar bînin sudo ji bo danîna suid bit "di dema xebitandinê de ID komê saz bike" ji bo hin bernameyan. Ew ji hêla xwerû ve nayê çalak kirin û ji ber vê yekê ev taybetmendî wekî "ne çalak" xuya dike. Di dawiyê de, ji bo ku hûn navnîşek vebijarkên çalakkirî bistînin, bikar bînin waf bi parametre --check-config.

Naha em vegerin û vegerin ser avakirina debug-ê ya ku mînak û ceribandinan pêk tîne.

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

Pergala avakirinê naha hatî saz kirin û hûn dikarin guhertoyên debugê yên bernameyên ns-3 bi tenê binivîsin ava bikin:

$ ./waf

Dibe ku gavên li jor we neçar kir ku hûn du caran beşek ji pergala ns-3 ava bikin, lê naha hûn dizanin ka meriv çawa veavakirinê biguhezîne û koda xweşbînkirî ava bike.

Ji bo kontrol bikin ka kîjan profîl ji bo veavakirina projeyek diyar çalak e, fermanek heye:

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

Senaryoya jorîn build.py argûmanan jî piştgirî dike --enable-examples и --enable-tests, lê vebijarkên din waf ew rasterast piştgirî nake. Mînakî, ev ê nexebite:

$ ./build.py --disable-python

reaksiyonê dê wiha be:

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

Lêbelê, operatorê taybetî - - dikare were bikar anîn da ku pîvanên din bi rê ve derbas bike wafJi ber vê yekê li şûna ya jorîn fermana jêrîn dê bixebite:

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

ji ber ku ew fermana sereke çêdike ./waf mîheng bike --disable-python. Li vir çend serişteyên din ên destpêkê hene waf.

Handling build çewtiyên

Daxuyaniyên ns-3 li ser berhevkarên C++ yên herî dawî yên ku di dema berdanê de li ser belavkirinên hevpar ên Linux û MacOS-ê têne ceribandin têne ceribandin. Lêbelê, bi demê re, belavkirinên nû bi berhevkerên nû re têne berdan, û van berhevkarên nûtir di derbarê hişyariyan de bêtir pedantîk in. ns-3 avakirina xwe mîheng dike da ku hemî hişyariyan wekî xeletiyê binirxîne, ji ber vê yekê carinan heke hûn guhertoyek kevintir li ser pergalek nûtir dimeşînin, dibe ku hişyariyek berhevker çêkirinê rawestîne.

Mînakî, berê ji bo Fedora 3.28 serbestberdana ns‑28 hebû, ku tê de guhertoyek nû ya sereke hebû. gcc (gcc-8). Avakirina berdana ns-3.28 an guhertoyên berê yên di binê Fedora 28 de, digel ku Gtk2+ hatî saz kirin, dê xeletiya jêrîn çêbibe:

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

Di weşanên ku ji ns‑3.28.1 dest pê dikin, di waf vebijarkek ji bo çareserkirina van pirsgirêkan heye. Ew danîna ala "-Werror" di g++ û clang++ de neçalak dike. Ev vebijarka "--çalak-xerab" e û divê di dema veavakirinê de were sepandin:

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

Mîheng bikin an bicivînin

Hin ferman waf tenê di qonaxa veavakirinê de wateya wan heye, û hin tenê di qonaxa çêkirinê de derbasdar in. Mînakî, heke hûn dixwazin taybetmendiyên emûlasyona ns-3 bikar bînin, hûn dikarin mîhenga bitê çalak bikin suid bikar anîn sudo, wek ku li jor hatiye diyarkirin. Ev ê fermanên qonaxa mîhengê derbas bike, û bi vî rengî hûn dikarin bi karanîna fermana jêrîn, ku di heman demê de mînak û ceribandinan jî vedihewîne, veavakirinê biguhezînin.

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

Ger hûn vê yekê bikin waf dê destpê bike sudoji bo guheztina bernameyên çêkirina soketa kodê ya emûlasyonê ku bi destûr têne xebitandin reh. ew waf Ji bo veavakirin û gavên avakirinê gelek vebijarkên din hene. Ji bo vebijarkên xwe bigerin, têkevin:

$ ./waf --help

Di beşa pêş de em ê hin vebijarkên têkildarî ceribandinê bikar bînin.

Profîlên Meclîsa

Me berê dît ku hûn çawa dikarin mîheng bikin waf ji bo meclîsan debug и optimize:

$ ./waf --build-profile=debug

Di heman demê de profîlek meclîsa navîn jî heye, berdan. Dibe -d hevwate ye --build-profile. Profîla çêkirinê karanîna têketin, îdîakirin, û guheztinên xweşbînkirina berhevkerê kontrol dike:

Tutorial simulatora torê ns-3. Beşa 3

Wekî ku hûn dikarin bibînin, têketin û îddîakirin tenê di avahiyên debugê de hene. Pratîka pêşniyarkirî ev e ku hûn skrîpta xwe di moda debugê de pêşve bixin, dûv re di profîlek çêkirinê ya xweşbînkirî de rêvekirinên dubare (ji bo statîstîk an guhertinên parametreyê) pêk bînin.

Ger kodek we heye ku divê tenê di hin profîlên çêkirinê de were xebitandin, Macro Code Wrapper bikar bînin:

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

Destçûnî, waf cîh di pelrêça çêkirinê de huneran çêdikin. Hûn dikarin bi karanîna vebijarkê pelrêçek encamek cûda diyar bikin - -out, wek nimûne:

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

Bi berhevkirina vê bi profîlên çêkirinê re, hûn dikarin bi hêsanî di navbera vebijarkên berhevokê yên cihêreng de veguherînin:

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

Ku destûrê dide te ku hûn bi pir meclîsan re bixebitin bêyî ku her carê meclîsa herî dawî ji nû ve binivîsin. Gava ku hûn derbasî profîlek din bibin, waf dê tenê wê berhev bike, bêyî ku her tiştî bi tevahî ji nû ve berhev bike.

Dema ku hûn profîlên avakirina bi vî rengî veguherînin, hûn hewce ne ku baldar bin ku her carê heman vebijarkên mîhengê bidin. Diyarkirina çend guherbarên jîngehê dê ji we re bibe alîkar ku hûn ji xeletiyan dûr bisekinin:

$ 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

Berhevkar û ala

Di mînakên jorîn de waf ji bo avakirina ns-3 berhevkarê C++ ji GCC bikar tîne ( g ++). Lêbelê, hûn dikarin ya ku hûn bikar tînin biguherînin waf Berhevkarê C++, bi pênasekirina guhêrbara jîngehê CXX. Mînakî, ji bo berhevkarê C++ Clang bikar bînin, clang++,

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

Bi heman awayî hûn dikarin mîheng bikin waf ji bo bikaranîna berhevkirina belavkirî bi kar tînin distcc:

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

Zêdetir agahdarî di derbarê berhevkirina distcc û belavkirî de li ser rûpela projeyê di beşa Belgekirinê de têne dîtin. Ji bo zêdekirina alayên berhevkerê dema mîhengkirina ns-3, guhêrbara jîngehê CXXFLAGS_EXTRA bikar bînin.

mîhengê

waf dikare ji bo sazkirina pirtûkxaneyan li cîhên cihê yên pergalê were bikar anîn. Ji hêla xwerû ve, pirtûkxaneyên berhevkirî û pêkanînên di pelrêçê de cih digirin avakirin, û ji ber ku Waf cîhê van pirtûkxane û sazkeran dizane, ne hewce ye ku pirtûkxaneyan li cîhek din saz bikin.

Ger bikarhêner tercîh dikin ku li derveyî pelrêça çêkirinê saz bikin, ew dikarin fermanê bimeşînin ./waf saz bike. Pêşgira xwerû ya ji bo sazkirinê ye / usr / herêmîJi ber vê yekê ./waf saz bike dê bernameyan tê de saz bike / usr / local / bin, pirtûkxaneyên li / usr / local / lib û pelên sernavê tê de /usr/local/include. Mafên superbikarhêner bi gelemperî hewce ne ku bi pêşgirek xwerû bêne danîn, ji ber vê yekê fermanek tîpîk dê bibe sudo ./waf saz bike. Dema ku dest pê kir, Waf dê pêşî hilbijêrin ku pirtûkxaneyên hevbeş di pelrêça çêkirinê de bikar bîne, dûv re li pirtûkxaneyên li ser rêça pirtûkxaneyên ku di hawîrdora herêmî de hatine mîheng kirin bigerin. Ji ber vê yekê dema ku pirtûkxane li ser pergalek saz dikin, pratîkek baş e ku meriv kontrol bike ka pirtûkxaneyên rast têne bikar anîn. Bikarhêner dikarin bi derbaskirina vebijarkê di dema veavakirinê de hilbijêrin ku bi pêşgirek cûda saz bikin --prefix, wek nimûne:

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

Ger paşê, piştî çêkirinê, bikarhêner fermana sazkirinê bikeve ./waf, pêşgir wê bê bikaranîn / vebijark / herêmî.

tîma ./waf clean Ger sazkirin dê bikar bîne divê berî veavakirina projeyê were bikar anîn waf di bin pêşgirek cuda de.

Ji ber vê yekê, ji bo karanîna ns-3 ne hewce ye ku bang bikin ./waf install. Pir bikarhêner dê hewceyê vê fermanê nebin ji ber ku waf dê pirtûkxaneyên heyî ji pelrêça çêkirinê hilbijêrin, lê hin bikarhêner dikarin vê kêrhatî bibînin ger çalakiyên wan bi bernameyên li derveyî pelrêça ns-3 re bixebitin.

Waf single

Di asta jorîn a dara çavkaniya ns-3 de, tenê yek tîpek Waf heye. Dema ku hûn dest bi xebatê bikin, hûn ê gelek wext di pelrêçê de derbas bikin scratch/ an kûrtir navsrc/... û di heman demê de divê birevin waf. Hûn dikarin tenê bîr bînin ku hûn li ku derê ne û birevin waf wiha ye:

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

lê ev ê bêhêz û xeletî be, ji ber vê yekê çareseriyên çêtir hene. Rêyek hevpar ev e ku meriv edîtorek nivîsê wekî mînak bikar bîne emacs an vim, ku tê de du danişînên termînalê têne vekirin, yek ji bo avakirina ns-3, û ya duyemîn jî ji bo guherandina koda çavkaniyê tê bikar anîn. Heke hûn tenê hene tarball, wê hingê guhêrbarek jîngehê dikare bibe alîkar:

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

$ cd scratch 
$ waff build

Di pelrêça modulê de dibe ku ceribandinek be ku meriv skrîptek waf-a piçûk mîna mîna lê zêde bike exec ../../waf. Ji kerema xwe, wusa nekin. Ev ji bo nûbidestan tevlihev e û, gava ku bi qelsî were kirin, dibe sedema xeletiyên çêkirinê yên dijwar. Çareseriyên ku li jor hatine destnîşan kirin riya ku divê were bikar anîn in.

3.5 Testkirina ns-3

Hûn dikarin bi xebitandina skrîptê ve ceribandinên yekîneya belavkirina ns-3 bimeşînin ./test.py:

$ ./test.py

Ev îmtîhan bi hev re têne meşandin waf. Di dawiyê de divê hûn peyamek bibînin ku dibêje:

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

Ev peyamek girîng e ji bo naskirina qezayên valgrind, têkçûn an xeletiyan, ku pirsgirêkên bi kodê an lihevnebûna di navbera amûr û kodê de destnîşan dike.

Her weha hûn ê encama dawîn ji bibînin waf û ceribandinek ku her ceribandinê dimeşîne, ku dê mîna vî xuya bike:

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)

Ev ferman bi gelemperî ji hêla bikarhêneran ve tê rêve kirin da ku zû verast bikin ku belavkirina ns-3 rast hatî çêkirin. (Bêbînî ku rêza rêzikên "PASS: ..." dibe ku cûda be, ev normal e. Ya girîng ev e ku rêzika kurteya di dawiya raporê de nîşan dide ku hemî ceribandin derbas bûne; ti ceribandin bi ser neketin an têk çûn.) Û wafû test.py dê xebatê li seranserê navgînên pêvajoyek berdest ên makîneyê paralel bike.

3.6 Sazkirina senaryoyê

Em bi gelemperî nivîsan di bin kontrolê de dimeşînin waf. Ev dihêle ku pergala avakirinê piştrast bike ku rêyên pirtûkxaneya hevpar rast hatine danîn û ku pirtûkxane di dema xebitandinê de berdest in. Ji bo ku bernameyê bimeşînin, tenê bikar bînin waf bi parametre - -run. Werin em hevwateya ns-3 ya bernama herheyî bimeşînin hello cîhanêbi nivîsandina jêrîn:

$ ./waf --run hello-simulator

Waf dê pêşî kontrol bike ka bername rast hatî çêkirin û heke hewce bike ava bike. Paşan waf dê bernameyeke ku hilbera jêrîn çêdike pêk bîne.

Hello Simulator

Pîroz be! Tu niha bikarhênerek ns-3 î!

Ger ez encam nabînim divê ez çi bikim?

Ger hûn peyaman bibînin wafnîşan dide ku avahî bi serfirazî qediya, lê hûn encam nabînin "Hello Simulator", wê hingê îhtîmalek heye ku di beşa [Build-bi-Waf] de we moda avakirina xwe veguhartiye optimize, lê guh neda vegerandina modê debug. Hemî derketina konsolê ya ku di vê tutoriyê de tê bikar anîn pêkhateyek taybetî ya ns-3 bikar tîne ku têketinê pêk tîne û ji bo çapkirina peyamên xwerû li konsolê tê bikar anîn. Dema ku koda xweşbînkirî tê berhev kirin, derketina ji vê hêmanê bixweber tê neçalak kirin - ew "optimîze" ye. Heke hûn derana "Hello Simulator" nabînin, jêrîn têkevin:

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

ji bo veavakirina waf ji bo avakirina guhertoyên debugê yên bernameyên ns-3, ku di nav wan de mînak û ceribandinan hene. Dûv re divê hûn bi nivîsandinê guhertoya debugê ya kodê ya heyî ji nû ve ava bikin

$ ./waf

Niha eger hûn bernameyê bimeşînin hello-simulator, divê hûn encama hêvîdar bibînin.

3.6.1 Argumanên rêzika fermanê

Ji bo ku argumanên rêzika fermanê ji bernameya ns-3 re derbas bikin, şêwaza jêrîn bikar bînin:

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

Diberdaxistin ji bo navê bernameya xwe û bi argumanan. Bersivk - -command-template bo waf di bingeh de rêgezek ji bo avakirina rêzika fermana rastîn e waf ji bo pêkanîna bernameyê tê bikaranîn. Waf kontrol dike ku avahî qediya ye, rêçên pirtûkxaneya hevpar destnîşan dike, dûv re şablona rêzika fermanê ya peydakirî bikar tîne û navê bernameyê ji cîhgira %s re diguhezîne da ku gazîkirina lêkerê bike. Heke hûn vê hevoksaziyê tevlihev dibînin, guhertoyek hêsantir heye ku bernameya ns-3 û argûmanên wê yên ku di nav lêkerên yekane de hatine girtin vedihewîne:

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

Nimûneyek din a bi taybetî bikêr ev e ku bi bijartî sîteyên testê dimeşînin. Ka em texmîn bikin ku komek ceribandinê ya bi navê mytest heye (bi rastî tune). Li jor me skrîpta ./test.py bikar anî da ku çend ceribandinan bi paralelî bimeşînin, ku çend caran bangî bernameya testê dike. test-runner. Bang test-runner rasterast ji bo ceribandina yek ceribandinê:

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

Arguman dê derbasî bernameyê bibin test-runner. Ji ber ku mytest tune, dê peyamek xeletiyek were çêkirin. Ji bo çapkirina vebijarkên berdest ên test-runner, têkevin:

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

3.6.2 Debugging

Ji bo meşandina bernameyên ns-3 di bin amûrek din de, wek debugger (mînak, gdb) an amûrek ceribandina bîranînê (mînak, valgrind), formek wekhev bikar bînin - -command-template = "…". Mînakî, ji bo ku di debuggerê de bixebite gdb bernameya weya hello-simulator ns-3 bi argumanan:

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

Bala xwe bidinê ku navê bernameya ns-3 bi argumana tê - -run, û kargêriya rêveberiyê (li vir gdb) di nîqaşê de nîşana yekem e - -command-template. Dibe - -args agahdar dike gdbku rêza fermanê ya mayî girêdayî bernameya "jêr" e. (Hin versiyonên gdb vebijêrkê fêm nakin - -args. Di vê rewşê de, argumanên bernameyê jê derxînin - -command-template û koma fermanê bikar bînin gdb arges.) Em dikarin vê reçeteyê û ya berê li hev bikin da ku ceribandinê di binê debuggerê de bimeşînin:

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

3.6.3 Peldanka xebatê

Divê waf ji cihê xwe li serê dara ns-3 were destpêkirin. Ev peldank dibe pelrêça xebatê ya ku pelên derketinê dê bêne nivîsandin. Lê heke hûn dixwazin van pelan li derveyî dara çavkaniyê ya ns-3 biparêzin? Argumentê bikar bînin - -cwd:

$ ./waf --cwd=...

Hûn dikarin hêsantir bibînin ku pelên derketinê di pelrêça xebata xwe de bigirin. Di vê rewşê de, çalakiya nerasterast a jêrîn dikare bibe alîkar:

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

Ev xemilandina guhertoya berê ya fermanê pelrêça xebatê ya heyî diparêze, diçe pelrêçê wafû paşê talîmat dide waf ji bo guherandina pelrêça xebatê vegere pelrêça xebatê ya heyî ku berî destpêkirina bernameyê hatî tomarkirin. Em behsa tîmê dikin - -cwd Ji bo bêkêmasî, pir bikarhêneran tenê Waf-ê ji pelrêça asta jorîn dimeşînin û pelên derketinê li wir çêdikin.

Berdewam: Beş 4

Source: www.habr.com

Add a comment