ns-3 na'urar kwaikwayo ta hanyar sadarwa. Babi na 3

ns-3 na'urar kwaikwayo ta hanyar sadarwa. Babi na 3
Babi na 1,2

3 Farawa
3.1 Bayani
3.2 Abubuwan da ake buƙata
3.2.1 Zazzagewar ns-3 azaman tushen tarihin
3.3 Zazzage ns-3 ta amfani da Git
3.3.1 Loading ns-3 ta amfani da Bake
3.4 Majalisar ns-3
3.4.1 Gina tare da gini.py
3.4.2 Gina tare da Gasa
3.4.3 Gina tare da Waf
3.5 Gwaji ns-3
3.6 Gudanar da rubutun
3.6.1 Maganar layin umarni
3.6.2 Gyarawa
3.6.3 Jagorar aiki

Babi na 3

Farawa

Wannan babin an yi niyya ne don shirya mai karatu don farawa da kwamfutar da wataƙila ba ta taɓa shigar da ns-3 ba. Ya ƙunshi dandamali masu tallafi, abubuwan da ake buƙata, yadda ake samun ns-3, yadda ake gina ns-3, da yadda ake gwada ginin ku da gudanar da shirye-shirye masu sauƙi.

3.1 Bayani

An gina na'urar kwaikwayo ta ns-3 azaman tsarin ɗakunan karatu na software na haɗin gwiwa. Yayin haɗuwa, lambar shirye-shiryen mai amfani yana haɗe da waɗannan ɗakunan karatu. Ana amfani da harsunan shirye-shiryen C++ ko Python don rubuta shirye-shiryen al'ada.

Ana rarraba Ns-3 a matsayin lambar tushe, wanda ke nufin cewa tsarin da aka yi niyya dole ne ya kasance yana da yanayin haɓaka software don fara gina ɗakunan karatu sannan a gina shirin mai amfani. A ka'ida, ns-3 za a iya rarraba a matsayin shirye-shiryen ɗakunan karatu don takamaiman tsari, kuma a nan gaba za a iya rarraba su ta wannan hanya. Amma a zamanin yau yawancin masu amfani suna yin aikinsu ta hanyar gyara ns-3 kanta, don haka yana da amfani a sami lambar tushe don gina ɗakunan karatu. Idan wani yana son ɗaukar aikin ƙirƙirar ɗakunan karatu da fakiti don tsarin aiki, tuntuɓi jerin aikawasiku ns-developers.

Na gaba, za mu dubi hanyoyi uku don saukewa da gina ns-3. Na farko shine zazzagewa da gina sakin hukuma daga babban rukunin yanar gizon. Na biyu shine zaɓi da haɗa kwafin nau'ikan ci gaba na ainihin shigarwa ns-3. Na uku shine yin amfani da ƙarin kayan aikin gini don ɗaukar ƙarin kari don ns-3. Za mu bi ta kowane ɗayan tunda kayan aikin sun ɗan bambanta.

ƙwararrun masu amfani da Linux na iya yin mamakin me yasa ba a samar da ns-3 azaman fakiti kamar sauran ɗakunan karatu waɗanda ke amfani da mai sarrafa fakiti? Kodayake akwai fakitin binary don rarrabawar Linux daban-daban (misali Debian), yawancin masu amfani sun ƙare suna gyara ɗakunan karatu kuma suna sake gina ns-3 da kansu, don haka samun lambar tushe yana da amfani. A saboda wannan dalili, za mu mayar da hankali kan shigarwa daga tushe.

Don yawancin aikace-aikacen ns-3 haƙƙoƙin tushen ba a buƙata, ana ba da shawarar yin amfani da asusun mai amfani mara gata.

3.2 Abubuwan da ake buƙata

Duk saitin ɗakunan karatu na ns-3 suna da adadin dogaro akan ɗakunan karatu na ɓangare na uku, amma ga mafi yawan ɓangaren ns-3 ana iya gina su kuma ana amfani da su tare da goyan bayan abubuwan gama gari da yawa (sau da yawa ana shigar da su ta tsohuwa): mai tarawa C ++, Python, editan lambar tushe (misali, vim, emacs ko husufi) kuma, idan ana amfani da ma'ajiyar ci gaba, tsarin sarrafa nau'in Git. Yawancin masu amfani da farko ba za su buƙaci damuwa ba idan tsarin tsarin su ya ba da rahoton wasu abubuwan ci-gaba na ns-3 sun ɓace, amma ga waɗanda ke son cikakken shigarwa, aikin yana ba da wiki wanda ya haɗa da shafuka masu yawa na tukwici da dabaru masu amfani. Ɗayan irin wannan shafin shine shafin shigarwa, tare da umarnin shigarwa don tsarin daban-daban, samuwa a: https://www.nsnam.org/wiki/Installation.

Sashen abubuwan da ake buƙata na wannan wiki yana bayyana waɗanne fakitin da ake buƙata don tallafawa zaɓuɓɓukan ns-3 na gama gari kuma suna ba da umarnin da aka yi amfani da su don shigar da su akan abubuwan dandano na Linux ko macOS.

