ns-3 jaringan simulator tutorial. Bab 3

ns-3 jaringan simulator tutorial. Bab 3
bab 1,2

3 Ngamimitian
3.1 Ihtisar
3.2 Prasarat
3.2.1 Ngundeur pelepasan ns-3 salaku arsip sumber
3.3 Ngundeur ns-3 nganggo Git
3.3.1 Ngamuat ns-3 ngagunakeun Panggang
3.4 Majelis ns-3
3.4.1 Gedong kalayan build.py
3.4.2 Wangunan jeung Panggang
3.4.3 Ngawangun kalawan Waf
3.5 Nguji ns-3
3.6 Ngajalankeun naskah
3.6.1 argumen garis paréntah
3.6.2 Debugging
3.6.3 Diréktori gawé

bab 3

Ngamimitian

Bab ieu dimaksudkeun pikeun nyiapkeun maca dimimitian ku komputer nu mungkin geus pernah dipasang ns-3. Ieu nyertakeun platform nu dirojong, prasyarat, kumaha carana ménta ns-3, kumaha carana ngawangun ns-3, sarta kumaha carana nguji ngawangun anjeun sarta ngajalankeun program basajan.

3.1 Ihtisar

Simulator ns-3 diwangun salaku sistem perpustakaan software kolaborasi. Salila assembly, kode program pamaké numbu ka perpustakaan ieu. Basa pamrograman C ++ atanapi Python dianggo pikeun nyerat program khusus.

Ns-3 disebarkeun salaku kode sumber, nu hartina sistem target kudu boga lingkungan ngembangkeun software dina urutan mimiti ngawangun perpustakaan lajeng ngawangun program pamaké. Sacara prinsip, ns-3 bisa disebarkeun salaku perpustakaan siap-dijieun pikeun sistem husus, sarta dina mangsa nu bakal datang aranjeunna bisa disebarkeun ku cara kieu. Tapi ayeuna seueur pangguna anu leres-leres ngalakukeun padamelanna ku ngédit ns-3 nyalira, janten mangpaat pikeun gaduh kode sumber pikeun ngawangun perpustakaan. Upami aya anu hoyong ngadamel pustaka anu siap-siap sareng bungkusan pikeun sistem operasi, mangga ngahubungi milis. ns-pamekar.

Salajengna, urang bakal ningali tilu cara pikeun ngaunduh sareng ngawangun ns-3. Kahiji nyaéta pikeun ngundeur tur ngawangun release resmi ti loka utama. Anu kadua nyaéta pilihan sareng rakitan salinan versi pangembangan tina pamasangan ns-3 dasar. Anu katilu nyaéta ngagunakeun alat ngawangun tambahan pikeun ngamuat langkung seueur ekstensi pikeun ns-3. Urang bakal ngaliwat masing-masing sabab alatna rada béda.

Pangguna Linux anu ngalaman tiasa heran naha ns-3 henteu disayogikeun salaku pakét sapertos kalolobaan perpustakaan sanés anu nganggo manajer pakét? Sanajan aya pakét binér pikeun rupa-rupa distribusi Linux (misalna Debian), sabagéan ageung pangguna mungkas ngédit perpustakaan sareng kedah ngawangun deui ns-3 nyalira, janten gaduh kode sumber anu sayogi. Ku sabab kitu, urang bakal difokuskeun masang tina sumber.

Kanggo sabagéan ageung aplikasi hak ns-3 akar teu diperlukeun, eta disarankeun pikeun ngagunakeun hiji akun pamaké unprivileged.

3.2 Prasarat

Sakabeh susunan perpustakaan ns-3 sadia ngabogaan sajumlah kagumantungan dina perpustakaan pihak katilu, tapi pikeun sabagéan ageung ns-3 bisa diwangun jeung dipaké kalawan rojongan pikeun sababaraha komponén umum (sering dipasang sacara standar): a C ++ kompiler, Python, redaktur kode sumber (contona, vim, emacs atawa samagaha) jeung, lamun repositories ngembangkeun dipaké, sistem kontrol versi Git. Seuseueurna pangguna anu pertama kalina henteu kedah hariwang upami konfigurasina ngalaporkeun sababaraha fitur canggih ns-3 leungit, tapi pikeun anu hoyong pamasangan lengkep, proyék éta nyayogikeun wiki anu kalebet halaman anu seueur tip sareng trik anu mangpaat. Hiji halaman sapertos nyaéta halaman Instalasi, kalayan petunjuk pamasangan pikeun sababaraha sistem, sayogi di: https://www.nsnam.org/wiki/Installation.

Bagian Prasyarat wiki ieu ngajelaskeun bungkusan mana anu diperyogikeun pikeun ngadukung pilihan ns-3 umum sareng ogé nyayogikeun paréntah anu dianggo pikeun masang aranjeunna dina rasa umum Linux atanapi macOS.

