Ns-3 nkuzi simulator netwọkụ. Isi nke 3

Ns-3 nkuzi simulator netwọkụ. Isi nke 3
isi 1,2

3 Mmalite
3.1 Nchịkọta
3.2 Ihe achọrọ
3.2.1 Nbudata ns-3 ns-XNUMX dị ka ebe nchekwa isi mmalite
3.3 Nbudata ns-3 iji Git
3.3.1 Na-ebu ns-3 iji Bake
3.4 Mgbakọ ns-3
3.4.1 Ụlọ na build.py
3.4.2 Ime ụlọ na ime achịcha
3.4.3 Jiri Waf wuo ya
3.5 Nnwale ns-3
3.6 Na-eme edemede ahụ
3.6.1 Arụmụka ahịrị iwu
3.6.2 Nwepu
3.6.3 Akwụkwọ ndekọ aha

Isi 3

Na-amalite

Ezubere isiakwụkwọ a iji kwado onye na-agụ ka ọ malite na kọmpụta nke nwere ike ọ na-etinyebeghị ns-3. Ọ na-ekpuchi nyiwe akwadoro, ihe ndị a chọrọ, ka esi enweta ns-3, otu esi ewu ns-3, yana otu esi anwale ihe wuo gị na ịme mmemme dị mfe.

3.1 Nchịkọta

Ewubere ns-3 simulator ka usoro nke ọba akwụkwọ ngwanrọ na-emekọrịta ihe. N'oge mgbakọ, koodu nke mmemme onye ọrụ na-ejikọta na ụlọ akwụkwọ ndị a. A na-eji asụsụ mmemme C++ ma ọ bụ Python dee mmemme omenala.

A na-ekesa Ns-3 dị ka koodu isi mmalite, nke pụtara na sistemụ ebumnuche ga-enwerịrị ebe mmepe ngwanrọ iji buru ụzọ wuo ọba akwụkwọ wee wuo mmemme onye ọrụ. N'ụkpụrụ, ns-3 nwere ike kesaa dị ka ụlọ akwụkwọ ndị emebere maka otu usoro, na n'ọdịnihu enwere ike kesaa ha n'ụzọ dị otú a. Mana n'oge a, ọtụtụ ndị ọrụ na-arụ ọrụ ha site na edezi ns-3 n'onwe ya, yabụ ọ bara uru ịnwe koodu isi mmalite iji wuo ọba akwụkwọ. Ọ bụrụ na onye ọ bụla ga-achọ ịmalite ọrụ nke ịmepụta ọba akwụkwọ na ngwugwu maka sistemụ arụmọrụ, biko kpọtụrụ listi nzipu ozi. ns-mmepe.

Ọzọ, anyị ga-eleba anya n'ụzọ atọ iji budata na wuo ns-3. Nke mbụ bụ ibudata ma wuo ntọhapụ gọọmentị sitere na saịtị bụ isi. Nke abụọ bụ nhọrọ na mgbakọ nke mbipụta nke mmepe nke ns-3 nwụnye. Nke atọ bụ iji ngwa nrụpụta agbakwunyere na-ebuwanye mgbakwunye maka ns-3. Anyị ga-agafe nke ọ bụla ebe ọ bụ na ngwaọrụ dịtụ iche.

Ndị ọrụ Linux nwere ahụmahụ nwere ike ịnọ na-eche ihe kpatara na-ejighị ns-3 dị ka ngwugwu dịka ọtụtụ ọba akwụkwọ ndị ọzọ na-eji njikwa ngwugwu? Ọ bụ ezie na enwere ngwugwu ọnụọgụ abụọ maka nkesa Linux dị iche iche (dịka Debian), ọtụtụ ndị ọrụ na-ejedebe na-edezi ọba akwụkwọ na inwe iwughachi ns-3 n'onwe ha, yabụ ịnwe koodu isi dị na aka. N'ihi nke a, anyị ga-elekwasị anya na wụnye si isi iyi.

Maka ọtụtụ ngwa ns-3 ikike mgbọrọgwụ adịghị mkpa, a na-atụ aro ka iji akaụntụ onye ọrụ na-enweghị ohere.

3.2 Ihe achọrọ

Ngwa niile nke ns-3 dị na ọba akwụkwọ nwere ọtụtụ ịdabere na ọba akwụkwọ ndị ọzọ, mana maka ọtụtụ akụkụ ns-3 nwere ike wulite ma jiri ya na nkwado maka ọtụtụ ihe ndị a na-ahụkarị (na-etinyekarị na ndabara): onye nchịkọta C ++, Python, onye nchịkọta akụkọ koodu isi (dịka ọmụmaatụ, wd, emacs ma ọ bụ eklips) na, ọ bụrụ na ejiri ebe nchekwa mmepe, sistemụ njikwa ụdị Git. Ọtụtụ ndị ọrụ oge mbụ agaghị echegbu onwe ha ma ọ bụrụ na nhazi ha na-akọ ụfọdụ atụmatụ ns-3 dị elu na-efu, mana maka ndị chọrọ nrụnye zuru ezu, ọrụ ahụ na-enye wiki nke gụnyere ibe nwere ọtụtụ ndụmọdụ na aghụghọ bara uru. Otu ibe dị otú ahụ bụ ibe nwụnye, yana ntuziaka nwụnye maka sistemụ dị iche iche, dị na: https://www.nsnam.org/wiki/Installation.

Akụkụ ihe achọrọ nke wiki a na-akọwa ngwugwu achọrọ iji kwado nhọrọ ns-3 a na-ahụkarị ma na-enyekwa iwu eji etinye ha na ụtọ Linux ma ọ bụ macOS.

