ns-3 network simulator tutorial. Kapitulo 3

ns-3 network simulator tutorial. Kapitulo 3
kapitulo 1,2

3 Pagsugod
3.1 Kinatibuk-ang Paglantaw
3.2 Mga kinahanglanon
3.2.1 Pag-download sa pagpagawas sa ns-3 isip tinubdan nga archive
3.3 Pag-download sa ns-3 gamit ang Git
3.3.1 Nagkarga sa ns-3 gamit ang Bake
3.4 Asembliya ns-3
3.4.1 Pagtukod gamit ang build.py
3.4.2 Pagtukod uban sa Bake
3.4.3 Pagtukod gamit ang Waf
3.5 Pagsulay ns-3
3.6 Pagpadagan sa script
3.6.1 Mga argumento sa command line
3.6.2 Pag-debug
3.6.3 Direktoryo sa pagtrabaho

Kapitulo 3

Pagsugod

Kini nga kapitulo gituyo aron sa pag-andam sa magbabasa sa pagsugod sa usa ka kompyuter nga wala pa ma-install ang ns-3. Naglangkob kini sa gisuportahan nga mga plataporma, mga kinahanglanon, kung giunsa pagkuha ang ns-3, kung giunsa paghimo ang ns-3, ug kung giunsa pagsulay ang imong pagtukod ug pagpadagan sa yano nga mga programa.

3.1 Kinatibuk-ang Paglantaw

Ang ns-3 simulator gitukod isip usa ka sistema sa kolaborasyon nga software library. Atol sa asembliya, ang kodigo sa mga programa sa tiggamit nalambigit niini nga mga librarya. Ang C++ o Python programming language gigamit sa pagsulat sa mga custom nga programa.

Ang Ns-3 gipang-apud-apod isip source code, nga nagpasabot nga ang target nga sistema kinahanglang adunay software development environment aron una nga matukod ang mga library ug dayon matukod ang user program. Sa prinsipyo, ang ns-3 mahimong iapud-apod isip andam na nga mga librarya alang sa usa ka piho nga sistema, ug sa umaabot sila mahimong maapod-apod niining paagiha. Apan karon daghang tiggamit ang aktuwal nga nagbuhat sa ilang trabaho pinaagi sa pag-edit sa ns-3 mismo, busa mapuslanon nga adunay source code aron matukod ang mga librarya. Kung adunay gusto nga mobuhat sa buluhaton sa paghimo og andam nga mga librarya ug mga pakete alang sa mga operating system, palihug kontaka ang mailing list ns-developers.

Sunod, atong tan-awon ang tulo ka paagi sa pag-download ug paghimo sa ns-3. Ang una mao ang pag-download ug paghimo sa opisyal nga pagpagawas gikan sa panguna nga site. Ang ikaduha mao ang pagpili ug asembliya sa mga kopya sa development versions sa basic ns-3 installation. Ang ikatulo mao ang paggamit sa dugang nga mga himan sa pagtukod aron makarga ang daghang mga extension para sa ns-3. Atong tun-an ang matag usa tungod kay ang mga himan medyo lahi.

Ang eksperyensiyado nga mga tiggamit sa Linux mahimong mahibulong nganong ang ns-3 wala gihatag isip usa ka pakete sama sa kadaghanan sa ubang mga librarya nga naggamit sa usa ka package manager? Bisan kung adunay mga binary nga pakete alang sa lainlaing mga pag-apod-apod sa Linux (eg Debian), kadaghanan sa mga tiggamit nagtapos sa pag-edit sa mga librarya ug kinahanglan nga magtukod pag-usab sa ns-3 sa ilang kaugalingon, mao nga magamit ang magamit nga source code. Tungod niini nga hinungdan, mag-focus kami sa pag-install gikan sa gigikanan.

Alang sa kadaghanan sa mga aplikasyon ns-3 katungod gamut dili kinahanglan, girekomenda nga gamiton ang usa ka dili pribilihiyo nga account sa gumagamit.

3.2 Mga kinahanglanon

Ang tibuok set sa anaa nga ns-3 nga mga librarya adunay ubay-ubay nga mga dependency sa mga third-party nga mga librarya, apan sa kadaghanan nga bahin ang ns-3 mahimong matukod ug magamit uban ang suporta alang sa pipila ka komon (kasagaran gi-install pinaagi sa default) nga mga sangkap: usa ka C++ compiler, Python, usa ka source code editor (pananglitan, vim, emacs o Eclipse) ug, kung gigamit ang mga repositoryo sa pagpauswag, mga sistema sa pagkontrol sa bersyon sa Git. Kadaghanan sa mga first-time nga tiggamit dili kinahanglan mabalaka kung ang ilang mga pag-configure nagreport sa pipila ka mga advanced nga bahin sa ns-3 nga nawala, apan alang sa mga gusto sa usa ka hingpit nga pag-install, ang proyekto naghatag usa ka wiki nga adunay mga panid nga adunay daghang mapuslanon nga mga tip ug trick. Usa sa ingon nga panid mao ang panid sa Pag-install, nga adunay mga panudlo sa pag-install alang sa lainlaing mga sistema, magamit sa: https://www.nsnam.org/wiki/Installation.

Ang Prerequisites nga seksyon niini nga wiki nagpatin-aw kung unsang mga pakete ang gikinahanglan sa pagsuporta sa komon nga ns-3 nga mga opsyon ug naghatag usab sa mga sugo nga gigamit sa pag-instalar niini sa komon nga mga lami sa Linux o macOS.