Anjeun tiasa ngamangpaatkeun kasempetan ieu pikeun ngajalajah halaman wiki ns-3 atanapi halaman wéb utama: https://www.nsnam.org, sabab aya loba informasi di dinya. Dimimitian ku versi panganyarna tina ns-3 (ns-3.29), parabot di handap ieu diperlukeun pikeun ngajalankeun ns-3:

Paket alat / Vérsi

  • C++ kompiler
    clang ++ atanapi g ++ (g ++ versi 4.9 atanapi langkung luhur)
  • Python
    Vérsi python2> = 2.7.10, atanapi versi python3> = 3.4
  • indit
    sagala versi panganyarna (pikeun ngakses ns-3 on GitLab.com)
  • aspal
    sagala versi panganyarna (pikeun ngabongkar ns-3 release)
  • bunzip2
    sagala vérsi panganyarna (pikeun ngabongkar sékrési ns‑3)

Pikeun pariksa versi standar Python, ketik python -V. Pikeun pariksa versi g ++, ketik g++ -v. Upami aya alat anu leungit atanapi lami teuing, mangga tingal pituduh pamasangan dina halaman wiki ns-3.

Ti ayeuna, urang nganggap yén pamaca ngajalankeun Linux, MacOS, atanapi émulator Linux, sareng sahenteuna gaduh alat di luhur.

3.2.1 Ngundeur pelepasan ns-3 salaku arsip sumber

Ieu mangrupikeun tindakan pikeun pangguna énggal anu hoyong unduh sareng ékspérimén sareng versi énggal sareng pakét ns-3. Kaluaran ns-3 diterbitkeun salaku arsip sumber dikomprés, sok disebut tarball. tarball mangrupakeun format arsip software husus nu sababaraha file digabungkeun babarengan. Arsip biasana dikomprés. prosés boot ns-3 via tarball nyaeta basajan, Anjeun ngan perlu milih release a, ngundeur tur ngabongkar éta.

Hayu urang nganggap yén anjeun, salaku pangguna, hoyong ngawangun ns-3 dina diréktori lokal anu disebut rohangan gawé. Anjeun tiasa kéngingkeun salinan sékrési anu tiasa dianggo ku ngalebetkeun ieu kana konsol Linux (ngaganti nomer versi anu pas, tangtosna)

$ 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 

Nengetan utiliti anu digunakeun di luhur wget, nu mangrupakeun alat baris paréntah pikeun ngundeur objék tina Internét. Upami anjeun teu acan dipasang, anjeun tiasa nganggo panyungsi anjeun pikeun ieu.

Saatos léngkah ieu bakal mawa anjeun ka diréktori ns-allinone-3.29, di dinya anjeun kedah ningali sababaraha file sareng diréktori.

$ 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

Anjeun ayeuna siap ngawangun distribusi dasar ns-3 sarta bisa ngaléngkah ka bagian dina wangunan ns-3.

3.3 Ngundeur ns-3 nganggo Git

Kode ns-3 sayogi dina repositori Git di GitLab.com di https://gitlab.com/nsnam/. Grup nsnam ngahijikeun rupa-rupa repositori anu dianggo ku proyék open source.

Cara panggampangna pikeun ngamimitian nganggo repositori Git nyaéta garpu atanapi kloning lingkungan ns-3-allinon. Ieu mangrupikeun sakumpulan skrip anu ngatur ngamuat sareng ngarakit subsistem ns-3 anu paling sering dianggo. Upami anjeun énggal nganggo Git, istilah "garpu" sareng "klon" tiasa anjeun teu biasa; upami kitu, kami nyarankeun yén anjeun ngan saukur clone (nyieun salinan anjeun nyalira) gudang anu aya di GitLab.com sapertos kieu:

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

Dina tahap ieu, tempoan diréktori Anjeun ns-3-allinon rada béda ti diréktori arsip release ditétélakeun di luhur. Éta kedah katingali sapertos kieu:

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

Punten bilih aya naskahna download.py, nu Sajaba bakal nimba ns-3 jeung kode sumber nu dibéré bareng. Di dieu anjeun gaduh pilihan: boh unduh snapshot pangembangan ns-3 panganyarna:

$ python download.py

atawa leuwih resep release ns-3 maké bandéra -n pikeun nunjukkeun nomer pelepasan:

$ python download.py -n ns-3.29

Saatos léngkah ieu ka diréktori ns-3-allinon repositories tambahan bakal diundeur ns-3, manggang, pybindgen и netanim.

nyarios
Dina mesin anu bersih Ubuntu16.04, kuring kedah ngarobih paréntah ieu: $ sudo python3 download.py -n ns-3.29 (saterusna catetan penerjemah).

3.3.1 Ngamuat ns-3 ngagunakeun Panggang

Dua metodeu di luhur (sumber arsip atanapi gudang ns-3-allinon via Git) mangpaat pikeun meunangkeun panginstalan ns-3 pangbasajanna kalawan sababaraha addons (pybindgen pikeun ngahasilkeun Python bindings na netanim pikeun animasi jaringan). Repository katilu disadiakeun sacara standar di ns-3-allinone disebut manggang.

