Ns-3 şəbəkə simulyatoru dərsliyi. Fəsil 3

Ns-3 şəbəkə simulyatoru dərsliyi. Fəsil 3
fəsil 1,2

3 Başlamaq
3.1 Baxış
3.2 İlkin şərtlər
3.2.1 ns-3 buraxılışının mənbə arxivi kimi yüklənməsi
3.3 Git istifadə edərək ns-3-ün yüklənməsi
3.3.1 Bake istifadə edərək ns-3-ün yüklənməsi
3.4 Quraşdırma ns-3
3.4.1 build.py ilə bina
3.4.2 Bake ilə tikinti
3.4.3 Waf ilə qurun
3.5 Test ns-3
3.6 Skriptin icrası
3.6.1 Komanda xətti arqumentləri
3.6.2 Sazlama
3.6.3 İş kataloqu

Fəsil 3

Başlamaq

Bu fəsil oxucunu heç vaxt ns-3 quraşdırmamış kompüterlə başlamağa hazırlamaq məqsədi daşıyır. O, dəstəklənən platformaları, ilkin şərtləri, ns-3-ü necə əldə etməyi, ns-3-ü necə qurmağı və sadə proqramları necə sınaqdan keçirməyi və işə salmağı əhatə edir.

3.1 Baxış

Ns-3 simulyatoru birgə proqram kitabxanaları sistemi kimi qurulub. Montaj zamanı istifadəçi proqramlarının kodu bu kitabxanalarla əlaqələndirilir. Xüsusi proqramlar yazmaq üçün C++ və ya Python proqramlaşdırma dillərindən istifadə olunur.

Ns-3 mənbə kodu kimi paylanır, yəni əvvəlcə kitabxanaları qurmaq, sonra isə istifadəçi proqramını qurmaq üçün hədəf sistem proqram inkişaf mühitinə malik olmalıdır. Prinsipcə, ns-3 müəyyən bir sistem üçün hazır kitabxanalar kimi paylana bilər və gələcəkdə bu şəkildə paylana bilər. Amma indiki vaxtda bir çox istifadəçi öz işlərini ns-3-ün özünü redaktə etməklə görür, ona görə də kitabxanaların qurulması üçün mənbə kodunun olması faydalıdır. Hər kəs əməliyyat sistemləri üçün hazır kitabxanalar və paketlər yaratmaq işini öz üzərinə götürmək istəyirsə, zəhmət olmasa poçt siyahısı ilə əlaqə saxlayın. ns-invelopers.

Sonra, ns-3-ü yükləmək və qurmaq üçün üç yola baxacağıq. Birincisi, əsas saytdan rəsmi buraxılışı yükləmək və qurmaqdır. İkincisi, əsas ns-3 quraşdırmasının inkişaf versiyalarının nüsxələrinin seçilməsi və yığılmasıdır. Üçüncüsü, ns-3 üçün daha çox uzantı yükləmək üçün əlavə qurma alətlərindən istifadə etməkdir. Alətlər bir az fərqli olduğundan hər birini nəzərdən keçirəcəyik.

Təcrübəli Linux istifadəçiləri maraqlana bilər ki, niyə ns-3 paket meneceri istifadə edən digər kitabxanalar kimi paket kimi təqdim edilmir? Müxtəlif Linux paylamaları (məsələn, Debian) üçün ikili paketlər olsa da, istifadəçilərin çoxu kitabxanaları redaktə edir və ns-3-ü özləri yenidən qurmaq məcburiyyətində qalırlar, ona görə də mənbə kodunun mövcud olması əlverişlidir. Bu səbəbdən mənbədən quraşdırmaya diqqət yetirəcəyik.

Əksər proqramlar üçün ns-3 hüquqları kök lazım deyil, imtiyazsız istifadəçi hesabından istifadə etmək tövsiyə olunur.

3.2 İlkin şərtlər

Mövcud ns-3 kitabxanalarının bütün dəsti üçüncü tərəflərin kitabxanalarından bir sıra asılılıqlara malikdir, lakin əksər hallarda ns-3 bir neçə ümumi (tez-tez standart olaraq quraşdırılmış) komponentlərin dəstəyi ilə tikilə və istifadə edilə bilər: C++ kompilyatoru, Python, mənbə kodu redaktoru (məsələn, cəldlik, emacs və ya Tutulma) və inkişaf depolarından istifadə edilərsə, Git versiyasına nəzarət sistemləri. İlk dəfə istifadə edən istifadəçilərin əksəriyyətinin konfiqurasiyası bəzi ns-3 qabaqcıl funksiyalarının çatışmadığını bildirirsə, narahat olmağa dəyməz, lakin tam quraşdırma istəyənlər üçün layihə çoxlu faydalı məsləhətlər və fəndlər olan səhifələri özündə cəmləşdirən wiki təqdim edir. Belə səhifələrdən biri də müxtəlif sistemlər üçün quraşdırma təlimatlarının yer aldığı Quraşdırma səhifəsidir: https://www.nsnam.org/wiki/Installation.

Bu viki-nin İlkin şərtlər bölməsi ümumi ns-3 seçimlərini dəstəkləmək üçün hansı paketlərin tələb olunduğunu izah edir və həmçinin onları Linux və ya macOS-un ümumi ləzzətlərində quraşdırmaq üçün istifadə olunan əmrləri təqdim edir.

