Ns-3 tarmoq simulyatori bo'yicha qo'llanma. 3-bob

Ns-3 tarmoq simulyatori bo'yicha qo'llanma. 3-bob
1,2-bob

3 Boshlash
3.1 Umumiy ko'rinish
3.2 Old shartlar
3.2.1 ns-3 versiyasini manba arxivi sifatida yuklab olish
3.3 Git yordamida ns-3 ni yuklab olish
3.3.1 Pishiriq yordamida ns-3 ni yuklash
3.4 Yig'ish ns-3
3.4.1 build.py bilan qurish
3.4.2 Bake bilan qurish
3.4.3 Waf bilan qurish
3.5 Sinov ns-3
3.6 Skriptni ishga tushirish
3.6.1 Buyruqlar qatori argumentlari
3.6.2 Nosozliklarni tuzatish
3.6.3 Ishchi katalog

bob 3

Ishni boshlash

Ushbu bob o'quvchini hech qachon ns-3 o'rnatmagan kompyuterdan boshlashga tayyorlash uchun mo'ljallangan. U qo'llab-quvvatlanadigan platformalar, zarur shartlar, ns-3 ni qanday olish, ns-3 ni qanday qurish va oddiy dasturlarni qurish va ishga tushirishni qanday tekshirishni o'z ichiga oladi.

3.1 Umumiy ko'rinish

Ns-3 simulyatori hamkorlikdagi dasturiy kutubxonalar tizimi sifatida qurilgan. Yig'ish jarayonida foydalanuvchi dasturlari kodi ushbu kutubxonalar bilan bog'lanadi. Maxsus dasturlarni yozish uchun C++ yoki Python dasturlash tillaridan foydalaniladi.

Ns-3 manba kodi sifatida taqsimlanadi, ya'ni maqsadli tizim avval kutubxonalarni qurish va keyin foydalanuvchi dasturini yaratish uchun dasturiy ta'minotni ishlab chiqish muhitiga ega bo'lishi kerak. Asosan, ns-3 ma'lum bir tizim uchun tayyor kutubxonalar sifatida taqsimlanishi mumkin va kelajakda ular shu tarzda taqsimlanishi mumkin. Ammo bugungi kunda ko'p foydalanuvchilar o'z ishlarini ns-3 ning o'zini tahrirlash orqali bajaradilar, shuning uchun kutubxonalarni yaratish uchun manba kodiga ega bo'lish foydalidir. Agar kimdir operatsion tizimlar uchun tayyor kutubxonalar va paketlarni yaratish bilan shug'ullanmoqchi bo'lsa, pochta ro'yxatiga murojaat qiling. ns-ishlab chiquvchilar.

Keyinchalik, ns-3 ni yuklab olish va qurishning uchta usulini ko'rib chiqamiz. Birinchisi, asosiy saytdan rasmiy versiyani yuklab olish va qurish. Ikkinchisi - asosiy ns-3 o'rnatishning ishlab chiqish versiyalarining nusxalarini tanlash va yig'ish. Uchinchisi, ns-3 uchun qo'shimcha kengaytmalarni yuklash uchun qo'shimcha qurish vositalaridan foydalanish. Asboblar biroz boshqacha bo'lgani uchun biz har birini ko'rib chiqamiz.

Tajribali Linux foydalanuvchilari nima uchun ns-3 paket menejeridan foydalanadigan boshqa kutubxonalar kabi paket sifatida taqdim etilmagani haqida hayron bo'lishi mumkin? Turli xil Linux distribyutorlari (masalan, Debian) uchun ikkilik paketlar mavjud bo'lsa-da, ko'pchilik foydalanuvchilar kutubxonalarni tahrir qiladilar va ns-3 ni o'zlari qayta qurishlari kerak, shuning uchun manba kodini mavjud bo'lish qulay. Shu sababli, biz manbadan o'rnatishga e'tibor qaratamiz.

Ko'pgina ilovalar uchun ns-3 huquqlari ildiz kerak emas, imtiyozsiz foydalanuvchi hisobidan foydalanish tavsiya etiladi.

3.2 Old shartlar

Mavjud ns-3 kutubxonalarining butun to'plami uchinchi tomon kutubxonalariga bir qator bog'liqliklarga ega, lekin ko'pincha ns-3 bir nechta umumiy (ko'pincha sukut bo'yicha o'rnatiladigan) komponentlarni qo'llab-quvvatlash bilan tuzilishi va ishlatilishi mumkin: C++ kompilyatori, Python, manba kodi muharriri (masalan, energiya, emacs yoki tutilish) va agar ishlab chiqish omborlari ishlatilsa, Git versiyasini boshqarish tizimlari. Ko'pchilik birinchi marta foydalanuvchilarning konfiguratsiyasida ba'zi ns-3 ilg'or funksiyalari etishmayotganligi haqida xabar berilsa, tashvishlanishga hojat yo'q, lekin to'liq o'rnatishni xohlaydiganlar uchun loyiha juda ko'p foydali maslahatlar va fokuslarga ega sahifalarni o'z ichiga olgan wikini taqdim etadi. Bunday sahifalardan biri O'rnatish sahifasi bo'lib, unda turli tizimlar uchun o'rnatish ko'rsatmalari mavjud: https://www.nsnam.org/wiki/Installation.

Ushbu viki-ning Oldindan shartlar bo'limi umumiy ns-3 opsiyalarini qo'llab-quvvatlash uchun qaysi paketlar talab qilinishini tushuntiradi va shuningdek, ularni Linux yoki macOS-ning umumiy versiyalariga o'rnatish uchun ishlatiladigan buyruqlarni beradi.