Kuna iya amfani da wannan damar don bincika shafin ns-3 wiki ko babban gidan yanar gizon: https://www.nsnam.org, saboda akwai bayanai da yawa a wurin. An fara da sabon sigar ns-3 (ns-3.29), ana buƙatar waɗannan kayan aikin don gudanar da ns-3:

Kunshin Kayan aiki/Sigar

  • C++ mai tarawa
    clang++ ko g++ (g++ sigar 4.9 ko sama)
  • Python
    python2 sigar>= 2.7.10, ko sigar Python3>=3.4
  • Git
    kowane sabon sigar (don samun damar ns-3 akan GitLab.com)
  • kwalta
    kowane sabon sigar (don fitar da ns-3)
  • bunzip2
    kowane sabon sigar (don buɗe kayan ns-3)

Don duba tsohuwar sigar Python, rubuta python -V. Don duba sigar g++, rubuta g++ -v. Idan wasu kayan aikin sun ɓace ko sun tsufa, da fatan za a koma zuwa jagorar shigarwa akan shafin wiki ns-3.

Daga wannan gaba, muna ɗauka cewa mai karatu yana gudanar da Linux, MacOS, ko Linux emulator, kuma yana da aƙalla kayan aikin da ke sama.

3.2.1 Zazzagewar ns-3 azaman tushen tarihin

Wannan hanya ce ta aiki don sabon mai amfani da ke son saukewa da gwaji tare da sabon sakin da sigar fakitin ns-3. ns-3 ana buga su azaman rumbun adana bayanan tushe, wani lokaci ana kiran su kwando. kwando tsari ne na software na musamman wanda aka haɗa fayiloli da yawa tare. Yawancin lokaci ana matsawa ma'ajiyar bayanai. ns-3 boot tsari ta hanyar kwando abu ne mai sauƙi, kawai kuna buƙatar zaɓar saki, zazzagewa kuma buɗe shi.

Bari mu ɗauka cewa ku, a matsayin mai amfani, kuna son gina ns-3 a cikin kundin adireshin gida da ake kira filin aiki. Kuna iya samun kwafin aiki na sakin ta shigar da masu zuwa cikin na'ura mai ba da hanya tsakanin hanyoyin sadarwa na Linux (maye gurbin lambobin sigar da suka dace, ba shakka)

$ 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 

Kula da mai amfani da aka yi amfani da shi a sama wget, wanda shine kayan aikin layin umarni don zazzage abubuwa daga Intanet. Idan baku shigar dashi ba, zaku iya amfani da burauzar ku don wannan.

Bi waɗannan matakan za su kai ku zuwa ns-allinone-3.29 directory, a can ya kamata ku ga fayiloli da kundayen adireshi da yawa.

$ 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

Yanzu kun shirya don gina ainihin rarraba ns-3 kuma kuna iya matsawa zuwa sashin ginin ns-3.

3.3 Zazzage ns-3 ta amfani da Git

Ana samun lambar ns-3 a cikin wuraren ajiyar Git akan GitLab.com a https://gitlab.com/nsnam/. Rukuni nsnam yana tattara ma'ajiyar ma'ajiyar kayan aiki da buɗaɗɗen aikin ke amfani da shi.

Hanya mafi sauƙi don fara amfani da ma'ajin Git ita ce ta cokali mai yatsa ko rufe muhalli ns-3-allinone. Wannan saitin rubutun ne wanda ke gudanar da lodawa da haɗa manyan tsarin ns-3 da aka fi amfani da su. Idan kun saba zuwa Git, kalmomin "cokali mai yatsa" da "clone" na iya zama wanda ba ku sani ba; idan haka ne, muna ba da shawarar cewa ku kawai clone (yi naku kwafin) wurin ajiyar da ke kan GitLab.com kamar haka:

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

A wannan mataki, ra'ayi na kundin adireshi ns-3-allinone dan bambanta da kundin tarihin sakin da aka kwatanta a sama. Ya kamata yayi kama da wani abu kamar haka:

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

Lura cewa akwai rubutun zazzage.py, wanda kuma zai fitar da ns-3 da lambar tushe mai rakiyar. Anan kuna da zaɓi: ko dai zazzage sabon hoton ci gaban ns-3:

$ python download.py

ko fi son sakin ns-3 ta amfani da tuta -n don nuna lambar sakin:

$ python download.py -n ns-3.29

Bayan wannan mataki zuwa directory ns-3-allinone za a sauke ƙarin ma'ajiyar ajiya ns-3, gasa, pybindgen и netanim.

Примечание
A kan na'ura mai tsabta Ubuntu16.04, Ina buƙatar canza umarnin zuwa wannan: $ sudo python3 download.py -n ns-3.29 (bayanan bayanin mai fassara).

3.3.1 Loading ns-3 ta amfani da Bake