Siz ns-3 viki səhifəsini və ya əsas veb-saytı araşdırmaq üçün bu fürsətdən istifadə edə bilərsiniz: https://www.nsnam.org, çünki orada çoxlu məlumat var. ns-3-ün ən son versiyasından (ns-3.29) başlayaraq, ns-3-ü işə salmaq üçün aşağıdakı alətlər tələb olunur:

Alət Paketi/Versiya

  • C++ kompilyatoru
    clang++ və ya g++ (g++ versiyası 4.9 və ya daha yüksək)
  • Python
    python2 versiyası >= 2.7.10 və ya python3 versiyası >=3.4
  • get
    hər hansı ən son versiya (GitLab.com-da ns-3-ə daxil olmaq üçün)
  • tar
    hər hansı ən son versiya (ns‑3 buraxılışını çıxarmaq üçün)
  • bunzip2
    hər hansı ən son versiya (ns‑3 buraxılışını çıxarmaq üçün)

Python-un standart versiyasını yoxlamaq üçün daxil edin python -V. g++ versiyasını yoxlamaq üçün yazın g++ -v. Əgər hər hansı alət yoxdursa və ya çox köhnədirsə, lütfən, ns-3 wiki səhifəsində quraşdırma təlimatına baxın.

Bundan sonra biz fərz edirik ki, oxucu Linux, MacOS və ya Linux emulyatoru ilə işləyir və ən azı yuxarıda göstərilən alətlərə malikdir.

3.2.1 ns-3 buraxılışının mənbə arxivi kimi yüklənməsi

Bu, ns-3-ün ən son buraxılış və paket versiyalarını yükləmək və sınaqdan keçirmək istəyən yeni istifadəçi üçün hərəkət kursudur. ns-3 relizləri sıxılmış mənbə arxivləri kimi nəşr olunur, bəzən də deyilir tarbal. tarbal bir neçə faylın birlikdə birləşdirildiyi xüsusi proqram təminatı arxiv formatıdır. Arxiv adətən sıxılır. vasitəsilə ns-3 yükləmə prosesi tarbal sadədir, sadəcə olaraq buraxılışı seçmək, yükləmək və paketdən çıxarmaq lazımdır.

Fərz edək ki, siz istifadəçi olaraq ns-3 adlı lokal kataloqda qurmaq istəyirsiniz iş sahəsi. Aşağıdakıları Linux konsoluna daxil etməklə buraxılışın işlək surətini əldə edə bilərsiniz (əlbəttə ki, müvafiq versiya nömrələrini əvəz etməklə)

$ 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 

Yuxarıda istifadə olunan yardım proqramına diqqət yetirin wget, İnternetdən obyektləri yükləmək üçün əmr xətti vasitəsidir. Əgər siz onu quraşdırmamısınızsa, bunun üçün brauzerinizdən istifadə edə bilərsiniz.

Bu addımlardan sonra sizi ns-allinone-3.29 qovluğuna aparacaqsınız, orada bir neçə fayl və qovluq görməlisiniz.

$ 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

İndi siz əsas ns-3 paylanması qurmağa hazırsınız və ns-3-ün qurulması bölməsinə keçə bilərsiniz.

3.3 Git istifadə edərək ns-3-ün yüklənməsi

Ns-3 kodu GitLab.com ünvanında Git depolarında mövcuddur https://gitlab.com/nsnam/. Qrup nsnam açıq mənbəli layihə tərəfindən istifadə edilən müxtəlif depoları bir araya gətirir.

Git depolarından istifadə etməyə başlamağın ən asan yolu mühiti çəngəlləmək və ya klonlaşdırmaqdır ns-3-allinon. Bu, ən çox istifadə olunan ns-3 alt sistemlərinin yüklənməsini və yığılmasını idarə edən skriptlər toplusudur. Git-də yenisinizsə, "çəngəl" və "klon" terminləri sizə tanış ola bilər; Əgər belədirsə, GitLab.com saytında yerləşən deponu sadəcə olaraq klonlamağınızı (öz surətinizi yaratmağınızı) tövsiyə edirik:

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

Bu mərhələdə kataloqunuzun görünüşü ns-3-allinon yuxarıda təsvir edilən buraxılış arxiv kataloqundan bir qədər fərqlidir. Bu kimi bir şey görünməlidir:

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

Qeyd edək ki, skript var download.py, əlavə olaraq ns-3 və onu müşayiət edən mənbə kodunu çıxaracaq. Burada seçiminiz var: ya ən son ns-3 inkişaf şəklini endirin:

$ python download.py

və ya bayraqdan istifadə edərək ns-3 buraxılışına üstünlük verin -n buraxılış nömrəsini göstərmək üçün:

$ python download.py -n ns-3.29

Bu addımdan sonra qovluğa keçin ns-3-allinon əlavə depolar endiriləcək ns-3, yapmaq, pybindgen и netanim.

Qeyd
Təmiz Ubuntu16.04 olan bir maşında əmri buna dəyişməli oldum: $ sudo python3 download.py -n ns-3.29 (bundan sonra tərcüməçinin qeydləri).

3.3.1 Bake istifadə edərək ns-3-ün yüklənməsi

Yuxarıdakı iki üsul (mənbə arxivi və ya depo ns-3-allinon Git vasitəsilə) çoxlu əlavələrlə ən sadə ns-3 quraşdırmasını əldə etmək üçün faydalıdır(pybindgen Python bağlamaları yaratmaq və netanim şəbəkə animasiyası üçün). Ns-3-allinone-də standart olaraq təmin edilən üçüncü depo çağırılır yapmaq.

