ns-3 сүлжээний симулятор заавар. 3-р бүлэг

ns-3 сүлжээний симулятор заавар. 3-р бүлэг
1,2-р бүлэг

3 Эхлэх
3.1 Тойм
3.2 Урьдчилсан нөхцөл
3.2.1 ns-3 хувилбарыг эх архив болгон татаж авах
3.3 Git ашиглан ns-3 татаж авч байна
3.3.1 Bake ашиглан ns-3 ачаалах
3.4 Угсралт ns-3
3.4.1 build.py-тэй барилга
3.4.2 Бэйкээр барих
3.4.3 Waf ашиглан бүтээх
3.5 Туршилт ns-3
3.6 Скриптийг ажиллуулах
3.6.1 Тушаалын мөрийн аргументууд
3.6.2 Дибаг хийх
3.6.3 Ажлын лавлах

Бүлэг 3

Эхлэх

Энэ бүлэг нь уншигчийг хэзээ ч ns-3 суулгаагүй компьютерийг эхлүүлэхэд бэлтгэх зорилготой юм. Энэ нь дэмжигдсэн платформууд, урьдчилсан нөхцөлүүд, ns-3-ийг хэрхэн олж авах, ns-3-ийг хэрхэн бүтээх, энгийн программуудыг хэрхэн бүтээх, ажиллуулах зэргийг багтаасан болно.

3.1 Тойм

Ns-3 симулятор нь хамтран ажилладаг програм хангамжийн сангуудын систем болгон бүтээгдсэн. Угсрах явцад хэрэглэгчийн програмын кодыг эдгээр сангуудтай холбодог. C++ эсвэл Python програмчлалын хэлийг захиалгат програм бичихэд ашигладаг.

Ns-3 нь эх код хэлбэрээр тархсан бөгөөд энэ нь зорилтот систем нь эхлээд номын сангуудыг байгуулж, дараа нь хэрэглэгчийн програмыг бүтээхийн тулд програм хангамж хөгжүүлэх орчинтой байх ёстой гэсэн үг юм. Зарчмын хувьд ns-3-ийг тодорхой системд зориулж бэлэн номын сан хэлбэрээр тарааж болох бөгөөд ирээдүйд ийм хэлбэрээр тарааж болно. Гэвч өнөө үед олон хэрэглэгчид ns-3-ийг өөрөө засварлаж ажлаа хийдэг тул номын сангуудыг бүтээх эх кодтой байх нь ашигтай. Үйлдлийн системд зориулсан бэлэн номын сан, багц үүсгэх ажлыг хийх хүсэлтэй хүн байвал шуудангийн хаягаар холбогдоно уу. ns-хөгжүүлэгчид.

Дараа нь бид ns-3-ийг татаж аваад бүтээх гурван аргыг авч үзэх болно. Эхнийх нь үндсэн сайтаас албан ёсны хувилбарыг татаж аваад бүтээх явдал юм. Хоёр дахь нь үндсэн ns-3 суулгацын хөгжүүлэлтийн хувилбаруудын хуулбарыг сонгох, угсрах явдал юм. Гурав дахь нь ns-3-ийн нэмэлт өргөтгөлүүдийг ачаалах нэмэлт бүтээх хэрэгслийг ашиглах явдал юм. Багаж хэрэгсэл нь арай өөр тул бид тус бүрийг нь авч үзэх болно.

Туршлагатай Линукс хэрэглэгчид яагаад ns-3-ийг багц менежер ашигладаг бусад номын сангууд шиг багц хэлбэрээр өгдөггүйг гайхаж магадгүй юм бэ? Хэдийгээр Linux-ийн төрөл бүрийн түгээлтийн хоёртын багцууд (жишээ нь Debian) байдаг ч ихэнх хэрэглэгчид номын санг засварлаж, өөрсдөө ns-3-ийг дахин бүтээх шаардлагатай болдог тул эх кодыг ашиглахад хялбар байдаг. Энэ шалтгааны улмаас бид эх сурвалжаас суулгахад анхаарлаа хандуулах болно.

Ихэнх програмуудын хувьд ns-3 эрх эх шаардлагагүй, давуу эрхгүй хэрэглэгчийн бүртгэл ашиглахыг зөвлөж байна.

3.2 Урьдчилсан нөхцөл

Боломжтой ns-3 сангуудын бүхэл бүтэн багц нь гуравдагч талын номын сангаас хамааралтай байдаг боловч ихэнх тохиолдолд ns-3-ийг хэд хэдэн нийтлэг (ихэвчлэн анхдагчаар суулгадаг) бүрэлдэхүүн хэсгүүдийн дэмжлэгтэйгээр бүтээж, ашиглаж болно: C++ хөрвүүлэгч, Python, эх кодын засварлагч (жишээ нь, VIM, emacs буюу Eclipse) ба хэрэв хөгжүүлэлтийн агуулах ашиглаж байгаа бол Git хувилбарын хяналтын системүүд. Ихэнх анх удаа хэрэглэгчид тохиргоонд нь ns-3-ийн зарим дэвшилтэт функцууд дутуу байгаа бол санаа зовох хэрэггүй болно, гэхдээ бүрэн суулгахыг хүсч буй хүмүүст энэ төсөл нь олон ашигтай зөвлөмж, заль мэх бүхий хуудсыг багтаасан викигээр хангадаг. Ийм хуудасны нэг нь Суулгах хуудас бөгөөд янз бүрийн системийг суулгах зааварчилгааг дараах хаягаас авах боломжтой. https://www.nsnam.org/wiki/Installation.

Энэхүү викигийн Урьдчилсан нөхцөл хэсэг нь нийтлэг ns-3 сонголтуудыг дэмжихэд ямар багц шаардлагатайг тайлбарлахаас гадна Linux эсвэл macOS-ын нийтлэг хувилбарууд дээр тэдгээрийг суулгах командуудыг өгдөг.