Siz ns-3 wiki sahifasini yoki asosiy veb-saytini o'rganish uchun ushbu imkoniyatdan foydalanishingiz mumkin: https://www.nsnam.org, chunki u erda juda ko'p ma'lumotlar mavjud. ns-3 ning so'nggi versiyasidan (ns-3.29) boshlab, ns-3 ni ishga tushirish uchun quyidagi vositalar talab qilinadi:

Asboblar to'plami/versiyasi

  • C++ kompilyatori
    clang++ yoki g++ (g++ versiyasi 4.9 yoki undan yuqori)
  • Python
    python2 versiyasi >= 2.7.10 yoki python3 versiyasi >=3.4
  • borib
    har qanday so'nggi versiya (GitLab.com saytida ns-3 ga kirish uchun)
  • tar
    har qanday oxirgi versiya (ns‑3 versiyasini ochish uchun)
  • bunzip2
    har qanday so'nggi versiya (ns‑3 versiyasini ochish uchun)

Pythonning standart versiyasini tekshirish uchun kiriting python -V. G++ versiyasini tekshirish uchun kiriting g++ -v. Agar biron bir vosita etishmayotgan yoki juda eski bo'lsa, ns-3 wiki sahifasidagi o'rnatish qo'llanmasiga qarang.

Bundan buyon biz o'quvchi Linux, MacOS yoki Linux emulyatorida ishlayotganini va hech bo'lmaganda yuqoridagi vositalarga ega ekanligini taxmin qilamiz.

3.2.1 ns-3 versiyasini manba arxivi sifatida yuklab olish

Bu ns-3 ning eng so'nggi versiyasi va paketli versiyalarini yuklab olish va ular bilan tajriba o'tkazmoqchi bo'lgan yangi foydalanuvchi uchun harakat yo'nalishi. ns-3 relizlari siqilgan manba arxivlari sifatida nashr etiladi, ba'zan deyiladi tarbol. tarbol bir nechta fayllar birlashtirilgan maxsus dasturiy ta'minot arxiv formatidir. Arxiv odatda siqiladi. orqali ns-3 yuklash jarayoni tarbol oddiy, siz shunchaki relizni tanlashingiz, yuklab olishingiz va uni ochishingiz kerak.

Faraz qilaylik, siz foydalanuvchi sifatida mahalliy katalogda ns-3 ni yaratmoqchisiz ish maydoni. Siz Linux konsoliga quyidagilarni kiritish orqali nashrning ishchi nusxasini olishingiz mumkin (albatta, tegishli versiya raqamlarini almashtirgan holda)

$ 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 

Yuqorida ishlatilgan yordam dasturiga e'tibor bering wget, bu Internetdan ob'ektlarni yuklab olish uchun buyruq qatori vositasi. Agar siz uni o'rnatmagan bo'lsangiz, buning uchun brauzeringizdan foydalanishingiz mumkin.

Ushbu qadamlardan so'ng sizni ns-allinone-3.29 katalogiga olib boradi, u erda siz bir nechta fayl va kataloglarni ko'rishingiz kerak.

$ 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

Endi siz ns-3 tayanch taqsimotini yaratishga tayyorsiz va ns-3 qurish bo'limiga o'tishingiz mumkin.

3.3 Git yordamida ns-3 ni yuklab olish

Ns-3 kodi GitLab.com saytidagi Git omborlarida mavjud https://gitlab.com/nsnam/. Guruh nsnam ochiq kodli loyiha tomonidan ishlatiladigan turli xil omborlarni birlashtiradi.

Git repozitariylaridan foydalanishni boshlashning eng oson yo'li bu muhitni ajratish yoki klonlashdir ns-3-allinon. Bu eng ko'p ishlatiladigan ns-3 quyi tizimlarini yuklash va yig'ishni boshqaradigan skriptlar to'plami. Agar siz Git-da yangi bo'lsangiz, "vilkalar" va "klon" atamalari sizga notanish bo'lishi mumkin; Agar shunday bo'lsa, GitLab.com saytida joylashgan omborni oddiygina klonlashni (o'z nusxangizni yaratishni) tavsiya qilamiz:

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

Ushbu bosqichda katalogingizning ko'rinishi ns-3-allinon yuqorida tavsiflangan relizlar arxivi katalogidan biroz farq qiladi. Bu shunday ko'rinishi kerak:

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

Iltimos, skript mavjudligini unutmang download.py, bu qo'shimcha ravishda ns-3 va unga qo'shilgan manba kodini chiqaradi. Bu erda tanlovingiz bor: yoki eng so'nggi ns-3 ishlanma suratini yuklab oling:

$ python download.py

yoki bayroq yordamida ns-3 versiyasini afzal ko'ring -n chiqarish raqamini ko'rsatish uchun:

$ python download.py -n ns-3.29

Ushbu qadamdan so'ng katalogga o'ting ns-3-allinon qo'shimcha omborlar yuklab olinadi ns-3, pishirib, pybindgen и netanim.