Hanyoyi guda biyu da ke sama (ajiya mai tushe ko ma'ajiya ns-3-allinone ta hanyar Git) suna da amfani don samun mafi sauƙi ns-3 shigarwa tare da addons da yawa (pybindgen don samar da ɗaurin Python da netanim don animation na cibiyar sadarwa). Ma'aji na uku da aka bayar ta tsohuwa a cikin ns-3-allinone ana kiransa gasa.

Gasa kayan aiki ne don haɗin gwiwar ginin software daga ma'ajin ajiya da yawa, waɗanda aka haɓaka don aikin ns-3. Gasa ana iya amfani da su don samun nau'ikan ci gaba na ns-3, da kuma zazzagewa da gina kari na sigar tushe na rarraba ns-3, kamar muhalli. Kisan Laifin Kai tsaye, CradleNetwork Simulation Cradle, ikon ƙirƙirar sabbin ɗaurin Python da ns-3 “apps” iri-iri.

Примечание
CradleNetwork Simulation Cradle wani tsari ne wanda ke ba ku damar amfani da tarun hanyoyin sadarwar TCP/IP na gaske a cikin na'urar kwaikwayo ta hanyar sadarwa.

Idan kuna tsammanin shigarwa na ns-3 ya sami ci gaba ko ƙarin fasali, zaku iya bin wannan hanyar shigarwa.

A cikin sabbin ns-3 Gasa aka kara wa kwalta ta saki. Sakin ya ƙunshi fayil ɗin daidaitawa wanda ke ba ku damar zazzage nau'ikan software na yanzu a lokacin sakin. Wato, misali, sigar Gasa, wanda aka rarraba tare da sakin ns-3.29, za a iya amfani da shi don dawo da abubuwan da aka gyara don sakin ns-3 ko a baya, amma ba za a iya amfani da su don dawo da abubuwan da aka gyara don sakewa na gaba ba (idan fayil bayanin fakitin bakeconf.xml ba a sabunta ba).

Hakanan zaka iya samun sabon kwafin gasata shigar da umarni mai zuwa a cikin na'ura mai ba da hanya tsakanin hanyoyin sadarwa na Linux (yana zaton an shigar da Git):

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

Lokacin da kuke gudanar da umarnin git, yakamata ku ga wani abu kamar haka:

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.

Bayan an gama umarnin clone yakamata ku sami kundin adireshi mai suna gasa, abinda ke cikinsa yakamata yayi kama da haka:

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

Lura cewa kun loda rubutun Python da yawa, ƙirar Python mai suna gasa da fayil ɗin sanyi na XML. Mataki na gaba shine amfani da waɗannan rubutun don saukewa da gina rarraba ns-3 da kuka zaɓa. Akwai maƙasudin gyare-gyare da yawa:

  1. ns-3.29: module wanda ya dace da sakin; zai zazzage abubuwa masu kama da wanda aka saki a cikin kwalta;

  2. ns-3-dev: samfurin irin wannan, amma ta amfani da lambar daga itacen ci gaba;

  3. ns-allinone-3.29: Module wanda ya haɗa da wasu ƙarin fasali kamar Click routing da Network Simulation Cradle, Openflow for ns-3.

  4. ns-3-allinone: kama da sigar saki na module allone, amma don lambar haɓakawa.

Примечание
Click - tsarin gine-ginen software na zamani don ƙirƙirar hanyoyin sadarwa.

Openflow yarjejeniya ce don sarrafa tsarin sarrafa bayanan da ake watsawa ta hanyar hanyar sadarwa ta hanyar sadarwa da masu sauyawa, aiwatar da fasahar cibiyar sadarwa da aka ayyana software.

Hoton ci gaba na yanzu (ba a sakewa ba) ns-3 za a iya samu a:https://gitlab.com/nsnam/ns-3-dev.git.

Masu haɓakawa suna ƙoƙarin kiyaye waɗannan ma'ajin a cikin daidaitaccen tsari na aiki, amma suna cikin yankin ci gaba kuma suna ɗauke da lambar da ba a buɗe ba, don haka idan ba ku yi shirin amfani da sabbin abubuwa ba, sannan zaɓi sakin hukuma.

Kuna iya nemo sabuwar sigar lambar ta yin lilo cikin jerin wuraren ajiya, ko ta zuwa shafin yanar gizo na ns-3 Saki:https://www.nsnam.org/releases/ da kuma danna kan latest version mahada. A cikin wannan misalin za mu ci gaba da ns-3.29.

Yanzu, don samun abubuwan ns-3 da muke buƙata, za mu yi amfani da kayan aikin Gasa. Bari mu faɗi wasu kalmomi na gabatarwa game da aikin Gasa.

Gasa yana aiki ta loda tushen fakitin cikin kundin adireshi source da shigar da dakunan karatu a cikin kundin ginin ginin. Gasa za a iya gudu ta hanyar yin nuni da binary, amma idan kuna son gudu Gasa ba daga directory ɗin da aka saukar da shi ba, yana da kyau a ƙara hanyar zuwa gasa zuwa hanyar ku (mai canza yanayin yanayin PATH), misali kamar haka (misali na Linux bash harsashi). Je zuwa kundin adireshin "bake" sannan saita masu canjin yanayi masu zuwa:

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

Wannan zai sanya shirin gasa.py zuwa hanyar harsashi kuma zai ba da damar sauran shirye-shirye don nemo abubuwan aiwatarwa da ɗakunan karatu waɗanda ya ƙirƙira gasa. A wasu lokuta amfani gasa, Tsarin PATH da PYTHONPATH da aka kwatanta a sama ba a buƙata ba, amma cikakken ginin ns-3-allinone (tare da ƙarin fakiti) yawanci yana buƙatar shi.

Je zuwa kundin adireshin ku kuma shigar da mai zuwa a cikin na'ura mai kwakwalwa:

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

Nan gaba zamu tambaya Gasa duba idan muna da isassun kayan aiki don loda sassa daban-daban. Buga kira:

$ ./bake.py check

Ya kamata ku ga wani abu kamar haka:

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

Musamman, loda kayan aikin kamar Mercurial, CVS, Git da Bazaar suna da mahimmanci a wannan matakin yayin da suke ba mu damar samun lambar. A wannan gaba, shigar da kayan aikin da suka ɓace ta hanyar da aka saba don tsarin ku (idan kun san yadda) ko tuntuɓi mai sarrafa tsarin ku don taimako.

Na gaba, gwada zazzage software:

$ ./bake.py download

sakamakon yakamata ya zama kamar:

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

Wannan yana nufin an zazzage tushe guda uku. Yanzu je zuwa tushen directory kuma rubuta ls; Ya kamata ku gani:

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

Yanzu kun shirya don gina rarraba ns-3.

3.4 Majalisar ns-3

Kamar yadda ake zazzage ns-3, akwai hanyoyi da yawa don gina ns-3. Babban abin da muke so mu jaddada shi ne cewa ns-3 an gina shi ta amfani da kayan aikin gini da ake kira Wafaka bayyana a kasa. Yawancin masu amfani za su yi aiki tare da Waf, amma akwai ƴan ingantattun rubutun don taimaka muku farawa ko tsara ƙarin hadaddun gini. Don haka don Allah, kafin ku karanta game da Waf, duba gina.py da taro da gasa.

3.4.1 Gina tare da gini.py

Tsanaki Wannan matakin ginawa yana samuwa ne kawai daga sigar tarihin tushen da aka samu kamar yadda aka bayyana a sama; kuma ba a sauke ta git ko gasa ba.

Lokacin aiki tare da tarihin saki kwando, in ns-3-allinone Akwai rubutun hannu wanda zai iya sauƙaƙe haɗa abubuwan haɗin gwiwa. Ana kiransa build.py. Wannan shirin zai saita muku aikin ta hanya mafi amfani. Koyaya, lura cewa ƙarin saitin ci gaba da aiki tare da ns-3 yawanci ya ƙunshi amfani da tsarin ginin na ns-3, Waf, wanda za'a gabatar da shi daga baya a cikin wannan koyawa.

Idan kayi downloading ta amfani da kwando, sannan a cikin kundin adireshin ku ~/wurin aiki directory mai suna wani abu kamar ns-allinone-3.29. Shigar da waɗannan:

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

Lokacin da aka kira gina.py Mun yi amfani da muhawarar layin umarni don gina misalai da gwaje-gwajen da aka yi amfani da su a cikin wannan koyawa, waɗanda ba a gina su ta tsohuwa ba a ns-3. Ta hanyar tsoho, shirin kuma yana gina duk samfuran da ake da su. Bayan haka, idan kuna so, kuna iya gina ns-3 ba tare da misalai da gwaje-gwaje ba, ko keɓance samfuran da ba a buƙata don aikinku.

Za ku ga saƙonnin fitarwa da yawa da aka nuna ta hanyar rubutun yayin da yake gina sassa daban-daban da kuka loda. Da farko rubutun zai yi ƙoƙarin gina animator netanim, sai kuma janareta mai ɗaure pybindgen kuma a karshe ns-3. Lokacin da tsari ya cika, ya kamata ku ga waɗannan masu zuwa:

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

A cikin layi uku na ƙarshe na jeri muna ganin saƙo game da kayayyaki waɗanda ba a gina su ba:

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

Wannan kawai yana nufin cewa wasu na'urorin ns-3 waɗanda suka dogara da ɗakunan karatu na waje ƙila ba a gina su ba, ko kuma ba a buƙatar gina su don wannan tsarin. Wannan ba yana nufin ba a haɗa na'urar kwaikwayo ba ko kuma na'urorin da aka haɗa ba za su yi aiki daidai ba.

3.4.2 Gina tare da Gasa

Idan kun yi amfani da gasa a sama don samun lambar tushe daga wuraren ajiyar aikin, za ku iya ci gaba da amfani da shi don gina ns-3. Buga kira:

$ ./bake.py build

kuma ya kamata ku ga wani abu kamar:

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

da sauri: Hakanan zaka iya yin duka zazzagewa da gina matakai a lokaci ɗaya ta hanyar kiran "bake.py deploy".

Haɗa duk abubuwan haɗin gwiwa na iya gazawa, amma haɗawa zai ci gaba idan ba a buƙatar sashi. Misali, batun ɗaukar hoto na kwanan nan shine wancan castxml za a iya harhada ta kayan aiki gasa ba akan dukkan dandamali ba. A wannan yanayin, sako kamar haka zai bayyana:

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

Duk da haka, castxml ana buƙata kawai idan kuna son ƙirƙirar ɗaurin Python da aka sabunta. Ga mafi yawan masu amfani babu buƙatar wannan (aƙalla har sai sun canza ns-3), don haka ana iya yin watsi da irin waɗannan gargaɗin cikin aminci a yanzu.

Idan ta gaza, umarni mai zuwa zai ba ku bayani game da abubuwan dogaro da suka ɓace:

$ ./bake.py show

Za a jera abubuwan dogaro daban-daban na fakitin da kuke ƙoƙarin ginawa.

3.4.3 Gina tare da Waf

Har zuwa wannan batu, don fara gina ns-3, mun yi amfani da ko dai rubutun gina.py, ko kayan aiki gasa. Waɗannan kayan aikin suna da amfani don gina ns-3 da kiyaye ɗakunan karatu. A gaskiya ma, don ginawa suna gudanar da kayan aikin ginin Waf daga directory ns-3. Waf shigar tare da lambar tushe ns-3. Yawancin masu amfani da sauri suna matsawa zuwa amfani da ns-3 kai tsaye don daidaitawa da haɗuwa Waf. Don haka, don ci gaba, da fatan za a je zuwa ns-3 directory wanda kuka ƙirƙira da farko.

Ba a buƙatar wannan sosai a wannan lokacin, amma zai zama da amfani don komawa baya kaɗan don ganin yadda ake yin canje-canje ga tsarin aikin. Wataƙila mafi kyawun canjin sanyi da za ku iya yi shine ƙirƙirar ingantaccen sigar lambar. Ta hanyar tsoho, kun saita aikinku don gina sigar gyara kuskure. Bari mu kalli aikin don ƙirƙirar ingantaccen gini. Don bayyana wa Waf cewa yakamata yayi ingantattun gine-gine waɗanda suka haɗa da misalai da gwaje-gwaje, kuna buƙatar aiwatar da umarni masu zuwa:

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

Wannan zai kaddamar Waf a wajen kundin adireshi (don jin daɗin ku). Umurni na farko yana tsaftacewa daga ginin da ya gabata, wannan yawanci ba lallai ba ne, amma yana da kyakkyawan aiki (kuma duba bayanan ginawa a ƙasa); wannan zai share ɗakunan karatu da aka ƙirƙira a baya da fayilolin abubuwa da ke cikin kundin adireshi gina/. Lokacin da aka sake tsara aikin kuma tsarin ginin yana bincika abubuwan dogaro daban-daban, yakamata ku ga fitarwa mai kama da mai zuwa:

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)