Panggang mangrupakeun alat pikeun ngagabung wangunan software ti sababaraha repositories, dimekarkeun pikeun proyék ns-3. Panggang bisa dipaké pikeun meunangkeun vérsi pamekaran ns-3, ogé pikeun ngundeur sareng ngawangun ekstensi versi dasar distribusi ns-3, sapertos lingkungan Palaksanaan Kode Langsung, CradleNetwork Simulasi Lawu, kamampuhan pikeun nyieun bindings Python anyar jeung sagala rupa ns-3 "aplikasi".

nyarios
CradleNetwork Simulation Cradle mangrupikeun kerangka anu ngamungkinkeun anjeun ngagunakeun tumpukan jaringan TCP/IP nyata di jero simulator jaringan.

Upami anjeun ngarepkeun pamasangan ns-3 anjeun gaduh fitur canggih atanapi tambahan, anjeun tiasa nuturkeun jalur pamasangan ieu.

Dina sékrési ns-3 panganyarna Panggang ieu ditambahkeun kana release tar. Pelepasan éta kalebet file konfigurasi anu ngamungkinkeun anjeun ngaunduh vérsi parangkat lunak anu ayeuna dina waktos sékrési. Maksudna, contona, versi Panggang, nu disebarkeun kalawan release ns-3.29, bisa dipaké pikeun meunangkeun deui komponén pikeun sékrési ns-3 atawa saméméhna, tapi teu bisa dipaké pikeun meunangkeun deui komponén pikeun release engké (lamun file déskripsi pakét. bakeconf.xml teu diropéa).

Anjeun oge bisa meunangkeun salinan panganyarna manggangku ngalebetkeun paréntah di handap ieu kana konsol Linux anjeun (anggap anjeun parantos dipasang Git):

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

Nalika anjeun ngajalankeun paréntah git, anjeun kedah ningali sapertos kieu:

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.

Saatos paréntah réngsé clone Anjeun kudu boga diréktori ngaranna manggang, eusina kedah siga kieu:

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

Catet yén anjeun geus dimuat sababaraha Aksara Python, modul Python ngaranna manggang sareng file konfigurasi XML. Lengkah saterusna nyaeta ngagunakeun Aksara ieu pikeun ngundeur tur ngawangun distribusi ns-3 pilihan Anjeun. Sababaraha target kustomisasi sayogi:

  1. ns-3.29: modul pakait jeung release; eta bakal ngundeur komponén sarupa release dina tarball nu;

  2. ns-3-dev: modul sarupa, tapi ngagunakeun kode tina tangkal ngembangkeun;

  3. ns-allinone-3.29: A modul nu ngawengku fitur tambahan lianna kayaning Klik routing na Network simulasi Lawu, Openflow pikeun ns-3.

  4. ns-3-allinon: sarupa jeung versi release modul sadayana, tapi pikeun kode pangwangunan.

nyarios
Klik - arsitéktur software modular pikeun nyieun routers.

Openflow mangrupikeun protokol pikeun ngatur prosés ngolah data anu dikirimkeun dina jaringan data ku router sareng saklar, ngalaksanakeun téknologi jaringan anu didefinisikeun ku parangkat lunak.

Snapshot pangembangan ayeuna (non-release) ns-3 tiasa dipendakan di:https://gitlab.com/nsnam/ns-3-dev.git.

Pamekar nyobian ngajaga repositori ieu dina urutan kerja anu konsisten, tapi aranjeunna aya di daérah pamekaran sareng ngandung kode anu teu dileupaskeun, janten upami anjeun henteu ngarencanakeun ngagunakeun fitur-fitur anyar, teras pilih pelepasan resmi.

Anjeun tiasa mendakan versi kode pangénggalna ku cara ngotéktak daptar repositori, atanapi ku buka halaman wéb ns-3 Releases:https://www.nsnam.org/releases/ sareng ngaklik tautan versi panganyarna. Dina conto ieu urang bakal neruskeun kalawan ns-3.29.

Ayeuna, pikeun kéngingkeun komponén ns-3 anu urang peryogikeun, urang bakal nganggo alat éta Panggang. Hayu urang nyebutkeun sababaraha kecap bubuka ngeunaan karya Panggang.

Panggang dianggo ku ngamuat sumber pakét kana diréktori sumber sareng masang perpustakaan kana diréktori ngawangun. Panggang tiasa dijalankeun ku ngarujuk binér, tapi upami anjeun hoyong ngajalankeun Panggang teu ti diréktori nu ieu diundeur, éta sasaena pikeun nambahkeun jalur ka manggang ka jalur anjeun (variabel lingkungan PATH), contona kieu (conto cangkang bash Linux). Pindah ka diréktori "panggang" teras setel variabel lingkungan ieu:

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

Ieu bakal nempatkeun program bake.py ka jalur cangkang sareng bakal ngijinkeun program sanés pikeun milarian executable sareng perpustakaan anu didamelna manggang. Dina sababaraha kasus pamakéan manggang, setelan PATH na PYTHONPATH ditétélakeun di luhur teu diperlukeun, tapi ngawangun lengkep ns-3-allinone (kalawan pakét tambahan) biasana merlukeun eta.