Та энэ боломжийг ашиглан ns-3 вики хуудас эсвэл үндсэн вэбсайттай танилцах боломжтой. https://www.nsnam.org, учир нь тэнд маш их мэдээлэл байдаг. ns-3-ийн хамгийн сүүлийн хувилбараас (ns-3.29) эхлэн ns-3-ийг ажиллуулахын тулд дараах хэрэгслүүд шаардлагатай.

Хэрэгслийн багц/хувилбар

  • C++ хөрвүүлэгч
    clang++ эсвэл g++ (g++ хувилбар 4.9 ба түүнээс дээш)
  • Python
    python2 хувилбар >= 2.7.10, эсвэл python3 хувилбар >=3.4
  • явах
    ямар ч сүүлийн хувилбар (GitLab.com дээр ns-3 руу нэвтрэх)
  • давирхай
    ямар ч сүүлийн хувилбар (ns‑3 хувилбарыг задлахад зориулагдсан)
  • бунзип2
    ямар ч сүүлийн хувилбар (ns‑3 хувилбарыг задлахад зориулагдсан)

Python-ийн анхдагч хувилбарыг шалгахын тулд бичнэ үү python -V. g++ хувилбарыг шалгахын тулд бичнэ үү g++ -v. Хэрэв ямар нэгэн хэрэгсэл дутуу эсвэл хэтэрхий хуучирсан бол ns-3 wiki хуудасны суулгалтын гарын авлагыг үзнэ үү.

Одооноос эхлэн уншигч нь Линукс, MacOS эсвэл Линукс эмулятор ажиллуулж байгаа бөгөөд дор хаяж дээрх хэрэгслүүдтэй байна гэж бид таамаглаж байна.

3.2.1 ns-3 хувилбарыг эх архив болгон татаж авах

Энэ бол ns-3-ын хамгийн сүүлийн хувилбар болон багц хувилбаруудыг татаж авах, турших хүсэлтэй шинэ хэрэглэгчдэд зориулсан арга хэмжээ юм. ns-3 хувилбарууд нь шахсан эхийн архив хэлбэрээр хэвлэгддэг бөгөөд заримдаа үүнийг нэрлэдэг галт тэрэг. галт тэрэг нь хэд хэдэн файлыг нэгтгэсэн програм хангамжийн архивын тусгай формат юм. Архивыг ихэвчлэн шахдаг. ns-3 ачаалах процессоор дамжуулан галт тэрэг Энэ нь энгийн бөгөөд та хувилбараа сонгоод, татаж аваад задлахад л хангалттай.

Хэрэглэгч та ns-3-г дотоод лавлах гэж нэрлэхийг хүсч байна гэж бодъё ажлын талбар. Та Линукс консол руу дараахыг оруулснаар хувилбарын ажлын хуулбарыг авах боломжтой (мэдээж тохирох хувилбарын дугаарыг орлуулах)

$ 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 

Дээр ашигласан хэрэгсэлд анхаарлаа хандуулаарай wget, энэ нь интернетээс объект татаж авах командын мөрийн хэрэгсэл юм. Хэрэв та үүнийг суулгаагүй бол үүнийг хийхийн тулд хөтөчөө ашиглаж болно.

Эдгээр алхмуудыг дагаснаар таныг ns-allinone-3.29 лавлах руу аваачиж, тэндээс та хэд хэдэн файл, лавлахыг харах болно.

$ 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

Та одоо үндсэн ns-3 түгээлтийг бүтээхэд бэлэн болсон бөгөөд ns-3 бүтээх хэсэг рүү шилжиж болно.

3.3 Git ашиглан ns-3 татаж авч байна

Ns-3 кодыг GitLab.com дээрх Git репозитороос авах боломжтой https://gitlab.com/nsnam/. Бүлэг нснам нээлттэй эхийн төслийн ашигладаг төрөл бүрийн агуулахуудыг нэгтгэдэг.

Git репозиторуудыг ашиглаж эхлэх хамгийн хялбар арга бол орчныг салаалах эсвэл хувилах явдал юм ns-3-аллинон. Энэ бол хамгийн түгээмэл хэрэглэгддэг ns-3 дэд системийг ачаалах, угсрах ажлыг удирддаг скриптүүдийн багц юм. Хэрэв та Git-д шинээр орсон бол "салаа" болон "клон" гэсэн нэр томъёо нь танд танил биш байж магадгүй юм; Хэрэв тийм бол бид танд GitLab.com дээр байрлах агуулахыг дараах байдлаар хуулбарлахыг зөвлөж байна (өөрийнхөө хуулбарыг хийх):

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

Энэ үе шатанд таны лавлах харагдах байдал ns-3-аллинон дээр дурдсан хувилбарын архивын лавлахаас арай өөр. Энэ нь иймэрхүү харагдах ёстой:

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

Скрипт байгаа гэдгийг анхаарна уу download.py, энэ нь ns-3 болон дагалдах эх кодыг нэмж задлах болно. Энд танд сонголт байна: эсвэл хамгийн сүүлийн үеийн ns-3 хөгжүүлэлтийн агшин зургийг татаж авах:

$ python download.py

эсвэл тугийг ашиглан ns-3 хувилбарыг илүүд үзэх -n хувилбарын дугаарыг зааж өгөхийн тулд:

$ python download.py -n ns-3.29

Энэ алхамын дараа лавлах руу очно уу ns-3-аллинон нэмэлт агуулахуудыг татаж авах болно ns-3, жигнэх, пибиндген и нетаним.

тайлбар
Цэвэр Ubuntu16.04-тэй машин дээр би дараах тушаалыг өөрчлөх шаардлагатай болсон: $ sudo python3 download.py -n ns-3.29 (цаашид орчуулагчийн тэмдэглэл гэх).

3.3.1 Bake ашиглан ns-3 ачаалах