Mahimo nimong pahimuslan kini nga oportunidad sa pagsuhid sa panid sa ns-3 wiki o sa panguna nga website: https://www.nsnam.org, tungod kay adunay daghang impormasyon didto. Sugod sa pinakabag-o nga bersyon sa ns-3 (ns-3.29), gikinahanglan ang mosunod nga mga himan aron makadagan ang ns-3:

Tool Package/Bersyon

  • C++ compiler
    clang++ o g++ (g++ version 4.9 o mas taas pa)
  • Python
    python2 version>= 2.7.10, o python3 version>=3.4
  • Git
    bisan unsang pinakabag-o nga bersyon (aron ma-access ang ns-3 sa GitLab.com)
  • alkitran
    bisan unsang pinakabag-o nga bersyon (para sa pag-unpack sa ns‑3 nga pagpagawas)
  • bunzip2
    bisan unsang pinakabag-o nga bersyon (alang sa pag-unpack sa ns‑3 nga pagpagawas)

Aron masusi ang default nga bersyon sa Python, i-type python -V. Aron masusi ang g++ nga bersyon, i-type g++ -v. Kung adunay mga himan nga kulang o tigulang na kaayo, palihug tan-awa ang giya sa pag-install sa panid sa ns-3 wiki.

Sukad karon, among gihunahuna nga ang magbabasa nagpadagan sa Linux, MacOS, o usa ka Linux emulator, ug adunay labing menos sa mga himan sa ibabaw.

3.2.1 Pag-download sa pagpagawas sa ns-3 isip tinubdan nga archive

Kini ang dagan sa aksyon para sa usa ka bag-ong tiggamit nga gusto mag-download ug mag-eksperimento sa pinakabag-o nga pagpagawas ug mga bersyon sa pakete sa ns-3. Ang mga pagpagawas sa ns-3 gimantala isip compressed source archive, usahay gitawag tarball. tarball usa ka espesyal nga format sa archive sa software diin daghang mga file ang gihiusa. Ang archive kasagarang gi-compress. ns-3 boot proseso pinaagi sa tarball yano ra, kinahanglan nimo nga mopili usa ka pagpagawas, i-download ug i-unpack kini.

Ibutang nato nga ikaw, isip usa ka user, gusto nga magtukod og ns-3 sa usa ka lokal nga direktoryo nga gitawag work space. Makakuha ka og usa ka nagtrabaho nga kopya sa pagpagawas pinaagi sa pagsulod sa mosunod ngadto sa Linux console (pagpuli sa angay nga mga numero sa bersyon, siyempre)

$ 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 

Hatagi'g pagtagad ang gamit nga gigamit sa ibabaw wget, nga usa ka himan sa command line alang sa pag-download sa mga butang gikan sa Internet. Kung wala pa nimo kini ma-install, mahimo nimong gamiton ang imong browser alang niini.

Ang pagsunod niini nga mga lakang magdala kanimo ngadto sa ns-allinone-3.29 nga direktoryo, didto kinahanglan nimo nga makita ang daghang mga file ug mga direktoryo

$ 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

Andam ka na karon sa paghimo sa usa ka batakang ns-3 nga pag-apod-apod ug makapadayon sa seksyon sa pagtukod sa ns-3.

3.3 Pag-download sa ns-3 gamit ang Git

Ang ns-3 code anaa sa Git repository sa GitLab.com sa https://gitlab.com/nsnam/. Grupo nsnam naghiusa sa lainlaing mga repositoryo nga gigamit sa usa ka bukas nga gigikanan nga proyekto.

Ang pinakasayon ​​​​nga paagi sa pagsugod sa paggamit sa Git repository mao ang pag-fork o pag-clone sa palibot ns-3-allinone. Kini usa ka hugpong sa mga script nga nagdumala sa pagkarga ug pag-assemble sa labing sagad nga gigamit nga mga subsystem sa ns-3. Kung bag-o ka sa Git, ang termino nga "fork" ug "clone" mahimong dili pamilyar kanimo; kung mao, among girekomenda nga imong i-clone (paghimo imong kaugalingon nga kopya) ang repository nga nahimutang sa GitLab.com sama niini:

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

Niini nga yugto, ang pagtan-aw sa imong direktoryo ns-3-allinone gamay nga lahi sa release archive directory nga gihulagway sa ibabaw. Kini kinahanglan nga tan-awon sama niini:

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

Palihug timan-i nga adunay usa ka script download.py, nga dugang nga mokuha sa ns-3 ug kauban nga source code. Dinhi ikaw adunay kapilian: i-download ang pinakabag-o nga snapshot sa pag-uswag sa ns-3:

$ python download.py

o mas gusto ang ns-3 release gamit ang bandila -n aron ipakita ang numero sa pagpagawas:

$ python download.py -n ns-3.29

Human niini nga lakang ngadto sa direktoryo ns-3-allinone dugang nga mga repository ang ma-download ns-3, magluto, pybindgen ΠΈ netanim.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Sa usa ka makina nga adunay limpyo nga Ubuntu16.04, kinahanglan nako nga usbon ang mando niini: $ sudo python3 download.py -n ns-3.29 (pagkahuman niini mga nota sa tighubad).

3.3.1 Nagkarga sa ns-3 gamit ang Bake

Ang labaw sa duha nga mga pamaagi (gikan sa archive o repository ns-3-allinone pinaagi sa Git) mapuslanon alang sa pagkuha sa pinakasimple nga pag-install sa ns-3 nga adunay daghang mga addon (pybindgen aron makamugna og Python bindings ug netanim alang sa network animation). Ang ikatulo nga repository nga gihatag pinaagi sa default sa ns-3-allinone gitawag magluto.