Yandırın ns-3 layihəsi üçün hazırlanmış çoxsaylı repozitoriyalardan proqram təminatının əlaqələndirilmiş şəkildə qurulması üçün bir vasitədir. Yandırın ns-3-ün inkişaf versiyalarını əldə etmək, həmçinin ətraf mühit kimi ns-3 paylanmasının əsas versiyasının genişləndirmələrini yükləmək və qurmaq üçün istifadə edilə bilər. Birbaşa Kodun İcrası, CradleNetwork Simulyasiya Beşiği, yeni Python bağlamaları və müxtəlif ns-3 "tətbiqləri" yaratmaq imkanı.

Qeyd
CradleNetwork Simulation Cradle şəbəkə simulyatoru daxilində real TCP/IP şəbəkə yığınlarından istifadə etməyə imkan verən çərçivədir.

Əgər ns-3 quraşdırmanızın qabaqcıl və ya əlavə funksiyalara malik olmasını gözləyirsinizsə, bu quraşdırma yolunu izləyə bilərsiniz.

Ən son ns-3 buraxılışlarında Yandırın tar buraxılışına əlavə edildi. Buraxılış, buraxılış zamanı cari proqram versiyalarını yükləməyə imkan verən konfiqurasiya faylını ehtiva edir. Bu, məsələn, versiyadır Yandırınns-3.29 buraxılışı ilə paylanan ns-3 və ya daha əvvəlki buraxılış üçün komponentləri əldə etmək üçün istifadə edilə bilər, lakin sonrakı buraxılışlar üçün komponentləri əldə etmək üçün istifadə edilə bilməz (paket təsviri faylı varsa) bakeconf.xml yenilənməyib).

Ən son nüsxəni də əldə edə bilərsiniz yapmaqLinux konsolunuza aşağıdakı əmri daxil etməklə (Git-i quraşdırdığınızı nəzərə alaraq):

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

Git əmrini işlətdiyiniz zaman aşağıdakı kimi bir şey görməlisiniz:

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.

Komanda tamamlandıqdan sonra Clone adlı bir kataloqunuz olmalıdır yapmaq, məzmunu belə görünməlidir:

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

Qeyd edək ki, siz bir neçə Python skriptini, adlı Python modulunu yükləmisiniz yapmaq və XML konfiqurasiya faylı. Növbəti addım seçdiyiniz ns-3 paylanmasını yükləmək və qurmaq üçün bu skriptlərdən istifadə etməkdir. Bir neçə fərdiləşdirmə hədəfləri mövcuddur:

  1. ns-3.29: buraxılışa uyğun modul; tarballdakı buraxılışa bənzər komponentləri endirəcək;

  2. ns-3-dev: oxşar modul, lakin inkişaf ağacından koddan istifadə etməklə;

  3. ns-allinon-3.29: Klik marşrutu və Şəbəkə Simulyasiya Cradle, ns-3 üçün Openflow kimi digər qabaqcıl xüsusiyyətləri özündə birləşdirən modul.

  4. ns-3-allinon: modulun buraxılış versiyasına bənzəyir hamısı birində, lakin inkişaf kodu üçün.

Qeyd
Basın — marşrutlaşdırıcıların yaradılması üçün modul proqram arxitekturası.

Openflow, proqram təminatı ilə müəyyən edilmiş şəbəkə texnologiyasını həyata keçirən marşrutlaşdırıcılar və açarlar tərəfindən məlumat şəbəkəsi üzərindən ötürülən məlumatların emalı prosesini idarə etmək üçün bir protokoldur.

Cari inkişaf snapshot (buraxılmayan) ns-3 burada tapıla bilər:https://gitlab.com/nsnam/ns-3-dev.git.

Tərtibatçılar bu anbarları ardıcıl iş qaydasında saxlamağa çalışırlar, lakin onlar inkişaf zonasındadır və buraxılmamış kodu ehtiva edir, ona görə də yeni funksiyalardan istifadə etməyi planlaşdırmırsınızsa, rəsmi buraxılışı seçin.

Kodun ən son versiyasını depoların siyahısına baxmaqla və ya ns-3 Releases veb səhifəsinə keçməklə tapa bilərsiniz:https://www.nsnam.org/releases/ və ən son versiya linkinə klikləyin. Bu nümunədə ns-3.29 ilə davam edəcəyik.

İndi bizə lazım olan ns-3 komponentlərini əldə etmək üçün alətdən istifadə edəcəyik Yandırın. Əsər haqqında bir neçə giriş sözü deyək Yandırın.

Bake paket mənbələrini kataloqa yükləməklə işləyir mənbə və kitabxanaların quruluş kataloquna quraşdırılması. Yandırın ikiliyə istinad edərək işlədilə bilər, lakin siz işləmək istəyirsinizsə Yandırın yükləndiyi qovluqdan deyil, yolu əlavə etmək məsləhətdir yapmaq yolunuza (PATH mühit dəyişəni), məsələn, aşağıdakı kimi (Linux bash shell üçün nümunə). "Bake" qovluğuna gedin və sonra aşağıdakı mühit dəyişənlərini təyin edin:

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