Pindah ka diréktori kerja anjeun sareng lebetkeun ieu dina konsol:

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

Salajengna urang bakal nanya Panggang pariksa lamun urang boga cukup parabot pikeun muka rupa komponén. Telepon:

$ ./bake.py check

Anjeun kedah ningali sapertos kieu:

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

Khususna, unggah alat sapertos Mercurial, CVS, Git sareng Bazaar penting dina léngkah ieu sabab ngamungkinkeun urang nampi kodeu. Dina titik ieu, pasang alat anu leungit dina cara biasa pikeun sistem anjeun (upami anjeun terang kumaha) atanapi ngahubungi administrator sistem anjeun pikeun pitulung.

Teras, cobian unduh parangkat lunak:

$ ./bake.py download

hasilna kedah sapertos kieu:

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

Ieu bakal hartosna yén tilu sumber parantos diunduh. Ayeuna angkat ka diréktori sumber sareng ketik ls; Anjeun kedah ningali:

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

Ayeuna anjeun siap ngawangun distribusi ns-3.

3.4 Majelis ns-3

Salaku kalawan ngundeur ns-3, aya sababaraha cara pikeun ngawangun ns-3. Hal utama anu urang hoyong tekenkeun nyaéta ns-3 diwangun nganggo alat ngawangun anu disebut Wafdigambarkeun di handap. Kaseueuran pangguna bakal tiasa dianggo Waf, tapi aya sababaraha skrip anu gunana pikeun ngabantosan anjeun ngamimitian atanapi ngatur wangunan anu langkung kompleks. Janten mangga, sateuacan anjeun maca ngeunaan Waf, tingalian ngawangun.py jeung assembly kalawan manggang.

3.4.1 Gedong kalayan build.py

Awas! Lengkah ngawangun ieu ngan sadia tina versi arsip sumber diala sakumaha ditétélakeun di luhur; sareng henteu diunduh via git atanapi bake.

Nalika damel sareng arsip pelepasan tarballdi ns-3-allinon Aya skrip anu gunana anu tiasa ngagampangkeun assembling komponén. Disebut build.py. Program ieu bakal nyetél proyék pikeun anjeun ku cara anu paling mangpaat. Nanging, perhatikeun yén setélan anu langkung maju sareng damel sareng ns-3 biasana ngalibatkeun ngagunakeun sistem ngawangun ns-3 sorangan, Waf, anu bakal diwanohkeun engké dina tutorial ieu.

Upami anjeun unduh nganggo tarball, teras dina diréktori anjeun ~/ruang gawé a diréktori kalawan ngaran hal kawas ns-allinone-3.29. Lebetkeun ieu:

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

Nalika nelepon ngawangun.py Kami nganggo argumen baris paréntah pikeun ngawangun conto sareng tés anu dianggo dina tutorial ieu, anu henteu diwangun sacara standar dina ns-3. Sacara standar, program ogé ngawangun sadaya modul anu sayogi. Teras, upami anjeun hoyong, anjeun tiasa ngawangun ns-3 tanpa conto sareng tés, atanapi ngaluarkeun modul anu henteu diperyogikeun pikeun padamelan anjeun.

Anjeun bakal ningali seueur pesen kaluaran kompiler anu ditampilkeun ku naskah nalika ngawangun sababaraha bagian anu anjeun muatkeun. Mimiti naskah bakal nyobian ngawangun animator netanim, lajeng generator mengikat pybindgen sarta tungtungna ns-3. Nalika prosés parantos réngsé, anjeun kedah ningali ieu:

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

Dina tilu garis terakhir tina daptar kami ningali pesen ngeunaan modul anu henteu diwangun:

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

Ieu ngan saukur ngandung harti yén sababaraha ns-3 modul nu gumantung kana perpustakaan éksternal bisa jadi teu acan diwangun, atawa maranéhna teu diperlukeun diwangun pikeun konfigurasi ieu. Ieu henteu hartosna yén simulator henteu dirakit atanapi modul anu dirakit moal jalanna leres.

3.4.2 Wangunan jeung Panggang

Upami anjeun nganggo panggang di luhur pikeun kéngingkeun kode sumber tina repositori proyék, anjeun tiasa teras-terasan ngagunakeunana pikeun ngawangun ns-3. Telepon:

$ ./bake.py build

sareng anjeun kedah ningali sapertos kieu:

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

gancang: Anjeun oge bisa ngalakukeun duanana undeuran tur ngawangun léngkah sakaligus ku nelepon "bake.py nyebarkeun".

Assembling sadaya komponén bisa gagal, tapi assembly bakal neruskeun lamun komponén teu diperlukeun. Contona, masalah portability panganyarna éta castxml bisa dirakit ku alat manggang henteu dina sadaya platform. Dina hal ieu, pesen sapertos kieu bakal muncul:

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