Pagluto usa ka himan alang sa koordinado nga pagtukod sa software gikan sa daghang mga repositoryo, nga gihimo alang sa proyekto sa ns-3. Pagluto mahimong gamiton aron makakuha og development nga mga bersyon sa ns-3, ingon man sa pag-download ug paghimo og mga extension sa base nga bersyon sa ns-3 distribution, sama sa environment Direkta nga Pagpatuman sa Code, CradleNetwork Simulation Cradle, ang abilidad sa paghimo og bag-ong Python bindings ug nagkalain-laing ns-3 "apps".

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Ang CradleNetwork Simulation Cradle usa ka framework nga nagtugot kanimo sa paggamit sa tinuod nga TCP/IP network stacks sulod sa network simulator.

Kung imong gilauman nga ang imong ns-3 nga pag-install adunay mga advanced o dugang nga mga bahin, mahimo nimong sundon kini nga agianan sa pag-install.

Sa pinakabag-o nga ns-3 releases Pagluto gidugang sa pagpagawas sa tar. Ang pagpagawas naglakip sa usa ka configuration file nga nagtugot kanimo sa pag-download sa kasamtangan nga mga bersyon sa software sa panahon sa pagpagawas. Kana mao, pananglitan, bersyon Pagluto, nga gipang-apud-apod uban sa pagpagawas sa ns-3.29, mahimong gamiton sa pagkuha sa mga sangkap alang niana nga pagpagawas sa ns-3 o sa sayo pa, apan dili magamit sa pagkuha sa mga sangkap alang sa ulahi nga pagpagawas (kon ang package description file bakeconf.xml dili updated).

Makuha usab nimo ang pinakabag-o nga kopya maglutopinaagi sa pagsulod sa mosunod nga sugo sa imong Linux console (nagtuo nga na-install nimo ang Git):

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

Kung gipadagan nimo ang git command, kinahanglan nimo nga makita ang usa ka butang sama sa mosunod:

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.

Human makompleto ang sugo clone kinahanglan nga adunay usa ka direktoryo nga ginganlan magluto, ang mga sulod niini kinahanglan nga tan-awon sama niini:

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

Timan-i nga nag-load ka og daghang mga script sa Python, usa ka module sa Python nga ginganlan magluto ug usa ka XML configuration file. Ang sunod nga lakang mao ang paggamit niini nga mga script sa pag-download ug paghimo sa ns-3 nga pag-apod-apod nga imong gusto. Daghang mga target sa pag-customize ang magamit:

  1. ns-3.29: module nga katumbas sa pagpagawas; kini mag-download sa mga sangkap nga susama sa pagpagawas sa tarball;

  2. ns-3-dev: susama nga module, apan naggamit sa code gikan sa development tree;

  3. ns-allinone-3.29: Usa ka module nga naglakip sa uban nga dugang nga mga bahin sama sa Click routing ug Network Simulation Cradle, Openflow para sa ns-3.

  4. ns-3-allinone: susama sa bersyon sa pagpagawas sa module tanan sa usa, apan alang sa development code.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
I-klik - modular software nga arkitektura alang sa paghimo sa mga routers.

Ang Openflow usa ka protocol alang sa pagdumala sa proseso sa pagproseso sa datos nga gipasa sa usa ka data network pinaagi sa mga routers ug switch, nga nagpatuman sa software-defined network technology.

Ang kasamtangan nga development snapshot (non-release) ns-3 makita sa:https://gitlab.com/nsnam/ns-3-dev.git.

Gisulayan sa mga developer nga ipadayon kini nga mga repository sa usa ka makanunayon nga pagkasunud sa pagtrabaho, apan naa sila sa lugar sa pag-uswag ug adunay sulud nga wala pa gipagawas nga code, busa kung wala ka nagplano nga mogamit mga bag-ong bahin, unya pilia ang opisyal nga pagpagawas.

Makita nimo ang pinakabag-o nga bersyon sa code pinaagi sa pag-browse sa listahan sa mga repository, o pinaagi sa pag-adto sa ns-3 Releases web page:https://www.nsnam.org/releases/ ug pag-klik sa pinakabag-o nga bersyon nga link. Niini nga pananglitan magpadayon kita sa ns-3.29.

Karon, aron makuha ang ns-3 nga mga sangkap nga among gikinahanglan, among gamiton ang himan Pagluto. Atong isulti ang pipila ka pasiuna nga mga pulong bahin sa trabaho Pagluto.

Ang pagluto naglihok pinaagi sa pagkarga sa mga tinubdan sa pakete ngadto sa usa ka direktoryo tinubdan ug pag-instalar sa mga library ngadto sa build directory. Pagluto mahimong ipadagan pinaagi sa paghisgot sa binary, apan kung gusto nimo nga modagan Pagluto dili gikan sa direktoryo diin kini gi-download, kini mao ang advisable sa pagdugang sa dalan ngadto sa magluto sa imong agianan (PATH environment variable), pananglitan sama sa mosunod (pananglitan sa Linux bash shell). Adto sa direktoryo nga "pagluto" ug dayon itakda ang mosunod nga mga variable sa palibot:

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