Bu proqramı yerləşdirəcək bake.py qabıq yoluna keçir və digər proqramlara onun yaratdığı icra olunanları və kitabxanaları tapmağa imkan verəcək yapmaq. Bəzi istifadə hallarda yapmaq, yuxarıda təsvir edilən PATH və PYTHONPATH parametrləri tələb olunmur, lakin ns-3-allinonun tam qurulması (əlavə paketlərlə) adətən bunu tələb edir.

İş kataloqunuza gedin və konsola aşağıdakıları daxil edin:

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

Sonra soruşacağıq Yandırın müxtəlif komponentləri yükləmək üçün kifayət qədər alətlərimizin olub olmadığını yoxlayın. Yığım:

$ ./bake.py check

Aşağıdakı kimi bir şey görməlisiniz:

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

Xüsusilə, Mercurial, CVS, Git və Bazaar kimi yükləmə alətləri bu addımda vacibdir, çünki onlar bizə kodu əldə etməyə imkan verir. Bu nöqtədə, çatışmayan alətləri sisteminiz üçün adi şəkildə quraşdırın (necə edəcəyinizi bilirsinizsə) və ya kömək üçün sistem administratorunuzla əlaqə saxlayın.

Sonra proqramı yükləməyə cəhd edin:

$ ./bake.py download

nəticə belə bir şey olmalıdır:

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

Bu, üç mənbənin endirilməsi deməkdir. İndi mənbə kataloquna gedin və ls yazın; Görməlisən:

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

İndi ns-3 paylanmasını qurmağa hazırsınız.

3.4 Quraşdırma ns-3

Ns-3-ü yükləməkdə olduğu kimi, ns-3-ü qurmağın bir neçə yolu var. Vurğulamaq istədiyimiz əsas odur ki, ns-3 adlı qurma alətindən istifadə etməklə qurulur Wafaşağıda təsvir edilmişdir. Əksər istifadəçilər işləyəcək Waf, lakin işə başlamağa və ya daha mürəkkəb quruluşları təşkil etməyə kömək edəcək bir neçə lazımlı skript var. Odur ki, oxumadan əvvəl xahiş edirəm Waf, bir nəzər sal build.py və ilə montaj yapmaq.

3.4.1 build.py ilə bina

Diqqət! Bu qurma addımı yalnız yuxarıda təsvir olunduğu kimi əldə edilmiş mənbə arxiv versiyasında mövcuddur; və git və ya bake vasitəsilə endirilməmişdir.

Buraxılış arxivi ilə işləyərkən tarbal, in ns-3-allinon Komponentlərin yığılmasını asanlaşdıran lazımlı bir skript var. Bu build.py adlanır. Bu proqram sizin üçün layihəni ən faydalı şəkildə quracaq. Bununla belə, nəzərə alın ki, daha təkmil quraşdırma və ns-3 ilə işləmək adətən ns-3-ün öz qurma sistemi olan Waf-dan istifadəni nəzərdə tutur ki, bu da daha sonra bu dərslikdə təqdim olunacaq.

Əgər istifadə edərək yükləmisinizsə tarbal, sonra kataloqunuzda ~/iş sahəsi kimi bir adı olan bir kataloq ns-allinon-3.29. Aşağıdakıları daxil edin:

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

Zəng edəndə build.py Biz bu dərslikdə istifadə olunan nümunələri və testləri qurmaq üçün əmr xətti arqumentlərindən istifadə etdik, onlar ns-3-də standart olaraq qurulmur. Varsayılan olaraq, proqram bütün mövcud modulları da qurur. Sonra, istəsəniz, nümunələr və testlər olmadan ns-3 qura və ya işiniz üçün lazım olmayan modulları istisna edə bilərsiniz.

Yüklədiyiniz müxtəlif hissələri qurarkən skript tərəfindən göstərilən çoxlu kompilyator çıxış mesajlarını görəcəksiniz. Əvvəlcə skript animator qurmağa çalışacaq netanim, sonra bağlama generatoru pybindgen və nəhayət ns-3. Proses başa çatdıqda, aşağıdakıları görməlisiniz:

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

Siyahının son üç sətirində tikilməmiş modullar haqqında bir mesaj görürük:

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

Bu sadəcə o deməkdir ki, xarici kitabxanalardan asılı olan bəzi ns-3 modulları tikilməmiş ola bilər və ya bu konfiqurasiya üçün onların qurulması tələb olunmur. Bu, simulyatorun yığılmaması və ya yığılmış modulların düzgün işləməyəcəyi demək deyil.

3.4.2 Bake ilə tikinti

Layihə depolarından mənbə kodu əldə etmək üçün yuxarıda bake istifadə etmisinizsə, ns-3 qurmaq üçün ondan istifadə etməyə davam edə bilərsiniz. Yığım:

$ ./bake.py build

və belə bir şey görməlisiniz:

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

Tooltip: Siz həmçinin "bake.py deploy" zəng edərək həm yükləmə, həm də qurmaq addımlarını eyni anda edə bilərsiniz.

Bütün komponentlərin yığılması uğursuz ola bilər, lakin komponent tələb olunmursa, montaj davam edəcək. Məsələn, bu yaxınlarda daşınma problemi bu idi castxml alətlə yığıla bilər yapmaq bütün platformalarda deyil. Bu vəziyyətdə belə bir mesaj görünəcək:

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

