tutorial simulator jaringan ns-3. bagian 3

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

3 Memulai
3.1 Ikhtisar
3.2 Prasyarat
3.2.1 Mengunduh rilis ns-3 sebagai arsip sumber
3.3 Mengunduh ns-3 menggunakan Git
3.3.1 Memuat ns-3 menggunakan Bake
3.4 Majelis ns-3
3.4.1 Membangun dengan build.py
3.4.2 Membangun dengan Panggang
3.4.3 Membangun dengan Waf
3.5 Pengujian ns-3
3.6 Menjalankan skrip
3.6.1 Argumen baris perintah
3.6.2 Men-debug
3.6.3 Direktori kerja

Bab 3

Mulai

Bab ini dimaksudkan untuk mempersiapkan pembaca untuk memulai dengan komputer yang mungkin belum pernah menginstal ns-3. Ini mencakup platform yang didukung, prasyarat, cara mendapatkan ns-3, cara membangun ns-3, dan cara menguji build Anda dan menjalankan program sederhana.

3.1 Ikhtisar

Simulator ns-3 dibangun sebagai sistem perpustakaan perangkat lunak kolaboratif. Selama perakitan, kode program pengguna dihubungkan dengan perpustakaan ini. Bahasa pemrograman C++ atau Python digunakan untuk menulis program khusus.

Ns-3 didistribusikan sebagai kode sumber, yang berarti sistem target harus memiliki lingkungan pengembangan perangkat lunak untuk membangun perpustakaan terlebih dahulu dan kemudian membangun program pengguna. Pada prinsipnya, ns-3 dapat didistribusikan sebagai perpustakaan siap pakai untuk sistem tertentu, dan di masa depan dapat didistribusikan dengan cara ini. Namun saat ini banyak pengguna yang melakukan pekerjaannya dengan mengedit ns-3 itu sendiri, jadi memiliki kode sumber untuk membangun perpustakaan akan berguna. Jika ada yang ingin melakukan pekerjaan membuat perpustakaan dan paket siap pakai untuk sistem operasi, silakan hubungi milis ns-developer.

Selanjutnya, kita akan melihat tiga cara untuk mendownload dan membangun ns-3. Yang pertama adalah mengunduh dan membuat rilis resmi dari situs utama. Yang kedua adalah pemilihan dan perakitan salinan versi pengembangan instalasi dasar ns-3. Yang ketiga adalah menggunakan alat build tambahan untuk memuat lebih banyak ekstensi untuk ns-3. Kami akan membahas masing-masing karena alatnya sedikit berbeda.

Pengguna Linux berpengalaman mungkin bertanya-tanya mengapa ns-3 tidak disediakan sebagai paket seperti kebanyakan perpustakaan lain yang menggunakan manajer paket? Meskipun ada paket biner untuk berbagai distribusi Linux (misalnya Debian), sebagian besar pengguna akhirnya mengedit perpustakaan dan harus membangun kembali ns-3 sendiri, jadi menyediakan kode sumber sangatlah berguna. Untuk itu kami akan fokus menginstal dari sumber.

Untuk sebagian besar aplikasi hak ns-3 akar tidak diperlukan, disarankan untuk menggunakan akun pengguna yang tidak memiliki hak istimewa.

3.2 Prasyarat

Seluruh rangkaian pustaka ns-3 yang tersedia memiliki sejumlah ketergantungan pada pustaka pihak ketiga, namun sebagian besar ns-3 dapat dibangun dan digunakan dengan dukungan untuk beberapa komponen umum (sering diinstal secara default): kompiler C++, Python, editor kode sumber (misalnya, semangat, emacs ΠΈΠ»ΠΈ Gerhana) dan, jika repositori pengembangan digunakan, sistem kontrol versi Git. Sebagian besar pengguna pemula tidak perlu khawatir jika konfigurasi mereka melaporkan beberapa fitur lanjutan ns-3 hilang, tetapi bagi mereka yang menginginkan instalasi penuh, proyek ini menyediakan wiki yang menyertakan halaman dengan banyak tip dan trik berguna. Salah satu halaman tersebut adalah halaman Instalasi, dengan petunjuk instalasi untuk berbagai sistem, tersedia di: https://www.nsnam.org/wiki/Installation.

Bagian Prasyarat di wiki ini menjelaskan paket mana yang diperlukan untuk mendukung opsi umum ns-3 dan juga menyediakan perintah yang digunakan untuk menginstalnya pada varian umum Linux atau macOS.

Anda dapat memanfaatkan kesempatan ini untuk menjelajahi halaman wiki ns-3 atau situs utama: https://www.nsnam.org, karena banyak informasi disana. Dimulai dengan versi terbaru ns-3 (ns-3.29), alat berikut diperlukan untuk menjalankan ns-3:

Paket/Versi Alat

  • Kompiler C++
    clang++ atau g++ (g++ versi 4.9 atau lebih tinggi)
  • Ular sanca
    versi python2 >= 2.7.10, atau versi python3 >=3.4
  • pergi
    versi terbaru apa pun (untuk mengakses ns-3 di GitLab.com)
  • ter
    versi terbaru apa pun (untuk membongkar rilis ns‑3)
  • bunzip2
    versi terbaru apa pun (untuk membongkar rilis ns‑3)

Untuk memeriksa versi default Python, ketik python -V. Untuk memeriksa versi g++, ketik g++ -v. Jika ada alat yang hilang atau terlalu tua, silakan merujuk ke panduan instalasi di halaman wiki ns-3.

Mulai saat ini, kami berasumsi bahwa pembaca menjalankan Linux, MacOS, atau emulator Linux, dan setidaknya memiliki alat di atas.

3.2.1 Mengunduh rilis ns-3 sebagai arsip sumber

Ini adalah tindakan bagi pengguna baru yang ingin mengunduh dan bereksperimen dengan rilis terbaru dan versi paket ns-3. Rilis ns-3 diterbitkan sebagai arsip sumber terkompresi, terkadang disebut tarbal. tarbal adalah format arsip perangkat lunak khusus yang menggabungkan beberapa file. Arsip biasanya dikompresi. proses booting ns-3 melalui tarbal sederhana, Anda hanya perlu memilih rilis, mengunduh dan membongkarnya.

Anggaplah Anda, sebagai pengguna, ingin membangun ns-3 di direktori lokal bernama ruang kerja. Anda bisa mendapatkan salinan rilis yang berfungsi dengan memasukkan yang berikut ini ke konsol Linux (tentu saja dengan mengganti nomor versi yang sesuai)

$ 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 

Perhatikan utilitas yang digunakan di atas wget, yang merupakan alat baris perintah untuk mengunduh objek dari Internet. Jika Anda belum menginstalnya, Anda dapat menggunakan browser Anda untuk ini.

Mengikuti langkah-langkah ini akan membawa Anda ke direktori ns-allinone-3.29, di sana Anda akan melihat beberapa file dan direktori

$ 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

Anda sekarang siap untuk membangun distribusi ns-3 dasar dan dapat melanjutkan ke bagian membangun ns-3.

3.3 Mengunduh ns-3 menggunakan Git

Kode ns-3 tersedia di repositori Git di GitLab.com di https://gitlab.com/nsnam/. Kelompok nama panggilan menyatukan berbagai repositori yang digunakan oleh proyek sumber terbuka.

Cara termudah untuk mulai menggunakan repositori Git adalah dengan melakukan fork atau mengkloning lingkungan ns-3-allinon. Ini adalah sekumpulan skrip yang mengatur pemuatan dan perakitan subsistem ns-3 yang paling umum digunakan. Jika Anda baru mengenal Git, istilah "fork" dan "clone" mungkin asing bagi Anda; jika iya, kami sarankan Anda cukup mengkloning (membuat salinan sendiri) repositori yang terletak di GitLab.com seperti ini:

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

Pada tahap ini, tampilan direktori Anda ns-3-allinon sedikit berbeda dari direktori arsip rilis yang dijelaskan di atas. Seharusnya terlihat seperti ini:

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

Harap dicatat bahwa ada skrip unduh.py, yang juga akan mengekstrak ns-3 dan kode sumber yang menyertainya. Di sini Anda punya pilihan: unduh snapshot pengembangan ns-3 terbaru:

$ python download.py

atau lebih memilih rilis ns-3 menggunakan bendera -n untuk menunjukkan nomor rilis:

$ python download.py -n ns-3.29

Setelah langkah ini ke direktori ns-3-allinon repositori tambahan akan diunduh ns-3, membakar, pybindgen ΠΈ netanim.

Catatan
Pada mesin dengan Ubuntu16.04 yang bersih, saya perlu mengubah perintah menjadi ini: $ sudo python3 download.py -n ns-3.29 (selanjutnya disebut catatan penerjemah).

3.3.1 Memuat ns-3 menggunakan Bake

Dua metode di atas (arsip sumber atau repositori ns-3-allinon via Git) berguna untuk mendapatkan instalasi ns-3 paling sederhana dengan banyak tambahan (pybindgen untuk menghasilkan binding Python dan netanim untuk animasi jaringan). Repositori ketiga yang disediakan secara default di ns-3-allinone disebut membakar.

Membakar adalah alat untuk membangun perangkat lunak secara terkoordinasi dari berbagai repositori, yang dikembangkan untuk proyek ns-3. Membakar dapat digunakan untuk mendapatkan versi pengembangan ns-3, serta untuk mengunduh dan membangun ekstensi versi dasar distribusi ns-3, seperti lingkungan Eksekusi Kode Langsung, Cradle Simulasi CradleNetwork, kemampuan untuk membuat binding Python baru dan berbagai β€œaplikasi” ns-3.

Catatan
CradleNetwork Simulasi Cradle adalah kerangka kerja yang memungkinkan Anda menggunakan tumpukan jaringan TCP/IP nyata di dalam simulator jaringan.

Jika Anda mengharapkan instalasi ns-3 Anda memiliki fitur lanjutan atau tambahan, Anda dapat mengikuti jalur instalasi ini.

Dalam rilis ns-3 terbaru Membakar telah ditambahkan ke rilis tar. Rilis ini menyertakan file konfigurasi yang memungkinkan Anda mengunduh versi perangkat lunak terkini pada saat rilis. Misalnya, versinya Membakar, yang didistribusikan dengan rilis ns-3.29, dapat digunakan untuk mengambil komponen untuk rilis ns-3 atau yang lebih lama, tetapi tidak dapat digunakan untuk mengambil komponen untuk rilis selanjutnya (jika file deskripsi paket panggangconf.xml tidak diperbarui).

Anda juga bisa mendapatkan salinan terbaru membakardengan memasukkan perintah berikut ke konsol Linux Anda (dengan asumsi Anda telah menginstal Git):

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

Saat Anda menjalankan perintah git, Anda akan melihat sesuatu seperti berikut:

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.

Setelah perintah selesai clone Anda harus memiliki nama direktori membakar, yang isinya akan terlihat seperti ini:

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

Perhatikan bahwa Anda telah memuat beberapa skrip Python, sebuah modul Python bernama membakar dan file konfigurasi XML. Langkah selanjutnya adalah menggunakan skrip ini untuk mengunduh dan membangun distribusi ns-3 pilihan Anda. Beberapa target penyesuaian tersedia:

  1. ns-3.29: modul yang sesuai dengan rilis; itu akan mengunduh komponen yang mirip dengan rilis di tarball;

  2. ns-3-dev: modul serupa, tetapi menggunakan kode dari pohon pengembangan;

  3. ns-allinon-3.29: Modul yang menyertakan fitur tambahan lainnya seperti Perutean klik dan Cradle Simulasi Jaringan, Openflow untuk ns-3.

  4. ns-3-allinon: mirip dengan versi rilis modul semua dalam satu, tetapi untuk kode pengembangan.

Catatan
Klik β€” arsitektur perangkat lunak modular untuk membuat router.

Openflow adalah protokol untuk mengelola proses pemrosesan data yang dikirimkan melalui jaringan data oleh router dan switch, menerapkan teknologi jaringan yang ditentukan perangkat lunak.

Snapshot pengembangan saat ini (non-rilis) ns-3 dapat ditemukan di:https://gitlab.com/nsnam/ns-3-dev.git.

Pengembang mencoba untuk menjaga repositori ini dalam urutan kerja yang konsisten, tetapi mereka berada dalam area pengembangan dan berisi kode yang belum dirilis, jadi jika Anda tidak berencana untuk menggunakan fitur baru, pilih rilis resmi.

Anda dapat menemukan kode versi terbaru dengan menjelajahi daftar repositori, atau dengan membuka halaman web ns-3 Releases:https://www.nsnam.org/releases/ dan mengklik tautan versi terbaru. Dalam contoh ini kita akan melanjutkan dengan ns-3.29.

Sekarang, untuk mendapatkan komponen ns-3 yang kita butuhkan, kita akan menggunakan alat tersebut Membakar. Katakanlah beberapa kata pengantar tentang karya tersebut Membakar.

Bake bekerja dengan memuat sumber paket ke dalam direktori sumber dan menginstal perpustakaan ke dalam direktori build. Membakar dapat dijalankan dengan mereferensikan biner, tetapi jika ingin dijalankan Membakar bukan dari direktori tempat downloadnya, disarankan untuk menambahkan pathnya membakar ke jalur Anda (variabel lingkungan PATH), misalnya sebagai berikut (contoh untuk shell bash Linux). Buka direktori "panggang" dan kemudian atur variabel lingkungan berikut:

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

Ini akan menempatkan programnya panggang.py ke jalur shell dan akan memungkinkan program lain menemukan executable dan perpustakaan yang dibuatnya membakar. Dalam beberapa kasus penggunaan membakar, pengaturan PATH dan PYTHONPATH yang dijelaskan di atas tidak diperlukan, tetapi build lengkap ns-3-allinone (dengan paket tambahan) biasanya memerlukannya.

Buka direktori kerja Anda dan masukkan yang berikut ini di konsol:

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

Selanjutnya kita akan bertanya Membakar periksa apakah kita memiliki cukup alat untuk memuat berbagai komponen. panggil:

$ ./bake.py check

Anda akan melihat sesuatu seperti berikut:

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

Secara khusus, alat unggah seperti Mercurial, CVS, Git, dan Bazaar sangat penting dalam langkah ini karena memungkinkan kita mendapatkan kode. Pada tahap ini, instal alat yang hilang dengan cara biasa di sistem Anda (jika Anda tahu caranya) atau hubungi administrator sistem Anda untuk mendapatkan bantuan.

Selanjutnya coba download softwarenya:

$ ./bake.py download

hasilnya akan seperti ini:

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

Ini berarti tiga sumber telah diunduh. Sekarang masuk ke direktori sumber dan ketik ls; Anda akan melihat:

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

Sekarang Anda siap untuk membangun distribusi ns-3.

3.4 Majelis ns-3

Seperti halnya mendownload ns-3, ada beberapa cara untuk membangun ns-3. Hal utama yang ingin kami tekankan adalah bahwa ns-3 dibangun menggunakan alat build yang disebut Wafdijelaskan di bawah ini. Sebagian besar pengguna akan bekerja dengannya Waf, namun ada beberapa skrip berguna untuk membantu Anda memulai atau mengatur pembangunan yang lebih kompleks. Jadi tolong, sebelum Anda membaca tentang Waf, melihat build.py dan perakitan dengan membakar.

3.4.1 Membangun dengan build.py

Peringatan! Langkah build ini hanya tersedia dari versi arsip sumber yang diperoleh seperti dijelaskan di atas; dan tidak diunduh melalui git atau panggang.

Saat bekerja dengan arsip rilis tarbalDi ns-3-allinon Ada skrip praktis yang dapat mempermudah perakitan komponen. Ini disebut build.py. Program ini akan menyiapkan proyek untuk Anda dengan cara yang paling berguna. Namun, perhatikan bahwa pengaturan lebih lanjut dan bekerja dengan ns-3 biasanya melibatkan penggunaan sistem build ns-3 sendiri, Waf, yang akan diperkenalkan nanti dalam tutorial ini.

Jika Anda mengunduh menggunakan tarbal, lalu di direktori Anda ~/ruang kerja direktori dengan nama seperti itu ns-allinon-3.29. Masukkan berikut:

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

Saat dipanggil build.py Kami menggunakan argumen baris perintah untuk membuat contoh dan pengujian yang digunakan dalam tutorial ini, yang tidak dibuat secara default di ns-3. Secara default, program ini juga membangun semua modul yang tersedia. Kemudian, jika diinginkan, Anda dapat membuat ns-3 tanpa contoh dan pengujian, atau mengecualikan modul yang tidak diperlukan untuk pekerjaan Anda.

Anda akan melihat banyak pesan keluaran kompiler yang ditampilkan oleh skrip saat skrip membangun berbagai bagian yang telah Anda muat. Pertama skrip akan mencoba membangun animator netanim, lalu generator pengikat pybindgen dan akhirnya ns-3. Ketika proses selesai, Anda akan melihat yang berikut:

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

Dalam tiga baris terakhir dari daftar kita melihat pesan tentang modul yang tidak dibangun:

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

Artinya, beberapa modul ns-3 yang bergantung pada pustaka eksternal mungkin belum dibuat, atau tidak perlu dibuat untuk konfigurasi ini. Ini tidak berarti bahwa simulator tidak dirakit atau modul yang dirakit tidak akan berfungsi dengan benar.

3.4.2 Membangun dengan Panggang

Jika Anda menggunakan panggang di atas untuk mendapatkan kode sumber dari repositori proyek, Anda dapat terus menggunakannya untuk membangun ns-3. panggil:

$ ./bake.py build

dan Anda akan melihat sesuatu seperti:

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

mengingatkan: Anda juga dapat melakukan langkah pengunduhan dan pembuatan sekaligus dengan memanggil "bake.py deploy".

Perakitan semua komponen mungkin gagal, namun perakitan akan dilanjutkan jika komponen tidak diperlukan. Misalnya, masalah portabilitas baru-baru ini adalah itu castxml dapat dirakit dengan alat membakar tidak di semua platform. Dalam hal ini, pesan seperti ini akan 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.

Tetapi castxml hanya diperlukan jika Anda ingin membuat binding Python yang diperbarui. Bagi sebagian besar pengguna, hal ini tidak diperlukan (setidaknya sampai mereka mengubah ns-3), sehingga peringatan tersebut dapat diabaikan dengan aman untuk saat ini.

Jika gagal, perintah berikut akan memberi Anda petunjuk tentang dependensi yang hilang:

$ ./bake.py show

Berbagai dependensi paket yang Anda coba buat akan dicantumkan.

3.4.3 Membangun dengan Waf

Hingga saat ini, untuk mulai membangun ns-3, kami menggunakan salah satu skripnya build.py, atau alat membakar. Alat-alat ini berguna untuk membangun ns-3 dan memelihara perpustakaan. Faktanya, untuk membangun mereka menjalankan alat build Waf dari direktori ns-3. Waf diinstal dengan kode sumber ns-3. Sebagian besar pengguna dengan cepat beralih ke penggunaan langsung untuk mengonfigurasi dan merakit ns‑3 Waf. Nah untuk melanjutkan silahkan masuk ke direktori ns-3 yang telah anda buat sebelumnya.

Hal ini tidak sepenuhnya diperlukan saat ini, namun akan berguna untuk melihat kembali sedikit dan melihat bagaimana membuat perubahan pada konfigurasi proyek. Mungkin perubahan konfigurasi paling berguna yang dapat Anda lakukan adalah membuat versi kode yang dioptimalkan. Secara default, Anda telah mengonfigurasi proyek Anda untuk membuat versi debug. Mari kita lihat proyek untuk membuat build yang dioptimalkan. Untuk menjelaskan kepada Waf bahwa ia harus membuat build yang dioptimalkan yang menyertakan contoh dan pengujian, Anda perlu menjalankan perintah berikut:

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

Ini akan diluncurkan Waf di luar direktori lokal (untuk kenyamanan Anda). Perintah pertama membersihkan dari build sebelumnya, ini biasanya tidak sepenuhnya diperlukan, tetapi ini merupakan praktik yang baik (lihat juga profil build di bawah); ini akan menghapus perpustakaan dan file objek yang dibuat sebelumnya yang terletak di direktori membangun/. Ketika proyek dikonfigurasi ulang dan sistem pembangunan memeriksa berbagai dependensi, Anda akan melihat keluaran yang serupa dengan berikut:

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)

Harap perhatikan bagian terakhir dari daftar di atas. Beberapa opsi ns-3 tidak diaktifkan secara default atau memerlukan dukungan sistem agar berfungsi dengan baik. Misalnya, untuk mengaktifkan XmlTo, perpustakaan harus ada di sistem libxml-2.0. Jika perpustakaan ini tidak ditemukan dan fungsi ns-3 terkait tidak diaktifkan, sebuah pesan akan ditampilkan. Perhatikan juga bahwa dimungkinkan untuk menggunakan perintah tersebut sudo untuk menyetel bit suid β€œset group ID at runtime” untuk program tertentu. Ini tidak diaktifkan secara default dan oleh karena itu fitur ini muncul sebagai β€œtidak diaktifkan”. Terakhir, untuk mendapatkan daftar opsi yang diaktifkan, gunakan Waf dengan parameter --check-config.

Sekarang mari kita kembali dan beralih kembali ke build debug yang berisi contoh dan pengujian.

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

Sistem pembangunan sekarang sudah diatur dan Anda dapat membuat versi debug program ns-3 hanya dengan mengetik:

$ ./waf

Langkah-langkah di atas mungkin memaksa Anda untuk membangun bagian dari sistem ns-3 dua kali, tetapi sekarang Anda tahu cara mengubah konfigurasi dan membuat kode yang dioptimalkan.

Untuk memeriksa profil mana yang aktif untuk konfigurasi proyek tertentu, ada perintah:

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

Skenario di atas build.py juga mendukung argumen --enable-examples ΠΈ --enable-tests, tapi opsi lain Waf itu tidak mendukung secara langsung. Misalnya, ini tidak akan berhasil:

$ ./build.py --disable-python

reaksinya akan seperti ini:

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

Namun, operator khusus - - dapat digunakan untuk meneruskan parameter tambahan melalui WAFjadi alih-alih perintah di atas, perintah berikut akan berfungsi:

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

karena menghasilkan perintah utama ./waf konfigurasikan --disable-python. Berikut ini beberapa tip pengantar lainnya Waf.

Menangani kesalahan build

Rilis ns-3 diuji pada kompiler C++ terbaru yang tersedia pada saat rilis pada distribusi Linux dan MacOS umum. Namun, seiring berjalannya waktu, distribusi baru dirilis dengan kompiler baru, dan kompiler baru ini cenderung lebih bertele-tele dalam hal peringatan. ns-3 mengonfigurasi build-nya untuk memperlakukan semua peringatan sebagai kesalahan, jadi terkadang jika Anda menjalankan versi lama di sistem yang lebih baru, peringatan compiler dapat menghentikan build.

Misalnya, sebelumnya ada rilis ns‑3.28 untuk Fedora 28, yang menyertakan versi mayor baru gcc (gcc-8). Membangun rilis ns-3.28 atau versi sebelumnya di bawah Fedora 28, dengan Gtk2+ diinstal, kesalahan berikut akan terjadi:

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

Dalam rilis mulai dari ns‑3.28.1, in Waf ada pilihan yang tersedia untuk memecahkan masalah ini. Ini menonaktifkan pengaturan tanda "-Werror" di g++ dan clang++. Ini adalah opsi "--disable-werror" dan harus diterapkan selama konfigurasi:

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

Konfigurasikan atau rakit

Beberapa perintah Waf memiliki arti hanya pada tahap konfigurasi, dan ada pula yang hanya valid pada tahap build. Misalnya jika Anda ingin menggunakan fitur emulasi ns-3, Anda dapat mengaktifkan pengaturan bit SUID menggunakan sudo, seperti dijelaskan di atas. Ini akan mengesampingkan perintah tahap konfigurasi, dan dengan demikian Anda dapat mengubah konfigurasi menggunakan perintah berikut, yang juga mencakup contoh dan pengujian.

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

Jika kamu melakukan ini Waf akan diluncurkan sudountuk mengubah program pembuatan soket kode emulasi agar dijalankan dengan izin akar. Di Waf Ada banyak opsi lain yang tersedia untuk konfigurasi dan langkah-langkah pembuatan. Untuk menjelajahi pilihan Anda, masukkan:

$ ./waf --help

Di bagian selanjutnya kita akan menggunakan beberapa opsi terkait pengujian.

Profil Perakitan

Kami telah melihat bagaimana Anda dapat mengonfigurasinya Waf untuk majelis men-debug ΠΈ dioptimalkan:

$ ./waf --build-profile=debug

Ada juga profil perakitan perantara, melepaskan. Pilihan -d identik dengan --build-profile. Profil build mengontrol penggunaan logging, pernyataan, dan sakelar pengoptimalan kompiler:

tutorial simulator jaringan ns-3. bagian 3

Seperti yang Anda lihat, logging dan pernyataan hanya tersedia di build debug. Praktik yang disarankan adalah mengembangkan skrip Anda dalam mode debug, lalu menjalankan proses berulang (untuk statistik atau perubahan parameter) dalam profil build yang dioptimalkan.

Jika Anda memiliki kode yang hanya boleh dijalankan di profil build tertentu, gunakan Makro Pembungkus Kode:

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

Bawaan, Waf menempatkan artefak bangunan di direktori build. Anda dapat menentukan direktori keluaran yang berbeda menggunakan opsi -β€―-out, misalnya:

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

Dengan menggabungkan ini dengan profil build, Anda dapat dengan mudah beralih di antara opsi kompilasi yang berbeda:

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

Yang memungkinkan Anda bekerja dengan banyak rakitan tanpa harus menulis ulang rakitan terbaru setiap saat. Saat Anda beralih ke profil lain, Waf akan mengkompilasinya saja, tanpa mengkompilasi ulang semuanya sepenuhnya.

Saat Anda mengganti profil build dengan cara ini, Anda harus berhati-hati untuk memberikan opsi konfigurasi yang sama setiap saat. Mendefinisikan beberapa variabel lingkungan akan membantu Anda menghindari kesalahan:

$ 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

Kompiler dan bendera

Dalam contoh di atas Waf untuk membangun ns-3 menggunakan kompiler C++ dari GCC ( g ++). Namun, Anda dapat mengubah yang Anda gunakan Waf Kompiler C++, dengan mendefinisikan variabel lingkungan CXX. Misalnya untuk menggunakan kompiler C++ Clang, clang++,

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

Dengan cara yang sama Anda dapat mengkonfigurasi Waf untuk menggunakan kompilasi terdistribusi menggunakan distcc:

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

Informasi lebih lanjut tentang distcc dan kompilasi terdistribusi dapat ditemukan di halaman proyek di bagian Dokumentasi. Untuk menambahkan flag compiler saat mengonfigurasi ns-3, gunakan variabel lingkungan CXXFLAGS_EXTRA.

Instalasi

Waf dapat digunakan untuk menginstal perpustakaan di berbagai tempat pada sistem. Secara default, perpustakaan dan file executable yang dikompilasi terletak di direktori membangun, dan karena Waf mengetahui lokasi perpustakaan dan executable ini, maka tidak perlu menginstal perpustakaan di tempat lain.

Jika pengguna lebih memilih untuk menginstal di luar direktori build, mereka dapat menjalankan perintah ./waf instal. Awalan default untuk instalasi adalah / usr / localJadi ./waf instal akan menginstal program di / usr / local / bin, perpustakaan di / Usr / local / lib dan file header di /usr/local/include. Hak pengguna super biasanya perlu disetel dengan awalan default, jadi perintah umumnya adalah sudo ./waf instal. Saat diluncurkan, Waf pertama-tama akan memilih untuk menggunakan perpustakaan bersama di direktori build, kemudian mencari perpustakaan di sepanjang jalur ke perpustakaan yang dikonfigurasi di lingkungan lokal. Jadi ketika menginstal perpustakaan pada suatu sistem, praktik yang baik adalah memeriksa apakah perpustakaan yang tepat sedang digunakan. Pengguna dapat memilih untuk menginstal dengan awalan berbeda dengan meneruskan opsi selama konfigurasi --prefix, misalnya:

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

Jika nanti, setelah build, pengguna memasukkan perintah instalasi ./waf, awalan akan digunakan /opt/lokal.

Tim ./waf clean harus digunakan sebelum mengkonfigurasi ulang proyek jika instalasi akan digunakan Waf di bawah awalan yang berbeda.

Jadi, untuk menggunakan ns-3 tidak perlu menelepon ./waf install. Sebagian besar pengguna tidak memerlukan perintah ini karena Waf akan mengambil perpustakaan saat ini dari direktori build, namun beberapa pengguna mungkin menganggap ini berguna jika aktivitas mereka melibatkan bekerja dengan program di luar direktori ns-3.

Waf lajang

Di tingkat atas pohon sumber ns-3, hanya ada satu skrip Waf. Setelah Anda mulai bekerja, Anda akan menghabiskan banyak waktu di direktori scratch/ atau lebih dalamsrc/... dan pada saat yang sama harus berlari Waf. Anda cukup mengingat di mana Anda berada dan lari Waf sebagai berikut:

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

tapi ini akan membosankan dan rawan kesalahan, jadi ada solusi yang lebih baik. Salah satu cara yang umum adalah dengan menggunakan editor teks seperti emacs ΠΈΠ»ΠΈ semangat, di mana dua sesi terminal dibuka, satu digunakan untuk membangun ns-3, dan yang kedua digunakan untuk mengedit kode sumber. Jika Anda hanya punya tarbal, maka variabel lingkungan dapat membantu:

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

$ cd scratch 
$ waff build

Di direktori modul mungkin tergoda untuk menambahkan skrip waf yang sepele seperti exec ../../waf. Tolong, jangan lakukan itu. Hal ini membingungkan bagi pemula dan, jika dilakukan dengan buruk, menyebabkan kesalahan build yang sulit dideteksi. Solusi yang ditunjukkan di atas adalah jalur yang harus digunakan.

3.5 Pengujian ns-3

Anda dapat menjalankan pengujian unit distribusi ns-3 dengan menjalankan skrip ./test.py:

$ ./test.py

Tes ini dijalankan secara paralel dengan Waf. Akhirnya Anda akan melihat pesan yang mengatakan:

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

Ini adalah pesan penting untuk mengidentifikasi valgrind crash, crash atau error, menunjukkan masalah dengan kode atau ketidakcocokan antara alat dan kode.

Anda juga akan melihat hasil akhir dari Waf dan penguji yang menjalankan setiap pengujian, yang akan terlihat seperti ini:

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)

Perintah ini biasanya dijalankan oleh pengguna untuk memverifikasi dengan cepat bahwa distribusi ns-3 dibuat dengan benar. (Perhatikan bahwa urutan baris "LULUS: ..." mungkin berbeda, ini normal. Yang penting adalah baris ringkasan di akhir laporan menunjukkan bahwa semua pengujian lulus; tidak ada pengujian yang gagal atau terhenti.) Dan WafDan tes.py akan memparalelkan pekerjaan di seluruh inti prosesor mesin yang tersedia.

3.6 Menjalankan skrip

Kami biasanya menjalankan skrip di bawah kendali Waf. Hal ini memungkinkan sistem pembangunan untuk memastikan bahwa jalur perpustakaan bersama diatur dengan benar dan perpustakaan tersedia saat runtime. Untuk menjalankan program, cukup gunakan Waf dengan parameter -β€―-run. Mari kita jalankan program ns-3 yang setara dengan program yang ada di mana-mana halo duniadengan mengetik berikut ini:

$ ./waf --run hello-simulator

Waf pertama-tama akan memeriksa apakah program tersebut dibangun dengan benar dan membangun jika diperlukan. Kemudian Waf akan menjalankan program yang menghasilkan output berikut.

Hello Simulator

Selamat! Anda sekarang adalah pengguna ns-3!

Apa yang harus saya lakukan jika saya tidak melihat hasilnya?

Jika Anda melihat pesan Wafmenunjukkan bahwa pembangunan berhasil diselesaikan, tetapi Anda tidak melihat hasilnya "Halo Simulator", maka ada kemungkinan di bagian [Build-with-Waf] Anda mengganti mode build Anda dioptimalkan, tetapi gagal beralih kembali ke mode tersebut men-debug. Semua keluaran konsol yang digunakan dalam tutorial ini menggunakan komponen ns-3 khusus yang melakukan pencatatan dan digunakan untuk mencetak pesan khusus ke konsol. Output dari komponen ini secara otomatis dinonaktifkan ketika kode yang dioptimalkan dikompilasi - ini adalah "dioptimalkan". Jika Anda tidak melihat keluaran "Hello Simulator", masukkan yang berikut ini:

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

untuk mengkonfigurasi Waf untuk membangun versi debug program ns-3, yang mencakup contoh dan pengujian. Anda kemudian harus membangun kembali versi debug kode saat ini dengan mengetik

$ ./waf

Sekarang jika Anda menjalankan programnya halo-simulator, Anda akan melihat hasil yang diharapkan.

3.6.1 Argumen baris perintah

Untuk meneruskan argumen baris perintah ke program ns-3, gunakan pola berikut:

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

Mengganti ke nama program Anda dan argumennya. Argumen -β€―-command-template untuk Waf pada dasarnya adalah resep untuk membangun baris perintah yang sebenarnya Waf digunakan untuk menjalankan program. Waf memeriksa apakah pembangunan telah selesai, menetapkan jalur perpustakaan bersama, kemudian menggunakan templat baris perintah yang disediakan dan mengganti nama program dengan placeholder %s untuk memanggil executable. Jika Anda merasa sintaksis ini rumit, ada versi yang lebih sederhana yang melibatkan program ns-3 dan argumennya diapit dalam tanda kutip tunggal:

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

Contoh lain yang sangat berguna adalah menjalankan rangkaian pengujian secara selektif. Mari kita asumsikan ada rangkaian pengujian yang disebut mytest (sebenarnya tidak ada). Di atas kami menggunakan skrip ./test.py untuk menjalankan sejumlah pengujian secara paralel, yang berulang kali memanggil program pengujian ujian-pelari. Panggilan ujian-pelari langsung untuk menjalankan satu tes:

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

Argumen akan diteruskan ke program ujian-pelari. Karena mytest tidak ada, pesan kesalahan akan dihasilkan. Untuk mencetak opsi test-runner yang tersedia, masukkan:

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

3.6.2 Men-debug

Untuk menjalankan program ns-3 di bawah utilitas lain, seperti debugger (misalnya, gdb) atau alat uji memori (misalnya, valgrind), gunakan formulir serupa -β€―-command-template = "…". Misalnya, untuk dijalankan di debugger gdb program hello-simulator ns-3 Anda dengan argumen:

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

Perhatikan bahwa nama program ns-3 disertai dengan argumen -β€―-run, dan utilitas manajemen (di sini gdb) adalah token pertama dalam argumen -β€―-command-template. Pilihan -β€―-args laporan gdbbahwa sisa baris perintah milik program "lebih rendah". (Beberapa versi gdb tidak mengerti pilihannya -β€―-args. Dalam hal ini, hapus argumen program dari -β€―-command-template dan gunakan set perintah gdb args.) Kita dapat menggabungkan resep ini dan resep sebelumnya untuk menjalankan pengujian di bawah debugger:

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

3.6.3 Direktori kerja

Waf harus diluncurkan dari lokasinya di bagian atas pohon ns-3. Folder ini menjadi direktori kerja tempat file keluaran akan ditulis. Namun bagaimana jika Anda ingin menyimpan file-file ini di luar pohon sumber ns-3? Gunakan argumen -β€―-cwd:

$ ./waf --cwd=...

Anda mungkin merasa lebih nyaman untuk mendapatkan file keluaran di direktori kerja Anda. Dalam hal ini, tindakan tidak langsung berikut dapat membantu:

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

Dekorasi dari versi perintah sebelumnya ini mempertahankan direktori kerja saat ini, masuk ke direktori Wafdan kemudian menginstruksikan Waf untuk mengubah direktori kerja kembali ke direktori kerja saat ini yang disimpan sebelum memulai program. Kami menyebutkan tim -β€―-cwd Untuk kelengkapannya, sebagian besar pengguna cukup menjalankan Waf dari direktori tingkat atas dan menghasilkan file keluaran di sana.

Lanjutan: Bab 4

Sumber: www.habr.com

Tambah komentar