Ị nwere ike iji ohere a chọpụta ibe wiki ns-3 ma ọ bụ weebụsaịtị bụ isi: https://www.nsnam.org, n'ihi na e nwere ọtụtụ ozi n'ebe ahụ. Malite na ns-3 kacha ọhụrụ (ns-3.29), a chọrọ ngwaọrụ ndị a iji na-agba ns-3:

Ngwa ngwugwu/ụdị

  • C++ nchịkọta
    clang++ ma ọ bụ g++ (ụdị g++ 4.9 ma ọ bụ karịa)
  • Python
    ụdị Python2>= 2.7.10, ma ọ bụ ụdị python3>=3.4
  • Git
    ụdị ọhụrụ ọ bụla (iji nweta ns-3 na GitLab.com)

  • ụdị ọhụrụ ọ bụla (maka mwepụta ns-3)
  • bunzip2
    ụdị ọhụrụ ọ bụla (maka ịwepu ns-3 ntọhapụ)

Ka ịlele ụdị Python nke ndabara, pịnye python -V. Ka ịlele ụdị g++, pịnye g++ -v. Ọ bụrụ na ngwaọrụ ọ bụla na-efu ma ọ bụ aka ochie, biko rụtụ aka na ntuziaka nwụnye na ibe wiki ns-3.

Site ugbu a gaa n'ihu, anyị na-eche na onye na-agụ na-agba ọsọ Linux, MacOS, ma ọ bụ Linux emulator, ma nwee opekata mpe ngwaọrụ ndị dị n'elu.

3.2.1 Nbudata ns-3 ns-XNUMX dị ka ebe nchekwa isi mmalite

Nke a bụ usoro omume maka onye ọrụ ọhụrụ chọrọ ibudata na ịnwale ụdị ns-3 kacha ọhụrụ na ngwugwu. A na-ebipụta ns-3 dị ka ebe nchekwa isi mmalite abịakọrọ, nke a na-akpọ mgbe ụfọdụ bọọlụ. bọọlụ bụ usoro nchekwa software pụrụ iche nke ejikọtara ọtụtụ faịlụ ọnụ. A na-akpakọkarị ebe nchekwa. ns-3 usoro buut site na bọọlụ dị mfe, naanị ị ga-ahọrọ ntọhapụ, budata ma bupụ ya.

Ka anyị were na gị, dịka onye ọrụ, chọrọ iwu ns-3 n'ime ndekọ aha mpaghara akpọrọ oghere ọrụ. Ị nwere ike nweta akwụkwọ ntọhapụ na-arụ ọrụ site na ịbanye na-esonụ na Linux console (dochie nọmba ụdị kwesịrị ekwesị, n'ezie)

$ 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 

Lezienụ anya na akụrụngwa ejiri n'elu wget, nke bụ ngwá ọrụ ahịrị iwu maka nbudata ihe na ịntanetị. Ọ bụrụ na i tinyebeghị ya, ịnwere ike iji ihe nchọgharị gị maka nke a.

Ịgbaso usoro ndị a ga-akpọrọ gị gaa na ns-allinone-3.29 ndekọ, ebe ahụ ị ga-ahụ ọtụtụ faịlụ na akwụkwọ ndekọ aha.

$ 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

Ị dịla njikere ịrụ nkesa ns-3 ma nwee ike ịga n'ihu na ngalaba na-ewu ns-3.

3.3 Nbudata ns-3 iji Git

Koodu ns-3 dị na ebe nchekwa Git na GitLab.com na https://gitlab.com/nsnam/. Otu nsnam na-achịkọta ebe nchekwa dị iche iche nke ọrụ mepere emepe na-eji.

Ụzọ kachasị mfe iji malite iji ebe nchekwa Git bụ ndụdụ ma ọ bụ mechie gburugburu ns-3-allinone. Nke a bụ usoro scripts na-ahụ maka nbudata na mgbakọ nke sistemụ ns-3 ndị a na-ejikarị eme ihe. Ọ bụrụ na ị bụ onye ọhụrụ na Git, okwu " ndụdụ" na "clone" nwere ike ọ gaghị ama gị; Ọ bụrụ otu a, anyị na-akwado ka ị mechie (mepụta nke gị) ebe nchekwa dị na GitLab.com dị ka nke a:

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

N'oge a, lelee ndekọ ndekọ gị ns-3-allinone dịtụ iche na ndekọ ndekọ aha ntọhapụ akọwara n'elu. Ọ kwesịrị ịdị ka nke a:

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

Biko mara na enwere edemede budata.py, nke ga-ewepụkwa ns-3 na koodu isi mmalite na-esote. Ebe ị nwere nhọrọ: ma budata foto mmepe ns-3 kacha ọhụrụ:

$ python download.py

ma ọ bụ na-ahọrọ ns-3 ns-XNUMX iji ọkọlọtọ -n iji gosi nọmba ntọhapụ:

$ python download.py -n ns-3.29

Mgbe nke a nzọụkwụ na ndekọ ns-3-allinone A ga-ebudata ebe nchekwa ndị ọzọ ns-3, akpọọ nkụ, pybindgen и netanim.

Примечание
Na igwe nwere Ubuntu16.04 dị ọcha, achọrọ m ịgbanwe iwu na nke a: $ sudo python3 download.py -n ns-3.29 (nke a gasịa ndetu ntụgharị asụsụ).

3.3.1 Na-ebu ns-3 iji Bake

Ụzọ abụọ dị n'elu (ebe nchekwa ma ọ bụ ebe nchekwa ns-3-allinone site na Git) bara uru maka ịnweta ns-3 kachasị mfe na ọtụtụ addons (pybindgen iji mepụta Python nkekọ na netanim maka animation netwọkụ). A na-akpọ ebe nchekwa nke atọ enyere na ndabara na ns-3-allinone akpọọ nkụ.