Дээрх хоёр арга (эх архив эсвэл репозитор ns-3-аллинон Git-ээр дамжуулан) нь олон нэмэлтүүдтэй хамгийн энгийн ns-3 суулгацыг авахад тустай.пибиндген Python холболтуудыг үүсгэх ба нетаним сүлжээний хөдөлгөөнт дүрс). ns-3-allinone-д анхдагчаар хангагдсан гурав дахь репозиторыг дууддаг жигнэх.

Жигнэх нь ns-3 төсөлд зориулан боловсруулсан олон репозитороос программ хангамжийг уялдуулан бүтээх хэрэгсэл юм. Жигнэх ns-3-ийн хөгжүүлэлтийн хувилбаруудыг олж авах, түүнчлэн орчин гэх мэт ns-3 түгээлтийн үндсэн хувилбарын өргөтгөлүүдийг татаж авах, бүтээхэд ашиглаж болно. Кодын шууд гүйцэтгэл, CradleNetwork симуляцийн өлгий, шинэ Python холболтууд болон төрөл бүрийн ns-3 "апп" үүсгэх чадвар.

тайлбар
CradleNetwork Simulation Cradle нь сүлжээний симулятор дотор бодит TCP/IP сүлжээний стекүүдийг ашиглах боломжийг олгодог хүрээ юм.

Хэрэв та өөрийн ns-3 суулгацыг дэвшилтэт эсвэл нэмэлт функцтэй гэж бодож байгаа бол уг суулгах замыг дагаж болно.

Хамгийн сүүлийн үеийн ns-3 хувилбаруудад Жигнэх tar чөлөөлөхөд нэмсэн. Уг хувилбарт програм хангамжийн одоогийн хувилбаруудыг гаргах үед татаж авах боломжийг олгодог тохиргооны файл багтсан болно. Энэ нь жишээ нь хувилбар юм Жигнэхns-3.29 хувилбартай тараагдсан ns-3 буюу түүнээс өмнөх хувилбарын бүрэлдэхүүн хэсгүүдийг сэргээхэд ашиглаж болох боловч дараагийн хувилбаруудын бүрэлдэхүүн хэсгүүдийг сэргээхэд ашиглах боломжгүй (хэрэв багцын тайлбар файл байгаа бол) bakeconf.xml шинэчлэгдээгүй).

Та мөн хамгийн сүүлийн хуулбарыг авах боломжтой жигнэхЛинукс консолдоо дараах тушаалыг оруулснаар (та Git суулгасан гэж үзвэл):

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

Та git командыг ажиллуулахдаа дараахь зүйлийг харах болно.

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.

Тушаал дууссаны дараа хуулбар Та нэртэй лавлахтай байх ёстой жигнэх, агуулга нь иймэрхүү харагдах ёстой:

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

Та хэд хэдэн Python скрипт, Python модулийг ачаалсан гэдгийг анхаарна уу жигнэх болон XML тохиргооны файл. Дараагийн алхам бол эдгээр скриптүүдийг ашиглан өөрийн сонгосон ns-3 түгээлтийг татаж аваад бүтээх явдал юм. Хэд хэдэн тохируулгын зорилтууд байдаг:

  1. ns-3.29: хувилбарт тохирох модуль; энэ нь tarball дахь хувилбартай төстэй бүрэлдэхүүн хэсгүүдийг татаж авах болно;

  2. ns-3-dev: ижил төстэй модуль, гэхдээ хөгжлийн модны кодыг ашиглах;

  3. ns-allinone-3.29: Click routing болон Network Simulation Cradle, Openflow for ns-3 зэрэг бусад нэмэлт функцуудыг агуулсан модуль.

  4. ns-3-аллинон: модулийн хувилбартай төстэй бүгд нэг дор, гэхдээ хөгжүүлэлтийн кодын хувьд.

тайлбар
Дарах - чиглүүлэгчийг үүсгэх модульчлагдсан програм хангамжийн архитектур.

Openflow нь чиглүүлэгч болон шилжүүлэгчээр өгөгдлийн сүлжээгээр дамжуулагдсан өгөгдлийг боловсруулах процессыг удирдах протокол бөгөөд програм хангамжаар тодорхойлсон сүлжээний технологийг хэрэгжүүлдэг.

Одоогийн хөгжүүлэлтийн агшин зуурын (хувилбаргүй) ns-3-ийг дараахаас олж болно:https://gitlab.com/nsnam/ns-3-dev.git.

Хөгжүүлэгчид эдгээр агуулахуудыг тогтмол ажлын дарааллаар хадгалахыг хичээдэг ч тэдгээр нь хөгжүүлэлтийн талбарт байгаа бөгөөд гаргаагүй код агуулсан тул хэрэв та шинэ боломжуудыг ашиглахаар төлөвлөөгүй бол албан ёсны хувилбарыг сонго.

Та кодын хамгийн сүүлийн хувилбарыг хадгалах газрын жагсаалтыг үзэх эсвэл ns-3 Releases вэб хуудас руу орж олох боломжтой.https://www.nsnam.org/releases/ болон хамгийн сүүлийн хувилбарын холбоос дээр дарна уу. Энэ жишээнд бид ns-3.29-ийг үргэлжлүүлнэ.

Одоо бидэнд хэрэгтэй ns-3 бүрэлдэхүүн хэсгүүдийг авахын тулд бид хэрэгслийг ашиглах болно Жигнэх. Бүтээлийн талаар хэдэн үг хэлье Жигнэх.

Bake нь багцын эх сурвалжийг лавлахад ачаалах замаар ажилладаг эх үүсвэр болон номын сангуудыг бүтээх лавлах руу суулгана. Жигнэх хоёртын файлыг лавлах замаар ажиллуулж болно, гэхдээ хэрэв та ажиллуулахыг хүсвэл Жигнэх татаж авсан лавлахаас биш, замыг нэмэхийг зөвлөж байна жигнэх өөрийн зам руу (PATH орчны хувьсагч), жишээ нь дараах байдлаар (Linux bash shell-ийн жишээ). "Bake" лавлах руу очоод дараах орчны хувьсагчдыг тохируулна уу.

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