Lakin castxml yalnız yenilənmiş Python bağlamaları yaratmaq istəyirsinizsə lazımdır. Əksər istifadəçilər üçün buna ehtiyac yoxdur (ən azı ns-3 dəyişənə qədər), buna görə də bu cür xəbərdarlıqları indilik etibarsız olaraq rədd etmək olar.

Əgər uğursuz olarsa, aşağıdakı əmr sizə çatışmayan asılılıqlar haqqında ipucu verəcək:

$ ./bake.py show

Qurmağa çalışdığınız paketlərin müxtəlif asılılıqları siyahıya alınacaq.

3.4.3 Waf ilə qurun

Bu nöqtəyə qədər ns-3 qurmağa başlamaq üçün ya skriptdən istifadə etdik build.py, və ya alət yapmaq. Bu alətlər ns-3 qurmaq və kitabxanaları saxlamaq üçün faydalıdır. Əslində, qurmaq üçün onlar qurma alətini işlədirlər Waf ns-3 kataloqundan. Waf ns-3 mənbə kodu ilə quraşdırılmışdır. Əksər istifadəçilər ns‑3-ü konfiqurasiya etmək və yığmaq üçün tez birbaşa istifadəyə keçirlər Waf. Beləliklə, davam etmək üçün əvvəlcə yaratdığınız ns-3 qovluğuna keçin.

Bu, hazırda ciddi şəkildə tələb olunmur, lakin bir az geri çəkilmək və layihə konfiqurasiyasında dəyişikliklərin necə ediləcəyini görmək faydalı olacaq. Yəqin ki, edə biləcəyiniz ən faydalı konfiqurasiya dəyişikliyi kodun optimallaşdırılmış versiyasını yaratmaqdır. Varsayılan olaraq, siz layihənizi sazlama versiyasını qurmaq üçün konfiqurasiya etmisiniz. Optimallaşdırılmış quruluş yaratmaq üçün layihəyə nəzər salaq. Waf-a nümunələr və testlərdən ibarət optimallaşdırılmış quruluşlar yaratmalı olduğunu izah etmək üçün aşağıdakı əmrləri yerinə yetirməlisiniz:

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

Bu işə başlayacaq Waf yerli kataloqdan kənarda (rahatlığınız üçün). Birinci əmr əvvəlki quruluşdan təmizlənir, bu, adətən ciddi şəkildə lazım deyil, lakin bu yaxşı təcrübədir (həmçinin aşağıdakı profillərin qurulmasına baxın); bu, əvvəllər yaradılmış kitabxanaları və kataloqda yerləşən obyekt fayllarını siləcək qurmaq /. Layihə yenidən konfiqurasiya edildikdə və qurma sistemi müxtəlif asılılıqları yoxladıqda, aşağıdakı kimi çıxışı görməlisiniz:

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)

Yuxarıdakı siyahının son hissəsinə diqqət yetirin. Bəzi ns-3 seçimləri standart olaraq aktiv deyil və ya düzgün işləməsi üçün sistem dəstəyi tələb olunur. Məsələn, XmlTo-nu aktivləşdirmək üçün kitabxana sistemdə olmalıdır libxml-2.0. Əgər bu kitabxana tapılmadısa və müvafiq ns-3 funksiyası işə salınmayıbsa, mesaj göstəriləcək. Onu da qeyd edək ki, əmrdən istifadə etmək mümkündür sudo müəyyən proqramlar üçün "iş zamanı qrup identifikatorunu təyin et" suid bitini təyin etmək. Defolt olaraq aktiv deyil və buna görə də bu xüsusiyyət "aktiv deyil" kimi görünür. Nəhayət, aktiv seçimlərin siyahısını əldə etmək üçün istifadə edin Waf parametri ilə --check-config.

İndi qayıdıb nümunələr və testlərdən ibarət debug quruluşuna qayıdaq.

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

Quraşdırma sistemi artıq qurulub və siz sadəcə olaraq yazmaqla ns-3 proqramlarının sazlama versiyalarını yarada bilərsiniz:

$ ./waf

Yuxarıdakı addımlar sizi ns-3 sisteminin bir hissəsini iki dəfə qurmağa məcbur etmiş ola bilər, lakin indi siz konfiqurasiyanı necə dəyişdirəcəyinizi və optimallaşdırılmış kodu necə quracağınızı bilirsiniz.

Verilmiş layihə konfiqurasiyası üçün hansı profilin aktiv olduğunu yoxlamaq üçün əmr var:

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

Yuxarıdakı ssenari build.py arqumentləri də dəstəkləyir --enable-examples и --enable-tests, lakin digər variantlar Waf birbaşa dəstəkləmir. Məsələn, bu işləməyəcək:

$ ./build.py --disable-python

reaksiya belə olacaq:

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

Bununla belə, xüsusi operator - - vasitəsilə əlavə parametrləri ötürmək üçün istifadə edilə bilər vəfBeləliklə, yuxarıdakıların əvəzinə aşağıdakı əmr işləyəcək:

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

çünki əsas əmri yaradır ./waf konfiqurasiya --disable-python. Budur, haqqında daha bir neçə giriş məsləhəti Waf.

Quraşdırma xətalarının idarə edilməsi