Ime bụ ngwá ọrụ ejikọtara ọnụ ụlọ nke ngwanrọ sitere na ọtụtụ ebe nchekwa, emepụtara maka ọrụ ns-3. Ime enwere ike iji nweta ụdị mmepe nke ns-3, yana nbudata na wulite ndọtị nke ụdị isi nke nkesa ns-3, dị ka gburugburu ebe obibi. Kpọmkwem Koodu ogbugbu, CradleNetwork Simulation Cradle, ikike ịmepụta Python ọhụrụ na-ejikọta na ns-3 "ngwa" dị iche iche.

Примечание
CradleNetwork Simulation Cradle bụ usoro na-enye gị ohere iji ezigbo ngwugwu netwọkụ TCP/IP n'ime simulator netwọkụ.

Ọ bụrụ na ị na-atụ anya ka ns-3 ns-XNUMX gị nwere atụmatụ dị elu ma ọ bụ gbakwunyere, ị nwere ike soro ụzọ nwụnye a.

Na ns-3 kacha ọhụrụ Ime agbakwunyere na ntọhapụ tar. Ntọhapụ ahụ gụnyere faịlụ nhazi nke na-enye gị ohere ibudata ụdị ngwanrọ dị ugbu a n'oge ntọhapụ. Ya bụ, ọmụmaatụ, ụdị Ime, nke ekesara na ns-3.29, enwere ike iji weghachite components maka ns-3 ma ọ bụ na mbụ, mana enweghị ike iji weghachite ihe ndị ọzọ maka mwepụta ndị ọzọ (ma ọ bụrụ na faịlụ nkọwa ngwugwu. bakeconf.xml emelitebeghị).

Ị nwekwara ike nweta akwụkwọ kacha ọhụrụ akpọọ nkụsite na itinye iwu a na njikwa Linux gị (na-eche na ị tinyela Git):

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

Mgbe ị na-agba ọsọ git iwu, ị ga-ahụ ihe dị ka ndị a:

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.

Mgbe iwu mechara mmepụta oyiri ị kwesịrị ịnwe ndekọ aha akpọọ nkụ, ihe dị n'ime ya kwesịrị ịdị ka nke a:

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

Rịba ama na ị kwajuru ọtụtụ script Python, modul Python aha ya bụ akpọọ nkụ yana faịlụ nhazi XML. Nzọụkwụ ọzọ bụ iji edemede ndị a ibudata ma wuo nkesa ns-3 nke nhọrọ gị. Ọtụtụ ebumnuche nhazi dị:

  1. ns-3.29: modul kwekọrọ na ntọhapụ; ọ ga-ebudata ihe ndị dị ka ntọhapụ na tarball;

  2. ns-3-dev: modul yiri nke ahụ, mana iji koodu sitere na osisi mmepe;

  3. ns-allinone-3.29: Modul nke gụnyere atụmatụ ndị ọzọ agbakwunyere dị ka Click routing na Network Simulation Cradle, Openflow for ns-3.

  4. ns-3-allinone: yiri ụdị ntọhapụ nke modul Allone, mana maka koodu mmepe.

Примечание
Pịa - nhazi ngwanrọ modular maka ịmepụta ndị na-anya ụgbọ elu.

Openflow bụ ụkpụrụ maka ijikwa usoro nhazi data na-ebufe na netwọk data site na ndị na-akwọ ụgbọ mmiri na ndị na-agbanwe agbanwe, na-emejuputa teknụzụ netwọkụ akọwapụtara nke ọma.

Enwere ike ịchọta foto mmepe ugbu a (anaghị ewepụta) ns-3 na:https://gitlab.com/nsnam/ns-3-dev.git.

Ndị mmepe na-agbalị idobe ebe nchekwa ndị a na-arụ ọrụ na-arụ ọrụ na-agbanwe agbanwe, mana ha nọ na mpaghara mmepe ma nwee koodu na-adịghị ewepụta, yabụ ọ bụrụ na ị naghị eme atụmatụ iji atụmatụ ọhụrụ, wee họrọ ntọhapụ gọọmentị.

Ị nwere ike ịchọta ụdị koodu kachasị ọhụrụ site n'ịchọgharị na ndepụta nke ebe nchekwa, ma ọ bụ site na ịga na ns-3 Mwepụta ibe weebụ:https://www.nsnam.org/releases/ na ịpị njikọ ụdịdị kachasị ọhụrụ. N'ihe atụ a, anyị ga-aga n'ihu na ns-3.29.

Ugbu a, iji nweta ihe ns-3 anyị chọrọ, anyị ga-eji ngwá ọrụ ahụ Ime. Ka anyị kwuo okwu mmalite ole na ole gbasara ọrụ ahụ Ime.

Ime na-arụ ọrụ site na-ebunye isi mmalite ngwugwu n'ime ndekọ isi iyi na ịwụnye ọba akwụkwọ n'ime ndekọ ihe nrụpụta. Ime enwere ike ịgba ọsọ site na ịkọwa ọnụọgụ abụọ, mana ọ bụrụ na ịchọrọ ịgba ọsọ Ime Ọ bụghị site na ndekọ nke ebudatara ya, ọ bụ ihe amamihe dị na ya ịgbakwunye ụzọ ahụ akpọọ nkụ gaa n'ụzọ gị (PATH gburugburu ebe obibi), dịka ọmụmaatụ dị ka ndị a (ihe atụ maka Linux bash shell). Gaa na ndekọ "bake" wee tọọ mgbanwe gburugburu ebe a:

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