Kini magbutang sa programa bake.py sa dalan sa kabhang ug tugotan ang ubang mga programa sa pagpangita sa mga executable ug mga librarya nga gihimo niini magluto. Sa pipila ka mga kaso sa paggamit magluto, ang PATH ug PYTHONPATH setting nga gihulagway sa ibabaw dili gikinahanglan, apan ang usa ka kompleto nga pagtukod sa ns-3-allinone (nga adunay dugang nga mga pakete) kasagaran nagkinahanglan niini.

Adto sa imong working directory ug isulod ang mosunod sa console:

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

Sunod mangutana ta Pagluto susiha kon kita adunay igo nga mga himan sa pagkarga sa lain-laing mga component. Dial:

$ ./bake.py check

Kinahanglan nimong makita ang usa ka butang sama sa mosunod:

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

Sa partikular, ang mga himan sa pag-upload sama sa Mercurial, CVS, Git ug Bazaar hinungdanon sa kini nga lakang tungod kay gitugotan kami nga makuha ang code. Niini nga punto, i-install ang nawala nga mga himan sa naandan nga paagi alang sa imong sistema (kung nahibal-an nimo kung giunsa) o kontaka ang imong tagdumala sa sistema alang sa tabang.

Sunod, sulayi ang pag-download sa software:

$ ./bake.py download

ang resulta kinahanglan nga sama sa:

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

Kini nagpasabot nga tulo ka tinubdan ang na-download. Karon adto sa source directory ug type ls; Kinahanglan nimong makita:

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

Karon andam ka na sa pagtukod sa ns-3 nga pag-apod-apod.

3.4 Asembliya ns-3

Sama sa pag-download sa ns-3, adunay daghang mga paagi sa paghimo sa ns-3. Ang panguna nga butang nga gusto namon hatagan og gibug-aton mao nga ang ns-3 gitukod gamit ang usa ka himan sa pagtukod nga gitawag Wafgihulagway sa ubos. Kadaghanan sa mga tiggamit magtrabaho uban Waf, apan adunay pipila ka magamit nga mga script nga makatabang kanimo sa pagsugod o pag-organisar sa labi ka komplikado nga mga pagtukod. Busa palihog, sa dili pa kamo mobasa mahitungod sa Waf, tan-awa sa build.py ug asembliya uban sa magluto.

3.4.1 Pagtukod gamit ang build.py

Pasidaan Kini nga lakang sa pagtukod magamit lamang gikan sa gigikanan nga bersyon sa archive nga nakuha sama sa gihulagway sa ibabaw; ug wala ma-download pinaagi sa git o bake.

Kung nagtrabaho kauban ang usa ka archive sa pagpagawas tarballsa ns-3-allinone Adunay usa ka magamit nga script nga makapadali sa pag-assemble sa mga sangkap. Gitawag kini nga build.py. Kini nga programa maghimo sa proyekto alang kanimo sa labing mapuslanon nga paagi. Apan, timan-i nga ang mas abante nga pag-setup ug pagtrabaho uban sa ns-3 kasagaran naglakip sa paggamit sa kaugalingong build system sa ns-3, Waf, nga ipaila sa ulahi niini nga tutorial.

Kung nag-download ka gamit ang tarball, unya sa imong direktoryo ~/workspace usa ka direktoryo nga adunay ngalan nga sama sa ns-allinone-3.29. Pagsulod sa mosunod:

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

Sa dihang nanawag build.py Gigamit namo ang mga argumento sa command line sa paghimo sa mga pananglitan ug mga pagsulay nga gigamit niini nga panudlo, nga wala gitukod pinaagi sa default sa ns-3. Sa kasagaran, ang programa nagtukod usab sa tanan nga magamit nga mga module. Unya, kung gusto nimo, mahimo nimong tukuron ang ns-3 nga wala’y mga pananglitan ug mga pagsulay, o dili iapil ang mga module nga wala kinahanglana sa imong trabaho.

Makita nimo ang daghang mga mensahe sa output sa compiler nga gipakita sa script samtang nagtukod kini sa lainlaing mga bahin nga imong gikarga. Una ang script mosulay sa pagtukod sa animator netanim, unya ang binding generator pybindgen ug sa kataposan ns-3. Kung nahuman na ang proseso, kinahanglan nimo nga makita ang mosunod:

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

Sa katapusan nga tulo ka linya sa listahan atong makita ang usa ka mensahe mahitungod sa modules nga wala matukod:

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

Kini nagpasabot lamang nga ang pipila ka ns-3 modules nga nagdepende sa gawas nga mga librarya mahimong wala pa matukod, o nga sila wala kinahanglana nga matukod alang niini nga configuration. Wala kini magpasabot nga ang simulator wala ma-assemble o nga ang mga assembled modules dili molihok sa husto.

3.4.2 Pagtukod uban sa Bake

Kung gigamit nimo ang bake sa ibabaw aron makakuha og source code gikan sa mga repositoryo sa proyekto, mahimo nimong ipadayon ang paggamit niini sa pagtukod sa ns-3. Dial:

$ ./bake.py build

ug kinahanglan nimong makita ang usa ka butang sama sa:

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

Tooltip: Mahimo usab nimo ang pag-download ug paghimo og mga lakang sa makausa pinaagi sa pagtawag sa "bake.py deploy".

Ang pag-assemble sa tanan nga mga sangkap mahimong mapakyas, apan ang pag-assemble magpadayon kung ang usa ka sangkap dili kinahanglan. Pananglitan, ang usa ka bag-o nga isyu sa portability mao kana castxml mahimong tipunon pinaagi sa himan magluto dili sa tanang plataporma. Sa kini nga kaso, usa ka mensahe nga sama niini ang makita:

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