Da fatan za a kula da ɓangaren ƙarshe na lissafin da ke sama. Wasu zaɓuɓɓukan ns-3 ba a kunna su ta tsohuwa ko buƙatar tallafin tsarin don aiki da kyau. Misali, don kunna XmlTo, ɗakin karatu dole ne ya kasance a kan tsarin libxml-2.0. Idan ba a sami wannan ɗakin karatu ba kuma ba a kunna aikin ns-3 mai dacewa ba, za a nuna saƙo. Hakanan lura cewa yana yiwuwa a yi amfani da umarnin sudo don saita suid bit "saitin ID na rukuni a lokacin aiki" don wasu shirye-shirye. Ba a kunna shi ta tsohuwa don haka wannan fasalin yana bayyana a matsayin “ba a kunna ba”. A ƙarshe, don samun jerin zaɓuɓɓukan da aka kunna, yi amfani Waf tare da siga --check-config.

Yanzu bari mu koma mu koma zuwa ginin da aka gyara mai dauke da misalai da gwaje-gwaje.

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

Yanzu an saita tsarin ginin kuma zaku iya gina nau'ikan gyara kurakurai na shirye-shiryen ns-3 ta hanyar buga kawai:

$ ./waf

Matakan da ke sama na iya tilasta muku gina wani ɓangare na tsarin ns-3 sau biyu, amma yanzu kun san yadda ake canza tsarin da gina ingantaccen code.