Nke a ga-etinye mmemme ahụ akpọọ nkụ.py gaa n'ụzọ shei ma ga-ekwe ka mmemme ndị ọzọ chọta executables na ọba akwụkwọ nke o kere akpọọ nkụ. N'ọnọdụ ụfọdụ ojiji akpọọ nkụ, Ọnọdụ PATH na PYTHONPATH akọwapụtara n'elu adịghị mkpa, mana iwu zuru oke nke ns-3-allinone (ya na ngwugwu ndị ọzọ) na-achọkarị ya.

Gaa na ndekọ ọrụ gị wee tinye ihe ndị a na njikwa:

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

Ọzọ anyị ga-ajụ Ime lelee ma ọ bụrụ na anyị nwere ngwaọrụ zuru ezu iji buo akụkụ dị iche iche. Kpọọ:

$ ./bake.py check

Ị ga-ahụ ihe dị ka nke a:

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

Karịsịa, bulite ngwaọrụ dị ka Mercurial, CVS, Git na Bazaar dị mkpa na usoro a ka ha na-enye anyị ohere ịnweta koodu ahụ. N'oge a, wụnye ngwaọrụ ndị na-efu efu n'ụzọ ọ na-adị maka sistemụ gị (ọ bụrụ na ị maara otú) ma ọ bụ kpọtụrụ onye na-ahụ maka sistemụ gị maka enyemaka.

Na-esote, gbalịa budata ngwanro a:

$ ./bake.py download

nsonaazụ kwesịrị ịbụ ihe dịka:

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

Nke a ga-apụta na ebudatara isi mmalite atọ. Ugbu a gaa na akwụkwọ ndekọ aha ma pịnye ls; Ị ga-ahụ:

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

Ugbu a ị dịla njikere ịrụ nkesa ns-3.

3.4 Mgbakọ ns-3

Dịka ọ dị na nbudata ns-3, enwere ọtụtụ ụzọ isi wuo ns-3. Isi ihe anyị chọrọ imesi ike bụ na a na-eji ns-3 arụ ọrụ site na iji ihe eji arụ ọrụ a na-akpọ Wafkọwara n'okpuru. Ọtụtụ ndị ọrụ ga-arụ ọrụ na Waf, mana enwere edemede ole na ole ga-enyere gị aka ibido ma ọ bụ hazie ihe wuo ihe dị mgbagwoju anya. Yabụ biko, tupu ị gụọ ya Waf, lee anya wuo.py na mgbakọ na akpọọ nkụ.

3.4.1 Ụlọ na build.py

Ịkpachara anya Nzọụkwụ a na-ewu ụlọ dị naanị site na ụdị akwụkwọ ndekọ aha enwetara dị ka akọwara n'elu; ebudataghị ya site na git ma ọ bụ ime achịcha.

Mgbe ị na-arụ ọrụ na ebe nchekwa ntọhapụ bọọlụ, na ns-3-allinone Enwere edemede dị mma nke nwere ike ime ka ikpokọta akụrụngwa dị mfe. A na-akpọ ya build.py. Ihe omume a ga-edobe gị oru ngo n'ụzọ kasị baa uru. Agbanyeghị, rịba ama na ns-3 dị elu na-arụ ọrụ na-agụnyekarị iji sistemụ ns-3 nke onwe ya, Waf, nke a ga-ewebata ma emechaa na nkuzi a.

Ọ bụrụ na ijiri budata bọọlụ, wee banye na ndekọ gị ~ / ebe ọrụ ndekọ aha ihe dị ka ns-allinone-3.29. Tinye ihe ndị a:

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

Mgbe akpọrọ wuo.py Anyị na-eji arụmụka ahịrị iwu iji wuo atụ na ule ejiri na nkuzi a, nke na-abụghị nke ndabara wuru na ns-3. Site na ndabara, mmemme na-ewulite modul niile dị. Mgbe ahụ, ọ bụrụ na ịchọrọ, ị nwere ike ịmepụta ns-3 na-enweghị atụ na ule, ma ọ bụ wepụ modul ndị na-adịghị mkpa maka ọrụ gị.

Ị ga-ahụ ọtụtụ ozi mmepụta ihe nchịkọta akụkọ gosipụtara site na edemede ka ọ na-ewuli akụkụ dị iche iche ị bugoro. Nke mbụ, edemede ga-agbalị ịmepụta animator netanim, mgbe ahụ na-ejikọta generator pybindgen na n'ikpeazụ ns-3. Mgbe usoro ahụ mechara, ị ga-ahụ ihe ndị a:

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

N'ahịrị atọ ikpeazụ nke ndepụta ahụ, anyị na-ahụ ozi gbasara modul na-ewubeghị:

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

Nke a pụtara na ụfọdụ modul ns-3 na-adabere na ọba akwụkwọ ndị dị n'èzí nwere ike ghara ịrụpụta ya, ma ọ bụ na ọ dịghị mkpa ka e wuo ha maka nhazi a. Nke a apụtaghị na simulator anaghị achịkọta ma ọ bụ na modul gbakọtara agaghị arụ ọrụ nke ọma.

3.4.2 Ime ụlọ na ime achịcha

Ọ bụrụ na ị na-eji bake n'elu iji nweta koodu mmalite site na ebe nchekwa ọrụ, ị nwere ike ịga n'ihu iji ya wuo ns-3. Kpọọ:

$ ./bake.py build

ma ị ga-ahụ ihe dịka:

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

akara: Ị nwekwara ike ime ma nbudata na-ewu nzọụkwụ ozugbo site na-akpọ "bake.py deploy".

Ịchịkọta ihe niile nwere ike ịda, mana mgbakọ ga-aga n'ihu ma ọ bụrụ na achọrọghị akụrụngwa. Dịka ọmụmaatụ, okwu mbugharị na nso nso a bụ nke ahụ castxml nwere ike kpọkọta site na ngwá ọrụ akpọọ nkụ ọ bụghị na nyiwe niile. N'okwu a, ozi dị ka nke a ga-apụta:

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