Hinuon, castxml gikinahanglan lamang kung gusto nimo maghimo og updated nga Python bindings. Alang sa kadaghanan sa mga tiggamit wala’y kinahanglan alang niini (labing menos hangtod nga mabag-o nila ang ns-3), aron ang ingon nga mga pasidaan mahimong luwas nga mabalewala sa karon.

Kung kini mapakyas, ang mosunud nga mando maghatag kanimo usa ka timaan bahin sa nawala nga mga dependency:

$ ./bake.py show

Ang lain-laing mga dependency sa mga pakete nga imong gisulayan sa pagtukod ilista.

3.4.3 Pagtukod gamit ang Waf

Hangtud niini nga punto, aron magsugod sa pagtukod sa ns-3, gigamit namon ang script build.py, o himan magluto. Kini nga mga himan mapuslanon alang sa pagtukod sa ns-3 ug pagmentinar sa mga librarya. Sa tinuud, aron matukod, gipadagan nila ang tool sa pagtukod Waf gikan sa direktoryo ns-3. Waf gi-install gamit ang ns-3 source code. Kadaghanan sa mga tiggamit dali nga nagpadayon sa direkta nga paggamit aron ma-configure ug ma-assemble ang ns-3 Waf. Busa, sa pagpadayon, palihug adto sa ns-3 direktoryo nga imong orihinal nga gibuhat.

Dili kini higpit nga gikinahanglan karong panahona, apan mapuslanon ang pag-atras gamay ug tan-awon kung giunsa paghimo ang mga pagbag-o sa pag-configure sa proyekto. Tingali ang labing mapuslanon nga pagbag-o sa configuration nga imong mahimo mao ang paghimo og usa ka optimized nga bersyon sa code. Sa kasagaran, imong gi-configure ang imong proyekto sa paghimo og debug nga bersyon. Atong tan-awon ang usa ka proyekto aron makahimo usa ka na-optimize nga pagtukod. Aron ipasabut sa Waf nga kinahanglan nga maghimo kini nga mga na-optimize nga pagtukod nga adunay mga pananglitan ug mga pagsulay, kinahanglan nimo nga ipadagan ang mosunud nga mga mando:

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

Kini maglansad Waf gawas sa lokal nga direktoryo (alang sa imong kasayon). Ang una nga sugo naglimpyo gikan sa miaging pagtukod, kini kasagaran dili higpit nga gikinahanglan, apan kini maayo nga praktis (tan-awa usab ang pagtukod sa mga profile sa ubos); kini magwagtang sa mga nabuhat kaniadto nga mga librarya ug mga object file nga nahimutang sa direktoryo pagtukod/. Kung gi-reconfigure ang proyekto ug gisusi sa sistema sa pagtukod ang lainlaing mga dependency, kinahanglan nimo nga makita ang output nga parehas sa mosunod:

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)

Palihug timan-i ang kataposang bahin sa listahan sa ibabaw. Ang ubang mga opsyon sa ns-3 wala ma-enable pinaagi sa default o nanginahanglan og suporta sa sistema aron molihok sa hustong paagi. Pananglitan, aron mahimo ang XmlTo, ang librarya kinahanglan nga naa sa sistema libxml-2.0. Kung kini nga librarya wala makit-an ug ang katugbang nga ns-3 function wala gipagana, usa ka mensahe ang ipakita. Hinumdomi usab nga posible nga gamiton ang sugo sudo aron itakda ang suid bit nga "set group ID at runtime" para sa pipila ka mga programa. Wala kini gipagana pinaagi sa default ug busa kini nga bahin makita nga "dili gipalihok". Sa katapusan, aron makakuha usa ka lista sa mga kapilian nga mahimo, gamita Waf uban sa parameter --check-config.

Karon mobalik kita ug mobalik sa debug build nga adunay mga pananglitan ug mga pagsulay.

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

Ang sistema sa pagtukod gipahimutang na karon ug mahimo ka nga magtukod og mga bersyon sa debug sa ns-3 nga mga programa pinaagi lamang sa pag-type:

$ ./waf

Ang mga lakang sa ibabaw mahimo nga nagpugos kanimo sa paghimo sa bahin sa ns-3 nga sistema sa makaduha, apan karon nahibal-an nimo kung giunsa ang pagbag-o sa pag-configure ug paghimo og na-optimize nga code.

Aron masusi kung unsang profile ang aktibo alang sa gihatag nga pag-configure sa proyekto, adunay usa ka mando:

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

Ang senaryo sa ibabaw build.py nagsuporta usab sa mga argumento --enable-examples ΠΈ --enable-tests, apan ang ubang mga kapilian Waf dili kini direkta nga nagsuporta. Pananglitan, dili kini molihok:

$ ./build.py --disable-python

ang reaksyon mahimong sama niini:

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

Bisan pa, ang espesyal nga operator - - mahimong magamit aron ipasa ang dugang nga mga parameter pinaagi sa wafmao nga imbes sa ibabaw ang mosunod nga sugo molihok:

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

tungod kay kini nagmugna sa nag-unang sugo ./waf configure --disable-python. Ania ang pipila pa nga pasiuna nga mga tip bahin sa Waf.

Pagdumala sa mga sayop sa pagtukod