kumaha oge castxml ngan diperlukeun lamun rék nyieun diropéa Python bindings. Kanggo sabagéan ageung pangguna henteu peryogi ieu (sahenteuna dugi aranjeunna ngarobih ns-3), ku kituna peringatan sapertos kitu tiasa aman dipaliré ayeuna.

Upami gagal, paréntah di handap ieu bakal masihan anjeun petunjuk ngeunaan kagumantungan anu leungit:

$ ./bake.py show

Rupa-rupa kagumantungan bungkusan anu anjeun badé ngawangun bakal didaptarkeun.

3.4.3 Ngawangun kalawan Waf

Nepi ka titik ieu, pikeun ngamimitian ngawangun ns-3, kami nganggo boh naskah ngawangun.py, atawa alat manggang. Parabot ieu mangpaat pikeun ngawangun ns-3 sareng ngajaga perpustakaan. Kanyataanna, pikeun ngawangun aranjeunna ngajalankeun alat ngawangun Waf ti diréktori ns-3. Waf dipasang sareng kode sumber ns-3. Seuseueurna pangguna gancang teraskeun kana panggunaan langsung pikeun ngonpigurasikeun sareng ngarakit ns-3 Waf. Janten, pikeun neraskeun, mangga angkat ka diréktori ns-3 anu anjeun damel.

Ieu teu mastikeun diperlukeun dina waktu ieu, tapi bakal mangpaat pikeun backtrack saeutik tur tingal kumaha nyieun parobahan konfigurasi proyék. Panginten parobahan konfigurasi anu paling mangpaat anu anjeun tiasa lakukeun nyaéta nyiptakeun versi kode anu dioptimalkeun. Sacara standar, anjeun parantos ngonpigurasikeun proyék anjeun pikeun ngawangun versi debug. Hayu urang tingali hiji proyék pikeun nyieun hiji wangunan dioptimalkeun. Pikeun ngajelaskeun ka Waf yén éta kedah ngadamel gedong anu dioptimalkeun anu kalebet conto sareng tés, anjeun kedah ngajalankeun paréntah di handap ieu:

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

Ieu bakal ngajalankeun Waf luar diréktori lokal (pikeun genah anjeun). Paréntah kahiji cleans up ti wangunan saméméhna, ieu biasana teu mastikeun diperlukeun, tapi prakték alus (ogé tingali ngawangun propil handap); ieu bakal mupus perpustakaan dijieun saméméhna tur file obyék lokasina di diréktori ngawangun/. Nalika proyék dikonfigurasi deui sareng sistem ngawangun mariksa rupa-rupa katergantungan, anjeun kedah ningali kaluaran anu sami sareng ieu:

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)

Punten perhatikeun bagian terakhir tina daptar di luhur. Sababaraha pilihan ns-3 henteu diaktipkeun sacara standar atanapi ngabutuhkeun dukungan sistem pikeun fungsina leres. Contona, pikeun ngaktipkeun XmlTo, perpustakaan kudu aya dina sistem libxml-2.0. Upami perpustakaan ieu henteu kapendak sareng fungsi ns-3 anu saluyu teu diaktipkeun, pesen bakal ditingalikeun. Ogé dicatet yén kasebut nyaéta dimungkinkeun pikeun ngagunakeun paréntah sudo pikeun nyetél bit suid "nyetél ID grup dina runtime" pikeun program tangtu. Éta henteu diaktipkeun sacara standar sahingga fitur ieu muncul salaku "henteu diaktipkeun". Tungtungna, pikeun kéngingkeun daptar pilihan anu diaktipkeun, paké Waf kalawan parameter --check-config.

Ayeuna hayu urang balik sarta pindah deui ka debug ngawangun ngandung conto jeung tés.

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

Sistem ngawangun ayeuna disetél sareng anjeun tiasa ngawangun vérsi debug program ns-3 ku ngan saukur ngetik:

$ ./waf

Léngkah-léngkah di luhur tiasa maksa anjeun ngawangun bagian tina sistem ns-3 dua kali, tapi ayeuna anjeun terang kumaha ngarobih konfigurasi sareng ngawangun kode anu dioptimalkeun.

Pikeun pariksa profil mana anu aktip pikeun konfigurasi proyék anu dipasihkeun, aya paréntah:

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

Skenario di luhur ngawangun.py ogé ngarojong argumen --enable-examples и --enable-tests, tapi pilihan séjén Waf teu ngarojong langsung. Contona, ieu moal jalan:

$ ./build.py --disable-python

réaksina bakal sapertos kieu:

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

Sanajan kitu, operator husus - - bisa dipaké pikeun ngalirkeun parameter tambahan via wafjanten gaganti di luhur paréntah di handap ieu bakal jalan:

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

sabab dibangkitkeun paréntah utama ./waf configure --disable-python. Ieu sababaraha tip bubuka ngeunaan Waf.

Nanganan kasalahan ngawangun