Don bincika wane bayanin martaba ke aiki don daidaitawar aikin da aka bayar, akwai umarni:

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

Halin da ke sama gina.py kuma yana goyan bayan muhawara --enable-examples и --enable-tests, amma sauran zaɓuɓɓuka Waf ba ya goyan bayan kai tsaye. Misali, wannan ba zai yi aiki ba:

$ ./build.py --disable-python

martanin zai kasance kamar haka:

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

Koyaya, ana iya amfani da afareta na musamman - - don wuce ƙarin sigogi ta hanyar wafdon haka maimakon wannan umarni mai zuwa zai yi aiki:

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

saboda yana haifar da babban umarni ./waf configure --disable-python. Anan akwai ƙarin shawarwarin gabatarwa game da Waf.

Magance kurakuran gini

Ana gwada fitowar ns-3 akan sabbin masu tarawa na C++ da ake samu a lokacin fitarwa akan rabawa Linux da MacOS gama gari. Koyaya, bayan lokaci, ana fitar da sabbin rarrabawa tare da sabbin masu tarawa, kuma waɗannan sabbin masu tarawa sukan zama masu hankali game da gargaɗi. ns-3 yana saita gininsa don ɗaukar duk gargaɗin azaman kurakurai, don haka wani lokacin idan kuna gudanar da tsohuwar sigar akan sabon tsarin, gargaɗin mai tarawa na iya dakatar da ginin.