Ang mga pagpagawas sa ns-3 gisulayan sa pinakabag-o nga C++ compiler nga anaa sa panahon sa pagpagawas sa komon nga Linux ug MacOS distributions. Bisan pa, sa paglabay sa panahon, ang mga bag-ong pag-apod-apod gibuhian uban ang mga bag-ong compiler, ug kini nga mga bag-o nga mga compiler lagmit nga labi ka malibog bahin sa mga pasidaan. Gi-configure sa ns-3 ang pagtukod niini aron itratar ang tanan nga mga pasidaan ingon mga sayup, mao nga usahay kung nagdagan ka usa ka karaan nga bersyon sa usa ka bag-ong sistema, ang usa ka pasidaan sa compiler mahimong mohunong sa pagtukod.

Pananglitan, kaniadto adunay usa ka pagpagawas sa ns-3.28 alang sa Fedora 28, nga naglakip sa usa ka bag-ong mayor nga bersyon gcc (gcc-8). Pagtukod sa pagpagawas sa ns-3.28 o mas sayo nga mga bersyon ubos sa Fedora 28, nga adunay Gtk2+ nga na-install, ang mosunod nga sayop mahitabo:

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

Sa mga pagpagawas sugod sa ns‑3.28.1, sa Waf usa ka kapilian ang magamit aron masulbad kini nga mga problema. Gi-disable niini ang pag-set sa flag nga "-Werror" sa g++ ug clang++. Kini ang kapilian nga "--disable-werror" ug kinahanglan i-apply sa panahon sa pag-configure:

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

I-configure o i-assemble

Pipila ka mga sugo Waf adunay kahulogan lamang sa yugto sa pag-configure, ug ang uban balido lamang sa yugto sa pagtukod. Pananglitan, kon gusto nimong gamiton ang ns-3 emulation features, mahimo nimong palihokon ang bit setting habagatan gamit sudo, ingon sa gihulagway sa ibabaw. Kini mag-override sa configuration step commands, ug sa ingon mahimo nimong usbon ang configuration gamit ang mosunod nga command, nga naglakip usab sa mga ehemplo ug mga pagsulay.

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

Kung buhaton nimo kini Waf maglansad sudoaron usbon ang emulation code socket nga mga programa sa paghimo aron modagan nga adunay mga pagtugot gamut. ang Waf Adunay daghang uban pang mga kapilian nga magamit alang sa pag-configure ug mga lakang sa pagtukod. Aron masusi ang imong mga kapilian, pagsulod:

$ ./waf --help

Sa sunod nga seksyon mogamit kami pipila nga mga kapilian nga may kalabotan sa pagsulay.

Mga Profile sa Asembliya

Nakita na namo kung unsaon nimo pag-configure Waf alang sa mga asembliya debug ΠΈ Nausab:

$ ./waf --build-profile=debug

Adunay usab usa ka intermediate assembly profile, Pagpagawas. Opsyon -d susama sa --build-profile. Gikontrol sa build profile ang paggamit sa logging, assertions, ug compiler optimization switch:

ns-3 network simulator tutorial. Kapitulo 3

Sama sa imong nakita, ang pag-log ug pagpahayag magamit ra sa mga pagtukod sa debug. Ang girekomendar nga praktis mao ang pag-develop sa imong script sa debug mode, dayon paghimo og balik-balik nga pagdagan (alang sa mga estadistika o pagbag-o sa parameter) sa usa ka optimized build profile.

Kung ikaw adunay code nga kinahanglan nga modagan lamang sa pipila ka mga profile sa pagtukod, gamita ang 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, Waf Ang mga lugar nagtukod mga artifact sa direktoryo sa pagtukod. Mahimo nimong itakda ang lahi nga direktoryo sa output gamit ang kapilian -β€―-outsama pananglit:

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

Pinaagi sa paghiusa niini sa mga profile sa pagtukod, dali ka makabalhin tali sa lainlaing mga kapilian sa pag-compile:

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

Nga nagtugot kanimo sa pagtrabaho sa daghang mga asembliya nga dili kinahanglan nga isulat pag-usab ang pinakabag-o nga asembliya matag higayon. Kung mobalhin ka sa laing profile, Waf mag-compile lang niini, nga dili hingpit nga ma-compile ang tanan.

Kung imong gibalhin ang mga profile sa paghimo niini nga paagi, kinahanglan nimo nga mag-amping sa paghatag sa parehas nga mga kapilian sa pag-configure matag higayon. Ang paghubit sa daghang mga variable sa palibot makatabang kanimo nga malikayan ang mga sayup:

$ 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

Compiler ug mga bandera

Sa mga pananglitan sa ibabaw Waf sa pagtukod sa ns-3 naggamit sa C++ compiler gikan sa GCC ( g ++). Bisan pa, mahimo nimong usbon ang imong gigamit Waf C++ compiler, pinaagi sa pagpasabot sa CXX environment variable. Pananglitan, sa paggamit sa C ++ compiler Clang, clang ++,

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

Sa parehas nga paagi mahimo nimong i-configure Waf sa paggamit sa distributed compilation gamit distcc:

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

Dugang nga impormasyon bahin sa distcc ug giapod-apod nga kompilasyon makita sa panid sa proyekto sa seksyon sa Dokumentasyon. Aron makadugang sa mga flag sa compiler sa pag-configure sa ns-3, gamita ang CXXFLAGS_EXTRA environment variable.

Pag-instalar

Waf mahimong gamiton sa pag-instalar sa mga librarya sa lain-laing mga dapit sa sistema. Sa kasagaran, ang gihugpong nga mga librarya ug mga executable nahimutang sa direktoryo pagtukod, ug tungod kay nahibal-an ni Waf ang lokasyon niini nga mga librarya ug mga executable, dili na kinahanglan nga i-install ang mga librarya bisan diin.