Otú ọ dị, castxml naanị achọrọ ma ọ bụrụ na ịchọrọ ịmepụta njikọ Python emelitere. Maka ọtụtụ ndị ọrụ ọ dịghị mkpa maka nke a (opekata mpe ruo mgbe ha gbanwere ns-3), yabụ enwere ike ileghara ịdọ aka ná ntị dị otú ahụ anya n'enweghị nsogbu ugbu a.

Ọ bụrụ na ọ daa, iwu na-esonụ ga-enye gị ntụnye gbasara ndabere efu:

$ ./bake.py show

A ga-edepụta ndabere dị iche iche nke ngwugwu ndị ị na-achọ iwu.

3.4.3 Jiri Waf wuo ya

Ruo oge a, iji malite iwu ns-3, anyị na-eji ma ọ bụ ederede wuo.py, ma ọ bụ ngwá ọrụ akpọọ nkụ. Ngwa ndị a bara uru maka iwulite ns-3 na idobe ọba akwụkwọ. N'ezie, iji wuo ha na-arụ ọrụ ihe owuwu Waf site na ndekọ ns-3. Waf arụnyere na koodu ns-3. Ọtụtụ ndị ọrụ na-aga n'ihu na-aga n'ihu ozugbo iji hazie na ikpokọta ns-3 Waf. Yabụ, ka ịga n'ihu, biko gaa na ns-3 ndekọ nke ị mepụtara na mbụ.

Achọghị nke a nke ọma n'oge a, mana ọ ga-aba uru ịlaghachi ntakịrị wee hụ otu esi eme mgbanwe na nhazi ọrụ. Eleghị anya mgbanwe nhazi kachasị bara uru ị nwere ike ime bụ ịmepụta ụdị koodu ahụ kachasị mma. Site na ndabara, ị haziela ọrụ gị iji wuo ụdị nbibi. Ka anyị leba anya na oru ngo iji mepụta nke kachasị ewu ewu. Iji kọwaara Waf na ọ kwesịrị ịrụ ụlọ kachasị mma nke gụnyere ọmụmaatụ na ule, ị ga-achọ ịme iwu ndị a:

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

Nke a ga-amalite Waf n'èzí ndekọ ndekọ mpaghara (maka ịdị mma gị). Iwu mbụ na-ehichapụ site na ụlọ gara aga, nke a anaghị adịkarị mkpa, ma ọ bụ omume dị mma (na-ahụkwa profaịlụ profaịlụ n'okpuru); nke a ga-ehichapụ ọba akwụkwọ ndị emeburu na faịlụ ihe dị na ndekọ wuo/. Mgbe a na-ahazigharị ọrụ ahụ na usoro ihe owuwu ahụ na-enyocha ihe ndabere dị iche iche, ị ga-ahụ mmepụta yiri nke a:

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)

Biko mara akụkụ ikpeazụ nke ndepụta dị n'elu. Ụfọdụ nhọrọ ns-3 anaghị enyere ya aka na ndabara ma ọ bụ chọọ nkwado sistemu ka ọ rụọ ọrụ nke ọma. Dịka ọmụmaatụ, iji mee ka XmlTo nwee ike, ọbá akwụkwọ ahụ ga-adịrịrị na sistemụ libxml-2.0. Ọ bụrụ na ahụghị ọba akwụkwọ a na arụghị ọrụ ns-3 kwekọrọ, a ga-egosipụta ozi. Marakwa na ọ ga-ekwe omume iji iwu ahụ sudo iji tọọ suid bit “setịpụrụ otu ID na oge ojiri gaa” maka ụfọdụ mmemme. Ọ naghị enyere ya aka na ndabara ya mere njirimara a na-egosi dị ka "anaghị enyere ya aka". N'ikpeazụ, iji nweta ndepụta nke nhọrọ enyere, jiri Waf na oke --check-config.

Ugbu a, ka anyị laghachi azụ azụ n'ime ihe nrụpụta nke nwere ihe atụ na ule.

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

Edobela sistemu ihe owuwu ma ị nwere ike wulite ụdị ns-3 mmemme site na ịpị naanị:

$ ./waf

Nzọụkwụ ndị dị n'elu nwere ike ịmanye gị ịmepụta akụkụ nke ns-3 usoro ugboro abụọ, ma ugbu a, ị maara otú e si agbanwe nhazi ma wuo koodu kachasị mma.

Iji lelee profaịlụ nke na-arụ ọrụ maka nhazi ọrụ enyere, enwere iwu:

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

Ihe dị n'elu wuo.py na-akwadokwa arụmụka --enable-examples и --enable-tests, ma nhọrọ ndị ọzọ Waf ọ naghị akwado ozugbo. Dịka ọmụmaatụ, nke a agaghị arụ ọrụ:

$ ./build.py --disable-python

mmeghachi omume ga-adị ka nke a:

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

Agbanyeghị, onye ọrụ pụrụ iche - - enwere ike iji gafere paramita ndị ọzọ site na wafya mere kama nke dị n'elu iwu a ga-arụ ọrụ:

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

n'ihi na ọ na-ewepụta isi iwu ./waf configure --disable-python. Nke a bụ ndụmọdụ mmeghe ndị ọzọ gbasara Waf.

Ijikwa mperi mperi

A na-anwale mwepụta ns-3 na mkpokọta C++ kachasị ọhụrụ dị n'oge ewepụtara na nkesa Linux na MacOS. Otú ọ dị, ka oge na-aga, a na-ewepụta nkesa ọhụrụ na ndị nchịkọta ọhụrụ, ndị ọhụrụ a na-achịkọta na-enwekwa mmasị karị banyere ịdọ aka ná ntị. ns-3 na-ahazi ihe owuwu ya ka ọ na-emeso ịdọ aka ná ntị niile dị ka njehie, yabụ mgbe ụfọdụ ọ bụrụ na ị na-eme ụdị ochie na sistemụ ọhụrụ, ịdọ aka ná ntị nchịkọta nwere ike ịkwụsị iwu ahụ.