Misali, a baya an sami fitowar ns-3.28 don Fedora 28, wanda ya haɗa da sabon babban sigar. gcc (gcc-8). Gina sakin ns-3.28 ko sigogin farko a ƙarƙashin Fedora 28, tare da shigar da Gtk2+, kuskuren mai zuwa zai faru:

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

A cikin fitowar da aka fara daga ns-3.28.1, in Waf akwai zaɓi don magance waɗannan matsalolin. Yana hana saita tutar "-Werror" a cikin g++ da clang++. Wannan shine zaɓin "--disable-werror" kuma dole ne a yi amfani da shi yayin daidaitawa:

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

Sanya ko tara

Wasu umarni Waf kawai suna da ma'ana a cikin lokacin daidaitawa, kuma wasu suna aiki ne kawai a lokacin ginin. Misali, idan kuna son amfani da fasalolin kwaikwayi ns-3, zaku iya kunna saitin bit kudu amfani da sudo, kamar yadda aka bayyana a sama. Wannan zai ƙetare umarnin matakan daidaitawa, don haka za ku iya canza tsarin ta amfani da umarni mai zuwa, wanda kuma ya haɗa da misalai da gwaje-gwaje.

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

Idan kayi haka Waf zai ƙaddamar sudodon canza shirye-shiryen ƙirƙirar soket na kwaikwayi don aiki tare da izini tushen. A Waf Akwai wasu zaɓuɓɓuka masu yawa don daidaitawa da matakan ginawa. Don bincika zaɓuɓɓukanku, shigar da:

$ ./waf --help

A sashe na gaba za mu yi amfani da wasu zaɓuɓɓuka masu alaƙa da gwaji.

Bayanan Bayanin Majalisa

Mun riga mun ga yadda zaku iya daidaitawa Waf domin majalisai debug и ingantawa:

$ ./waf --build-profile=debug

Hakanan akwai bayanin martaba na tsakiya, saki. Zabin -d daidai yake da --build-profile. Bayanan martaba na ginawa yana sarrafa amfani da shiga, dagewa, da haɓaka haɓaka masu tarawa:

ns-3 na'urar kwaikwayo ta hanyar sadarwa. Babi na 3