Энэ нь програмыг байрлуулах болно bake.py бүрхүүлийн зам руу шилжүүлж, бусад програмуудад түүний үүсгэсэн гүйцэтгэх файлууд болон сангуудыг олох боломжийг олгоно жигнэх. Зарим тохиолдолд ашиглах жигнэх, дээр дурдсан PATH болон PYTHONPATH тохиргоо шаардлагагүй, гэхдээ ns-3-allinone (нэмэлт багцын хамт) бүрэн бүтээхэд ихэвчлэн үүнийг шаарддаг.

Өөрийн ажлын лавлах руу очоод консол дээр дараах зүйлийг оруулна уу:

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

Дараа нь бид асуух болно Жигнэх Төрөл бүрийн бүрэлдэхүүн хэсгүүдийг ачаалах хангалттай хэрэгсэл байгаа эсэхийг шалгана уу. Залгах:

$ ./bake.py check

Та дараахь зүйлийг харах ёстой.

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

Ялангуяа Mercurial, CVS, Git, Bazaar зэрэг байршуулах хэрэгслүүд нь бидэнд код авах боломжийг олгодог тул энэ алхамд зайлшгүй шаардлагатай. Энэ үед дутуу хэрэгслүүдийг системдээ ердийн байдлаар суулгана уу (хэрэв та яаж хийхийг мэдэж байгаа бол) эсвэл системийн администратортайгаа холбогдож тусламж аваарай.

Дараа нь програмыг татаж аваад үзээрэй:

$ ./bake.py download

үр дүн нь иймэрхүү байх ёстой:

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

Энэ нь гурван эх сурвалжийг татсан гэсэн үг юм. Одоо эх лавлах руу очоод ls гэж бичнэ үү; Та харах ёстой:

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

Одоо та ns-3 түгээлтийг бүтээхэд бэлэн боллоо.

3.4 Угсралт ns-3

Ns-3-ийг татаж авахтай адил ns-3-ийг бүтээх хэд хэдэн арга байдаг. Бидний онцлон тэмдэглэхийг хүссэн гол зүйл бол ns-3 нь бүтээх хэрэгсэл ашиглан бүтээгдсэн юм Wafдоор тайлбарласан. Ихэнх хэрэглэгчид хамтран ажиллах болно Waf, гэхдээ танд илүү төвөгтэй бүтээцүүдийг эхлүүлэх эсвэл зохион байгуулахад туслах хэд хэдэн тохиромжтой скриптүүд байдаг. Тиймээс уншихаасаа өмнө уншина уу Waf, харна уу build.py ба угсралт жигнэх.

3.4.1 build.py-тэй барилга

Анхаар Энэ бүтээх алхам нь дээр дурдсанчлан олж авсан эх архивын хувилбараас л боломжтой; git эсвэл bake-ээр татаж аваагүй.

Хувилбарын архивтай ажиллах үед галт тэрэг, in ns-3-аллинон Бүрэлдэхүүн хэсгүүдийг угсрах ажлыг хөнгөвчлөх хялбар скрипт байдаг. Үүнийг build.py гэж нэрлэдэг. Энэ програм нь танд төслийг хамгийн хэрэгтэй байдлаар тохируулах болно. Гэсэн хэдий ч, ns-3-тэй илүү дэвшилтэт тохиргоо болон ажиллах нь ихэвчлэн ns-3-ийн өөрийн бүтээх систем болох Waf-г ашигладаг болохыг анхаарна уу, үүнийг дараа нь энэ зааварт танилцуулах болно.

Хэрэв та ашиглан татаж авсан бол галт тэрэг, дараа нь таны лавлахад ~/ажлын талбар гэх мэт нэртэй лавлах ns-allinone-3.29. Дараахыг оруулна уу:

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

Дуудсан үед build.py Энэ зааварт ашигласан жишээнүүд болон тестүүдийг бүтээхдээ бид командын мөрийн аргументуудыг ашигласан бөгөөд эдгээр нь анхдагчаар ns-3 дээр бүтээгдээгүй. Анхдагч байдлаар, програм нь боломжтой бүх модулиудыг бүтээдэг. Дараа нь, хэрэв та хүсвэл ns-3-ийг жишээ, туршилтгүйгээр бүтээх эсвэл таны ажилд шаардлагагүй модулиудыг хасч болно.

Скрипт нь таны ачаалсан янз бүрийн хэсгүүдийг бүтээх явцад хөрвүүлэгчийн гаралтын олон мессежийг харах болно. Эхлээд скрипт нь аниматор бүтээхийг оролдох болно нетаним, дараа нь холбох генератор пибиндген эцэст нь ns-3. Процесс дууссаны дараа та дараахь зүйлийг харах ёстой.

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

Жагсаалтын сүүлийн гурван мөрөнд бид баригдаагүй модулиудын тухай мессежийг харж байна:

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

Энэ нь зүгээр л гадаад номын сангаас хамааралтай зарим ns-3 модулийг бүтээгээгүй эсвэл энэ тохиргоонд зориулж бүтээх шаардлагагүй гэсэн үг юм. Энэ нь симулятор угсараагүй эсвэл угсарсан модулиуд зөв ажиллахгүй гэсэн үг биш юм.

3.4.2 Бэйкээр барих

Хэрэв та төслийн агуулахаас эх код авахын тулд дээрх bake-г ашигласан бол ns-3-г бүтээхдээ үргэлжлүүлэн ашиглаж болно. Залгах:

$ ./bake.py build

мөн та иймэрхүү зүйлийг харах ёстой:

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

Сануулга: Мөн та "bake.py deploy" руу залгаж татаж авах болон бүтээх алхмуудыг нэгэн зэрэг хийж болно.

Бүх бүрэлдэхүүн хэсгүүдийг угсрах нь бүтэлгүйтэж магадгүй ч бүрэлдэхүүн хэсэг шаардлагагүй бол угсрах ажлыг үргэлжлүүлнэ. Жишээлбэл, саяхан зөөврийн асуудал гарсан castxml багажаар угсарч болно жигнэх бүх платформ дээр биш. Энэ тохиолдолд дараах мессеж гарч ирнэ.

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