Dịka ọmụmaatụ, enwebula mwepụta nke ns‑3.28 maka Fedora 28, nke gụnyere ụdị isi ọhụrụ. gcc (Ochie-8). Ịmepụta ns-3.28 ma ọ bụ nsụgharị mbụ n'okpuru Fedora 28, na Gtk2+ arụnyere, njehie na-esonụ ga-eme:

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

Na mwepụta malite na ns-3.28.1, in Waf nhọrọ dị iji dozie nsogbu ndị a. Ọ na-egbochi ịtọ ọkọlọtọ "-Werror" na g++ na clang++. Nke a bụ nhọrọ "--disable-werror" na a ga-etinyerịrị ya n'oge nhazi:

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

Hazie ma ọ bụ gbakọta

Ụfọdụ iwu Waf nwere ihe ọ pụtara naanị na nhazi nhazi, ụfọdụ na-arụkwa ọrụ naanị n'oge a na-ewu ụlọ. Dịka ọmụmaatụ, ọ bụrụ na ịchọrọ iji njirimara ns-3 ns-XNUMX, ị nwere ike ịme ka ntọala bit suid eji sudo, dị ka akọwara n'elu. Nke a ga-ewepụ iwu nhazi nhazi, yabụ ị nwere ike ịgbanwe nhazi site na iji iwu na-esonụ, nke gụnyere ihe atụ na ule.

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

Ọ bụrụ na ị na-eme nke a Waf ga malite sudoka ịgbanwee emulation code soket mmemme ike na-agba ọsọ na ikike mgbọrọgwụ. The Waf Enwere ọtụtụ nhọrọ ndị ọzọ maka nhazi na iwu usoro. Ka inyochaa nhọrọ gị, tinye:

$ ./waf --help

Na ngalaba na-esote anyị ga-eji ụfọdụ nhọrọ metụtara nnwale.

Profaịlụ Mgbakọ

Anyị ahụlarị ka ị ga-esi hazie Waf maka mgbakọ debug и kachasị:

$ ./waf --build-profile=debug

Enwekwara profaịlụ mgbakọ etiti, ntọhapụ. Nhọrọ -d ya na ya bụ otu --build-profile. Profaịlụ ihe nrụpụta na-achịkwa iji mkpọ osisi, nkwuputa, na njikarịcha mgba ọkụ:

Ns-3 nkuzi simulator netwọkụ. Isi nke 3

Dị ka ị na-ahụ, ịtu osisi na nkwuputa dị naanị na nrụpụta ihe nbipu. Omume akwadoro bụ ịmepụta edemede gị na ọnọdụ nbipu, wee mee ọsọ ọsọ ugboro ugboro (maka ọnụ ọgụgụ ma ọ bụ mgbanwe ngbanwe) na profaịlụ nrụpụta kachasị mma.

Ọ bụrụ na ị nwere koodu nke kwesịrị ịgba ọsọ na profaịlụ nrụpụta ụfọdụ, jiri 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;)

Ndabere, Waf ebe na-ewu ihe arịa na ndekọ ihe wuo. Ị nwere ike ezipụta ndekọ mmepụta dị iche site na iji nhọrọ ahụ - -out, dịka ọmụmaatụ:

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

Site na ijikọta nke a na profaịlụ nrụpụta, ị nwere ike ịgbanwe n'ụzọ dị mfe n'etiti nhọrọ nchịkọta dị iche iche:

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

Nke na-enye gị ohere ịrụ ọrụ na ọtụtụ mgbakọ na-enweghị idegharị mgbakọ kacha ọhụrụ oge ọ bụla. Mgbe ị gbanwere na profaịlụ ọzọ, Waf ga-achịkọta naanị ya, na-enweghị iweghachi ihe niile kpamkpam.

Mgbe ị gbanwere profaịlụ wuo n'ụzọ dị otu a, ịkwesịrị ịkpachara anya ịnye otu nhọrọ nhazi oge ọ bụla. Ịkọwapụta ọtụtụ mgbanwe gburugburu ebe obibi ga-enyere gị aka izere mmejọ:

$ 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

Ndị nchịkọta na ọkọlọtọ

N'ihe atụ ndị a dị n'elu Waf iji wuo ns-3 na-eji nchịkọta C++ sitere na GCC ( g ++). Agbanyeghị, ịnwere ike ịgbanwe nke ị na-eji Waf C++ compiler, site na ịkọwapụta mgbanwe gburugburu CXX. Dịka ọmụmaatụ, iji C++ compiler Clang, clang++,

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

N'otu ụzọ ahụ ị nwere ike hazie Waf iji nchikota ekesa na-eji diskc:

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

Enwere ike ịchọta ozi ndị ọzọ gbasara distcc na mkpokọta kesara na ibe ọrụ na ngalaba akwụkwọ. Iji tinye ọkọlọtọ mkpokọta mgbe ị na-ahazi ns-3, jiri mgbanwe gburugburu CXXFLAGS_EXTRA.

ọnọdụ

Waf enwere ike iji tinye ọba akwụkwọ n'ebe dị iche iche na sistemụ. Site na ndabara, ọba akwụkwọ achịkọtara na ndị executable dị na ndekọ aha -ewu, na ebe ọ bụ na Waf maara ebe ụlọ akwụkwọ ndị a na-arụ ọrụ, ọ dịghị mkpa ịwụnye ụlọ akwụkwọ ọ bụla ọzọ.