Kamar yadda kake gani, shiga da ikirari suna samuwa ne kawai a cikin ginin gyara kuskure. Ayyukan da aka ba da shawarar ita ce haɓaka rubutunku a cikin yanayin lalata, sannan yi maimaita gudu (don ƙididdiga ko canje-canjen ma'auni) a ingantaccen bayanin martaba.

Idan kuna da lambar da yakamata kawai ta gudana a cikin takamaiman bayanan martaba, yi amfani da 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 wurare suna gina kayan tarihi a cikin littafin ginin. Kuna iya ƙididdige littafin fitarwa na daban ta amfani da zaɓi - -out, alal misali:

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

Ta hanyar haɗa wannan tare da bayanan martaba, zaku iya canzawa cikin sauƙi tsakanin zaɓuɓɓukan haɗawa daban-daban:

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

Wanda ke ba ku damar yin aiki tare da majalisu da yawa ba tare da sake rubuta sabuwar taron kowane lokaci ba. Lokacin da kuka canza zuwa wani bayanin martaba, Waf za ta tattara shi kawai, ba tare da gama tattara komai ba.

Lokacin da kuka canza bayanan martaba ta wannan hanyar, kuna buƙatar yin hankali don ba da zaɓin daidaitawa iri ɗaya kowane lokaci. Ƙayyana sauye-sauyen yanayi da yawa zai taimake ka ka guje wa kuskure:

$ 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

Masu tarawa da tutoci

A cikin misalan da ke sama Waf don gina ns-3 yana amfani da mai haɗa C++ daga GCC ( g ++). Koyaya, zaku iya canza wanda kuke amfani dashi Waf C++ mai tarawa, ta hanyar ayyana canjin yanayi na CXX. Misali, don amfani da C++ compiler Clang, clang++,

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

Hakanan zaka iya daidaitawa Waf don amfani da rarraba rarraba ta amfani da discc:

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

Ana iya samun ƙarin bayani game da distcc da haɗakarwa da aka rarraba akan shafin aikin a cikin sashin Takardun Takardun. Don ƙara tutocin masu tarawa yayin daidaita ns-3, yi amfani da madaidaicin yanayi na CXXFLAGS_EXTRA.

saitin

Waf za a iya amfani da su shigar da dakunan karatu a wurare daban-daban a kan tsarin. Ta hanyar tsoho, ɗakunan karatu da aka haɗa da masu aiwatarwa suna cikin kundin adireshi gina, kuma tun da Waf ya san wurin da waɗannan ɗakunan karatu suke da kuma masu aiwatarwa, babu buƙatar shigar da ɗakunan karatu a ko'ina.

Idan masu amfani sun fi son sanyawa a waje da kundin adireshin ginin, za su iya gudanar da umarnin ./waf shigar. Tsohuwar prefix don shigarwa shine / usr / gidasaboda haka ./waf shigar zai shigar da shirye-shirye a ciki / usr / gida / bin, dakunan karatu a ciki / usr / gida / lib da manyan fayiloli a ciki /usr/local/hade. Haƙƙin mai amfani yawanci ana buƙatar saita shi tare da tsoho prefix, don haka umarni na yau da kullun zai kasance sudo ./waf shigar. Lokacin da aka ƙaddamar da shi, Waf zai fara zaɓar yin amfani da ɗakunan karatu da aka raba a cikin tsarin ginin, sannan nemo ɗakunan karatu tare da hanyar zuwa ɗakunan karatu da aka saita a cikin mahallin gida. Don haka lokacin shigar da ɗakunan karatu a kan tsarin, yana da kyau a duba cewa ana amfani da ɗakunan karatu masu dacewa. Masu amfani za su iya zaɓar shigar da wani prefix daban ta wuce zaɓin yayin daidaitawa --prefix, alal misali:

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

Idan daga baya, bayan ginin, mai amfani ya shiga umarnin shigarwa ./waf, za a yi amfani da prefix /opt/na gida.

tawagar ./waf clean dole ne a yi amfani da shi kafin sake saita aikin idan shigarwa zai yi amfani da shi Waf karkashin wani prefix na daban.

Don haka, don amfani da ns-3 babu buƙatar kira ./waf install. Yawancin masu amfani ba za su buƙaci wannan umarni ba saboda Waf za su ɗauki ɗakunan karatu na yanzu daga ginin directory, amma wasu masu amfani na iya samun wannan da amfani idan ayyukansu sun haɗa da aiki tare da shirye-shirye a wajen littafin ns-3.

Wafi guda

A saman matakin bishiyar tushen ns-3, akwai rubutun Waf ɗaya kawai. Da zarar ka fara aiki, za ku ɓata lokaci mai yawa a cikin kundin adireshi scratch/ ko zurfi cikinsrc/... kuma a lokaci guda dole ne a gudu Waf. Kuna iya tuna inda kuke kawai ku gudu Waf kamar haka:

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

amma wannan zai zama mai ban sha'awa da kuskure, don haka akwai mafita mafi kyau. Hanya ɗaya ta gama gari ita ce amfani da editan rubutu kamar emacs ko vim, wanda aka buɗe tasha biyu, ana amfani da ɗaya don gina ns-3, na biyu kuma ana amfani da shi don gyara lambar tushe. Idan kawai kuna da kwando, to, canjin yanayi zai iya taimakawa:

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

$ cd scratch 
$ waff build

A cikin kundin kundin tsarin yana iya zama abin sha'awa don ƙara rubutun waf maras muhimmanci kamar exec ../../waf. Don Allah, kar a yi haka. Wannan yana da ruɗani ga sababbin kuma, idan aka yi rashin kyau, yana haifar da kurakurai masu wuyar gano ginin. Hanyoyin da aka nuna a sama sune hanyar da ya kamata a yi amfani da su.

3.5 Gwaji ns-3

Kuna iya gudanar da gwaje-gwajen sashin rarraba ns-3 ta hanyar gudanar da rubutun ./gwaji.py:

$ ./test.py

Ana gudanar da waɗannan gwaje-gwaje a layi daya da Waf. A ƙarshe ya kamata ku ga saƙo yana cewa:

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

Wannan muhimmin sako ne don gano valgrind hadarurruka, hadarurruka ko kurakurai, yana nuna matsaloli tare da lambar ko rashin jituwa tsakanin kayan aiki da lamba.

Za ku kuma ga fitowar ƙarshe daga Waf da tester da ke gudanar da kowane gwaji, wanda zai yi kama da haka:

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)