Kaluaran ns-3 diuji dina kompiler C ++ panganyarna anu sayogi nalika dileupaskeun dina distribusi Linux sareng MacOS umum. Nanging, kana waktosna, distribusi énggal dileupaskeun sareng kompiler énggal, sareng kompiler énggal ieu langkung condong kana peringatan. ns-3 ngonpigurasikeun wangunanna pikeun ngubaran sagala peringatan salaku kasalahan, janten sakapeung upami anjeun ngajalankeun versi anu langkung lami dina sistem anu langkung énggal, peringatan kompiler tiasa ngeureunkeun ngawangun.

Salaku conto, sateuacana aya sékrési ns-3.28 pikeun Fedora 28, anu kalebet versi utama énggal. gcc (gcc-8). Ngawangun sékrési ns-3.28 atanapi versi samemehna dina Fedora 28, kalayan dipasang Gtk2+, kasalahan ieu bakal lumangsung:

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

Dina sékrési mimitian ti ns-3.28.1, di Waf pilihan sadia pikeun ngajawab masalah ieu. Ieu disables setelan bendera "-Werror" dina g ++ na clang ++. Ieu mangrupikeun pilihan "--disable-werror" sareng kedah diterapkeun salami konfigurasi:

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

Konpigurasikeun atanapi ngumpul

Sababaraha paréntah Waf boga harti ngan dina fase konfigurasi, jeung sababaraha nu ngan valid dina fase ngawangun. Contona, upami anjeun hoyong nganggo fitur émulasi ns-3, anjeun tiasa ngaktipkeun setélan bit kidul ngagunakeun sudo, sakumaha ditétélakeun di luhur. Ieu bakal override paréntah hambalan konfigurasi, sahingga anjeun bisa ngarobah konfigurasi ngagunakeun paréntah di handap, nu ogé ngawengku conto jeung tés.

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

Lamun ngalakukeun ieu Waf bakal diluncurkeun sudopikeun ngarobah program kreasi stop kontak kode emulation ngajalankeun kalawan idin akar. The Waf Aya seueur pilihan sanés pikeun konfigurasi sareng léngkah-léngkah ngawangun. Pikeun ngajalajah pilihan anjeun, lebetkeun:

$ ./waf --help

Dina bagian salajengna urang bakal ngagunakeun sababaraha pilihan nu patali nguji.

Propil Majelis

Kami parantos ningali kumaha anjeun tiasa ngonpigurasikeun Waf pikeun majelis debug и dioptimalkeun:

$ ./waf --build-profile=debug

Aya ogé profil assembly panengah, ngabebaskeun. Pilihan -d nyaeta sinonim jeung --build-profile. Profil ngawangun ngadalikeun pamakean log, pernyataan, sareng saklar optimasi kompiler:

ns-3 jaringan simulator tutorial. Bab 3

Sakumaha anjeun tiasa tingali, logging sareng pernyataan ngan ukur aya dina debug ngawangun. Prakték anu disarankeun nyaéta pikeun ngembangkeun skrip anjeun dina modeu debug, teras ngajalankeun jalan-jalan deui (pikeun statistik atanapi parobihan parameter) dina profil ngawangun anu dioptimalkeun.

Upami anjeun gaduh kode anu ngan ukur kedah dijalankeun dina propil ngawangun anu tangtu, paké Macro Wrapper Code:

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

Standar, Waf tempat ngawangun artefak dina diréktori ngawangun. Anjeun tiasa nangtukeun hiji diréktori kaluaran béda ngagunakeun pilihan - -outContona:

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

Ku ngagabungkeun ieu sareng ngawangun profil, anjeun tiasa sacara gampil ngalih antara pilihan kompilasi anu béda:

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

Nu ngidinan Anjeun pikeun digawekeun ku sababaraha rakitan tanpa kudu nulis balik assembly panganyarna unggal waktu. Lamun anjeun pindah ka profil sejen, Waf bakal compile ngan eta, tanpa lengkep recompiling sagalana.

Nalika anjeun ngalihkeun ngawangun profil ku cara ieu, anjeun kedah ati-ati pikeun masihan pilihan konfigurasi anu sami unggal waktos. Nangtukeun sababaraha variabel lingkungan bakal ngabantosan anjeun nyingkahan kasalahan:

$ 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

Compiler jeung bandéra

Dina conto di luhur Waf pikeun ngawangun ns-3 ngagunakeun kompiler C++ ti GCC ( g ++). Nanging, anjeun tiasa ngarobih anu anjeun anggo Waf C ++ compiler, ku nangtukeun variabel lingkungan CXX. Contona, pikeun ngagunakeun C ++ kompiler Clang, clang ++,

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

Dina cara nu sami anjeun tiasa ngonpigurasikeun Waf ngagunakeun kompilasi disebarkeun ngagunakeun distcc:

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

Inpo nu langkung lengkep ihwal distcc sareng kompilasi disebarkeun tiasa dipendakan dina halaman proyék dina bagian Dokuméntasi. Nambahkeun bandéra kompiler nalika ngonpigurasikeun ns-3, paké variabel lingkungan CXXFLAGS_EXTRA.

setting

Waf bisa dipaké pikeun masang perpustakaan di tempat béda dina sistem. Sacara standar, perpustakaan anu disusun sareng executable aya dina diréktori ngawangun, sareng ti saprak Waf terang lokasi perpustakaan sareng executable ieu, teu kedah masang perpustakaan di tempat sanés.

Upami pangguna langkung resep masang di luar diréktori ngawangun, aranjeunna tiasa ngajalankeun paréntah ./waf install. Awalan standar pikeun instalasi nyaéta / usr / lokalku sabab eta ./waf install bakal masang program dina / Usr / lokal / bin, perpustakaan di / Usr / lokal / lib sareng file header di /usr/local/include. Hak superuser biasana kedah diatur sareng awalan standar, janten paréntah anu biasa sudo ./waf install. Nalika diluncurkeun, Waf bakal mimiti milih ngagunakeun perpustakaan anu dibagikeun dina diréktori ngawangun, teras milarian perpustakaan sapanjang jalur ka perpustakaan anu dikonpigurasi di lingkungan lokal. Janten nalika masang perpustakaan dina sistem, éta mangrupikeun prakték anu saé pikeun pariksa yén perpustakaan anu leres dianggo. Pamaké tiasa milih masang sareng awalan anu béda ku ngalangkungan pilihan salami konfigurasi --prefixContona:

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

Upami engké, saatos ngawangun, pangguna ngalebetkeun paréntah pamasangan ./waf, awalan bakal dipaké /opt/lokal.

regu ./waf clean kedah dianggo sateuacan ngonfigurasi deui proyék upami pamasangan bakal dianggo Waf handapeun awalan béda.

Ku kituna, ngagunakeun ns-3 teu kudu nelepon ./waf install. Kaseueuran pangguna henteu peryogi paréntah ieu kusabab Waf bakal nyokot perpustakaan ayeuna ti diréktori ngawangun, tapi sababaraha pamaké bisa manggihan ieu mangpaat lamun kagiatan maranéhanana ngalibetkeun gawé bareng program luar diréktori ns-3.

Waf tunggal

Di tingkat luhur tangkal sumber ns-3, ngan aya hiji naskah Waf. Sakali anjeun ngamimitian damel, anjeun bakal nyéépkeun seueur waktos dina diréktori scratch/ atawa leuwih jerosrc/... sarta sakaligus kudu ngajalankeun Waf. Anjeun ngan bisa apal dimana anjeun sarta ngajalankeun Waf saperti kieu:

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

tapi ieu bakal tedious sarta rawan kasalahan, jadi aya solusi hadé. Hiji cara umum nyaéta ngagunakeun pangropéa téksu sapertos emacs atawa vim, dimana dua sesi terminal dibuka, hiji dipaké pikeun ngawangun ns-3, sarta kadua dipaké pikeun ngédit kodeu sumber. Lamun ngan boga tarball, teras variabel lingkungan tiasa ngabantosan:

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

$ cd scratch 
$ waff build

Dina diréktori modul meureun pikabitaeun pikeun nambahkeun naskah waf trivial kawas exec ../../waf. Punten, entong kitu. Ieu matak ngabingungkeun pikeun newbies sareng, nalika dilakukeun kirang, nyababkeun kasalahan ngawangun anu susah dideteksi. Solusi anu dipidangkeun di luhur mangrupikeun jalur anu kedah dianggo.

3.5 Nguji ns-3

Anjeun tiasa ngajalankeun tés unit distribusi ns-3 ku ngajalankeun naskah ./test.py:

$ ./test.py

Tés ieu dijalankeun paralel sareng Waf. Tungtungna anjeun kedah ningali pesen anu nyarios:

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

Ieu pesen penting pikeun ngaidentipikasi kacilakaan valgrind, kacilakaan atawa kasalahan, nunjukkeun masalah sareng kode atanapi incompatibility antara parabot jeung kode.

Anjeun oge bakal ningali kaluaran ahir tina Waf sareng panguji anu ngajalankeun unggal tés, anu bakal katingali sapertos kieu:

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)

Paréntah ieu biasana dijalankeun ku pangguna pikeun pariksa gancang yén distribusi ns-3 diwangun leres. (Catetan yén urutan tina "LULUS: ..." garis bisa jadi béda, ieu téh normal. Anu penting nyaéta yén garis kasimpulan dina tungtung laporan nunjukeun yen sakabeh tés lulus; euweuh tés gagal atawa nabrak.) Jeung Wafjeung test.py bakal parallelize karya sakuliah cores processor sadia tina mesin.

3.6 Ngajalankeun naskah

Urang biasana ngajalankeun Aksara dina kontrol Waf. Hal ieu ngamungkinkeun sistem ngawangun pikeun mastikeun yén jalur perpustakaan dibagikeun diatur leres tur perpustakaan sadia dina runtime. Pikeun ngajalankeun program, kantun nganggo Waf kalawan parameter - -run. Hayu urang ngajalankeun ns-3 sarimbag tina program ubiquitous Halo Dunyaku ngetikkeun kieu:

$ ./waf --run hello-simulator

Waf bakal mariksa heula yén program éta diwangun leres sareng ngawangun upami diperyogikeun. Saterusna Waf bakal ngaéksekusi program anu ngahasilkeun kaluaran di handap ieu.

Hello Simulator

Wilujeng! Anjeun ayeuna pamaké ns-3!

Naon anu kudu dilakukeun upami kuring henteu ningali hasilna?

Upami anjeun ningali pesen Wafnunjukkeun yén ngawangun réngsé junun, tapi anjeun teu ningali kaluaran "Halo Simulator", teras aya kamungkinan yén dina bagian [Build-with-Waf] anjeun ngalihkeun mode ngawangun anjeun ka dioptimalkeun, tapi lasut pindah deui ka modeu debug. Sadaya kaluaran konsol anu dianggo dina tutorial ieu ngagunakeun komponén ns-3 khusus anu ngalaksanakeun logging sareng dianggo pikeun nyitak pesen khusus ka konsol. Kaluaran tina komponén ieu otomatis ditumpurkeun nalika kode dioptimalkeun disusun - éta "dioptimalkeun". Upami anjeun henteu ningali kaluaran "Hello Simulator", lebetkeun ieu:

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

pikeun ngaropéa Waf pikeun ngawangun vérsi debug tina program ns-3, anu kalebet conto sareng tés. Anjeun teras kedah ngawangun deui versi debug kode anu ayeuna ku ngetik

$ ./waf

Ayeuna upami anjeun ngajalankeun program halo-simulator, Anjeun kudu ningali hasil ekspektasi.

3.6.1 argumen garis paréntah

Pikeun ngirimkeun argumen baris paréntah ka program ns-3, paké pola ieu:

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

Ngaganti kana nami program anjeun sareng argumen. Arguméntasi - -command-template keur Waf nyaeta dasarna resep pikeun ngawangun garis paréntah sabenerna Waf dipaké pikeun ngajalankeun program. Waf mariksa yén wangunanna geus réngsé, nyetél jalur perpustakaan dibagikeun, lajeng ngagunakeun template garis paréntah disadiakeun tur substitutes nami program pikeun %s pananda tempat pikeun nelepon executable. Upami anjeun mendakan sintaksis ieu pajeulit, aya vérsi anu langkung saderhana anu ngalibatkeun program ns-3 sareng dalil-dalilna dina tanda petik tunggal:

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

Conto sanés anu mangpaat nyaéta ngajalankeun suite tés sacara selektif. Hayu urang nganggap aya test suite disebut mytest (dina kanyataanana teu aya). Di luhur kami nganggo skrip ./test.py pikeun ngajalankeun sababaraha tés paralel, anu sababaraha kali nyauran program tés. test-runner. Nelepon test-runner langsung ngajalankeun hiji tés:

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

Argumen bakal dibikeun ka program test-runner. Kusabab mytest teu aya, pesen kasalahan bakal dihasilkeun. Pikeun nyitak pilihan test-runner nu sadia, lebetkeun:

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

3.6.2 Debugging

Pikeun ngajalankeun program ns-3 dina utilitas anu sanés, sapertos debugger (contona, gdb) atawa alat uji mémori (contona, valgrind), ngagunakeun wangun anu sarua - -command-template = "…". Contona, pikeun ngajalankeun di debugger nu gdb program Hello-simulator ns-3 anjeun kalayan argumen:

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

Catet yén nami program ns-3 hadir sareng argumen - -run, sareng utilitas manajemén (di dieu gdb) nyaéta token munggaran dina argumen - -command-template. Pilihan - -args laporan gdbyén sesa garis paréntah milik program "handap". (Sababaraha versi gdb teu ngarti pilihan - -args. Dina hal ieu, miceun argumen program tina - -command-template sareng nganggo set paréntah gdb args.) Urang tiasa ngagabungkeun resep ieu sareng anu sateuacana pikeun ngajalankeun tés dina debugger:

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

3.6.3 Diréktori gawé

Waf kedah diluncurkeun ti lokasina di luhureun tangkal ns-3. Folder ieu janten diréktori kerja dimana file kaluaran bakal ditulis. Tapi kumaha upami anjeun hoyong nyimpen file ieu di luar tangkal sumber ns-3? Paké argumen - -cwd:

$ ./waf --cwd=...

Anjeun tiasa mendakan langkung gampang pikeun nyandak file kaluaran dina diréktori kerja anjeun. Dina hal ieu, tindakan teu langsung di handap ieu tiasa ngabantosan:

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

Hiasan ieu tina versi sateuacana paréntah ngahemat diréktori kerja ayeuna, angkat ka diréktori Wafterus nitah Waf pikeun ngarobah diréktori gawé deui ka diréktori gawé ayeuna disimpen saméméh ngamimitian program. Urang sebutkeun tim - -cwd Pikeun kasampurnaan, kalolobaan pangguna ngan saukur ngajalankeun Waf tina diréktori tingkat luhur sareng ngahasilkeun file kaluaran di dinya.

Teras: Bab 4

sumber: www.habr.com

Tambahkeun komentar