Гэсэн хэдий ч, castxml Хэрэв та шинэчлэгдсэн Python холбоос үүсгэхийг хүсвэл л хэрэгтэй. Ихэнх хэрэглэгчдийн хувьд үүнийг хийх шаардлагагүй (ядаж ns-3-ийг өөрчлөх хүртэл), тиймээс ийм сэрэмжлүүлгийг одоогоор үл тоомсорлож болно.

Хэрэв энэ нь амжилтгүй болвол дараах тушаал нь алга болсон хамаарлын талаар зөвлөгөө өгөх болно.

$ ./bake.py show

Таны бүтээх гэж буй багцуудын янз бүрийн хамаарлыг жагсаах болно.

3.4.3 Waf ашиглан бүтээх

Энэ хүртэл бид ns-3-ийг бүтээхийн тулд аль нэг скриптийг ашигласан build.py, эсвэл хэрэгсэл жигнэх. Эдгээр хэрэгслүүд нь ns-3 бүтээх, номын санг хадгалахад хэрэгтэй. Үнэн хэрэгтээ, бүтээхийн тулд тэд бүтээх хэрэгслийг ажиллуулдаг Waf ns-3 лавлахаас. Waf ns-3 эх кодоор суулгасан. Ихэнх хэрэглэгчид ns‑3-ийг тохируулах, угсрах зорилгоор шууд ашиглах горимд хурдан шилждэг Waf. Тиймээс үргэлжлүүлэхийн тулд анх үүсгэсэн ns-3 лавлах руу очно уу.

Одоогийн байдлаар үүнийг хатуу шаардахгүй, гэхдээ энэ нь бага зэрэг ухарч, төслийн тохиргоонд хэрхэн өөрчлөлт оруулахыг харах нь ашигтай байх болно. Таны хийж чадах хамгийн ашигтай тохиргооны өөрчлөлт бол кодын оновчтой хувилбарыг үүсгэх явдал юм. Анхдагч байдлаар, та дибаг хийх хувилбарыг бүтээхээр төслөө тохируулсан байна. Оновчтой бүтэц бий болгох төслийг харцгаая. Waf-д жишээ болон туршилтуудыг багтаасан оновчтой бүтэцтэй болгох ёстойг тайлбарлахын тулд та дараах тушаалуудыг ажиллуулах хэрэгтэй болно.

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

Энэ нь эхлэх болно Waf локал лавлахаас гадуур (таны тав тухтай байдлыг хангах үүднээс). Эхний команд нь өмнөх бүтээцээс цэвэрлэдэг, энэ нь ихэвчлэн хатуу шаардлагагүй, гэхдээ энэ нь сайн туршлага юм (мөн бүтээх профайлыг доороос үзнэ үү); Энэ нь өмнө нь үүсгэсэн сангууд болон директорт байрлах объектын файлуудыг устгах болно барих/. Төслийг дахин тохируулж, бүтээх систем нь янз бүрийн хамаарлыг шалгах үед та дараахтай төстэй гаралтыг харах ёстой.

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)

Дээрх жагсаалтын сүүлчийн хэсгийг анхаарна уу. Зарим ns-3 сонголтууд нь анхдагчаар идэвхжээгүй эсвэл зөв ажиллахын тулд системийн дэмжлэг шаарддаг. Жишээлбэл, XmlTo-г идэвхжүүлэхийн тулд номын сан систем дээр байх ёстой libxml-2.0. Хэрэв энэ номын сан олдоогүй бөгөөд харгалзах ns-3 функц идэвхжээгүй бол мессеж гарч ирнэ. Мөн командыг ашиглах боломжтой гэдгийг анхаарна уу sudo тодорхой программуудын хувьд "ажлын үед бүлгийн ID-г тохируулах" suid битийг тохируулах. Энэ нь анхдагчаар идэвхжээгүй тул энэ функц "идэвхжүүлээгүй" гэж харагдана. Эцэст нь идэвхжүүлсэн сонголтуудын жагсаалтыг авахын тулд ашиглана уу Waf параметртэй --check-config.

Одоо буцаад жишээ, тест агуулсан дибаг хийх рүү буцъя.

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

Одоо бүтээх системийг тохируулсан бөгөөд та ns-3 програмын дибаг хийх хувилбарыг дараахыг бичиж болно.

$ ./waf

Дээрх алхмууд нь таныг ns-3 системийн нэг хэсгийг хоёр удаа бүтээхэд хүргэсэн байж болох ч одоо та тохиргоог хэрхэн өөрчилж, оновчтой код бүтээхээ мэдэж байна.

Тухайн төслийн тохиргоонд аль профайл идэвхтэй байгааг шалгахын тулд дараах тушаал байна:

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

Дээрх хувилбар build.py аргументуудыг бас дэмждэг --enable-examples и --enable-tests, гэхдээ бусад сонголтууд Waf шууд дэмждэггүй. Жишээлбэл, энэ нь ажиллахгүй:

$ ./build.py --disable-python

хариу үйлдэл нь дараах байдалтай байх болно.

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

Гэсэн хэдий ч тусгай оператор - - ашиглан нэмэлт параметрүүдийг дамжуулж болно вафТиймээс дээрх тушаалын оронд дараах тушаал ажиллах болно:

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

Учир нь энэ нь үндсэн командыг үүсгэдэг ./waf тохируулах --disable-python. Энэ талаар илүү танилцуулах зөвлөмжүүд энд байна Waf.

Барилгын алдаатай ажиллах