Kung gusto sa mga tiggamit nga mag-install sa gawas sa direktoryo sa pagtukod, mahimo nila ipadagan ang mando ./waf instalar. Ang default prefix alang sa pag-instalar mao ang / usr / lokalbusa ./waf instalar i-install ang mga programa sa / usr / local / bin, mga librarya sa / usr / local / lib ug mga file sa header sa /usr/local/include. Ang mga katungod sa superuser kasagaran kinahanglan nga itakda sa usa ka default prefix, mao nga usa ka tipikal nga sugo sudo ./waf instalar. Kung gilansad, una nga pilion ni Waf nga gamiton ang gipaambit nga mga librarya sa direktoryo sa pagtukod, unya pangitaa ang mga librarya sa agianan sa mga librarya nga gi-configure sa lokal nga palibot. Mao nga kung mag-install og mga librarya sa usa ka sistema, usa ka maayong praktis nga susihon kung ang husto nga mga librarya gigamit. Makapili ang mga tiggamit nga mag-install gamit ang lahi nga prefix pinaagi sa pagpasa sa kapilian sa panahon sa pag-configure --prefixsama pananglit:

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

Kung sa ulahi, pagkahuman sa pagtukod, ang tiggamit mosulod sa mando sa pag-install ./waf, ang prefix maoy gamiton /opt/lokal.

team ./waf clean kinahanglan gamiton sa dili pa i-configure pag-usab ang proyekto kung gamiton ang pag-install Waf ubos sa laing prefix.

Busa, aron magamit ang ns-3 dili kinahanglan nga tawagan ./waf install. Kadaghanan sa mga tiggamit dili magkinahanglan niini nga sugo tungod kay Waf kuhaon ang kasamtangan nga mga librarya gikan sa direktoryo sa pagtukod, apan ang pipila ka mga tiggamit mahimong makakita niini nga mapuslanon kung ang ilang mga kalihokan naglakip sa pagtrabaho uban sa mga programa gawas sa ns-3 nga direktoryo.

Waf single

Sa ibabaw nga lebel sa ns-3 source tree, adunay usa lamang ka Waf script. Kung magsugod ka sa pagtrabaho, mogugol ka daghang oras sa direktoryo scratch/ o mas lawom sasrc/... ug sa samang higayon kinahanglan nga modagan Waf. Makahinumdom ka lang kung asa ka ug modagan Waf ingon sa mosunod:

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

apan kini mahimong kapoy ug sayup nga prone, mao nga adunay mas maayo nga mga solusyon. Usa ka komon nga paagi mao ang paggamit sa usa ka text editor sama sa emacs o vim, diin gibuksan ang duha ka sesyon sa terminal, ang usa gigamit sa pagtukod sa ns-3, ug ang ikaduha gigamit sa pag-edit sa source code. Kung naa lang tarball, unya ang usa ka variable sa palibot makatabang:

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

$ cd scratch 
$ waff build

Sa direktoryo sa module mahimo’g makatintal ang pagdugang usa ka wala’y hinungdan nga waf script sama sa exec ../../waf. Palihug, ayaw kana buhata. Makalibog kini alang sa mga bag-ohan ug, kung dili maayo nga nahimo, mosangput sa lisud nga mahibal-an nga mga sayup sa pagtukod. Ang mga solusyon nga gipakita sa ibabaw mao ang dalan nga angay gamiton.

3.5 Pagsulay ns-3

Mahimo nimong ipadagan ang mga pagsulay sa yunit sa ns-3 pinaagi sa pagpadagan sa script ./test.py:

$ ./test.py

Kini nga mga pagsulay gipadagan dungan sa Waf. Sa katapusan kinahanglan nimong makita ang usa ka mensahe nga nag-ingon:

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

Kini usa ka importante nga mensahe alang sa pag-ila sa valgrind crashes, crashes o mga sayop, nga nagpakita sa mga problema sa code o incompatibility tali sa mga himan ug code.

Makita usab nimo ang katapusan nga output gikan sa Waf ug usa ka tester nga nagpadagan sa matag pagsulay, nga ingon niini ang hitsura:

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)

Kini nga sugo kasagarang gipadagan sa mga tiggamit aron dali nga mapamatud-an nga ang ns-3 nga pag-apod-apod natukod sa husto. (Timan-i nga ang han-ay sa "PASS: ..." nga mga linya mahimong lahi, kini normal. Ang importante mao nga ang summary line sa katapusan sa report nagpakita nga ang tanan nga mga pagsulay nakapasar; walay mga pagsulay nga napakyas o nahagsa.) Ug Wafug test.py mag-parallelize sa trabaho tabok sa anaa nga processor cores sa makina.

3.6 Pagpadagan sa script

Kanunay kaming nagpadagan sa mga script nga kontrolado Waf. Gitugotan niini ang sistema sa pagtukod aron masiguro nga ang gipaambit nga mga agianan sa librarya gitakda sa husto ug nga ang mga librarya magamit sa oras sa pagdagan. Aron modagan ang programa, gamita lang Waf uban sa parameter -β€―-run. Atong padaganon ang ns-3 nga katumbas sa ubiquitous nga programa hello sa kalibutanpinaagi sa pag-type sa mosunod:

$ ./waf --run hello-simulator

Susihon una ni Waf kung husto ang pagkatukod sa programa ug kung kinahanglan. Unya Waf ipatuman ang usa ka programa nga nagpatungha sa mosunod nga output.