nota
Toza Ubuntu16.04 bo'lgan mashinada men buyruqni bunga o'zgartirishim kerak edi: $ sudo python3 download.py -n ns-3.29 (keyingi o'rinlarda tarjimonning eslatmalari).

3.3.1 Pishiriq yordamida ns-3 ni yuklash

Yuqoridagi ikkita usul (manba arxivi yoki ombori ns-3-allinon Git orqali) bir nechta qo'shimchalar bilan eng oddiy ns-3 o'rnatilishini olish uchun foydalidir (pybindgen Python ulanishlarini yaratish va netanim tarmoq animatsiyasi uchun). Ns-3-allinoneda sukut bo'yicha taqdim etilgan uchinchi ombor chaqiriladi pishirib.

Pishiriq ns-3 loyihasi uchun ishlab chiqilgan bir nechta omborlardan dasturiy ta'minotni muvofiqlashtirish vositasidir. Pishiriq ns-3 ning ishlab chiqish versiyalarini olish, shuningdek, ns-3 tarqatishning asosiy versiyasi kengaytmalarini yuklab olish va yaratish uchun ishlatilishi mumkin, masalan, atrof-muhit To'g'ridan-to'g'ri kodni bajarish, CradleNetwork simulyatsiya beshigi, yangi Python bog'lashlari va turli ns-3 "ilovalar" ni yaratish qobiliyati.

nota
CradleNetwork Simulation Cradle - bu tarmoq simulyatori ichida haqiqiy TCP/IP tarmoq steklaridan foydalanish imkonini beruvchi ramka.

Agar siz ns-3 o'rnatishingiz qo'shimcha yoki qo'shimcha funktsiyalarga ega bo'lishini kutsangiz, ushbu o'rnatish yo'liga o'tishingiz mumkin.

Eng so'nggi ns-3 versiyalarida Pishiriq smola chiqarilishiga qo'shildi. Relizda joriy dasturiy ta'minot versiyalarini chiqarish vaqtida yuklab olish imkonini beruvchi konfiguratsiya fayli mavjud. Bu, masalan, versiya Pishiriqns-3.29 versiyasi bilan tarqatilgan ns-3 yoki undan oldingi versiyalar uchun komponentlarni olish uchun ishlatilishi mumkin, lekin keyingi versiyalar uchun komponentlarni olish uchun foydalanilmaydi (agar paket tavsifi fayli bo'lsa). bakeconf.xml yangilanmagan).

Siz eng so'nggi nusxasini ham olishingiz mumkin pishiribLinux konsolingizga quyidagi buyruqni kiritish orqali (sizda Git o'rnatilgan bo'lsa):

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

Git buyrug'ini ishga tushirganingizda, siz quyidagi kabi narsalarni ko'rishingiz kerak:

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.

Buyruq tugagandan so'ng klon nomli katalogga ega bo'lishingiz kerak pishirib, uning mazmuni quyidagicha ko'rinishi kerak:

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

E'tibor bering, siz bir nechta Python skriptlarini, Python modulini yuklagansiz pishirib va XML konfiguratsiya fayli. Keyingi qadam, siz tanlagan ns-3 distributivini yuklab olish va qurish uchun ushbu skriptlardan foydalanishdir. Bir nechta moslashtirish maqsadlari mavjud:

  1. ns-3.29: nashrga mos keladigan modul; u tarballdagi versiyaga o'xshash komponentlarni yuklab oladi;

  2. ns-3-dev: shunga o'xshash modul, lekin rivojlanish daraxtidagi koddan foydalanish;

  3. ns-allinon-3.29: Click marshrutlash va Network Simulation Cradle, ns-3 uchun Openflow kabi boshqa qo'shimcha funktsiyalarni o'z ichiga olgan modul.

  4. ns-3-allinon: modulning chiqarilgan versiyasiga o'xshash allinon, lekin ishlab chiqish kodi uchun.

nota
bosing — routerlarni yaratish uchun modulli dasturiy taʼminot arxitekturasi.

Openflow - dasturiy ta'minot bilan aniqlangan tarmoq texnologiyasini amalga oshiruvchi, marshrutizatorlar va kalitlar tomonidan ma'lumotlar tarmog'i orqali uzatiladigan ma'lumotlarni qayta ishlash jarayonini boshqarish protokoli.

Joriy rivojlanish surati (chiqarishsiz) ns-3 ni quyidagi manzilda topish mumkin:https://gitlab.com/nsnam/ns-3-dev.git.

Ishlab chiquvchilar ushbu omborlarni doimiy ish tartibida saqlashga harakat qilishadi, lekin ular ishlab chiqish sohasida va chiqarilmagan kodni o'z ichiga oladi, shuning uchun siz yangi xususiyatlardan foydalanishni rejalashtirmasangiz, rasmiy versiyani tanlang.

Kodning so'nggi versiyasini omborlar ro'yxatini ko'rib chiqish yoki ns-3 Releases veb-sahifasiga o'tish orqali topishingiz mumkin:https://www.nsnam.org/releases/ va oxirgi versiya havolasini bosing. Ushbu misolda biz ns-3.29 bilan davom etamiz.

Endi biz kerakli ns-3 komponentlarini olish uchun asbobdan foydalanamiz Pishiriq. Keling, asar haqida bir necha kirish so'zlarini aytaylik Pishiriq.

Bake paket manbalarini katalogga yuklash orqali ishlaydi manba va kutubxonalarni o'rnatish katalogiga o'rnatish. Pishiriq ikkilik faylga murojaat qilish orqali ishga tushirilishi mumkin, lekin agar siz ishga tushirishni xohlasangiz Pishiriq yuklab olingan katalogdan emas, yo'lni qo'shish tavsiya etiladi pishirib yo'lingizga (PATH muhit o'zgaruvchisi), masalan, quyidagi kabi (Linux bash shell uchun misol). "Pishirish" katalogiga o'ting va keyin quyidagi muhit o'zgaruvchilarini o'rnating:

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

Bu dasturni joylashtiradi bake.py qobiq yo'liga va boshqa dasturlarga o'zi yaratgan bajariladigan fayllar va kutubxonalarni topishga imkon beradi pishirib. Ba'zi foydalanish holatlarida pishirib, yuqorida tavsiflangan PATH va PYTHONPATH sozlamalari talab qilinmaydi, lekin ns-3-allinonning to'liq tuzilishi (qo'shimcha paketlar bilan) odatda buni talab qiladi.

Ishchi katalogingizga o'ting va konsolga quyidagilarni kiriting:

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

Keyin so'raymiz Pishiriq turli komponentlarni yuklash uchun etarli vositalar mavjudligini tekshiring. Terish:

$ ./bake.py check

Siz quyidagi kabi narsalarni ko'rishingiz kerak:

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

Xususan, Mercurial, CVS, Git va Bazaar kabi yuklash vositalari ushbu bosqichda juda muhim, chunki ular bizga kodni olish imkonini beradi. Shu nuqtada, etishmayotgan vositalarni tizimingiz uchun odatiy tarzda o'rnating (agar qanday qilishni bilsangiz) yoki yordam uchun tizim administratoriga murojaat qiling.

Keyin dasturni yuklab olishga harakat qiling:

$ ./bake.py download

natija shunday bo'lishi kerak:

>> 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 uchta manba yuklab olinganligini anglatadi. Endi manba katalogiga o'ting va ls kiriting; Siz ko'rishingiz kerak:

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

Endi siz ns-3 distributivini yaratishga tayyormiz.

3.4 Yig'ish ns-3

Ns-3-ni yuklab olishda bo'lgani kabi, ns-3-ni yaratishning bir necha yo'li mavjud. Biz ta'kidlamoqchi bo'lgan asosiy narsa shundaki, ns-3 deb nomlangan qurish vositasi yordamida qurilgan Wafquyida tasvirlangan. Aksariyat foydalanuvchilar u bilan ishlaydi Waf, lekin siz boshlashingiz yoki murakkabroq tuzilmalarni tashkil qilishingizga yordam beradigan bir nechta qulay skriptlar mavjud. Shuning uchun, iltimos, o'qishdan oldin Waf, qarang build.py va bilan yig'ish pishirib.

3.4.1 build.py bilan qurish

E'tibor bering! Ushbu qurish bosqichi faqat yuqorida tavsiflanganidek olingan manba arxiv versiyasidan mavjud; va git yoki bake orqali yuklab olinmaydi.

Chiqarish arxivi bilan ishlashda tarbol, in ns-3-allinon Komponentlarni yig'ishni osonlashtiradigan qulay skript mavjud. U build.py deb ataladi. Ushbu dastur loyihani siz uchun eng foydali tarzda o'rnatadi. Ammo shuni yodda tutingki, ns-3 bilan yanada rivojlangan sozlash va ishlash odatda ns-3 ning o'z qurish tizimi Waf dan foydalanishni o'z ichiga oladi, bu qo'llanmada keyinroq taqdim etiladi.

Agar siz yuklab olgan bo'lsangiz tarbol, keyin katalogingizda ~/ish maydoni kabi nomga ega katalog ns-allinon-3.29. Quyidagilarni kiriting:

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

Qo'ng'iroq qilganda build.py Ushbu qo'llanmada ns-3 da sukut bo'yicha tuzilmagan misollar va testlarni yaratish uchun biz buyruq qatori argumentlaridan foydalandik. Odatiy bo'lib, dastur barcha mavjud modullarni ham quradi. Keyin, agar xohlasangiz, ns-3 ni misollar va testlarsiz qurishingiz yoki ishingiz uchun kerak bo'lmagan modullarni chiqarib tashlashingiz mumkin.

Skript tomonidan ko'rsatilgan kompilyatorning ko'plab chiqish xabarlarini ko'rasiz, chunki u siz yuklagan turli qismlarni yaratadi. Avval skript animatorni yaratishga harakat qiladi netanim, keyin bog'lovchi generator pybindgen va nihoyat ns-3. Jarayon tugagach, siz quyidagilarni ko'rishingiz kerak:

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

Ro'yxatning oxirgi uchta qatorida biz qurilmagan modullar haqida xabarni ko'ramiz:

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

Bu shunchaki tashqi kutubxonalarga bog'liq bo'lgan ba'zi ns-3 modullari qurilmagan bo'lishi mumkin yoki ushbu konfiguratsiya uchun ularni qurish talab qilinmasligini anglatadi. Bu simulyator yig'ilmagan yoki yig'ilgan modullar to'g'ri ishlamaydi degani emas.

3.4.2 Bake bilan qurish

Agar siz loyiha omborlaridan manba kodini olish uchun yuqoridagi bake-dan foydalansangiz, undan ns-3-ni yaratishda foydalanishni davom ettirishingiz mumkin. Terish:

$ ./bake.py build

va siz shunga o'xshash narsani ko'rishingiz kerak:

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

Tooltip: "bake.py deploy" ga qo'ng'iroq qilib, bir vaqtning o'zida yuklab olish va qurish bosqichlarini ham bajarishingiz mumkin.

Barcha komponentlarni yig'ish muvaffaqiyatsiz bo'lishi mumkin, ammo agar komponent kerak bo'lmasa, yig'ish davom etadi. Masalan, yaqinda portativlik muammosi shu edi castxml asbob yordamida yig'ilishi mumkin pishirib barcha platformalarda emas. Bunday holda, bunday xabar paydo bo'ladi:

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

Biroq, castxml faqat yangilangan Python ulanishlarini yaratmoqchi bo'lsangiz kerak. Aksariyat foydalanuvchilar uchun bunga ehtiyoj yo'q (hech bo'lmaganda ular ns-3 ni o'zgartirmaguncha), shuning uchun bunday ogohlantirishlarni hozircha e'tiborsiz qoldirish mumkin.

Agar u bajarilmasa, quyidagi buyruq sizga etishmayotgan bog'liqliklar haqida maslahat beradi:

$ ./bake.py show

Siz yaratmoqchi bo'lgan paketlarning turli xil bog'liqliklari ro'yxatga olinadi.

3.4.3 Waf bilan qurish

Shu paytgacha ns-3 ni yaratishni boshlash uchun biz skriptdan foydalanganmiz build.py, yoki asbob pishirib. Ushbu vositalar ns-3 yaratish va kutubxonalarni saqlash uchun foydalidir. Aslida, qurish uchun ular qurish vositasidan foydalanadilar Waf ns-3 katalogidan. Waf ns-3 manba kodi bilan o'rnatilgan. Aksariyat foydalanuvchilar tezda sozlash va yig'ish uchun ns‑3 dan to'g'ridan-to'g'ri foydalanishga o'tishadi Waf. Davom etish uchun avval yaratgan ns-3 katalogiga o'ting.

Bu hozircha qat'iy talab qilinmaydi, lekin bir oz orqaga chekinish va loyiha konfiguratsiyasiga qanday o'zgartirishlar kiritishni ko'rish foydali bo'ladi. Siz qilishingiz mumkin bo'lgan eng foydali konfiguratsiya o'zgarishi kodning optimallashtirilgan versiyasini yaratishdir. Odatiy bo'lib, siz loyihangizni disk raskadrovka versiyasini yaratish uchun sozlagansiz. Keling, optimallashtirilgan qurilishni yaratish loyihasini ko'rib chiqaylik. Waf-ga misollar va testlarni o'z ichiga olgan optimallashtirilgan tuzilmalarni yaratishi kerakligini tushuntirish uchun siz quyidagi buyruqlarni bajarishingiz kerak bo'ladi:

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

Bu ishga tushadi Waf mahalliy katalogdan tashqarida (sizga qulaylik uchun). Birinchi buyruq oldingi tuzilishdan tozalanadi, bu odatda juda zarur emas, lekin bu yaxshi amaliyotdir (shuningdek, quyida qurilish profillarini ko'ring); bu katalogda joylashgan avval yaratilgan kutubxonalar va ob'ekt fayllarini o'chiradi qurmoq/. Loyiha qayta sozlanganda va qurish tizimi turli bog'liqliklarni tekshirganda, siz quyidagiga o'xshash natijani ko'rishingiz kerak:

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)

Yuqoridagi ro'yxatning oxirgi qismiga e'tibor bering. Ba'zi ns-3 opsiyalari sukut bo'yicha yoqilmagan yoki to'g'ri ishlashi uchun tizim yordamini talab qiladi. Masalan, XmlTo ni yoqish uchun tizimda kutubxona mavjud bo'lishi kerak libxml-2.0. Agar ushbu kutubxona topilmasa va tegishli ns-3 funksiyasi yoqilmagan bo'lsa, xabar ko'rsatiladi. Bundan tashqari, buyruqni ishlatish mumkinligini unutmang sudo muayyan dasturlar uchun "ishlash vaqtida guruh identifikatorini o'rnatish" suid bitini o'rnatish. U sukut bo'yicha yoqilmagan va shuning uchun bu xususiyat "yoqilmagan" sifatida ko'rinadi. Nihoyat, yoqilgan variantlar ro'yxatini olish uchun foydalaning Waf parametr bilan --check-config.

Keling, orqaga qaytaylik va misollar va testlarni o'z ichiga olgan disk raskadrovka tuzilishiga qaytaylik.

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

Qurilish tizimi endi sozlandi va siz oddiygina yozish orqali ns-3 dasturlarining disk raskadrovka versiyalarini yaratishingiz mumkin:

$ ./waf

Yuqoridagi qadamlar sizni ns-3 tizimining bir qismini ikki marta qurishga majbur qilgan bo'lishi mumkin, ammo endi siz konfiguratsiyani qanday o'zgartirishni va optimallashtirilgan kodni yaratishni bilasiz.

Berilgan loyiha konfiguratsiyasi uchun qaysi profil faol ekanligini tekshirish uchun buyruq mavjud:

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

Yuqoridagi stsenariy build.py argumentlarni ham qo‘llab-quvvatlaydi --enable-examples и --enable-tests, lekin boshqa variantlar Waf to'g'ridan-to'g'ri qo'llab-quvvatlamaydi. Masalan, bu ishlamaydi:

$ ./build.py --disable-python

reaktsiya quyidagicha bo'ladi:

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

Shu bilan birga, maxsus operator - - orqali qo'shimcha parametrlarni o'tkazish uchun ishlatilishi mumkin vafshuning uchun yuqoridagi buyruq o'rniga quyidagi buyruq ishlaydi:

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

chunki u asosiy buyruqni yaratadi ./waf configure --disable-python. Bu yerda yana bir qancha tanishtiruvchi maslahatlar Waf.

Qurilish xatolarini qayta ishlash

ns-3 relizlari umumiy Linux va MacOS distributorlarida chiqarilgan paytda mavjud bo'lgan eng so'nggi C++ kompilyatorlarida sinovdan o'tkaziladi. Biroq, vaqt o'tishi bilan yangi distributorlar yangi kompilyatorlar bilan chiqariladi va bu yangi kompilyatorlar ogohlantirishlarga nisbatan ko'proq pedantik bo'lishadi. ns-3 o'zining tuzilishini barcha ogohlantirishlarni xato sifatida ko'rib chiqish uchun sozlaydi, shuning uchun ba'zida siz eskiroq versiyani yangiroq tizimda ishlatayotgan bo'lsangiz, kompilyator ogohlantirishi qurilishni to'xtatishi mumkin.

Masalan, ilgari Fedora 3.28 uchun ns‑28 relizi mavjud edi, u yangi asosiy versiyani o'z ichiga oladi. gcc (gcc-8). Gtk3.28+ o'rnatilgan Fedora 28 ostida ns-2 yoki undan oldingi versiyalarini yaratishda quyidagi xatolik yuz beradi:

/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 dan boshlab nashrlarda, d Waf bu muammolarni hal qilish uchun imkoniyat mavjud. Bu g++ va clang++ da "-Werror" bayrog'ini o'rnatishni o'chirib qo'yadi. Bu "--disable-werror" variantidir va konfiguratsiya paytida qo'llanilishi kerak:

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

Sozlang yoki yig'ing

Ba'zi buyruqlar Waf faqat konfiguratsiya bosqichida ma'noga ega va ba'zilari faqat qurish bosqichida amal qiladi. Misol uchun, agar siz ns-3 emulyatsiya xususiyatlaridan foydalanmoqchi bo'lsangiz, bit sozlamalarini yoqishingiz mumkin janub foydalanish sudo, yuqorida tavsiflanganidek. Bu konfiguratsiya qadam buyruqlarini bekor qiladi va shuning uchun siz misollar va testlarni o'z ichiga olgan quyidagi buyruq yordamida konfiguratsiyani o'zgartirishingiz mumkin.

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

Agar buni qilsangiz Waf ishga tushiradi sudoemulyatsiya kodi soketini yaratish dasturlarini ruxsatnomalar bilan ishlashga o'zgartirish ildiz. The Waf Konfiguratsiya va qurish bosqichlari uchun ko'plab boshqa variantlar mavjud. Variantlar bilan tanishish uchun quyidagilarni kiriting:

$ ./waf --help

Keyingi bo'limda biz test bilan bog'liq ba'zi variantlardan foydalanamiz.

Yig'ish profillari

Qanday qilib sozlashingiz mumkinligini allaqachon ko'rib chiqdik Waf yig'ilishlar uchun debug и optimallashtirilgan:

$ ./waf --build-profile=debug

Shuningdek, oraliq montaj profili mavjud, ozod qilish. Variant -d bilan sinonim hisoblanadi --build-profile. Qurilish profili jurnallar, tasdiqlar va kompilyatorni optimallashtirish kalitlaridan foydalanishni nazorat qiladi:

Ns-3 tarmoq simulyatori bo'yicha qo'llanma. 3-bob

Ko'rib turganingizdek, jurnalga yozish va tasdiqlash faqat disk raskadrovka tuzilmalarida mavjud. Tavsiya etilgan amaliyot - disk raskadrovka rejimida skriptingizni ishlab chiqish, keyin optimallashtirilgan tuzilish profilida takroriy ishga tushirish (statistik ma'lumotlar yoki parametrlarni o'zgartirish uchun) amalga oshirish.

Agar sizda faqat ma'lum qurilish profillarida ishlashi kerak bo'lgan kodingiz bo'lsa, Code Wrapper makrosidan foydalaning:

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

Odatiy, Waf o'rnatish katalogidagi qurilish artefaktlarini joylashtiradi. Variantdan foydalanib, boshqa chiqish katalogini belgilashingiz mumkin - -out, masalan:

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

Buni qurilish profillari bilan birlashtirib, siz turli xil kompilyatsiya variantlari o'rtasida osongina almashishingiz mumkin:

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

Bu har safar eng so'nggi yig'ilishni qayta yozmasdan bir nechta yig'ilishlar bilan ishlash imkonini beradi. Boshqa profilga o'tganingizda, Waf hamma narsani to'liq qayta kompilyatsiya qilmasdan, faqat uni kompilyatsiya qiladi.

Qurilish profillarini shu tarzda almashtirganingizda, har safar bir xil konfiguratsiya opsiyalarini berishga ehtiyot bo'lishingiz kerak. Bir nechta muhit o'zgaruvchilarini aniqlash xatolardan qochishga yordam beradi:

$ 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 va bayroqlar

Yuqoridagi misollarda Waf ns-3 qurish uchun GCC dan C++ kompilyatoridan foydalanadi ( g ++). Biroq, siz foydalanadigan narsani o'zgartirishingiz mumkin Waf C++ kompilyatori, CXX muhit o'zgaruvchisini aniqlash orqali. Masalan, C++ kompilyatoridan foydalanish uchun Clang, clang++,

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

Xuddi shu tarzda siz sozlashingiz mumkin Waf yordamida taqsimlangan kompilyatsiyadan foydalanish distcc:

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

Distcc va tarqatilgan kompilyatsiya haqida ko'proq ma'lumotni Hujjatlar bo'limidagi loyiha sahifasida topishingiz mumkin. Ns-3 ni sozlashda kompilyator bayroqlarini qo'shish uchun CXXFLAGS_EXTRA muhit o'zgaruvchisidan foydalaning.

sozlama

Waf tizimning turli joylarida kutubxonalarni o'rnatish uchun ishlatilishi mumkin. Odatiy bo'lib, kompilyatsiya qilingan kutubxonalar va bajariladigan fayllar katalogda joylashgan qurish, va Waf bu kutubxonalar va bajariladigan fayllarning joylashuvini bilganligi sababli, kutubxonalarni boshqa joyga o'rnatishga hojat yo'q.

Agar foydalanuvchilar o'rnatish katalogidan tashqarida o'rnatishni afzal ko'rsalar, ular buyruqni ishga tushirishlari mumkin ./waf o'rnatish. O'rnatish uchun standart prefiks / usr / local, shuning uchun ./waf o'rnatish dasturlarni o'rnatadi / Ushr / mahalliy / ming, kutubxonalar / Ushr / mahalliy / lib va sarlavha fayllari /usr/local/include. Superuser huquqlari odatda standart prefiks bilan o'rnatilishi kerak, shuning uchun odatiy buyruq bo'ladi sudo ./waf o'rnating. Ishga tushganda, Waf birinchi navbatda qurish katalogidagi umumiy kutubxonalardan foydalanishni tanlaydi, so'ngra mahalliy muhitda sozlangan kutubxonalarga yo'l bo'ylab kutubxonalarni qidiradi. Shunday qilib, tizimga kutubxonalarni o'rnatayotganda, to'g'ri kutubxonalardan foydalanilayotganligini tekshirish yaxshi amaliyotdir. Foydalanuvchilar konfiguratsiya paytida opsiyadan o'tish orqali boshqa prefiks bilan o'rnatishni tanlashlari mumkin --prefix, masalan:

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

Agar keyinroq, qurgandan so'ng, foydalanuvchi o'rnatish buyrug'ini kiritsa ./waf, prefiks ishlatiladi /opt/local.

komanda ./waf clean Agar o'rnatish ishlatilsa, loyihani qayta sozlashdan oldin foydalanish kerak Waf boshqa prefiks ostida.

Shunday qilib, ns-3 dan foydalanish uchun qo'ng'iroq qilishning hojati yo'q ./waf install. Aksariyat foydalanuvchilarga bu buyruq kerak emas, chunki Waf joriy kutubxonalarni qurish katalogidan oladi, lekin ba'zi foydalanuvchilar faoliyati ns-3 katalogidan tashqari dasturlar bilan ishlashni o'z ichiga olsa, buni foydali deb topishi mumkin.

Vaf yagona

Ns-3 manba daraxtining yuqori darajasida faqat bitta Waf skripti mavjud. Ishlay boshlaganingizdan so'ng siz katalogda ko'p vaqt o'tkazasiz scratch/ yoki chuqurroqsrc/... va ayni paytda yugurish kerak Waf. Siz faqat qaerda ekanligingizni eslab, yugurishingiz mumkin Waf quyida bayon qilinganidek:

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

lekin bu zerikarli va xatolarga moyil bo'ladi, shuning uchun yaxshiroq echimlar mavjud. Umumiy usullardan biri matn muharriridan foydalanishdir emacs yoki energiya, unda ikkita terminal seansi ochiladi, biri ns-3 ni qurish uchun, ikkinchisi esa manba kodini tahrirlash uchun ishlatiladi. Agar sizda bo'lsa tarbol, keyin muhit o'zgaruvchisi yordam berishi mumkin:

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

$ cd scratch 
$ waff build

Modul katalogiga arzimas waf skriptini qo'shish jozibador bo'lishi mumkin exec ../../waf. Iltimos, qilmang. Bu yangi boshlanuvchilarni chalkashtirib yuboradi va agar noto'g'ri bajarilgan bo'lsa, uni aniqlash qiyin bo'lgan qurilish xatolariga olib keladi. Yuqorida ko'rsatilgan echimlar ishlatilishi kerak bo'lgan yo'ldir.

3.5 Sinov ns-3

Skriptni ishga tushirish orqali ns-3 tarqatish birligi testlarini bajarishingiz mumkin ./test.py:

$ ./test.py

Ushbu testlar parallel ravishda amalga oshiriladi Waf. Oxir-oqibat, siz quyidagi xabarni ko'rishingiz kerak:

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

Bu kod bilan bog'liq muammolarni yoki asboblar va kod o'rtasidagi nomuvofiqlikni ko'rsatuvchi valgrind ishdan chiqishi, ishdan chiqishi yoki xatolarini aniqlash uchun muhim xabar.

Bundan tashqari, yakuniy natijani ko'rasiz Waf va har bir testni o'tkazadigan tester quyidagicha ko'rinadi:

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)

Ushbu buyruq odatda ns-3 taqsimoti to'g'ri tuzilganligini tezda tekshirish uchun foydalanuvchilar tomonidan boshqariladi. (E'tibor bering, "PASS: ..." qatorlarining tartibi boshqacha bo'lishi mumkin, bu normaldir. Muhimi, hisobot oxiridagi xulosa qatori barcha testlardan o'tganligini ko'rsatadi; hech qanday test muvaffaqiyatsiz yoki ishdan chiqqan.) Va Wafva test.py mashinaning mavjud protsessor yadrolari bo'ylab ishni parallellashtiradi.

3.6 Skriptni ishga tushirish

Biz odatda skriptlarni nazorat ostida boshqaramiz Waf. Bu qurish tizimiga umumiy kutubxona yoʻllari toʻgʻri oʻrnatilganligini va kutubxonalar ish vaqtida mavjud boʻlishini taʼminlash imkonini beradi. Dasturni ishga tushirish uchun oddiygina foydalaning Waf parametr bilan - -run. Keling, hamma joyda mavjud bo'lgan dasturning ns-3 ekvivalentini ishga tushiramiz Salom Dunyoquyidagini kiritish orqali:

$ ./waf --run hello-simulator

Waf birinchi navbatda dasturning to'g'ri tuzilganligini tekshiradi va kerak bo'lganda tuzadi. Keyin Waf quyidagi natijani chiqaradigan dasturni bajaradi.

Hello Simulator

Tabriklaymiz! Siz endi ns-3 foydalanuvchisisiz!

Natijalarni ko'rmasam nima qilishim kerak?

Agar siz xabarlarni ko'rsangiz Wafqurish muvaffaqiyatli yakunlanganligini ko'rsatadi, lekin siz natijani ko'rmaysiz "Salom simulyator", keyin [Waf bilan qurish] bo'limida siz qurish rejimini o'zgartirgan bo'lishingiz mumkin. optimallashtirilgan, lekin rejimga qaytishni o'tkazib yubordim debug. Ushbu qo'llanmada foydalanilgan barcha konsol chiqishi jurnalga yozishni amalga oshiradigan va konsolga maxsus xabarlarni chop etish uchun ishlatiladigan maxsus ns-3 komponentidan foydalanadi. Optimallashtirilgan kod tuzilganda ushbu komponentdan chiqish avtomatik ravishda o'chiriladi - u "optimallashtirilgan". Agar siz "Salom simulyatori" chiqishini ko'rmasangiz, quyidagilarni kiriting:

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

sozlash uchun Waf misollar va testlarni o'z ichiga olgan ns-3 dasturlarining disk raskadrovka versiyalarini yaratish. Keyin kodni kiritish orqali joriy disk raskadrovka versiyasini qayta tiklashingiz kerak

$ ./waf

Endi dasturni ishga tushirsangiz salom-simulyator, kutilgan natijani ko'rishingiz kerak.

3.6.1 Buyruqlar qatori argumentlari

Buyruqlar qatori argumentlarini ns-3 dasturiga o'tkazish uchun quyidagi naqshdan foydalaning:

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

O'zgartiring dasturingiz nomiga va argumentlarga. Dalil - -command-template uchun Waf aslida buyruq qatorini yaratish uchun retseptdir Waf dasturni bajarish uchun ishlatiladi. Waf tuzilish tugallanganligini tekshiradi, umumiy kutubxona yoʻllarini oʻrnatadi, soʻngra taqdim etilgan buyruq qatori shablonidan foydalanadi va bajariladigan faylni chaqirish uchun %s toʻldiruvchisi uchun dastur nomini almashtiradi. Agar siz ushbu sintaksisni murakkab deb bilsangiz, ns-3 dasturi va uning argumentlari bitta tirnoq ichiga olingan oddiyroq versiya mavjud:

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

Yana bir foydali misol test to'plamlarini tanlab ishlatishdir. Aytaylik, mytest deb nomlangan test to'plami mavjud (aslida yo'q). Yuqorida biz ./test.py skriptidan bir nechta testlarni parallel ravishda bajarish uchun foydalandik, bu test dasturini qayta-qayta chaqiradi. sinovchi. Qo'ng'iroq qiling sinovchi to'g'ridan-to'g'ri bitta testni o'tkazish uchun:

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

Argumentlar dasturga uzatiladi sinovchi. Mytest mavjud emasligi sababli, xato xabari yaratiladi. Mavjud sinovchi opsiyalarini chop etish uchun quyidagilarni kiriting:

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

3.6.2 Nosozliklarni tuzatish

ns-3 dasturlarini boshqa yordamchi dastur ostida ishga tushirish, masalan, tuzatuvchi (masalan, gdb) yoki xotirani tekshirish vositasi (masalan, valgrind), shunga o'xshash shakldan foydalaning - -command-template = "…". Masalan, tuzatuvchida ishlash uchun gdb argumentlar bilan salom-simulyator ns-3 dasturingiz:

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

E'tibor bering, ns-3 dasturi nomi argument bilan birga keladi - -run, va boshqaruv yordam dasturi (bu yerda gdb) argumentdagi birinchi tokendir - -command-template. Variant - -args xabar beradi gdbbuyruq satrining qolgan qismi "pastki" dasturga tegishli ekanligi. (Ba'zi versiyalar gdb variantni tushunmayapman - -args. Bunday holda, dastur argumentlarini o'chirib tashlang - -command-template va buyruqlar to'plamidan foydalaning gdb args.) Nosozliklarni tuzatuvchi ostida sinovni o‘tkazish uchun biz ushbu va oldingi retseptni birlashtira olamiz:

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

3.6.3 Ishchi katalog

Waf ns-3 daraxtining tepasida joylashgan joydan ishga tushirilishi kerak. Bu papka chiqish fayllari yoziladigan ishchi katalogga aylanadi. Ammo bu fayllarni ns-3 manba daraxtidan tashqarida saqlamoqchi bo'lsangiz nima bo'ladi? Argumentdan foydalaning - -cwd:

$ ./waf --cwd=...

Ishchi katalogingizda chiqish fayllarini olish qulayroq bo'lishi mumkin. Bunday holda, quyidagi bilvosita harakat yordam beradi:

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

Buyruqning oldingi versiyasining bunday bezaklari joriy ishchi katalogni saqlaydi, katalogga o'tadi Wafva keyin ko'rsatma beradi Waf ishchi katalogni dasturni ishga tushirishdan oldin saqlangan joriy ishchi katalogga qaytarish uchun. Biz jamoani eslatib o'tamiz - -cwd To'liqlik uchun ko'pchilik foydalanuvchilar shunchaki yuqori darajadagi katalogdan Waf-ni ishga tushiradilar va u erda chiqish fayllarini yaratadilar.

Davomi: 4-bob

Manba: www.habr.com

a Izoh qo'shish