ns-3 buraxılışları ümumi Linux və MacOS paylamalarında buraxılış zamanı mövcud olan ən son C++ kompilyatorlarında sınaqdan keçirilir. Bununla belə, zaman keçdikcə yeni distributorlar yeni kompilyatorlarla buraxılır və bu yeni tərtibçilər xəbərdarlıqlara daha çox pedantik yanaşırlar. ns-3 bütün xəbərdarlıqları xəta kimi qəbul etmək üçün öz quruluşunu konfiqurasiya edir, buna görə də bəzən daha yeni sistemdə köhnə versiyanı işlədirsinizsə, kompilyator xəbərdarlığı quruluşu dayandıra bilər.

Məsələn, əvvəllər Fedora 3.28 üçün yeni əsas versiyanı ehtiva edən ns‑28 buraxılışı var idi. gcc (gcc-8). Gtk3.28+ quraşdırılmış Fedora 28 altında buraxılış ns-2 və ya əvvəlki versiyaları qurmaqla aşağıdakı xəta baş verəcək:

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

ns‑3.28.1-dən başlayan buraxılışlarda, in Waf bu problemləri həll etmək üçün bir seçim mövcuddur. Bu, g++ və clang++-da "-Səhv" bayrağının qurulmasını qeyri-aktiv edir. Bu "--disable-verror" seçimidir və konfiqurasiya zamanı tətbiq edilməlidir:

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

Konfiqurasiya edin və ya yığın

Bəzi əmrlər Waf yalnız konfiqurasiya mərhələsində məna daşıyır, bəziləri isə yalnız qurma mərhələsində etibarlıdır. Məsələn, ns-3 emulyasiya xüsusiyyətlərindən istifadə etmək istəyirsinizsə, bit parametrini aktivləşdirə bilərsiniz iddia istifadə etmək sudo, yuxarıda təsvir edildiyi kimi. Bu, konfiqurasiya addımı əmrlərini ləğv edəcək və beləliklə, nümunələr və testlər də daxil olan aşağıdakı əmrdən istifadə edərək konfiqurasiyanı dəyişə bilərsiniz.

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

Bunu etsəniz Waf başlayacaq sudoemulyasiya kodu yuvası yaratma proqramlarını icazələrlə işləmək üçün dəyişdirmək kök. Ilə Waf Konfiqurasiya və qurma addımları üçün bir çox başqa seçimlər mövcuddur. Seçimlərinizi araşdırmaq üçün daxil edin:

$ ./waf --help

Növbəti hissədə sınaqla bağlı bəzi seçimlərdən istifadə edəcəyik.

Montaj Profilləri

Necə konfiqurasiya edə biləcəyinizi artıq gördük Waf məclislər üçün debug и optimize:

$ ./waf --build-profile=debug

Aralıq montaj profili də var, azad. Seçim -d ilə sinonimdir --build-profile. Quraşdırma profili giriş, təsdiqləmə və kompilyator optimallaşdırma açarlarının istifadəsinə nəzarət edir:

Ns-3 şəbəkə simulyatoru dərsliyi. Fəsil 3

Gördüyünüz kimi, giriş və təsdiqləmələr yalnız debug quruluşlarında mövcuddur. Tövsiyə olunan təcrübə skriptinizi debug rejimində inkişaf etdirmək, sonra optimallaşdırılmış qurma profilində təkrar qaçışlar (statistika və ya parametr dəyişiklikləri üçün) yerinə yetirməkdir.

Yalnız müəyyən qurma profillərində işləməli olan kodunuz varsa, Code Wrapper Makrosundan istifadə edin:

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

Defolt, Waf qurma qovluğunda yerlər qurmaq artefaktları. Seçimdən istifadə edərək fərqli bir çıxış kataloqu təyin edə bilərsiniz - -out, məsələn:

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

Bunu qurmaq profilləri ilə birləşdirərək, müxtəlif tərtib variantları arasında asanlıqla keçid edə bilərsiniz:

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

Hansı ki, hər dəfə ən son montajı yenidən yazmadan çoxlu montajlarla işləməyə imkan verir. Başqa profilə keçdiyiniz zaman, Waf hər şeyi tamamilə yenidən tərtib etmədən yalnız onu tərtib edəcək.

Quraşdırma profillərini bu şəkildə dəyişdikdə, hər dəfə eyni konfiqurasiya seçimlərini vermək üçün diqqətli olmalısınız. Bir neçə mühit dəyişəninin müəyyən edilməsi səhvlərdən qaçmağa kömək edəcək:

$ 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

Kompilyatorlar və bayraqlar

Yuxarıdakı nümunələrdə Waf ns-3 qurmaq üçün GCC-dən C++ kompilyatorundan istifadə edir ( g ++). Bununla belə, istifadə etdiyinizi dəyişə bilərsiniz Waf C++ tərtibçisi, CXX mühit dəyişənini təyin etməklə. Məsələn, C++ kompilyatorundan istifadə etmək üçün Clang, clang++,

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

Eyni şəkildə konfiqurasiya edə bilərsiniz Waf paylanmış kompilyasiyadan istifadə etmək distcc:

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

Distcc və paylanmış kompilyasiya haqqında ətraflı məlumatı Sənədlər bölməsindəki layihə səhifəsində tapa bilərsiniz. Ns-3 konfiqurasiyası zamanı kompilyator bayraqları əlavə etmək üçün CXXFLAGS_EXTRA mühit dəyişənindən istifadə edin.

Quraşdırma