ns-3 хувилбарууд нь нийтлэг Linux болон MacOS түгээлтүүд дээр гарах үед байгаа хамгийн сүүлийн үеийн C++ хөрвүүлэгч дээр туршиж үздэг. Гэсэн хэдий ч цаг хугацаа өнгөрөхөд шинэ түгээлтүүд шинэ хөрвүүлэгчидтэй хамт гарч ирдэг бөгөөд эдгээр шинэ хөрвүүлэгчид сэрэмжлүүлэгтэй холбоотой байх хандлагатай байдаг. ns-3 нь бүх анхааруулгыг алдаа гэж үзэхээр бүтээцээ тохируулдаг тул заримдаа та шинэ систем дээр хуучин хувилбарыг ажиллуулж байгаа бол хөрвүүлэгчийн анхааруулга угсралтыг зогсоож болзошгүй.

Жишээлбэл, өмнө нь Fedora 3.28-д зориулсан ns‑28 хувилбар гарсан бөгөөд үүнд шинэ үндсэн хувилбар багтсан болно. gcc (gcc-8). Gtk3.28+ суулгасан Fedora 28-ийн дагуу ns-2 буюу түүнээс өмнөх хувилбаруудыг бүтээхэд дараах алдаа гарна.

/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-ээс эхлэн гарсан хувилбаруудад, in Waf Эдгээр асуудлыг шийдэх сонголт бий. Энэ нь g++ болон clang++ дээр "-Werror" тугийг тохируулахыг идэвхгүй болгодог. Энэ нь "--disable-werror" сонголт бөгөөд тохиргооны явцад хэрэглэгдэх ёстой:

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

Тохируулах эсвэл угсрах

Зарим тушаалууд Waf Зөвхөн тохиргооны үе шатанд л утга учиртай, зарим нь зөвхөн бүтээх үе шатанд хүчинтэй байдаг. Жишээлбэл, хэрэв та ns-3 эмуляцийн функцуудыг ашиглахыг хүсвэл битийн тохиргоог идэвхжүүлж болно нэхэмжлэл ашиглах sudo, дээр дурдсанчлан. Энэ нь тохиргооны алхамын командуудыг хүчингүй болгох бөгөөд ингэснээр та жишээ болон тестийг агуулсан дараах тушаалыг ашиглан тохиргоог өөрчилж болно.

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

Хэрэв та үүнийг хийвэл Waf эхлүүлэх болно sudoэмуляцийн кодын залгуур үүсгэх програмуудыг зөвшөөрөлтэйгээр ажиллуулахын тулд өөрчлөх эх. The Waf Тохиргоо болон бүтээх алхмуудын хувьд өөр олон сонголтууд байдаг. Сонголтуудаа судлахын тулд дараахыг оруулна уу:

$ ./waf --help

Дараагийн хэсэгт бид туршилттай холбоотой зарим сонголтыг ашиглах болно.

Ассемблей профайл

Та хэрхэн тохируулахыг бид аль хэдийн харсан Waf чуулганы хувьд дибаг хийх и оновчтой болсон:

$ ./waf --build-profile=debug

Мөн завсрын угсралтын профиль байдаг, Хувилбар. Сонголт -d -тэй ижил утгатай --build-profile. Бүтээлийн профайл нь бүртгэл, баталгаажуулалт болон хөрвүүлэгчийн оновчлолын шилжүүлэгчийн хэрэглээг хянадаг:

ns-3 сүлжээний симулятор заавар. 3-р бүлэг

Таны харж байгаагаар бүртгэл болон баталгаажуулалт нь зөвхөн дибаг хийх хувилбаруудад боломжтой. Санал болгож буй арга бол дибаг хийх горимд скриптээ хөгжүүлж, дараа нь оновчтой бүтэцтэй профайл дээр давтан гүйлтүүдийг (статистик эсвэл параметрийн өөрчлөлт) гүйцэтгэх явдал юм.

Хэрэв танд зөвхөн тодорхой бүтээх профайл дээр ажиллах код байгаа бол Code Wrapper макро ашиглана уу:

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

Өгөгдмөл, Waf газрууд бүтээх сан дахь олдворуудыг бүтээх. Та сонголтыг ашиглан өөр гаралтын лавлахыг зааж өгч болно - -outЖишээ нь:

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

Үүнийг бүтээх профайлтай хослуулснаар та янз бүрийн эмхэтгэлийн сонголтуудын хооронд амархан шилжиж болно:

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

Энэ нь танд хамгийн сүүлийн үеийн угсралтыг дахин бичих шаардлагагүйгээр олон чуулгантай ажиллах боломжийг олгодог. Та өөр профайл руу шилжих үед, Waf бүгдийг бүрэн дахин эмхэтгэхгүйгээр зөвхөн үүнийг л эмхэтгэх болно.

Бүтээлийн профайлыг ийм байдлаар солихдоо тохиргооны сонголт болгонд ижил байдлаар өгөхөөс болгоомжлох хэрэгтэй. Хэд хэдэн орчны хувьсагчийг тодорхойлох нь алдаанаас зайлсхийхэд тусална:

$ 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

Эмхэтгэгчид ба тугнууд

Дээрх жишээнүүдэд Waf ns-3-г бүтээхдээ GCC-ийн C++ хөрвүүлэгчийг ашигладаг ( g ++). Гэсэн хэдий ч та хэрэглэж буй зүйлээ өөрчилж болно Waf CXX орчны хувьсагчийг тодорхойлох замаар C++ хөрвүүлэгч. Жишээлбэл, C++ хөрвүүлэгчийг ашиглахын тулд Clang, clang++,

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

Үүнтэй адилаар та тохируулж болно Waf ашиглан тараагдсан эмхэтгэлийг ашиглах distcc:

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

Distcc болон тархсан эмхэтгэлийн талаарх дэлгэрэнгүй мэдээллийг Баримт бичгийн хэсгээс төслийн хуудаснаас авах боломжтой. Ns-3-г тохируулахдаа хөрвүүлэгчийн туг нэмэхийн тулд CXXFLAGS_EXTRA орчны хувьсагчийг ашиглана уу.

тохиргоо