Ọ bụrụ na ndị ọrụ na-ahọrọ ịwụnye na mpụga ndekọ ihe nrụpụta, ha nwere ike ịme iwu ahụ ./waf wụnye. Prefix ndabara maka nwụnye bụ / usr / obodonke ahụ kpatara ya ./waf wụnye ga-etinye mmemme na / usr / mpaghara / biini, ụlọ akwụkwọ dị na / usr / obodo / lib na nkụnye eji isi mee faịlụ na /usr/local/gụnyere. A na-achọkarị iji prefix ndabara tọọ ikike nke onye njikwa, yabụ iwu a na-ahụkarị ga-abụ sudo ./waf install. Mgbe emepere ya, Waf ga-ebu ụzọ họrọ iji ọba akwụkwọ ndị a na-ekekọrịta na ndekọ ndekọ ụlọ, wee chọọ ọba akwụkwọ n'akụkụ ụzọ nke ụlọ akwụkwọ ndị ahaziri na mpaghara mpaghara. Yabụ mgbe ị na-etinye ọba akwụkwọ na sistemụ, ọ bụ ezigbo omume ịlele na a na-eji ọba akwụkwọ ziri ezi. Ndị ọrụ nwere ike họrọ ịwụnye na prefix dị iche site na ịgafe nhọrọ n'oge nhazi --prefix, dịka ọmụmaatụ:

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

Ọ bụrụ na emechaa, mgbe emechara, onye ọrụ na-abanye n'iwu nrụnye ./waf, a ga-eji prefix /opt/local.

otu ./waf clean ga-eji tupu reconfiguring oru ngo ma ọ bụrụ na echichi ga-eji Waf n'okpuru prefix dị iche.

Ya mere, iji ns-3 ọ dịghị mkpa ịkpọ ./waf install. Ọtụtụ ndị ọrụ agaghị achọ iwu a n'ihi na Waf ga-eburu ụlọ akwụkwọ ndị dị ugbu a site na ndekọ ndekọ ụlọ, mana ụfọdụ ndị ọrụ nwere ike ịhụ na nke a bara uru ma ọ bụrụ na ihe omume ha gụnyere ịrụ ọrụ na mmemme na-abụghị akwụkwọ ndekọ ns-3.

Waf otu

N'elu ọkwa nke ns-3 isi iyi, enwere naanị otu edemede Waf. Ozugbo ịmalite ịrụ ọrụ, ị ga-etinye oge dị ukwuu na ndekọ scratch/ ma ọ bụ miri emisrc/... ma n'otu oge ahụ ga-agba ọsọ Waf. Ị nwere ike icheta ebe ị nọ wee gbaa ọsọ Waf dị ka ndị a:

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

ma nke a ga-abụ ihe na-agwụ ike na njehie, ya mere enwere ngwọta ka mma. Otu ụzọ a na-ahụkarị bụ iji editọ ederede dịka emacs ma ọ bụ wd, nke meghere ọnụ ụzọ abụọ, a na-eji otu wuo ns-3, nke abụọ a na-ejikwa dezie koodu isi mmalite. Ọ bụrụ na ị nwere naanị bọọlụ, mgbe ahụ mgbanwe gburugburu ebe obibi nwere ike inye aka:

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

$ cd scratch 
$ waff build

N'ime akwụkwọ ndekọ aha modul ọ nwere ike ịnwa ịtinye script waf na-adịghị mkpa dịka exec ../../waf. Biko, emela ihe ahụ. Nke a na-agbagwoju anya maka ndị ọhụrụ na, mgbe emechara ya nke ọma, na-eduga na mperi ihe nrụpụta siri ike ịchọpụta. Ngwọta ndị egosipụtara n'elu bụ ụzọ ekwesịrị iji.

3.5 Nnwale ns-3

Ị nwere ike ịme ule nkeji nkesa ns-3 site na ịmegharị edemede ahụ ./nnwale.py:

$ ./test.py

A na-eme ule ndị a n'otu n'otu Waf. N'ikpeazụ ị ga-ahụ ozi na-ekwu:

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

Nke a bụ ozi dị mkpa maka ịchọpụta mkpọka valgrind, mkpọka ma ọ bụ mperi, na-egosi nsogbu dị na koodu ma ọ bụ enweghị ndakọrịta n'etiti ngwaọrụ na koodu.

Ị ga-ahụkwa mmepụta ikpeazụ si Waf na onye nyocha na-agba ule ọ bụla, nke ga-adị ka nke a:

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)

Ndị ọrụ na-ejikarị iwu a iji chọpụta ngwa ngwa na arụrụ nkesa ns-3 nke ọma. (Rịba ama na usoro nke "PASS: ..." ahịrị nwere ike ịdị iche, nke a bụ ihe nkịtị. Ihe dị mkpa bụ na nchịkọta nchịkọta na njedebe nke akụkọ ahụ na-egosi na ule niile gafere; ọ dịghị ule ọ bụla dara ma ọ bụ daa.) Na Wafna nwale.py ga-emekọrịta ọrụ n'ofe cores processor dịnụ nke igwe.

3.6 Na-eme edemede ahụ

Anyị na-ejikarị scripts n'okpuru njikwa Waf. Nke a na-enye ohere usoro ihe owuwu iji hụ na edobere ụzọ ọbá akwụkwọ nkekọrịtara nke ọma yana na ọba akwụkwọ dị na oge ojiri gaa. Iji mee mmemme, jiri naanị ya Waf na oke - -run. Ka anyị mee ihe ns-3 dabara na mmemme ebe niile Ndewo Ụwasite na ịpị ihe ndị a:

$ ./waf --run hello-simulator