Hello Simulator

Mga pahalipay! Usa ka na ka user sa ns-3!

Unsa ang akong buhaton kung wala nako makita ang mga resulta?

Kung makakita ka og mga mensahe Wafnga nagpakita nga ang pagtukod malampuson nahuman, apan dili nimo makita ang output "Hello Simulator", unya adunay posibilidad nga sa [Build-with-Waf] nga seksyon imong gibalhin ang imong build mode sa Nausab, apan gimingaw sa pagbalhin balik sa mode debug. Ang tanan nga console output nga gigamit niini nga tutorial naggamit sa usa ka espesyal nga ns-3 component nga naghimo sa pag-log ug gigamit sa pag-imprinta sa custom nga mga mensahe ngadto sa console. Ang output gikan sa kini nga sangkap awtomatik nga ma-disable kung ang gi-optimize nga code gi-compile - kini "na-optimize". Kung dili nimo makita ang output nga "Hello Simulator", isulod ang mosunod:

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

aron ipasadya Waf sa paghimo og mga debug nga bersyon sa ns-3 nga mga programa, nga naglakip sa mga pananglitan ug mga pagsulay. Kinahanglan nimong tukuron pag-usab ang kasamtangan nga bersyon sa debug sa code pinaagi sa pag-type

$ ./waf

Karon kung imong gipadagan ang programa hello-simulator, kinahanglan nimong makita ang gipaabot nga resulta.

3.6.1 Mga argumento sa command line

Aron ipasa ang mga argumento sa command line sa ns-3 nga programa, gamita ang mosunod nga sumbanan:

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

Ilisan sa ngalan sa imong programa ug sa mga argumento. Pangatarungan -β€―-command-template alang sa Waf mao ang usa ka resipe alang sa pagtukod sa aktuwal nga command line Waf gigamit sa pagpatuman sa programa. Gisusi ni Waf nga kompleto na ang pagtukod, gitakda ang gipaambit nga mga agianan sa librarya, dayon gigamit ang gihatag nga template sa command line ug gipulihan ang ngalan sa programa alang sa %s placeholder aron tawagan ang executable. Kung nakita nimo nga komplikado kini nga syntax, adunay mas simple nga bersyon nga naglambigit sa ns-3 nga programa ug ang mga argumento niini gilakip sa usa ka kinutlo:

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

Ang usa pa nga labi ka mapuslanon nga pananglitan mao ang pagpadagan sa mga suite sa pagsulay nga pinili. Ibutang nato nga adunay test suite nga gitawag og mytest (sa pagkatinuod wala). Sa ibabaw gigamit namo ang ./test.py nga script aron sa pagpadagan sa daghang mga pagsulay nga managsama, nga balik-balik nga nagtawag sa programa sa pagsulay test-runner. Tawag test-runner direkta sa pagpadagan sa usa ka pagsulay:

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

Ang mga argumento ipasa sa programa test-runner. Tungod kay wala ang mytest, usa ka mensahe sa sayup ang mabuhat. Aron maimprinta ang magamit nga mga opsyon sa test-runner, pagsulod:

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

3.6.2 Pag-debug

Sa pagpadagan sa ns-3 nga mga programa ubos sa laing utility, sama sa debugger (pananglitan, gdb) o usa ka himan sa pagsulay sa memorya (pananglitan, valgrind), gamita ang parehas nga porma -β€―-command-template = "…". Pananglitan, sa pagdagan sa debugger gdb imong hello-simulator ns-3 nga programa nga adunay mga argumento:

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

Timan-i nga ang ns-3 nga ngalan sa programa nag-uban sa argumento -β€―-run, ug ang utility sa pagdumala (dinhi gdb) mao ang unang timaan sa argumento -β€―-command-template. Opsyon -β€―-args nagpahibalo gdbnga ang nahabilin sa command line iya sa "ubos" nga programa. (Pipila nga mga bersyon gdb wala kasabot sa option -β€―-args. Sa kini nga kaso, kuhaa ang mga argumento sa programa gikan sa -β€―-command-template ug gamita ang command set gdb mga argumento.) Mahimo natong i-combine kini nga resipe ug ang nauna aron ipadagan ang pagsulay ubos sa debugger:

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

3.6.3 Direktoryo sa pagtrabaho

Ang Waf kinahanglan nga ilunsad gikan sa nahimutangan niini sa ibabaw sa ns-3 nga kahoy. Kini nga folder nahimong working directory diin ang mga output files isulat. Apan unsa man kung gusto nimo nga itago kini nga mga file sa gawas sa punoan sa gigikanan sa ns-3? Gamit ug argumento -β€―-cwd:

$ ./waf --cwd=...

Mahimo nimong makita nga mas sayon ​​​​ang pagkuha sa mga output file sa imong working directory. Sa kini nga kaso, ang mosunod nga dili direkta nga aksyon makatabang:

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

Kini nga dekorasyon sa miaging bersyon sa sugo nagpreserbar sa kasamtangan nga direktoryo sa pagtrabaho, moadto sa direktoryo Wafug unya magtudlo Waf aron usbon ang working directory balik sa kasamtangan nga working directory nga gitipigan sa wala pa magsugod ang programa. Gihisgotan namo ang team -β€―-cwd Alang sa pagkakompleto, kadaghanan sa mga tiggamit nagpadagan lang sa Waf gikan sa top-level nga direktoryo ug nagmugna og mga output file didto.

Gipadayon: Kapitulo 4

Source: www.habr.com

Idugang sa usa ka comment