Waf системийн өөр өөр газар номын санг суулгахад ашиглаж болно. Анхдагч байдлаар, эмхэтгэсэн номын сангууд болон гүйцэтгэх файлууд нь лавлахад байрладаг барих, мөн Waf эдгээр номын сан болон гүйцэтгэгдэх файлуудын байршлыг мэддэг тул өөр хаана ч номын санг суулгах шаардлагагүй.

Хэрэв хэрэглэгчид бүтээх лавлахаас гадуур суулгахыг илүүд үзвэл тэд тушаалыг ажиллуулж болно ./waf суулгах. Суулгахад зориулсан өгөгдмөл угтвар нь / usr / localТиймээс ./waf суулгах программуудыг суулгана / usr / local / bin, номын сангууд / usr / local / lib болон толгой файлууд дотор байна /usr/local/include. Супер хэрэглэгчийн эрхийг ихэвчлэн өгөгдмөл угтвараар тохируулах шаардлагатай байдаг тул ердийн тушаал байх болно sudo ./waf суулгах. Эхлэх үед Waf эхлээд бүтээх лавлах доторх хуваалцсан номын сангуудыг ашиглахаар сонгож, дараа нь локал орчинд тохируулсан номын сангуудын зам дагуух сангуудыг хайж олох болно. Тиймээс систем дээр номын санг суулгахдаа зөв номын санг ашиглаж байгаа эсэхийг шалгах нь зүйтэй. Хэрэглэгчид тохиргооны явцад сонголтыг дамжуулж өөр угтвартай суулгахаар сонгож болно --prefixЖишээ нь:

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

Хэрэв дараа нь бүтээсний дараа хэрэглэгч суулгах командыг оруулна ./waf, угтварыг ашиглана /opt/local.

баг ./waf clean суулгацыг ашиглах бол төслийг дахин тохируулахын өмнө ашиглах ёстой Waf өөр угтвар дор.

Тиймээс ns-3 ашиглахын тулд залгах шаардлагагүй болно ./waf install. Ихэнх хэрэглэгчдэд энэ тушаал хэрэггүй, учир нь Waf нь одоогийн номын сангуудыг бүтээх лавлахаас авах боловч зарим хэрэглэгчид ns-3 лавлахаас гадуурх программуудтай ажиллахтай холбоотой бол энэ нь ашигтай байж магадгүй юм.

Ваф ганц бие

ns-3 эхийн модны дээд түвшинд зөвхөн нэг Waf скрипт байдаг. Ажиллаж эхэлмэгц та лавлахад маш их цаг зарцуулах болно scratch/ эсвэл илүү гүн рүүsrc/... мөн тэр үед гүйх хэрэгтэй Waf. Та зүгээр л хаана байгаагаа санаж, гүйж чадна Waf дараах байдлаар:

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

гэхдээ энэ нь уйтгартай, алдаа гаргах магадлалтай тул илүү сайн шийдлүүд байна. Нэг нийтлэг арга бол текст засварлагчийг ашиглах явдал юм emacs буюу VIM, хоёр терминал сесс нээгдсэн бөгөөд нэг нь ns-3-ийг бүтээхэд, хоёр дахь нь эх кодыг засварлахад ашиглагддаг. Хэрэв танд байгаа бол галт тэрэг, тэгвэл орчны хувьсагч дараахад тусална:

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

$ cd scratch 
$ waff build

Модулийн санд ийм улиг болсон waf скрипт нэмэх сонирхолтой байж магадгүй exec ../../waf. Битгий тэгээч. Энэ нь шинээр эхэлж буй хүмүүсийн хувьд төөрөгдөл бөгөөд муу хийгдсэн тохиолдолд угсралтын алдааг илрүүлэхэд хэцүү байдаг. Дээр үзүүлсэн шийдлүүд нь ашиглах ёстой зам юм.

3.5 Туршилт ns-3

Та скриптийг ажиллуулснаар ns-3 түгээлтийн нэгжийн тестүүдийг ажиллуулж болно ./test.py:

$ ./test.py

Эдгээр туршилтуудыг зэрэгцүүлэн явуулдаг Waf. Эцэст нь та дараах мессежийг харах болно.

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

Энэ нь valgrind-ийн эвдрэл, эвдрэл, алдааг тодорхойлох чухал мессеж бөгөөд кодтой холбоотой асуудал эсвэл хэрэгсэл, код хоорондын үл нийцэх байдлыг илтгэнэ.

Та мөн эцсийн гаралтыг харах болно Waf болон тест бүрийг ажиллуулж буй шалгагч нь дараах байдалтай харагдана:

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)

Энэ тушаалыг ихэвчлэн хэрэглэгчид ns-3 түгээлт зөв хийгдсэн эсэхийг хурдан шалгахын тулд ажиллуулдаг. ("PASS: ..." мөрүүдийн дараалал өөр байж болохыг анхаарна уу, энэ нь хэвийн үзэгдэл юм. Хамгийн чухал нь тайлангийн төгсгөлд байгаа хураангуй мөрөнд бүх шалгалт тэнцсэн, шалгалт амжилтгүй болсон эсвэл осолдсонгүй гэдгийг харуулж байна.) Тэгээд Wafболон test.py Машины боломжтой процессорын цөм дээрх ажлыг зэрэгцүүлэх болно.

3.6 Скриптийг ажиллуулах

Бид ихэвчлэн скриптүүдийг хяналтан дор ажиллуулдаг Waf. Энэ нь бүтээх системд хуваалцсан номын сангийн замыг зөв тохируулж, номын сангууд ажиллах үед ашиглах боломжтой эсэхийг баталгаажуулах боломжийг олгодог. Програмыг ажиллуулахын тулд зүгээр л ашиглана уу Waf параметртэй - -run. Хаа сайгүй байдаг програмын ns-3-тай тэнцэх программыг ажиллуулъя Сайн байна уу Дэлхийдараахыг бичээд:

$ ./waf --run hello-simulator