Yawancin masu amfani ne ke gudanar da wannan umarni don tabbatar da sauri cewa an gina rarraba ns-3 daidai. (A lura cewa tsarin layin "PASS: ..." na iya bambanta, wannan al'ada ne. Abin da ke da mahimmanci shi ne cewa taƙaitaccen layi a ƙarshen rahoton ya nuna cewa duk gwaje-gwajen sun wuce; babu gwajin da ya fadi ko ya fadi.) Kuma Wafkuma gwaji.py za ta daidaita aiki a cikin ɗimbin abubuwan sarrafawa na injin.

3.6 Gudanar da rubutun

Mu yawanci muna gudanar da rubutun a ƙarƙashin iko Waf. Wannan yana ba da tsarin ginin damar tabbatar da cewa an saita hanyoyin ɗakin karatu da aka raba daidai kuma ana samun ɗakunan karatu a lokacin aiki. Don gudanar da shirin, kawai amfani Waf tare da siga - -run. Bari mu gudanar da ns-3 daidai da shirin a ko'ina Sannu Duniyata hanyar buga wadannan:

$ ./waf --run hello-simulator

Waf zai fara bincika cewa an gina shirin daidai kuma ya gina idan ya cancanta. Sannan Waf zai aiwatar da shirin da ke samar da fitarwa mai zuwa.

Hello Simulator

Taya murna! Yanzu kai mai amfani ne ns-3!

Me zan yi idan ban ga sakamako ba?

Idan kun ga saƙonni Wafyana nuna cewa an kammala ginin cikin nasara, amma ba kwa ganin fitarwar "Hello Simulator", to akwai yuwuwar a cikin sashin [Build-with-Waf] kun canza yanayin ginin ku zuwa ingantawa, amma an rasa komawa zuwa yanayin debug. Duk kayan aikin wasan bidiyo da aka yi amfani da su a cikin wannan koyawa suna amfani da ɓangaren ns-3 na musamman wanda ke yin shiga kuma ana amfani da shi don buga saƙonnin al'ada zuwa na'ura wasan bidiyo. Ana kashe fitarwa daga wannan bangaren ta atomatik lokacin da aka haɗa ingantacciyar lamba - an "inganta". Idan baku ga fitowar "Hello Simulator", shigar da mai zuwa:

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

don keɓancewa Waf don gina sigogin gyara kurakurai na shirye-shiryen ns-3, waɗanda suka haɗa da misalai da gwaje-gwaje. Sannan ya kamata ku sake gina sigar gyara na yanzu ta lambar ta buga

$ ./waf

Yanzu idan kun gudanar da shirin hello-na'urar kwaikwayo, ya kamata ku ga sakamakon da ake tsammani.

3.6.1 Maganar layin umarni

Don wuce gardamar layin umarni zuwa shirin ns-3, yi amfani da tsari mai zuwa:

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

Sauya zuwa sunan shirin ku da kuma muhawara. Hujja - -command-template to Waf shine ainihin girke-girke don gina ainihin layin umarni Waf amfani da shi wajen aiwatar da shirin. Waf yana bincika cewa ginin ya cika, saita hanyoyin ɗakin karatu da aka raba, sannan yayi amfani da samfurin layin umarni da aka bayar kuma ya maye gurbin sunan shirin don mai sanya % s don kiran mai aiwatarwa. Idan kun sami wannan haɗin gwiwar yana da rikitarwa, akwai sigar mafi sauƙi wacce ta ƙunshi shirin ns-3 da hujjojinsa waɗanda ke haɗe cikin ƙididdiga guda:

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

Wani misali mai amfani na musamman shine gudanar da ɗakunan gwajin zaɓe. Bari mu ɗauka akwai ɗakin gwaji mai suna mytest (a gaskiya babu). A sama mun yi amfani da rubutun ./test.py don gudanar da gwaje-gwaje da yawa a layi daya, wanda ke kiran shirin gwajin akai-akai. mai gwadawa. Kira mai gwadawa kai tsaye don gudanar da gwaji ɗaya:

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

Za a gabatar da muhawara ga shirin mai gwadawa. Tun da mytest babu, za a haifar da saƙon kuskure. Don buga zaɓuɓɓukan masu gudu-gwajin da ke akwai, shigar da:

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

3.6.2 Gyarawa

Don gudanar da shirye-shiryen ns-3 a ƙarƙashin wani kayan aiki, kamar mai cirewa (misali, gdb) ko kayan aikin gwajin ƙwaƙwalwar ajiya (misali, valgrind), yi amfani da irin wannan tsari - -command-template = "…". Misali, don gudu a cikin debugger gdb shirin ku hello-simulator ns-3 tare da muhawara:

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

Lura cewa sunan shirin ns-3 ya zo tare da hujja - -run, da kuma kayan aikin gudanarwa (a nan gdb) shine alamar farko a cikin jayayya - -command-template. Zabin - -args sanar gdbcewa sauran layin umarni na cikin shirin "ƙananan". (Wasu sigar gdb kar ku fahimci zabin - -args. A wannan yanayin, cire muhawarar shirin daga - -command-template kuma yi amfani da saitin umarni gdb args.) Za mu iya haɗa wannan girke-girke da na baya don gudanar da gwajin a ƙarƙashin mai gyara:

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

3.6.3 Jagorar aiki

Ya kamata a kaddamar da Waf daga wurin da yake a saman bishiyar ns-3. Wannan babban fayil ɗin ya zama jagorar aiki inda za a rubuta fayilolin fitarwa. Amma idan kuna son kiyaye waɗannan fayilolin a waje da bishiyar tushen ns-3 fa? Yi amfani da hujja - -cwd:

$ ./waf --cwd=...

Kuna iya samun ya fi dacewa don samun fayilolin fitarwa a cikin kundin aikinku. A wannan yanayin, ayyuka na kai tsaye na iya taimakawa:

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

Wannan kayan ado na sigar da ta gabata ta umarnin tana adana kundin tsarin aiki na yanzu, yana zuwa kundin adireshi Wafsannan yayi umarni Waf don canza littafin aiki zuwa ga kundin aiki na yanzu da aka ajiye kafin fara shirin. Mun ambaci tawagar - -cwd Don cikawa, yawancin masu amfani kawai suna gudanar da Waf daga babban jagorar matakin kuma suna samar da fayilolin fitarwa a wurin.

Ci gaba: Babi na 4

source: www.habr.com

Add a comment