Waf sistemin müxtəlif yerlərində kitabxanalar quraşdırmaq üçün istifadə edilə bilər. Varsayılan olaraq, tərtib edilmiş kitabxanalar və icra olunanlar kataloqda yerləşir qurmaq, və Waf bu kitabxanaların və icra olunan faylların yerini bildiyi üçün kitabxanaları başqa yerdə quraşdırmağa ehtiyac yoxdur.

İstifadəçilər qurma qovluğundan kənarda quraşdırmağı üstün tuturlarsa, onlar əmri işlədə bilərlər ./waf quraşdırma. Quraşdırma üçün standart prefiksdir / usr / localbu səbəbdən ./waf quraşdırma proqramları quraşdıracaq / usr / local / bin, kitabxanalar / Usr / local / lib və başlıq faylları /usr/local/include. Superuser hüquqları adətən defolt prefikslə təyin edilməlidir, buna görə də tipik bir əmr olacaq sudo ./waf quraşdırın. Başladıqda, Waf əvvəlcə qurma kataloqunda paylaşılan kitabxanalardan istifadə etməyi seçəcək, sonra yerli mühitdə konfiqurasiya edilmiş kitabxanalara gedən yol boyunca kitabxanaları axtaracaq. Beləliklə, sistemə kitabxanalar quraşdırarkən, düzgün kitabxanaların istifadə olunduğunu yoxlamaq yaxşı təcrübədir. İstifadəçilər konfiqurasiya zamanı seçimi keçərək fərqli prefikslə quraşdırmağı seçə bilərlər --prefix, məsələn:

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

Əgər daha sonra, qurduqdan sonra istifadəçi quraşdırma əmrini daxil edir ./waf, prefiksi istifadə olunacaq /opt/local.

Komanda ./waf clean quraşdırma istifadə edəcəksə, layihəni yenidən konfiqurasiya etməzdən əvvəl istifadə edilməlidir Waf fərqli bir prefiks altında.

Beləliklə, ns-3-dən istifadə etmək üçün zəng etməyə ehtiyac yoxdur ./waf install. Əksər istifadəçilərin bu əmrə ehtiyacı olmayacaq, çünki Waf cari kitabxanaları qurma kataloqundan götürəcək, lakin bəzi istifadəçilər fəaliyyətləri ns-3 qovluğundan kənar proqramlarla işləməyi nəzərdə tutursa, bunu faydalı hesab edə bilər.

Vaf subay

Ns-3 mənbə ağacının yuxarı səviyyəsində yalnız bir Waf skripti var. İşə başladıqdan sonra kataloqda çox vaxt keçirəcəksiniz scratch/ və ya daha dərinəsrc/... və eyni zamanda qaçmaq lazımdır Waf. Siz sadəcə harada olduğunuzu xatırlayıb qaça bilərsiniz Waf belədir:

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

lakin bu, yorucu və səhvə meyilli olacaq, ona görə də daha yaxşı həll yolları var. Ümumi yollardan biri kimi mətn redaktorundan istifadə etməkdir emacs və ya cəldlik, iki terminal seansının açıldığı, biri ns-3 qurmaq üçün, ikincisi isə mənbə kodunu redaktə etmək üçün istifadə olunur. Yalnız varsa tarbal, onda mühit dəyişəni kömək edə bilər:

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

$ cd scratch 
$ waff build

Modul kataloqunda mənasız bir waf skripti əlavə etmək cazibədar ola bilər exec ../../waf. Xahiş edirəm bunu etmə. Bu, yeni başlayanlar üçün çaşqınlıq yaradır və zəif yerinə yetirildikdə, aşkarlanması çətin olan qurma xətalarına səbəb olur. Yuxarıda göstərilən həllər istifadə edilməli olan yoldur.

3.5 Test ns-3

Skripti işlətməklə ns-3 paylanmasının vahid testlərini işlədə bilərsiniz ./test.py:

$ ./test.py

Bu testlər paralel olaraq aparılır Waf. Nəhayət, belə bir mesaj görməlisiniz:

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

Bu, kodla bağlı problemləri və ya alətlər və kod arasında uyğunsuzluğu göstərən valgrind qəzalarını, qəzaları və ya səhvləri müəyyən etmək üçün vacib bir mesajdır.

Siz həmçinin son çıxışı görəcəksiniz Waf və hər bir testi həyata keçirən tester belə görünəcək:

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)

Bu əmr adətən ns-3 paylamasının düzgün qurulduğunu tez yoxlamaq üçün istifadəçilər tərəfindən idarə olunur. (Qeyd edək ki, "PASS: ..." sətirlərinin sırası fərqli ola bilər, bu normaldır. Vacib olan odur ki, hesabatın sonundakı xülasə sətirində bütün testlərin keçdiyini göstərir; heç bir sınaq uğursuz və ya qəzaya uğramayıb.) Və Waftest.py maşının mövcud prosessor nüvələrində işi paralelləşdirəcək.

3.6 Skriptin icrası

Biz adətən skriptləri nəzarət altında işlədirik Waf. Bu, qurma sisteminə paylaşılan kitabxana yollarının düzgün qurulduğunu və kitabxanaların iş vaxtında mövcud olmasını təmin etməyə imkan verir. Proqramı işə salmaq üçün sadəcə istifadə edin Waf parametri ilə - -run. Gəlin hər yerdə mövcud olan proqramın ns-3 ekvivalentini işlədək salam dünyaaşağıdakıları yazaraq:

$ ./waf --run hello-simulator

Waf əvvəlcə proqramın düzgün qurulduğunu yoxlayacaq və lazım gələrsə quracaq. Sonra Waf aşağıdakı çıxışı yaradan proqramı icra edəcək.

Hello Simulator

Təbrik edirik! Siz indi ns-3 istifadəçisisiniz!

Nəticələri görməsəm nə etməliyəm?

Mesajları görürsənsə Wafqurulmanın uğurla tamamlandığını, lakin çıxışı görmədiyinizi göstərir "Salam Simulyator", onda [Vaf ilə Build-Waf] bölməsində qurma rejiminizi dəyişdirmə ehtimalınız var. optimize, lakin rejimə qayıtmağı qaçırdım debug. Bu dərslikdə istifadə edilən bütün konsol çıxışları girişi həyata keçirən və konsola xüsusi mesajları çap etmək üçün istifadə edilən xüsusi ns-3 komponentindən istifadə edir. Optimallaşdırılmış kod tərtib edildikdə bu komponentdən çıxış avtomatik olaraq söndürülür - o, "optimallaşdırılır". "Salam Simulyator" çıxışını görmürsünüzsə, aşağıdakıları daxil edin:

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

fərdiləşdirmək Waf nümunələri və testləri ehtiva edən ns-3 proqramlarının debug versiyalarını qurmaq. Daha sonra kodun cari debug versiyasını yazaraq yenidən qurmalısınız

$ ./waf

İndi proqramı çalıştırsanız salam simulyator, gözlənilən nəticəni görməlisiniz.

3.6.1 Komanda xətti arqumentləri

Komanda xətti arqumentlərini ns-3 proqramına ötürmək üçün aşağıdakı nümunədən istifadə edin:

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

Əvəz edin proqramınızın adına və arqumentlərə. Arqument - -command-template uğrunda Waf mahiyyətcə faktiki komanda xəttini qurmaq üçün reseptdir Waf proqramı icra etmək üçün istifadə olunur. Waf qurmanın tamamlandığını yoxlayır, paylaşılan kitabxana yollarını təyin edir, sonra təmin edilmiş komanda xətti şablonundan istifadə edir və icra olunana zəng etmək üçün proqram adını %s yertutucusu ilə əvəz edir. Bu sintaksisi mürəkkəb hesab edirsinizsə, ns-3 proqramını və onun arqumentlərini tək dırnaqlara daxil edən daha sadə versiya var:

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

Başqa bir faydalı nümunə test paketlərini seçmə şəkildə işə salmaqdır. Tutaq ki, mytest adlı bir test dəsti var (əslində yoxdur). Yuxarıda biz ./test.py skriptindən bir sıra testləri paralel olaraq yerinə yetirmək üçün istifadə etdik, bu da test proqramını dəfələrlə çağırır. sınaqçı. Zəng edin sınaqçı bir testi həyata keçirmək üçün birbaşa:

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

Arqumentlər proqrama ötürüləcək sınaqçı. Mytest mövcud olmadığı üçün xəta mesajı yaradılacaq. Mövcud sınaqçı seçimlərini çap etmək üçün daxil edin:

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

3.6.2 Sazlama

ns-3 proqramlarını sazlayıcı kimi başqa bir yardımçı proqram altında işə salmaq üçün (məsələn, gdb) və ya yaddaş test aləti (məsələn, valgrind), oxşar formadan istifadə edin - -command-template = "…". Məsələn, sazlayıcıda işləmək üçün gdb arqumentlərlə salam-simulyator ns-3 proqramınız:

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

Qeyd edək ki, ns-3 proqram adı arqumentlə gəlir - -run, və idarəetmə proqramı (burada gdb) arqumentdəki ilk işarədir - -command-template. Seçim - -args məlumat verir gdbkomanda xəttinin qalan hissəsinin "aşağı" proqrama aid olduğunu. (Bəzi versiyalar gdb seçimi başa düşmürəm - -args. Bu halda, proqram arqumentlərini buradan çıxarın - -command-template və komanda dəstindən istifadə edin gdb args.) Testi sazlayıcının altında keçirmək üçün bu resepti və əvvəlkini birləşdirə bilərik:

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

3.6.3 İş kataloqu

Waf ns-3 ağacının yuxarı hissəsindəki yerdən işə salınmalıdır. Bu qovluq çıxış fayllarının yazılacağı iş qovluğuna çevrilir. Bəs siz bu faylları ns-3 mənbə ağacından kənarda saxlamaq istəyirsinizsə nə etməli? Arqumentdən istifadə edin - -cwd:

$ ./waf --cwd=...

Çıxış fayllarını iş kataloqunuzda əldə etmək daha rahat ola bilər. Bu vəziyyətdə aşağıdakı dolayı hərəkətlər kömək edə bilər:

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

Komandanın əvvəlki versiyasının bu dekorasiyası cari iş qovluğunu qoruyur, kataloqa gedir Wafvə sonra göstəriş verir Waf proqramı başlamazdan əvvəl iş qovluğunu saxlanan cari iş qovluğuna qaytarmaq üçün. Komandanı qeyd edirik - -cwd Tamlıq üçün istifadəçilərin çoxu sadəcə yuxarı səviyyəli kataloqdan Waf-ı işlədir və orada çıxış faylları yaradır.

Davamı: 4-cü fəsil

Mənbə: www.habr.com

Добавить комментарий