Waf эхлээд програм зөв хийгдсэн эсэхийг шалгаж, шаардлагатай бол бүтээх болно. Дараа нь Waf дараах гаралтыг гаргах программыг гүйцэтгэнэ.

Hello Simulator

Баяр хүргэе! Та одоо ns-3 хэрэглэгч боллоо!

Хэрэв үр дүн харагдахгүй бол би яах ёстой вэ?

Хэрэв та мессеж харвал WafЭнэ нь бүтээц амжилттай дууссаныг харуулж байгаа боловч та гаралтыг харахгүй байна "Сайн уу симулятор", дараа нь [Build-with-Waf] хэсэгт та бүтээх горимоо сольсон байх магадлалтай. оновчтой болсон, гэхдээ горим руу буцахаа больсон дибаг хийх. Энэхүү зааварт ашигласан консолын бүх гаралт нь бүртгэл хөтлөх тусгай ns-3 бүрэлдэхүүн хэсгийг ашигладаг бөгөөд консолд захиалгат мессежийг хэвлэхэд ашигладаг. Энэ бүрэлдэхүүн хэсгийн гаралт нь оновчтой кодыг эмхэтгэх үед автоматаар идэвхгүй болно - энэ нь "оновчтой" байна. Хэрэв танд "Hello Simulator" гаралт харагдахгүй байвал дараахыг оруулна уу:

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

тохируулах Waf жишээ, тест агуулсан ns-3 програмын дибаг хийх хувилбаруудыг бүтээх. Дараа нь та кодын одоогийн дибаг хийх хувилбарыг бичиж дахин бүтээх хэрэгтэй

$ ./waf

Одоо та програмыг ажиллуулбал сайн уу симулятор, та хүлээгдэж буй үр дүнг харах ёстой.

3.6.1 Тушаалын мөрийн аргументууд

Тушаалын мөрийн аргументуудыг ns-3 програм руу дамжуулахын тулд дараах загварыг ашиглана уу.

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

Солих програмынхаа нэр болон аргументууд руу. Аргумент - -command-template нь Waf нь үндсэндээ командын мөрийг бий болгох жор юм Waf програмыг гүйцэтгэхэд ашигладаг. Waf нь бүтээц дууссан эсэхийг шалгаж, хуваалцсан номын сангийн замыг тохируулж, дараа нь өгөгдсөн тушаалын мөрийн загварыг ашиглаж, гүйцэтгэгдэх файлыг дуудахын тулд %s орлуулагчийн програмын нэрийг орлуулна. Хэрэв та энэ синтаксийг төвөгтэй гэж үзвэл ns-3 програм болон түүний аргументуудыг нэг хашилтанд оруулсан энгийн хувилбар байна:

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

Өөр нэг чухал жишээ бол тестийн багцуудыг сонгон ажиллуулж байна. Mytest гэж нэрлэгддэг тестийн багц байдаг гэж бодъё (үнэндээ байхгүй). Дээр бид ./test.py скриптийг ашиглан хэд хэдэн тестийг зэрэгцүүлэн ажиллуулсан бөгөөд энэ нь туршилтын програмыг дахин дахин дууддаг. туршилтын гүйгч. Дуудлага хийх туршилтын гүйгч нэг тестийг шууд ажиллуулахын тулд:

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

Аргументуудыг хөтөлбөрт шилжүүлэх болно туршилтын гүйгч. Mytest байхгүй тул алдааны мэдэгдэл үүснэ. Боломжтой туршилтын хувилбаруудыг хэвлэхийн тулд дараахыг оруулна уу:

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

3.6.2 Дибаг хийх

ns-3 програмыг дибаглагч гэх мэт өөр хэрэглүүрээр ажиллуулахын тулд (жишээлбэл, gdb) эсвэл санах ойг шалгах хэрэгсэл (жишээлбэл, валгринд), ижил төстэй хэлбэрийг ашиглана уу - -command-template = "…". Жишээлбэл, дибаг хийгч дээр ажиллуулах gdb аргументтай таны hello-simulator ns-3 програм:

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

ns-3 програмын нэр аргументтай хамт ирдэг гэдгийг анхаарна уу - -run, болон удирдлагын хэрэгсэл (энд gdb) нь аргумент дахь анхны тэмдэг юм - -command-template. Сонголт - -args мэдээлэх gdbкомандын мөрийн үлдсэн хэсэг нь "доод" програмд ​​хамаарах болно. (Зарим хувилбарууд gdb сонголтыг ойлгохгүй байна - -args. Энэ тохиолдолд програмын аргументуудыг устгана уу - -command-template болон тушаалын багцыг ашиглана уу gdb нум.) Бид энэ болон өмнөх жорыг нэгтгэж, дибаг хийгчийн дор туршилтыг явуулж болно:

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

3.6.3 Ажлын лавлах

Вафыг ns-3 модны дээд хэсэгт байрлах байрлалаас нь хөөргөх хэрэгтэй. Энэ хавтас нь гаралтын файлуудыг бичих ажлын лавлах болно. Гэхдээ та эдгээр файлыг ns-3 эх модны гадна байлгахыг хүсвэл яах вэ? Аргумент ашиглах - -cwd:

$ ./waf --cwd=...

Та ажлын лавлахдаа гаралтын файлуудыг авах нь илүү тохиромжтой байж магадгүй юм. Энэ тохиолдолд дараах шууд бус арга хэмжээ тус болно.

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

Тушаалын өмнөх хувилбарын энэхүү чимэглэл нь одоогийн ажлын лавлахыг хадгалж, лавлах руу очно Wafтэгээд зааварчилдаг Waf програмыг эхлүүлэхийн өмнө хадгалсан одоогийн ажлын лавлах руу буцаан өөрчлөх. Бид багийг дурдаж байна - -cwd Бүрэн байдлыг хангахын тулд ихэнх хэрэглэгчид дээд түвшний лавлахаас Waf програмыг ажиллуулж, тэндээс гаралтын файлуудыг үүсгэдэг.

Үргэлжлэл: 4-р бүлэг

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх