ns-3 ikẹkọ nẹtiwọki simulator. Ori 3

ns-3 ikẹkọ nẹtiwọki simulator. Ori 3
ori 1,2

3 Bibẹrẹ
3.1 Akopọ
3.2 Awọn ibeere
3.2.1 Gbigbasilẹ ns-3 itusilẹ bi ibi ipamọ orisun
3.3 Gbigba ns-3 nipa lilo Git
3.3.1 Loading ns-3 lilo Beki
3.4 Apejọ ns-3
3.4.1 Ilé pẹlu build.py
3.4.2 Ilé pẹlu Beki
3.4.3 Kọ pẹlu Waf
3.5 Igbeyewo ns-3
3.6 Ṣiṣe awọn akosile
3.6.1 Òfin ila ariyanjiyan
3.6.2 N ṣatunṣe aṣiṣe
3.6.3 Ṣiṣẹ liana

Abala 3

Bibẹrẹ

Ipin yii jẹ ipinnu lati mura oluka silẹ lati bẹrẹ pẹlu kọnputa ti o le ma ti fi ns-3 sori ẹrọ rara. O ni wiwa awọn iru ẹrọ atilẹyin, awọn ibeere pataki, bii o ṣe le gba ns-3, bii o ṣe le kọ ns-3, ati bii o ṣe le ṣe idanwo kikọ rẹ ati ṣiṣe awọn eto ti o rọrun.

3.1 Akopọ

Simulator ns-3 jẹ itumọ bi eto ti awọn ile-ikawe sọfitiwia ifowosowopo. Lakoko apejọ, koodu ti awọn eto olumulo ni asopọ pẹlu awọn ile-ikawe wọnyi. Awọn ede siseto C ++ tabi Python ni a lo lati kọ awọn eto aṣa.

Ns-3 ti pin bi koodu orisun, eyiti o tumọ si pe eto ibi-afẹde gbọdọ ni agbegbe idagbasoke sọfitiwia lati le kọkọ kọ awọn ile-ikawe ati lẹhinna kọ eto olumulo naa. Ni opo, ns-3 le pin kaakiri bi awọn ile-ikawe ti a ti ṣetan fun eto kan pato, ati ni ọjọ iwaju wọn le pin kaakiri ni ọna yii. Ṣugbọn ni ode oni ọpọlọpọ awọn olumulo n ṣe iṣẹ wọn gangan nipa ṣiṣatunṣe ns-3 funrararẹ, nitorinaa o wulo lati ni koodu orisun lati kọ awọn ile-ikawe naa. Ti ẹnikẹni ba fẹ lati mu iṣẹ ti ṣiṣẹda awọn ile-ikawe ti a ti ṣetan ati awọn idii fun awọn ọna ṣiṣe, jọwọ kan si atokọ ifiweranṣẹ ns- kóòdù.

Nigbamii, a yoo wo awọn ọna mẹta lati ṣe igbasilẹ ati kọ ns-3. Ohun akọkọ ni lati ṣe igbasilẹ ati kọ itusilẹ osise lati aaye akọkọ. Ekeji ni yiyan ati apejọ awọn ẹda ti awọn ẹya idagbasoke ti fifi sori ns-3 ipilẹ. Ẹkẹta ni lati lo awọn irinṣẹ kikọ afikun lati gbe awọn amugbooro diẹ sii fun ns-3. A yoo lọ nipasẹ ọkọọkan nitori awọn irinṣẹ jẹ iyatọ diẹ.

Awọn olumulo Linux ti o ni iriri le ṣe iyalẹnu idi ti ns-3 ko ṣe pese bi package bii ọpọlọpọ awọn ile-ikawe miiran ti o lo oluṣakoso package? Botilẹjẹpe awọn idii alakomeji wa fun ọpọlọpọ awọn pinpin Linux (fun apẹẹrẹ Debian), ọpọlọpọ awọn olumulo pari ni ṣiṣatunṣe awọn ile-ikawe ati nini lati tun ns-3 ṣe funrararẹ, nitorinaa nini koodu orisun ti o wa ni ọwọ. Fun idi eyi, a yoo dojukọ lori fifi sori lati orisun.

Fun julọ awọn ohun elo ns-3 ẹtọ root ko nilo, o gba ọ niyanju lati lo akọọlẹ olumulo ti ko ni anfani.

3.2 Awọn ibeere

Gbogbo eto ti awọn ile-ikawe ns-3 ti o wa ni nọmba awọn igbẹkẹle lori awọn ile-ikawe ẹni-kẹta, ṣugbọn fun apakan pupọ julọ ns-3 ni a le kọ ati lo pẹlu atilẹyin fun ọpọlọpọ awọn paati ti o wọpọ (fi sori ẹrọ nigbagbogbo nipasẹ aiyipada) awọn paati: C ++ alakojo, Python, olootu koodu orisun (fun apẹẹrẹ, Vim, emacs tabi oṣupa) ati, ti o ba ti lo awọn ibi ipamọ idagbasoke, awọn ọna ṣiṣe iṣakoso ẹya Git. Pupọ julọ awọn olumulo akoko-akọkọ kii yoo nilo lati ṣe aibalẹ ti iṣeto iṣeto wọn ṣe ijabọ diẹ ninu awọn ẹya ilọsiwaju ti ns-3 sonu, ṣugbọn fun awọn ti o fẹ fifi sori ẹrọ ni kikun, iṣẹ akanṣe naa pese wiki kan ti o pẹlu awọn oju-iwe pẹlu ọpọlọpọ awọn imọran ati ẹtan to wulo. Ọkan iru oju-iwe bẹẹ ni oju-iwe fifi sori ẹrọ, pẹlu awọn ilana fifi sori ẹrọ fun awọn ọna ṣiṣe lọpọlọpọ, wa ni: https://www.nsnam.org/wiki/Installation.

Abala Awọn ibeere ti wiki yii ṣalaye iru awọn idii ti o nilo lati ṣe atilẹyin awọn aṣayan ns-3 ti o wọpọ ati tun pese awọn aṣẹ ti a lo lati fi sii wọn lori awọn adun ti o wọpọ ti Lainos tabi macOS.

O le lo anfani yii lati ṣawari oju-iwe wiki ns-3 tabi oju opo wẹẹbu akọkọ: https://www.nsnam.org, nitori ọpọlọpọ alaye wa nibẹ. Bibẹrẹ pẹlu ẹya tuntun ti ns-3 (ns-3.29), awọn irinṣẹ atẹle ni a nilo lati ṣiṣẹ ns-3:

Irinṣẹ Package / Ẹya

  • C ++ alakojo
    clang++ tabi g++ (g++ version 4.9 tabi ju bẹẹ lọ)
  • Python
    python2 version>= 2.7.10, tabi Python3 version>=3.4
  • Git
    eyikeyi ẹya tuntun (lati wọle si ns-3 lori GitLab.com)
  • oda
    eyikeyi titun ti ikede (fun ṣiṣi silẹ ns-3 itusilẹ)
  • bunzip2
    eyikeyi titun ti ikede (fun ṣiṣi silẹ ns-3 itusilẹ)

Lati ṣayẹwo ẹya aiyipada ti Python, tẹ python -V. Lati ṣayẹwo ẹyà g++, tẹ g++ -v. Ti awọn irinṣẹ eyikeyi ba nsọnu tabi ti dagba ju, jọwọ tọka si itọsọna fifi sori ẹrọ lori oju-iwe wiki ns-3.

Lati isisiyi lọ, a ro pe oluka naa nṣiṣẹ Lainos, MacOS, tabi emulator Linux kan, ati pe o ni o kere ju awọn irinṣẹ loke.

3.2.1 Gbigbasilẹ ns-3 itusilẹ bi ibi ipamọ orisun

Eyi ni ipa iṣe fun olumulo tuntun ti o fẹ ṣe igbasilẹ ati ṣe idanwo pẹlu idasilẹ tuntun ati awọn ẹya package ti ns-3. Awọn idasilẹ ns-3 jẹ atẹjade bi awọn ile-ipamọ orisun fisinuirindigbindigbin, nigbakan pe bọọlu afẹsẹgba. bọọlu afẹsẹgba jẹ ọna kika ibi ipamọ sọfitiwia pataki kan ninu eyiti ọpọlọpọ awọn faili ti wa ni idapo papọ. Awọn pamosi ti wa ni maa fisinuirindigbindigbin. ns-3 ilana bata nipasẹ bọọlu afẹsẹgba o rọrun, o kan nilo lati yan itusilẹ kan, ṣe igbasilẹ ati ṣii rẹ.

Jẹ ki a ro pe iwọ, gẹgẹbi olumulo kan, fẹ lati kọ ns-3 ni itọsọna agbegbe ti a pe aaye iṣẹ. O le gba ẹda iṣẹ ti itusilẹ nipa titẹ atẹle wọnyi sinu console Linux (fidipo awọn nọmba ẹya ti o yẹ, nitorinaa)

$ 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 

San ifojusi si ohun elo ti a lo loke wget, eyiti o jẹ ọpa laini aṣẹ fun gbigba awọn nkan lati Intanẹẹti. Ti o ko ba ti fi sii, o le lo ẹrọ aṣawakiri rẹ fun eyi.

Ni atẹle awọn igbesẹ wọnyi yoo mu ọ lọ si itọsọna ns-allinone-3.29, nibẹ o yẹ ki o wo awọn faili pupọ ati awọn ilana

$ 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

O ti ṣetan lati kọ pinpin ipilẹ ns-3 ati pe o le lọ si apakan lori kikọ ns-3.

3.3 Gbigba ns-3 nipa lilo Git

Koodu ns-3 wa ninu awọn ibi ipamọ Git lori GitLab.com ni https://gitlab.com/nsnam/. Ẹgbẹ nsnam mu awọn ibi ipamọ lọpọlọpọ ti a lo nipasẹ iṣẹ akanṣe orisun ṣiṣi.

Ọna to rọọrun lati bẹrẹ lilo awọn ibi ipamọ Git ni lati orita tabi oniye ayika ns-3-allinone. Eyi jẹ akojọpọ awọn iwe afọwọkọ ti o ṣakoso ikojọpọ ati apejọ ti awọn ọna ṣiṣe ti ns-3 ti o wọpọ julọ lo. Ti o ba jẹ tuntun si Git, awọn ofin “orita” ati “clone” le jẹ aimọ si ọ; ti o ba jẹ bẹ, a ṣeduro pe ki o kan ẹda oniye (ṣe ẹda tirẹ) ibi ipamọ ti o wa lori GitLab.com bii eyi:

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

Ni ipele yii, wiwo ti itọsọna rẹ ns-3-allinone die-die ti o yatọ lati itusilẹ liana ti salaye loke. O yẹ ki o dabi iru eyi:

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

Jọwọ ṣe akiyesi pe iwe afọwọkọ kan wa gbaa lati ayelujara.py, eyi ti yoo ṣe afikun ns-3 jade ati koodu orisun ti o tẹle. Nibi o ni yiyan: boya ṣe igbasilẹ aworan idagbasoke ns-3 tuntun:

$ python download.py

tabi fẹ itusilẹ ns-3 nipa lilo asia -n lati tọka nọmba itusilẹ:

$ python download.py -n ns-3.29

Lẹhin igbesẹ yii si itọsọna naa ns-3-allinone afikun awọn ibi ipamọ yoo gba lati ayelujara ns-3, beki, pybindgen и netanimu.

Daakọ
Lori ẹrọ kan pẹlu Ubuntu16.04 mimọ, Mo nilo lati yi aṣẹ pada si eyi: $ sudo python3 download.py -n ns-3.29 (lẹhin eyi awọn akọsilẹ onitumọ).

3.3.1 Loading ns-3 lilo Beki

Awọn ọna meji ti o wa loke (ipamọ orisun tabi ibi ipamọ ns-3-allinone nipasẹ Git) jẹ iwulo fun gbigba fifi sori ns-3 ti o rọrun julọ pẹlu awọn addons pupọ (pybindgen lati se ina Python abuda ati netanimu fun iwara nẹtiwọki). Ibi ipamọ kẹta ti a pese nipasẹ aiyipada ni ns-3-allinone ni a pe beki.

Beki jẹ ohun elo fun ṣiṣe iṣọpọ sọfitiwia lati awọn ibi ipamọ pupọ, ti o dagbasoke fun iṣẹ akanṣe ns-3. Beki le ṣee lo lati gba awọn ẹya idagbasoke ti ns-3, bakannaa lati ṣe igbasilẹ ati kọ awọn amugbooro ti ẹya ipilẹ ti pinpin ns-3, gẹgẹbi agbegbe Taara Code ipaniyan, CradleNetwork Simulation Jojolo, agbara lati ṣẹda titun Python abuda ati orisirisi ns-3 "apps".

Daakọ
CradleNetwork Simulation Jojolo jẹ ilana ti o fun ọ laaye lati lo awọn akopọ nẹtiwọọki TCP/IP gidi inu simulator nẹtiwọki kan.

Ti o ba nireti fifi sori ns-3 rẹ lati ni ilọsiwaju tabi awọn ẹya afikun, o le tẹle ọna fifi sori ẹrọ yii.

Ninu awọn idasilẹ ns-3 tuntun Beki ti a fi kun oda Tu. Itusilẹ pẹlu faili iṣeto ni ti o fun ọ laaye lati ṣe igbasilẹ awọn ẹya sọfitiwia lọwọlọwọ ni akoko idasilẹ. Iyẹn ni, fun apẹẹrẹ, ẹya naa Beki, eyiti o pin pẹlu itusilẹ ns-3.29, le ṣee lo lati gba awọn paati pada fun itusilẹ ns-3 tabi tẹlẹ, ṣugbọn ko ṣee lo lati gba awọn paati fun awọn idasilẹ nigbamii (ti faili apejuwe package ba jẹ bakeconf.xml ko imudojuiwọn).

O tun le gba ẹda tuntun bekinipa titẹ aṣẹ wọnyi sinu console Linux rẹ (ti o ro pe o ti fi Git sori ẹrọ):

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

Nigbati o ba nṣiṣẹ aṣẹ git, o yẹ ki o wo nkan bi atẹle:

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.

Lẹhin ti aṣẹ naa ti pari oniye o yẹ ki o ni a liana ti a npè ni beki, awọn akoonu ti eyi ti o yẹ ki o wo nkankan bi yi:

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

Ṣe akiyesi pe o ti kojọpọ ọpọlọpọ awọn iwe afọwọkọ Python, module Python ti a npè ni beki ati faili iṣeto XML kan. Igbesẹ ti o tẹle ni lati lo awọn iwe afọwọkọ wọnyi lati ṣe igbasilẹ ati kọ pinpin ns-3 ti o fẹ. Orisirisi awọn ibi-afẹde isọdi wa:

  1. ns-3.29: module ti o baamu si idasilẹ; yoo ṣe igbasilẹ awọn ohun elo ti o jọra si itusilẹ ni bọọlu afẹsẹgba;

  2. ns-3-dev: module iru, ṣugbọn lilo koodu lati igi idagbasoke;

  3. ns-allinone-3.29: A module ti o ba pẹlu miiran afikun awọn ẹya ara ẹrọ bi Tẹ afisona ati Network Simulation Jojolo, Openflow fun ns-3.

  4. ns-3-allinone: iru si awọn Tu version of awọn module allone, ṣugbọn fun koodu idagbasoke.

Daakọ
Tẹ - faaji sọfitiwia apọjuwọn fun ṣiṣẹda awọn olulana.

Ṣiṣan ṣiṣii jẹ ilana fun ṣiṣakoso ilana ti sisẹ data ti o tan kaakiri lori nẹtiwọọki data nipasẹ awọn olulana ati awọn iyipada, imuse imọ-ẹrọ nẹtiwọọki asọye sọfitiwia.

Fọto idagbasoke lọwọlọwọ (ti kii ṣe itusilẹ) ns-3 ni a le rii ni:https://gitlab.com/nsnam/ns-3-dev.git.

Awọn Difelopa gbiyanju lati tọju awọn ibi ipamọ wọnyi ni ilana iṣẹ ṣiṣe deede, ṣugbọn wọn wa ni agbegbe idagbasoke ati ni koodu ti ko tu silẹ, nitorinaa ti o ko ba gbero lati lo awọn ẹya tuntun, lẹhinna yan itusilẹ osise.

O le wa ẹya tuntun ti koodu naa nipa lilọ kiri lori atokọ ti awọn ibi ipamọ, tabi nipa lilọ si oju-iwe wẹẹbu ns-3 Awọn idasilẹ:https://www.nsnam.org/releases/ ati tite lori titun ti ikede ọna asopọ. Ni apẹẹrẹ yii a yoo tẹsiwaju pẹlu ns-3.29.

Bayi, lati gba awọn paati ns-3 ti a nilo, a yoo lo ọpa naa Beki. Jẹ ki a sọ awọn ọrọ ifọrọwerọ diẹ nipa iṣẹ naa Beki.

Beki ṣiṣẹ nipa ikojọpọ awọn orisun package sinu ilana kan orisun ati fifi sori ẹrọ awọn ile-ikawe sinu itọsọna kikọ. Beki le ti wa ni ṣiṣe awọn nipa referencing awọn alakomeji, ṣugbọn ti o ba ti o ba fẹ lati ṣiṣe Beki kii ṣe lati inu itọsọna eyiti o ṣe igbasilẹ, o ni imọran lati ṣafikun ọna si beki si ọna rẹ (ayipada ayika PATH), fun apẹẹrẹ bi atẹle (apẹẹrẹ fun Linux bash ikarahun). Lọ si itọsọna “bake” lẹhinna ṣeto awọn oniyipada ayika wọnyi:

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

Eyi yoo gbe eto naa yan.py si ọna ikarahun ati pe yoo gba awọn eto miiran laaye lati wa awọn iṣẹ ṣiṣe ati awọn ile-ikawe ti o ṣẹda beki. Ni diẹ ninu awọn igba lilo beki, Eto PATH ati PYTHONPATH ti a ṣalaye loke ko nilo, ṣugbọn pipe pipe ti ns-3-allinone (pẹlu awọn idii afikun) nigbagbogbo nilo rẹ.

Lọ si itọsọna iṣẹ rẹ ki o tẹ atẹle naa sinu console:

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

Nigbamii ti a yoo beere Beki ṣayẹwo ti o ba ti a ni to irinṣẹ lati fifuye awọn orisirisi irinše. Pe:

$ ./bake.py check

O yẹ ki o wo nkan bi atẹle:

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

Ni pataki, awọn irinṣẹ ikojọpọ bii Mercurial, CVS, Git ati Bazaar ṣe pataki ni igbesẹ yii bi wọn ṣe gba wa laaye lati gba koodu naa. Ni aaye yii, fi sori ẹrọ awọn irinṣẹ ti o padanu ni ọna deede fun eto rẹ (ti o ba mọ bii) tabi kan si alabojuto eto rẹ fun iranlọwọ.

Nigbamii, gbiyanju igbasilẹ sọfitiwia naa:

$ ./bake.py download

Abajade yẹ ki o jẹ nkan bi:

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

Eyi yoo tumọ si pe awọn orisun mẹta ti gba lati ayelujara. Bayi lọ si itọsọna orisun ati tẹ ls; O yẹ ki o wo:

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

Bayi o ti ṣetan lati kọ pinpin ns-3.

3.4 Apejọ ns-3

Bi pẹlu gbigba ns-3, awọn ọna pupọ lo wa lati kọ ns-3. Ohun akọkọ ti a fẹ lati fi rinlẹ ni pe ns-3 ti wa ni itumọ ti lilo ohun elo ti a npe ni Wafṣàpèjúwe ni isalẹ. Pupọ awọn olumulo yoo ṣiṣẹ pẹlu Waf, ṣugbọn awọn iwe afọwọkọ ti o ni ọwọ diẹ wa lati ṣe iranlọwọ fun ọ lati bẹrẹ tabi ṣeto awọn kikọ idiju diẹ sii. Nitorina jọwọ, ṣaaju ki o to ka nipa Waf, wo kọ.py ati ijọ pẹlu beki.

3.4.1 Ilé pẹlu build.py

Išọra Igbesẹ kikọ yii wa nikan lati ẹya ibi ipamọ orisun ti o gba bi a ti salaye loke; ati pe ko ṣe igbasilẹ nipasẹ git tabi beki.

Nigbati o ba n ṣiṣẹ pẹlu iwe ifisilẹ bọọlu afẹsẹgbaninu ns-3-allinone Iwe afọwọkọ ti o ni ọwọ wa ti o le ṣe kikojọpọ awọn paati rọrun. O pe ni build.py. Eto yii yoo ṣeto iṣẹ akanṣe fun ọ ni ọna ti o wulo julọ. Bibẹẹkọ, ṣe akiyesi pe iṣeto ilọsiwaju diẹ sii ati ṣiṣẹ pẹlu ns-3 nigbagbogbo pẹlu lilo ns-3 eto kikọ tirẹ, Waf, eyiti yoo ṣafihan nigbamii ni ikẹkọ yii.

Ti o ba ṣe igbasilẹ nipa lilo bọọlu afẹsẹgba, lẹhinna ninu itọsọna rẹ ~ / aaye iṣẹ a liana pẹlu orukọ kan nkankan bi ns-allinone-3.29. Tẹ atẹle naa:

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

Nigbati o ba n pe kọ.py A lo awọn ariyanjiyan laini aṣẹ lati kọ awọn apẹẹrẹ ati awọn idanwo ti a lo ninu ikẹkọ yii, eyiti ko ṣe nipasẹ aiyipada ni ns-3. Nipa aiyipada, eto naa tun kọ gbogbo awọn modulu ti o wa. Lẹhinna, ti o ba fẹ, o le kọ ns-3 laisi awọn apẹẹrẹ ati awọn idanwo, tabi yọkuro awọn modulu ti ko nilo fun iṣẹ rẹ.

Iwọ yoo rii ọpọlọpọ awọn ifiranṣẹ iṣelọpọ alakojọ ti o han nipasẹ iwe afọwọkọ bi o ṣe kọ awọn oriṣiriṣi awọn ẹya ti o ti kojọpọ. Ni akọkọ iwe afọwọkọ yoo gbiyanju lati kọ Animator netanimu, lẹhinna monomono abuda pybindgen ati nipari ns-3. Nigbati ilana naa ba pari, o yẹ ki o wo atẹle naa:

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

Ninu awọn ila mẹta ti o kẹhin ti atokọ a rii ifiranṣẹ kan nipa awọn modulu ti a ko kọ:

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

Eyi tumọ si pe diẹ ninu awọn modulu ns-3 ti o da lori awọn ile-ikawe ita le ma ti kọ, tabi pe wọn ko nilo lati kọ fun iṣeto yii. Eyi ko tumọ si pe ẹrọ simulator ko ni apejọ tabi pe awọn modulu ti o pejọ kii yoo ṣiṣẹ ni deede.

3.4.2 Ilé pẹlu Beki

Ti o ba lo beki loke lati gba koodu orisun lati awọn ibi ipamọ iṣẹ akanṣe, o le tẹsiwaju lati lo lati kọ ns-3. Pe:

$ ./bake.py build

ati pe o yẹ ki o wo nkan bi:

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

olobo: O tun le ṣe igbasilẹ mejeeji ati kọ awọn igbesẹ ni ẹẹkan nipa pipe “bake.py deploy”.

Ijọpọ gbogbo awọn paati le kuna, ṣugbọn apejọ yoo tẹsiwaju ti paati kan ko ba nilo. Fun apẹẹrẹ, ọrọ gbigbe laipẹ kan ni iyẹn castxml le ti wa ni jọ nipa ọpa beki ko lori gbogbo awọn iru ẹrọ. Ni ọran yii, ifiranṣẹ bii eyi yoo han:

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

Sibẹsibẹ, castxml nilo nikan ti o ba fẹ ṣẹda awọn abuda Python imudojuiwọn. Fun ọpọlọpọ awọn olumulo ko si iwulo fun eyi (o kere ju titi wọn yoo fi yipada ns-3), nitorinaa iru awọn ikilo le jẹ aibikita lailewu fun bayi.

Ti o ba kuna, aṣẹ atẹle yoo fun ọ ni ofiri nipa awọn igbẹkẹle ti o padanu:

$ ./bake.py show

Awọn igbẹkẹle oriṣiriṣi ti awọn idii ti o n gbiyanju lati kọ ni yoo ṣe atokọ.

3.4.3 Kọ pẹlu Waf

Titi di aaye yii, lati bẹrẹ kikọ ns-3, a lo boya iwe afọwọkọ naa kọ.py, tabi irinṣẹ beki. Awọn irinṣẹ wọnyi wulo fun kikọ ns-3 ati mimu awọn ile-ikawe. Ni otitọ, lati kọ wọn ṣiṣẹ ohun elo Kọ Waf lati liana ns-3. Waf fi sori ẹrọ pẹlu koodu orisun ns-3. Pupọ awọn olumulo yarayara lọ si lilo taara lati tunto ati ṣajọ ns-3 naa Waf. Nitorinaa, lati tẹsiwaju, jọwọ lọ si itọsọna ns-3 ti o ṣẹda ni akọkọ.

Eyi ko nilo ni muna ni akoko yii, ṣugbọn yoo wulo lati ṣe sẹhin diẹ ki o wo bi o ṣe le ṣe awọn ayipada si iṣeto iṣẹ akanṣe. Boya iyipada iṣeto ti o wulo julọ ti o le ṣe ni lati ṣẹda ẹya iṣapeye ti koodu naa. Nipa aiyipada, o ti tunto iṣẹ akanṣe rẹ lati kọ ẹya yokokoro kan. Jẹ ki a wo iṣẹ akanṣe kan lati ṣẹda kikọ iṣapeye. Lati ṣe alaye si Waf pe o yẹ ki o ṣe awọn itumọ ti iṣapeye ti o pẹlu awọn apẹẹrẹ ati awọn idanwo, iwọ yoo nilo lati ṣiṣe awọn aṣẹ wọnyi:

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

Eyi yoo ṣe ifilọlẹ Waf ita awọn agbegbe liana (fun rẹ wewewe). Ni igba akọkọ ti pipaṣẹ nu soke lati išaaju Kọ, yi jẹ maa n ko muna pataki, sugbon o jẹ ti o dara iwa (tun wo Kọ awọn profaili ni isalẹ); eyi yoo paarẹ awọn ile-ikawe ti o ṣẹda tẹlẹ ati awọn faili ohun ti o wa ninu itọsọna naa kọ/. Nigbati a ba tunto iṣẹ akanṣe naa ati pe eto kikọ ṣayẹwo ọpọlọpọ awọn igbẹkẹle, o yẹ ki o wo abajade ti o jọra si atẹle naa:

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)

Jọwọ ṣe akiyesi apakan ti o kẹhin ti atokọ loke. Diẹ ninu awọn aṣayan ns-3 ko ṣiṣẹ nipasẹ aiyipada tabi nilo atilẹyin eto lati ṣiṣẹ daradara. Fun apẹẹrẹ, lati mu XmlTo ṣiṣẹ, ile-ikawe gbọdọ wa lori eto naa libxml-2.0. Ti a ko ba ri ile-ikawe yii ati pe iṣẹ ns-3 ti o baamu ko ṣiṣẹ, ifiranṣẹ yoo han. Tun ṣe akiyesi pe o ṣee ṣe lati lo aṣẹ naa sudo lati ṣeto suid bit “ṣeto ID ẹgbẹ ni asiko asiko” fun awọn eto kan. Ko ṣiṣẹ nipasẹ aiyipada ati nitori naa ẹya yii han bi “ko ṣiṣẹ”. Ni ipari, lati gba atokọ ti awọn aṣayan ṣiṣẹ, lo Waf pẹlu paramita --check-config.

Bayi jẹ ki a pada sẹhin ki a yipada pada si kọ yokokoro ti o ni awọn apẹẹrẹ ati awọn idanwo ninu.

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

Eto kikọ ti ṣeto bayi ati pe o le kọ awọn ẹya yokokoro ti awọn eto ns-3 nipa titẹ nirọrun:

$ ./waf

Awọn igbesẹ ti o wa loke le ti fi agbara mu ọ lati kọ apakan ti eto ns-3 lẹẹmeji, ṣugbọn ni bayi o mọ bi o ṣe le yi atunto naa pada ki o kọ koodu iṣapeye.

Lati ṣayẹwo iru profaili wo ni o nṣiṣẹ fun iṣeto iṣẹ akanṣe kan, aṣẹ kan wa:

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

Awọn loke ohn kọ.py tun ṣe atilẹyin awọn ariyanjiyan --enable-examples и --enable-tests, ṣugbọn awọn aṣayan miiran Waf ko ṣe atilẹyin taara. Fun apẹẹrẹ, eyi kii yoo ṣiṣẹ:

$ ./build.py --disable-python

esi yoo jẹ bi eleyi:

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

Sibẹsibẹ, oniṣẹ pataki - - le ṣee lo lati ṣe afikun awọn paramita nipasẹ wafnitorinaa dipo eyi, aṣẹ atẹle yoo ṣiṣẹ:

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

nitori pe o ṣe ipilẹṣẹ aṣẹ akọkọ ./waf atunto --disable-python. Eyi ni diẹ ninu awọn imọran ifarahan diẹ sii nipa Waf.

Mimu Kọ awọn aṣiṣe

Awọn idasilẹ ns-3 jẹ idanwo lori awọn akopọ C ++ tuntun ti o wa ni akoko idasilẹ lori awọn pinpin Linux ati MacOS ti o wọpọ. Bibẹẹkọ, ni akoko pupọ, awọn ipinpinpin titun ti wa ni idasilẹ pẹlu awọn alakojọ tuntun, ati pe awọn olupilẹṣẹ tuntun wọnyi maa n ni itara diẹ sii nipa awọn ikilọ. ns-3 tunto kikọ rẹ lati tọju gbogbo awọn ikilọ bi awọn aṣiṣe, nitorinaa nigbakan ti o ba n ṣiṣẹ ẹya agbalagba lori eto tuntun, ikilọ alakojọ le da kikọ duro.

Fun apẹẹrẹ, itusilẹ tẹlẹ ti ns-3.28 wa fun Fedora 28, eyiti o pẹlu ẹya pataki tuntun kan. gcc (gcc-8). Ṣiṣe idasilẹ ns-3.28 tabi awọn ẹya iṣaaju labẹ Fedora 28, pẹlu Gtk2+ ti fi sori ẹrọ, aṣiṣe atẹle yoo waye:

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

Ninu awọn idasilẹ ti o bẹrẹ lati ns-3.28.1, in Waf aṣayan kan wa lati yanju awọn iṣoro wọnyi. O mu ki o ṣeto asia "-Werror" ni g++ ati clang++. Eyi ni aṣayan "--disable-werror" ati pe o gbọdọ lo lakoko iṣeto:

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

Ṣe atunto tabi ṣajọpọ

Diẹ ninu awọn aṣẹ Waf ni itumo nikan ni iṣeto ni alakoso, ati diẹ ninu awọn ni o wa nikan wulo ninu awọn Kọ alakoso. Fun apẹẹrẹ, ti o ba fẹ lo awọn ẹya emulation ns-3, o le mu eto bit ṣiṣẹ suid lilo sudo, bi a ti salaye loke. Eyi yoo bori awọn aṣẹ igbesẹ atunto, ati nitorinaa o le yi atunto pada nipa lilo aṣẹ atẹle, eyiti o pẹlu awọn apẹẹrẹ ati awọn idanwo.

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

Ti o ba ṣe eyi Waf yoo ṣe ifilọlẹ sudolati yi awọn eto ẹda iho koodu emulation lati ṣiṣẹ pẹlu awọn igbanilaaye root. awọn Waf Ọpọlọpọ awọn aṣayan miiran wa fun iṣeto ni ati kọ awọn igbesẹ. Lati ṣawari awọn aṣayan rẹ, tẹ:

$ ./waf --help

Ni apakan atẹle a yoo lo diẹ ninu awọn aṣayan ti o ni ibatan idanwo.

Awọn profaili Apejọ

A ti rii tẹlẹ bi o ṣe le tunto Waf fun awọn apejọ yokokoro и iṣapeye:

$ ./waf --build-profile=debug

Profaili apejọ agbedemeji tun wa, Tu. Aṣayan -d jẹ bakannaa pẹlu --build-profile. Profaili kikọ n ṣakoso lilo gedu, awọn iṣeduro, ati awọn iyipada iṣapeye alakojo:

ns-3 ikẹkọ nẹtiwọki simulator. Ori 3

Bi o ṣe le rii, gedu ati awọn iṣeduro wa nikan ni awọn kikọ yokokoro. Iwa ti a ṣe iṣeduro ni lati ṣe agbekalẹ iwe afọwọkọ rẹ ni ipo yokokoro, lẹhinna ṣe awọn ṣiṣiṣẹ leralera (fun awọn iṣiro tabi awọn iyipada paramita) ni profaili kikọ iṣapeye.

Ti o ba ni koodu ti o yẹ ki o ṣiṣẹ nikan ni awọn profaili kikọ kan, lo koodu Wrapper Macro:

NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)

Aiyipada, Waf ibi kọ onisebaye ni Kọ liana. O le pato kan ti o yatọ o wu liana lilo awọn aṣayan - -outfun apẹẹrẹ:

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

Nipa apapọ eyi pẹlu awọn profaili kikọ, o le ni rọọrun yipada laarin awọn aṣayan akojọpọ oriṣiriṣi:

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

Eyi ti o fun ọ laaye lati ṣiṣẹ pẹlu awọn apejọ pupọ laisi nini lati tun kọ apejọ tuntun ni akoko kọọkan. Nigbati o ba yipada si profaili miiran, Waf yoo ṣe akopọ rẹ nikan, laisi atunko ohun gbogbo patapata.

Nigbati o ba yipada awọn profaili kikọ ni ọna yii, o nilo lati ṣọra lati fun awọn aṣayan atunto kanna ni akoko kọọkan. Itumọ ọpọlọpọ awọn oniyipada ayika yoo ran ọ lọwọ lati yago fun awọn aṣiṣe:

$ 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

Compilers ati awọn asia

Ninu awọn apẹẹrẹ loke Waf lati kọ ns-3 nlo alakojo C ++ lati GCC ( g ++). Sibẹsibẹ, o le yi eyi ti o lo Waf C ++ alakojo, nipa asọye CXX oniyipada ayika. Fun apẹẹrẹ, lati lo alakojo C ++ Clang, clang++,

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

Ni ọna kanna o le tunto Waf lati lo akojọpọ pinpin ni lilo disiki:

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

Alaye diẹ sii nipa distcc ati akojọpọ pinpin ni a le rii lori oju-iwe iṣẹ akanṣe ni apakan Iwe. Lati ṣafikun awọn asia alakojọ nigbati atunto ns-3, lo iyipada agbegbe CXXFLAGS_EXTRA.

eto

Waf le ṣee lo lati fi sori ẹrọ awọn ile-ikawe ni awọn aaye oriṣiriṣi lori eto naa. Nipa aiyipada, awọn ile-ikawe ti a ṣajọpọ ati awọn iṣẹ ṣiṣe wa ninu itọsọna naa kọ, ati pe niwon Waf mọ ipo ti awọn ile-ikawe wọnyi ati awọn iṣẹ ṣiṣe, ko si iwulo lati fi sori ẹrọ awọn ile-ikawe nibikibi miiran.

Ti awọn olumulo ba fẹ lati fi sori ẹrọ ni ita itọsọna kikọ, wọn le ṣiṣe aṣẹ naa ./waf fi sori ẹrọ. Apejuwe aiyipada fun fifi sori jẹ / usr / agbegbe, nitorina ./waf fi sori ẹrọ yoo fi awọn eto sinu / usr / agbegbe / oniyika, ikawe ni / usr / agbegbe / lib ati awọn faili akọsori ni /usr/agbegbe/pẹlu. Awọn ẹtọ Superuser nigbagbogbo nilo lati ṣeto pẹlu ìpele aiyipada, nitorinaa aṣẹ aṣoju yoo jẹ sudo ./waf fi sori ẹrọ. Nigbati o ba ṣe ifilọlẹ, Waf yoo kọkọ yan lati lo awọn ile-ikawe ti o pin ni itọsọna kikọ, lẹhinna wa awọn ile-ikawe ni ọna ọna si awọn ile-ikawe ti a tunto ni agbegbe agbegbe. Nitorinaa nigbati o ba nfi awọn ile ikawe sori ẹrọ, o jẹ adaṣe ti o dara lati ṣayẹwo pe awọn ile-ikawe ti o tọ ti wa ni lilo. Awọn olumulo le yan lati fi sori ẹrọ pẹlu oriṣiriṣi ìpele nipa gbigbe aṣayan lakoko iṣeto --prefixfun apẹẹrẹ:

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

Ti o ba ti nigbamii, lẹhin ti awọn Kọ, olumulo tẹ awọn fifi sori pipaṣẹ ./waf, ìpele ìpele yoo ṣee lo /opt/agbegbe.

Egbe ./waf clean gbọdọ ṣee lo ṣaaju atunto iṣẹ akanṣe ti fifi sori ẹrọ yoo lo Waf labẹ kan yatọ ìpele.

Nitorinaa, lati lo ns-3 ko si iwulo lati pe ./waf install. Pupọ awọn olumulo kii yoo nilo aṣẹ yii nitori Waf yoo gba awọn ile-ikawe lọwọlọwọ lati inu itọsọna kikọ, ṣugbọn diẹ ninu awọn olumulo le rii pe eyi wulo ti awọn iṣẹ wọn ba pẹlu ṣiṣẹ pẹlu awọn eto ni ita itọsọna ns-3.

Waf nikan

Ni ipele oke ti igi orisun ns-3, iwe afọwọkọ Waf kan wa. Ni kete ti o ba bẹrẹ iṣẹ, iwọ yoo lo akoko pupọ ninu itọsọna naa scratch/ tabi jinle sinusrc/... ati ni akoko kanna ni lati ṣiṣe Waf. O le kan ranti ibiti o wa ati ṣiṣe Waf ni ọna atẹle:

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

ṣugbọn eyi yoo jẹ tedious ati aṣiṣe prone, nitorinaa awọn solusan to dara julọ wa. Ọna kan ti o wọpọ ni lati lo olootu ọrọ gẹgẹbi emacs tabi Vim, ninu eyiti awọn akoko ebute meji ti ṣii, ọkan ni a lo lati kọ ns-3, ati ekeji ni a lo lati ṣatunkọ koodu orisun. Ti o ba ni nikan bọọlu afẹsẹgba, lẹhinna oniyipada ayika le ṣe iranlọwọ:

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

$ cd scratch 
$ waff build

Ninu itọsọna module o le jẹ idanwo lati ṣafikun iwe afọwọkọ waf bintin bi exec ../../waf. Jọwọ, maṣe iyẹn. Eyi jẹ airoju fun awọn oṣere tuntun ati, nigba ti a ba ṣe ni ibi, o yori si awọn aṣiṣe kikọ lile-lati-wari. Awọn ojutu ti o han loke ni ọna ti o yẹ ki o lo.

3.5 Igbeyewo ns-3

O le ṣiṣe awọn idanwo ipin pinpin ns-3 nipa ṣiṣe iwe afọwọkọ naa ./idanwo.py:

$ ./test.py

Awọn idanwo wọnyi jẹ ṣiṣe ni afiwe pẹlu Waf. Ni ipari o yẹ ki o wo ifiranṣẹ kan ti o sọ:

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

Eleyi jẹ ẹya pataki ifiranṣẹ fun idamo valgrind ipadanu, ipadanu tabi awọn aṣiṣe, afihan awọn iṣoro pẹlu koodu tabi incompatibility laarin awọn irinṣẹ ati koodu.

O yoo tun ri ik o wu lati Waf ati oluyẹwo ti n ṣiṣẹ idanwo kọọkan, eyiti yoo dabi nkan bi eyi:

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)

Aṣẹ yii nigbagbogbo n ṣiṣẹ nipasẹ awọn olumulo lati rii daju ni iyara pe pinpin ns-3 ti kọ ni deede. (Akiyesi pe aṣẹ ti "PASS: ..." awọn ila le yatọ, eyi jẹ deede. Ohun ti o ṣe pataki ni pe laini akopọ ni opin ijabọ naa fihan pe gbogbo awọn idanwo ti kọja; ko si awọn idanwo ti o kuna tabi kọlu.) Ati Wafati idanwo.py yoo ṣe afiwe iṣẹ kọja awọn ohun kohun ero isise ti o wa ti ẹrọ naa.

3.6 Ṣiṣe awọn akosile

A nigbagbogbo ṣiṣe awọn iwe afọwọkọ labẹ iṣakoso Waf. Eyi ngbanilaaye eto kikọ lati rii daju pe awọn ọna ikawe ti o pin ti ṣeto ni deede ati pe awọn ile-ikawe wa ni akoko asiko. Lati ṣiṣẹ eto naa, lo nìkan Waf pẹlu paramita - -run. Jẹ ki a ṣiṣẹ awọn ns-3 deede ti eto ibigbogbo Mo ki O Ile Aiyenipa titẹ awọn wọnyi:

$ ./waf --run hello-simulator

Waf yoo kọkọ ṣayẹwo pe eto naa ti kọ ni deede ati kọ ti o ba jẹ dandan. Lẹhinna Waf yoo ṣiṣẹ eto kan ti o gbejade igbejade atẹle.

Hello Simulator

Oriire! O ti wa ni bayi a ns-3 olumulo!

Kini o yẹ MO ṣe ti Emi ko ba rii awọn abajade?

Ti o ba ri awọn ifiranṣẹ Wafo nfihan pe ikole ti pari ni aṣeyọri, ṣugbọn iwọ ko rii abajade "Hello Simulator", lẹhinna o ṣee ṣe pe ni apakan [Kọ-with-Waf] o yipada ipo kikọ rẹ si iṣapeye, ṣugbọn o padanu iyipada pada si ipo yokokoro. Gbogbo iṣẹjade console ti a lo ninu ikẹkọ yii nlo paati ns-3 pataki kan ti o ṣe gedu ati lilo lati tẹ awọn ifiranṣẹ aṣa si console. Ijade lati paati yii jẹ alaabo laifọwọyi nigbati koodu iṣapeye ti ṣajọpọ - o jẹ “iṣapeye”. Ti o ko ba rii abajade “Hello Simulator”, tẹ atẹle naa:

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

lati tunto Waf lati kọ awọn ẹya yokokoro ti awọn eto ns-3, eyiti o pẹlu awọn apẹẹrẹ ati awọn idanwo. O yẹ ki o tun ṣe ẹya yokokoro lọwọlọwọ ti koodu nipa titẹ

$ ./waf

Bayi ti o ba ṣiṣe eto naa hello-labeabo, o yẹ ki o wo abajade ti a reti.

3.6.1 Òfin ila ariyanjiyan

Lati kọja awọn ariyanjiyan laini aṣẹ si eto ns-3, lo ilana atẹle:

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

Rọpo si orukọ eto rẹ ati si awọn ariyanjiyan. Ariyanjiyan - -command-template fun Waf jẹ pataki kan ohunelo fun a Kọ gangan pipaṣẹ ila Waf lo lati mu eto naa ṣiṣẹ. Waf sọwedowo pe kikọ ti pari, ṣeto awọn ọna ikawe ti o pin, lẹhinna lo awoṣe laini aṣẹ ti a pese ati rọpo orukọ eto fun aaye % s lati pe oluṣe. Ti o ba rii idiju sintasi yii, ẹya ti o rọrun wa ti o kan eto ns-3 ati awọn ariyanjiyan rẹ ti o wa ninu awọn agbasọ ẹyọkan:

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

Apẹẹrẹ miiran ti o wulo julọ ni ṣiṣe awọn suites idanwo ni yiyan. Jẹ ki a ro pe suite idanwo kan wa ti a pe ni mytest (ni otitọ ko si). Loke a lo iwe afọwọkọ ./test.py lati ṣiṣẹ nọmba awọn idanwo ni afiwe, eyiti o pe leralera eto idanwo naa. olusare idanwo. Pe olusare idanwo taara lati ṣiṣe idanwo kan:

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

Awọn ariyanjiyan yoo kọja si eto naa olusare idanwo. Niwon mytest ko si tẹlẹ, ifiranṣẹ aṣiṣe yoo wa ni ipilẹṣẹ. Lati tẹ awọn aṣayan olusare idanwo to wa, tẹ:

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

3.6.2 N ṣatunṣe aṣiṣe

Lati ṣiṣẹ awọn eto ns-3 labẹ ohun elo miiran, gẹgẹbi olutọpa (fun apẹẹrẹ, gdb) tabi irinṣẹ idanwo iranti (fun apẹẹrẹ, valgrind), lo iru fọọmu kan - -command-template = "…". Fun apẹẹrẹ, lati ṣiṣẹ ni yokokoro gdb eto hello-simulator ns-3 rẹ pẹlu awọn ariyanjiyan:

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

Ṣe akiyesi pe orukọ eto ns-3 wa pẹlu ariyanjiyan - -run, ati ohun elo iṣakoso (nibi gdb) jẹ ami akọkọ ninu ariyanjiyan - -command-template. Aṣayan - -args sọfun gdbpe iyokù laini aṣẹ jẹ ti eto “isalẹ”. (Diẹ ninu awọn ẹya gdb ko ye aṣayan - -args. Ni idi eyi, yọ awọn ariyanjiyan eto lati - -command-template ati ki o lo awọn pipaṣẹ ṣeto gdb ọfa.) A le darapọ ohunelo yii ati ọkan ti tẹlẹ lati ṣiṣe idanwo naa labẹ olutọpa:

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

3.6.3 Ṣiṣẹ liana

Waf yẹ ki o ṣe ifilọlẹ lati ipo rẹ ni oke igi ns-3. Eleyi folda di awọn ṣiṣẹ liana ibi ti awọn wu awọn faili yoo wa ni kikọ. Ṣugbọn kini ti o ba fẹ tọju awọn faili wọnyi ni ita igi orisun ns-3? Lo ariyanjiyan - -cwd:

$ ./waf --cwd=...

O le rii pe o rọrun diẹ sii lati gba awọn faili ti o wu jade ninu itọsọna iṣẹ rẹ. Ni ọran yii, iṣe aiṣe-taara atẹle le ṣe iranlọwọ:

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

Ohun ọṣọ yii ti ẹya ti tẹlẹ ti aṣẹ ṣe itọju itọsọna iṣẹ lọwọlọwọ, lọ si itọsọna naa Wafati lẹhinna nkọ Waf lati yi itọsọna iṣẹ pada si itọsọna iṣẹ lọwọlọwọ ti o fipamọ ṣaaju ki o to bẹrẹ eto naa. A darukọ ẹgbẹ naa - -cwd Fun pipe, pupọ julọ awọn olumulo n ṣiṣẹ Waf lati inu itọsọna ipele oke ati ṣe awọn faili iṣelọpọ nibẹ.

Tesiwaju: Orí 4

orisun: www.habr.com

Fi ọrọìwòye kun