Waf ga-ebu ụzọ lelee na emebere mmemme ahụ nke ọma wee wuo ma ọ bụrụ na ọ dị mkpa. Mgbe ahụ Waf ga-eme mmemme nke na-emepụta ihe ndị a.

Hello Simulator

Ekele! Ị bụzi onye ọrụ ns-3!

Kedu ihe m ga-eme ma ọ bụrụ na ahụghị m nsonaazụ?

Ọ bụrụ na ị na-ahụ ozi Wafna-egosi na arụchaala arụrụala nke ọma, mana ị naghị ahụ nsonaazụ ya "Ndewo Simulator", mgbe ahụ enwere ike na na ngalaba [Build-with-Waf] ị gbanwere ọnọdụ ihe owuwu gị kachasị, mana agbagharaghị ịgbanwegharị na ọnọdụ ahụ debug. Ihe nrụpụta njikwa niile ejiri na nkuzi a na-eji akụrụngwa ns-3 pụrụ iche nke na-arụ osisi ma na-eji bipụta ozi omenala na njikwa. A na-enwe nkwarụ na-akpaghị aka mgbe achịkọtala koodu kachasị mma - a na-emezi ya. Ọ bụrụ na ịhụghị mmepụta "Hello Simulator", tinye ihe ndị a:

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

hazie Waf iji wuo ụdị debug nke mmemme ns-3, nke gụnyere ọmụmaatụ na ule. Ị ga-ewughachi ụdị nbibi nke koodu ugbu a site na ịpị

$ ./waf

Ugbu a ọ bụrụ na ị na-agba ọsọ mmemme ndewo-simulator, ị kwesịrị ịhụ nsonaazụ a tụrụ anya ya.

3.6.1 Arụmụka ahịrị iwu

Iji nyefee arụmụka ahịrị iwu na mmemme ns-3, jiri ụkpụrụ a:

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

Dochie na aha mmemme gị na arụmụka. Arụmụka - -command-template n'ihi na Waf bụ n'ezie uzommeputa maka iwulite ahịrị iwu n'ezie Waf eji eme mmemme. Waf na-enyocha na ihe owuwu ahụ zuru ezu, na-edozi ụzọ ọbá akwụkwọ nkekọrịta, wee jiri ndebiri ahịrị iwu enyere ma dochie aha mmemme maka onye na-edebe % s ịkpọ onye arụrụ ọrụ. Ọ bụrụ n’ịhụta syntax a gbagwojuru anya, enwere ụdị dị mfe nke gụnyere mmemme ns-3 yana arụmụka ya etinyere n'otu nkwudo:

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

Ihe atụ ọzọ bara uru bụ ịgba ọsọ ule ule ahọrọ. Ka anyị chee na enwere ụlọ nyocha a na-akpọ mytest (n'ezie ọ dịghị). N'elu anyị na-eji ./test.py script iji mee ọtụtụ ule n'otu oge, nke na-akpọ usoro ule ugboro ugboro. nwale-ọsọ. Kpọọ nwale-ọsọ ozugbo iji mee otu ule:

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

A ga-ebufe arụmụka na mmemme ahụ nwale-ọsọ. Ebe ọ bụ na mytest adịghị, ozi njehie ga-ewepụta. Ka ibipụta nhọrọ ndị na-agba ọsọ ule dị, tinye:

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

3.6.2 Nwepu

Iji mee mmemme ns-3 n'okpuru ọrụ ọzọ, dị ka ihe nbipu (dịka ọmụmaatụ, gdb) ma ọ bụ ngwá ọrụ ule ebe nchekwa (dịka ọmụmaatụ, valgrind), jiri ụdị yiri ya - -command-template = "…". Dịka ọmụmaatụ, ịgba ọsọ na debugger gdb mmemme hello-simulator ns-3 gị nwere arụmụka:

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

Rịba ama na ns-3 aha mmemme na-abịa na arụmụka ahụ - -run, na akụrụngwa njikwa (ebe a gdb) bụ akara mbụ na arụmụka ahụ - -command-template. Nhọrọ - -args agwa gdbna usoro iwu ndị ọzọ bụ nke mmemme "ala". (Ụdị nsụgharị gdb aghọtaghị nhọrọ - -args. N'okwu a, wepụ arụmụka mmemme site na - -command-template wee jiri setịpụ iwu gdb akụ.) Anyị nwere ike ijikọta uzommeputa a na nke gara aga iji mee ule n'okpuru onye nbibi:

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

3.6.3 Akwụkwọ ndekọ aha

Ekwesịrị ịmalite Waf site na ọnọdụ ya n'elu osisi ns-3. Nke a na nchekwa na-aghọ ndekọ na-arụ ọrụ ebe mmepụta faịlụ ga-dere. Ma gịnị ma ọ bụrụ na ịchọrọ idobe faịlụ ndị a n'èzí ns-3 isi iyi osisi? Jiri arụmụka - -cwd:

$ ./waf --cwd=...

Ị nwere ike ịhụ na ọ dịkwuo mfe ịnweta faịlụ mmepụta na ndekọ ọrụ gị. N'okwu a, omume na-apụtachaghị ìhè nwere ike inye aka:

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

Nke a mma nke gara aga version nke iwu na-echekwa ugbu a na-arụ ọrụ ndekọ, na-aga na ndekọ Wafwee nyezie ntụziaka Waf ịgbanwe akwụkwọ ndekọ aha na-arụ ọrụ laghachi na ndekọ ọrụ ugbu a echekwara tupu ịmalite mmemme. Anyị kwuru otu - -cwd Maka izu oke, ọtụtụ ndị ọrụ na-agba ọsọ Waf site na ndekọ ndekọ dị elu wee mepụta faịlụ mmepụta ebe ahụ.

Na-aga n'ihu: Isi nke 4

isi: www.habr.com

Tinye a comment