Anda di halaman 1dari 104

DAFTAR ISI

DAFTAR ISI ................................................................................................................................................... 2

UBUNTU ............................................................................................................................................. 4
Sekilas Tentang Ubuntu .................................................................................................................... 4
Perintah dasar Ubuntu ..................................................................................................................... 5
Kepemilikan File dan Hak Akses pada Ubuntu .............................................................................. 12
Super User Do (sudo) ............................................................................................................. 12
Kepemilikan File .................................................................................................................... 12
Hak Akses ............................................................................................................................... 12

INSTALASI NS3 ...............................................................................................................................16


Download ns-allinone-3.25 ............................................................................................................ 16
Ekstrak ns-allinone-3.25 ................................................................................................................. 16
Download dan install paket depedency NS3................................................................................... 17
Instalasi NS-3.25 ............................................................................................................................ 17
Installasi NetAnim .......................................................................................................................... 20

NETWORK SIMULATOR 3 ...........................................................................................................21


Network Simulator 3 ....................................................................................................................... 21
Kelebihan ................................................................................................................................ 21
Contoh Simulasi NS3 ............................................................................................................. 22
Implementasi .......................................................................................................................... 22
Konsep Dasar NS3 .................................................................................................................. 22
C++ pada NS3 ............................................................................................................................... 26
Dasar Bahasa C++ ........................................................................................................................ 26
Pemrograman Berbasis Objek ........................................................................................................ 27
Tipe Data ........................................................................................................................................ 27
Konstanta ................................................................................................................................ 29
Operator ......................................................................................................................................... 29
Fungsi Main() ................................................................................................................................. 29
Command ........................................................................................................................................ 30
Memanggil Library yang tersedia .................................................................................................. 30
Struktur ........................................................................................................................................... 31
Seleksi Kondisi................................................................................................................................ 31
Repetisi (Loop) ............................................................................................................................... 32
For .......................................................................................................................................... 32
While ...................................................................................................................................... 33
Do-While ................................................................................................................................ 33

SIMULASI P2P .................................................................................................................................34

2|Access Academy Training 2016


Simulasi NS-3 PointToPoint ........................................................................................................ 34
PointToPoint ........................................................................................................................... 34
Script For Netanim ................................................................................................................. 39

SIMULASI CSMA ............................................................................................................................41


Simulasi NS-3 CSMA ................................................................................................................... 41
CSMA ..................................................................................................................................... 41

SIMULASI WIRELESS AP-CLIENT ............................................................................................48


WIRELESS AP-CLIENT ................................................................................................................. 48
Simulasi Wireless AP-CLIENT ....................................................................................................... 49

SIMULASI P2P * CSMA * WIFI ....................................................................................................55


Simulasi NS 3 P2P * CSMA * WIFI ............................................................................................ 55
Simulation............................................................................................................................... 55

traffic and data collection .................................................................................................................63


Traffic Generation .......................................................................................................................... 63
Implementasi .......................................................................................................................... 63
Generate Packet ...................................................................................................................... 64
8.1.2.1 UDP Packet......................................................................................................................... 64
8.1.2.2 TCP Packet ......................................................................................................................... 65
Data Colllection ............................................................................................................................. 66

Manet & vanet ...................................................................................................................................67


MANET ........................................................................................................................................... 67
Karakteristik MANET ............................................................................................................ 67
Routing Protokol..................................................................................................................... 68
Script for MANET .................................................................................................................. 69
VANET ............................................................................................................................................ 74
Karakteristik VANET ............................................................................................................. 75
Routing Protokol..................................................................................................................... 76
Script for VANET .................................................................................................................. 77

Mobility model .................................................................................................................................82


Mobility Model ............................................................................................................................... 82
Position Allocator ................................................................................................................... 82
Mobility Model ....................................................................................................................... 82

Openflow model ...............................................................................................................................83


OPENFLOW ................................................................................................................................... 83

LTE Model .......................................................................................................................................90


LTE MODEL .................................................................................................................................. 90

3|Access Academy Training 2016


UBUNTU

Sekilas Tentang Ubuntu

Ubuntu merupakan sistem operasi yang berasal dari UNIX, dimana UNIX
menggunakan interface baris perintah (command line), maka interface pengguna
berbasis grafik dengan jendela, setiap icon dan menu pada sistem operasi linux
dibangun di atas dasar interface baris perintah (command line) .
Pengguna Ubuntu memang tidak diharuskan untuk memahami perintah-perintah
dasar pada sistem operasinya, namun sebagai pembelajaran mengenai proses
didalamnya perintah dasar Linux dan Ubuntu sebaiknya dipelajari.

Gambar 1.1 Tampilan Ubuntu 12.04

Setiap perintah akan di eksekusi melalui Terminal/Console. Ada beberapa cara untuk
membuka Terminal / Console, diantaranya :
Membuka dengan shortcut CTRL + ALT + T
Dash Menu -> ketikan terminal -> klik terminal.

4|Access Academy Training 2016


Gambar 1.2 Search Terminal

Perintah dasar Ubuntu

Perintah-perintah (command) dasar di GNU/Linux di jalankan di suatu terminal shell


yang biasa disebut terminal atau console. Terminal atau console ini dikenal dengan
istilah command line interface (CLI) yang bisa diaktifkan dengan cara klik menu
Applications Accessories Terminal. Selain itu bisa juga dengan bekerja diconsole
murni dengan menakan kombinasi tombol ctrl+alt+F1 dimana F1 bisa diganti sampai
F6. Untuk kembali ke mode Grafical User Interface (GUI) tekan ctrl+alt+F7.
Berikut ini hanya beberapa command yang umum terdapat di setiap distribusi
GNU/Linux khususnya distribusi Ubuntu.

1. mkdir (make directories)


Perintah membuat direktori :
mkdir <nama folder>
Contoh : Membuat direktori dengan nama akses

mkdir akses
Setelah membuat direktori melalui terminal, maka akan terdapat folder aktif yang
dibuat sesuai dengan namanya.

5|Access Academy Training 2016


2. ls (list)

Jika memasukan perintah ls, maka console akan menampilkan semua data dan folder
pada direktori tersebut.

Gambar 1.3 Perintah ls

Perintah ls dapat ditambahkan dengan atribut untuk kepentingan lainnya diantaranya:


ls -l
menampilkan setiap list file dengan atribut seperti user, permission, size, dan date
modify.
ls -a
menampilkan setiap daftar list file dan hidden file di dalam direktori sekarang tanpa
atribut apapun.
ls -al

menggabungkan opsi perintah -l dan -a untuk ls.


ls /home/akses
menampilkan list dari file /home/akses ketika kita sedang berada di direktori
sekarang.

3. cd (change directory)

Jika memasukan perintah cd, maka console akan berpindah ke direktori yang
diinginkan.

Gambar 1.4 Perintah cd

6|Access Academy Training 2016


Berikut adalah perintah perintah cd yang tersedia :
cd direktori/
pindah direktori ke direktori yang berada di dalam direktori sekarang.

cd
pindah ke direktori home.
cd ~

pindah ke direktori home.


cd ..
pindah ke direktori sebelumnya.
cd ../../../n

pindah n direktori sebelumnya.


cd /bin
pindah ke direktori tanpa harus mundur ke direktori sebelumnya. Akan pindah jika
direktori tersebut ada dan penulisan nama direktorinya benar.

4. cp (copy)

Perintah cp digunakan untuk mengkopi file atau folder dan folder tersebut harus
sudah terbuat. Jika belum terbuat maka file tersebut akan dikopi dengan nama baru.
cp <file> /path/ke/direktori/nama_file
mengkopi file tertentu ke direktori tertentu.
cp -r <folder> /path/ke/direktori/sesuatu

mengkopi folder tertentu secara rekursif ke direktori tertentu.


cp *.extension /path/ke/direktori/sesuatu
mengkopi file file yang berekstensi tertentu ke direktori tertentu.
cp nama* /path/ke/direktori/sesuatu
mengkopi file file yang namanya diawali dengan nama ke direktori tertentu.

5. mv (move)

Perintah mv mempunyai cara kerja yang hampir sama dengan cp. mv memindahkan
file atau folder, sedangkan cp mengkopi file atau folder.

7|Access Academy Training 2016


6. rm (remove)

Perintah rm digunakan untuk menghapus file atau folder. Mempunyai cara kerja yang
hampir sama dengan cp maupun mv.

7. adduser
Untuk menambahkan user baru pada Ubuntu.
adduser <nama user baru>

8. login
Untuk masuk ke user lain. Setiap pemakai sah dari sistem UNIX mempunyai identifikasi
pemakai sendiri (ID).

9. password
Untuk memasukkan kata sandi setelah login. Untuk pemakai yang baru didaftar oleh
Super User maka user tidak perlu memasukkan kata sandi. Untuk menjaga
kerahasiaan, pengetikan tombol password tidak ditampilkan di layar.

10.who
Untuk mengetahui daftar pemakai yang sedang aktif (login).

11. finger
Finger mempunyai kegunaan hampir sama dengan who, hanya saja finger
menyediakan informasi identitas user yang lebih lengkap dari ada who.

12. logout
Untuk keluar dari sistem atau mengakhiri satu sesi login. Bila pemakai akan mengakhiri
penggunaan terminal sebaiknya menjalankan perintah ini, agar hak akses pada log in-
nya tidak disalahgunakan oleh orang lain yang tidak berhak.

13.exit
Untuk keluar dari sistem . Sama dengan perintah log out.

14. whoami
Untuk mengetahui user siapa yang digunakan sedang login di suatu
komputer/terminal. Digunakan bila menemukan terminal yang belum logout atau exit
dan ingin mengetahui milik siapa terminal tersebut diaktifkan.

15.date
Menunjukkan atau mengatur tanggal.

8|Access Academy Training 2016


16.cal
Mencetak kalender mulai tahun 0000 s/d 9999.

17.chmod
Mengubah permission suatu direktori/file.

18.clear
Untuk membersihkan layar. Bisa juga dengan kombinasi tombol ctrl+D.

19.cmp
Membandingkan file1 dan file2 serta laporkan perbedaannya.
cmp <file1> <file2>
Perintah ini tidak akan melaporkan apa-apa jika file tersebut identik (sama persis).

20.cat
Menampilkan isi sebuah file.
cat <nama file>
Cat berfungsi untuk mencetak ke layar monitor isi dari sebuah file text. Jika file dililihat
menggunakan perintah ini bukan file text maka akan keluar karakterkarakter aneh
pada layar. Untuk menghindari tercetaknya karakter-karakter aneh tersebut dapat
digunakan perintah cat v.

21.more
Menampilkan isi text file per layar.
more <nama file>
Dengan perintah ini isi file dapat ditampilkan perlayar sehingga dapat diperiksa secara
detail. Tekan spasi untuk melihat isi file di layar berikutnya.

22.history
Menampilkan perintah-perintah yang telah digunakan sebelumnya.

23.wc
Menghitung jumlah kata, jumlah baris dan jumlah karakter dalam suatu file.
wc <nama file>

24. man
Singkatan dari manual yaitu untuk menampilkan halaman manual untuk semua
perintah UNIX.
man <nama perintah>
9|Access Academy Training 2016
Perintah ini sangat bermanfaat bagi setiap pemakai UNIX karena dapat membantu
mengingat kembali perintah-perintah UNIX.

25.grep
Mencari isi suatu file di sembarang directori.
grep -n <nama file dengan petik> <direktori yang akan dicari>
Perintah grep akan mencari suatu variable dalam suatu baris tertentu, di dalam
sembarang direktori pada semua file. Grep sangat berguna untuk menemukan kata
tertentu dalam beberapa dokumen atau mencari adanya sebuah variable dalam
sekelompok program. Misalnya :
grep -n shutdown /etc/*

26.rmdir (Menghapus Direktori)


Menghapus direktori yang kosong .
rmdir <nama direktori>
Semisal untuk menghapus lebih dari 1 direktori dapat dilakukan dengan :
rmdir <folder1> <folder2> <folder3>
Jika directori yang dihapus tidak ada maka akan ditampilkan pesan.

27.pwd
Menunjukkan direktori aktif.

28. ps
Digunakan untuk memonitoring informasi tentang proses yang aktif dalam sistem
UNIX.
ps -aux

29. kill
Digunakan untuk menghentikan proses yang sedang berjalan.
kill <id-proses>

Id proses dapat dilihat pada kolom PID pada keluaran perintah ps -aux diatas.

30.&
Menjalankan program di belakang layar (multitasking).
<nama perintah> <nama program> &

10 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
31. bc
Perintah bc dapat digunakan sebagai calculator. Fasilias ini tida ada pada versi UNIX
standar.

32.pr
Mencetak isi file ke printer.
pr (nama file) > /dev/lp0

33.write
Mengirim pesan ke pemakai yang sedang login.
write <user tujuan>
Write akan membuat hubungan dari keyboard ke layar pemakai yang ditentukan. Apa
saja yang diketikkan dari keyboard akan tampak di layar penerima.

34.mesg
Menolak pesan dari pemakai lain. Kita dapat juga menolak pesan yang dikirim dengan
memakai perintah write.
mesg <y atau n>

Perintah ini tidak dapat menolak ijin bagi super user untuk mengirim pesan.

35.mail (Penerima)
Mengirimkan dan membaca pesan berupa surat.

mail <user tujuan>


Mail adalah sebuah program pengiriman elektronik yang mengirimkan pesan ke user
lain atau membaca pesan dari user lainnya.

36.wall
Pengiriman pesan oleh super user. Bagi super user, sistem operasi UNIX menyediakan
pengiriman pesan keseluruhan pemakai yang sedang log in saat itu dan perintah ini
hanya dapat dilakukan oleh super user.

11 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Kepemilikan File dan Hak Akses pada Ubuntu

Super User Do (sudo)


Sudo adalah sebuah perintah dalam command-line Linux. Apabila anda memiliki
akses root, maka sudo akan melakukan perintah sebagai superuser. Pengguna
sudo dan perintah-perintah yang dapat mereka pergunakan terdapat pada file
konfigurasi, /etc/sudoers. Apabila seorang pengguna yang tidak berhak mencoba
menjalankan perintah, sudo akan memberitahu administrator melalui e-mail.
Secara default, pemberitahuan peringatan ini akan disimpan di akun root.
Pengguna yang mencoba menjalankan perintah akan diminta mengisikan
password.

Kepemilikan File
Setiap file di sistem Linux readers, termasuk direktori (folder), dimiliki oleh
pengguna dan grup tertentu. Oleh karena itu, hak akses file di definisikan secara
terpisah untuk User, Grup, dan Others (pengguna lain).
User : username orang yg memiliki file. Secara default, pengguna yg
menciptakan file tersebut akan menjadi pemilik file tersebut.
Grup : Grup User yang memiliki File tersebut. Semua pengguna yang
masuk ke dalam kelompok mempunyai hak akses yang sama untuk
file tersebut.
Others : Pengguna yang bukan pemilik file dan tisak masuk ke dalam
kelompok yang sama. Dengan kata lain jika readers menetapkan
izin untuk others maka orang yg tidak memiliki file atau grup
inilah yang akan terkena pengaruhnya.

Hak Akses
Ada tiga jenis izin hak akses di Linux yaitu Read, Write, Execute.
Read : Pada file biasa, ini berarti file dapat di buka dan di baca. Jika pada
sebuah direktori, berarti readers bisa melihat isi direktori tersebut.
Write : Pada file biasa, ini berarti file dapat di modifikasi (menambah,
mengubah, menghapus, mengubah nama file dalam direktori).
Execute : Pada file biasa, ini berarti readers bisa menjalankan file sebagai
program atau shell script. Pada sebuah direktori, execute (atau
biasa di sebut search bit) memungkinkan readers untuk
mengakses file dalam direktori misalnya : dengan perintah cd.

12 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Pertama, kita bisa melihat hak akses dari file dengan mengetikkan perintah di
terminal ls l. Hasilnya maka akan seperti ini:

Gambar 1.5 Perintah ls -l

Berikut keterangan output pada gambar diatas.


Kolom pertama : merupakan jenis file dan perizinan yang mengikat file
tersebut (perzinan meliputi perizinan User, Grup dan
Others). Terdiri dari 10 karakter. Karakter pertama
dari kolom pertama ini menunjukkan:
d = directory
- = regular file
l = Symbolic Link
s = Unix Domain Socket
p = named pipe
c = character device file
b = block device file
Lalu sisa 9 karakter lainnya menyatakan perizinan.
Dibagi menjadi 3 grup. Tiap grup berisi 3 karakter
yang mewakili : read, write dan execute. Karakter
tersebut mudah diingat, diantaranya:
r = read permission
w = write permission
x = execute permission
- = no permission

13 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Kolom kedua : menunjukkan jumlah Link (entri direktori yang merujuk
ke file tersebut)
Kolom ketiga : menunjukkan pemilik file
Kolom keempat : menunjukan Grup pemilik file
Kolom kelima : menunjukkan ukuran file dalam byte
Kolom keenam : menunjukan bulan terakhir di akses atau di modifikasi
Kolom ketujuh : menunjukan tanggal terakhir di akses atau di modifikasi
Kolom kedelapan : menunjukan jam terakhir di akses atau di modifikasi
berdasarkan waktu pada kolom keenam dan ketujuh
Kolom kesembilan : menunjukkan nama folder atau file

1.3.3.1 Cara mengatur hak akses


Kita dapat mengatur hak akses file dengan perintah chmod. Di chmod terdapat 2
mode yang bisa di gunakan untuk konfigurasi hak akses file yaitu dengan cara
simbolik dan numerik.
Cara Simbolik :
Pertama : readers harus memutuskan apakah readers mengatur hak akses
untuk pengguna (u), kelompok (g), pengguna lainnya (o), atau
ketiganya (a).
Kedua : readers bisa menambahkan izin (+), menghapus (-), atau
menghapus izin sebelumnya dan menambahkan izin yang baru (=)
Ketiga : tentukan perizinannya. Apakah readers mengatur izin read (r),
write(w), execute (e), atau ketiganya.
Keempat : readers hanya tinggal memberikan perintah untuk chmod, hak
akses mana yang akan di rubah.
Contoh:
Kita mempunyai regular file bernama contohfile dan file memiliki izin akses penuh
padazsemua kelompok (ada perintah rwx).
Tampilan awal Perizinan file :
-rwxrwxrwx

1. Kita hapus semua hak akses yang sekarang dan mengganti dengan hanya izin
read untuk semua grup.
Syntax: $ chmod a=r contohfile
Tampilan akan menjadi : -rrr
2. Selanjutnya kita akan memberikan izin kepada grup (yang di tengah) untuk di
tambahkan izin execute
Syntax: $ chmod g+x contohfile
Tampilan akan menjadi : -rr-xr

14 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
3. Selanjutnya kita akan memberikan izin kepada semua grup untuk di
tambahkan izin write.
Syntax: $ chmod ugo+w contoh file
Tampilan akan menjadi : -rw-rwxrw-
4. Selanjutnya kita akan menghapus izin execute yang ada pada grup (yg di
tengah) untuk di hapus.
Syntax: $ chmod g-x contohfile
Tampilan akan menjadi : -rw-rw-rw-

Mode Numerik :
Mode dimana diwakili oleh 3 angka octal untuk perizinan filenya.
Standar umumnya adalah:
4 = read (r)
2 = write(w)
1 = execute (x)
0 = tidak ada izin (-)
Jika ingin mendapatkan hak akses yang kita inginkan kita hanya tinggal
menjumlahkan angka yang sesuai .

Contoh:
1. Kita ingin mendapatkan hak akses Read Write dan Execute secara bersamaan
maka numeriknya menjadi seperti ini:
Read + write + execute
4+2+1=7
2. Kita ingin mendapatan hak akses read dan execute secara bersamaan maka
numeriknya akan menjadi seperti ini:
Read + Execute
4+1=5

Contoh penerapan pada syntax:


$ chmod 755 contohfile
Syntax diatas menunjukan hak akses untuk User adalah 7 (rwx), untuk grup adalah
5 (rx), dan untuk others juga 5 (rx).

15 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
INSTALASI NS3

Installasi ini dilakukan dengan menggunakan Ubuntu 12.04 pada Virtual Box / VM Ware.
Langkah-langkahnya sebagai berikut :

Download ns-allinone-3.25

Installasi ini dilakukan dengan menggunakan Ubuntu-12.04. Pertama-tama,


download ns-allinone-3.25.tar.bz2 dari website resmi NS-3.

Gambar 2.1 Alamat website untuk mendownload ns-allinone-3.25.tar.bz2


( https://www.nsnam.org/ns-3-25/ )

Ekstrak ns-allinone-3.25

Setelah berhasi mendownload ns-allinone-3.25.tar.bz2 , ekstrak dilokasi yang anda


inginkan, hasilnya akan muncul folder baru dengan nama ns-allinone-3.25.

16 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Gambar 2.2 Hasil ekstrak ns-allinone-3.25.tar.bz2

Download dan install paket depedency NS3

Sebelum installasi ns3, ada beberapa paket yang perlu diinstall terlebih dahulu,
download dan install paket tersebut dengan perintah :

sudo apt-get install gcc g++ python python-dev mercurial bzr gdb valgrind gsl-
bin libgsl0-dev libgsl0ldbl flex bison tcpdump sqlite sqlite3 libsqlite3-dev
libxml2 libxml2-dev libgtk2.0-0 libgtk2.0-dev uncrustify doxygen graphviz
imagemagick texlive texlive-latex-extra texlive-generic-extra texlive-generic-
recommended texinfo dia texlive texlive-latex-extra texlive-extra-utils texlive-
Jika tidak bisa mendownloadnya, maka perlu dilakukan update terlebih dahulu,
dengan perintah :

sudo apt-get update

Instalasi NS-3.25

Setelah melakukan ekstrak file ns-allinone-3.25.tar.gz, maka akan ada direktori


dengan nama ns-allinone-3.25 berada dilokasi dimana file sebelum diekstrak berada.
Masuk ke dalam direktori tersebut dengan perintah :
cd ns-allinone-2.35

Pastikan dependencys pada step sebelumnya sudah dipastikan didapatkan seluruhnya


untuk installasi NS-3 dan NetAnimnya. Selanjutnya pindah ke directori root NS-3 dan

17 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
lakukan command seperti gambar 2.4.1 ini untuk melakukan configure NS-3 terhadap
sistem nantinya.

Gambar 2.4.1 Command untuk configure NS-3 sebelum tahap compile

Gambar 2.4.2 Configure NS-3 telah selesai.

Setelah berhasil melakukan configure seperti gambar 2.4.2, maka selanjutnya adalah
melakukan build atau compiling NS-3. Untuk melakukan Build, cukup dengan
mengetikan command seperti gambar 2.4.3 maka proses build akan berjalan. Proses
ini membunuh waktu cukup lama, sehingga anda dapat browsing selagi menunggu
proses build NS-3. Proses build juga terdapat pada gambar selanjutnya.

Gambar 2.4.3 Command untuk melakukan build NS-3.

18 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Gambar 2.4.4 Proses build NS-3.

Setelah proses build selesai seperti gambar 2.4.5 telah selesai, maka NS-3 sudah siap
untuk digunakan. Maka coba untuk melakukan command untuk melakukan
hellosimulator pada NS-3. Ikuti petunjuk gambar 2.4.6.

Gambar 2.4.5 Proses Build telah selesai.

Gambar 2.4.6 Running hello-simulator.


Jika melakukan tes hell-simulator telah berhasil, maka NS-3 sudah bisa berjalan
dengan baik.
19 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Installasi NetAnim

Untuk mendukung simulasi pada NS-3, dibutuhkan juga suatu visualisasi dari ns3, yaitu
NetAnim atau Network Animator khusus untuk NS-3. Berpindah ke directory NetAnim
yang ada di folder ns-allinone-3.25. Lakukan perintah sesuai dengan gambar 2.5.1
dibawah. Pastikan package qt4-dev-tools telah terinstall, karena package ini
dibutuhkan untuk proses install dan build netanim.
Command :$ qmake NetAnim.pro
$ make

Gambar 2.5.1 Command untuk installasi NetAnim.

Jika proses installasi netanim telah selesai, maka sekarang panggil aplikasi netanim
dengan mengetikan perintah dibawah ini. Maka UI NetAnim akan muncul seperti
gambar 2.5.2.
Command :$ ./NetAnim

Gambar 2.5.2 UI NetAnim yang telah terinstall.

Setelah berhasil melakukan installasi NS-3 dan NetAnim sebagai aplikasi visualisasinya,
maka kita bisa menuju langkah selanjutnya untuk memulai simulasi dengan NS-3.

20 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
NETWORK SIMULATOR 3

Network Simulator 3

Network Simulator 3, atau yang lebih dikenal sebagai NS3, adalah sebuah discrete
event network Simulator yang berguna dalam mempelajari dynamic nature dari
communication networks. Simulasi dari wired maupun wireless network (routing
algorithms, TCP, UDP, dll) dapat dilakukan dengan menggunakan NS3. Target utama
NS3 adalah untuk menunjang aktifitas riset dan pembelajaran pada bidang Jaringan.
Website resmi NS3 adalah https://www.nsnam.org/, Project NS3 ini dimulai pada
bulan Juli 2006 dan rilis pertama dilakukan pada 30 Juni 2008. Bahasa yang digunakan
pada NS3 adalah C++ atau Phyton.

Secara struktur bahasa, C++ pada NS3 memang terlihat lebih rumit daripada bahasa
TCL yang digunakan pada NS2. Namun NS3 lebih mudah digunakan karena sudah berisi
pustaka (library) yang bisa kita panggil untuk memenuhi kebutuhan kita. Infrastruktur
NS3 sendiri mendukung pengembangan model Simulasi yang mendekati kondisi real
dan memiliki karakteristik mendekati emulator Jaringan. Selain dapat digunakan
sebagai Simulator untuk Jaringan berbasis IP, NS3 juga dapat digunakan sebagai
Simulator Jaringan berbasis non-IP.

Kelebihan
a. Sebagai perangkat lunak simulasi pembantu analisis dalam riset atau penelitian.
b. Memiliki tool validasi yang berfungsi untuk menguji validitas pemodelan yang ada
pada NS-3.
c. Pembuatan simulasi lebih mudah dibandingkan dengan software developer yang
lain.
d. Bersifat open source
e. Pada NS-3 user tinggal membuat topologi dan skenario simulasi yang sesuai
dengan kebutuhan

21 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Contoh Simulasi NS3
a. TCP/UDP/RTP
b. Traffic behaviour (FTP, Telnet, CBR, dll)
c. Queue management (RED, FIFO, CBQ)
d. Algoritma routing Unicast (Distance Vector, Link State) dan multicast
e. PIM SM, PIM DM, DVMRP, Shared Tree dan Bi directional Shared Tree
f. Aplikasi multimedia yang berupa layered video
g. QOS audio-video dan transcoding

Implementasi
NS3 diimplementasikan antara lain :
a. MAC (IEEE 802.3, 802.11)
b. Media jaringan kabel (LAN, WAN, point to point)
c. Nirkabel (Mobile IP, Wireless LAN)

Konsep Dasar NS3


Hal pertama yang harus kitalakukan adalah mengenal beberapa konsep dan abstraksi
pada NS-3. Mungkin untuk beberapa orang penjelasan ini masih kurang dapat
dipahami, tapi pastikan untuk meluangkan waktu membaca konsep ini. Pada subbab
ini, kita akan mereview beberapa istilah yang biasa digunakan pada jaringan, dimana
memiliki arti spesifik di NS-3. Sebelum kita membahas beberapa konsep dasar NS3,
perhatikan gambar 3.1.4.

Gambar 3.1.4 UI NetAnim yang telah terinstall.


22 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Node
Dalam jargon internet, sebuah perangkat komputasi atau komputer yang
terhubung pada suatu jaringan biasa disebut host atau end system. Karena NS-3
adalah sebuah network simulator, bukan secara spesifik internet simulator, jadi
disini tidak menggunakan istilah host yang sangat berkaitan erat dengan internet
dan protokolnya. Disini kita menggunakan istilah yang banyak digunakan
simulator lain pada umumnya, The Node.
Pada NS-3, suatu perangkat jaringan sederhana adalah sebuah node. Abstraksi ini
digambarkan oleh simulator NS-3 dengan kelas Node pada bahasa pemprogaman
C++ nya. Kelas ini menangani metode untuk memanage representasi dari sebuah
perangkat jaringan pada simulasi.

Kita harus berfikir node sebagai sebuah komputer dimana nantinya akan
ditambahkan suatu fungsionalitas oleh kita sendiri. Penambahan yang banyak
orang orang lakukan yaitu penambahan seperti aplikasi, protokol internet dan
beberapa penambahan fungsionalistas laninnya yang dapat membuat sebuah
komputer berfungsi dengan penuh.

Application
Secara khusus, suatu perangkat lunak komputer terbagi dalam dua kelas yang
luas. System Software atau sistem perangkat lunak mengorganisir berbagai
macam resource komputer seperti memori, siklus prosesor, disk, dan lain
sebagainya, berdasarkan suatu model komputasi. System software biasanya tidak
menggunakan resource yang ada untuk menyelesaikan suatu tugas yang secara
langsung berkaitan dengan user. Seorang user biasanya akan menjalankan suatu
application yang membutuhkan dan menggunakan resource yang di atur oleh
system software untuk mencapai suatu goal tertentu.

Pembeda antara system software dan application software adalah level privilege
yang berubah saat menjalankan sistem. Pada NS-3 tidak ada konsep
sesungguhnya untuk pengoperasian sistem yang khususnya pada sistem
perbedaan level privilegenya. NS-3 mempunyai ide untuk aplikasi. Yaitu sebuah
aplikasi perangkat lunak yang berjalan pada suatu komputer untuk menjalankan
tugas di dunia nyata. Aplikasi NS-3 berjalan pada node NS-3 untuk menjalankan
simulasi di dunia simulasi.

23 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Pada NS-3, abstraksi sederhananya adalah program seseorang yang meng-
generates beberapa aktivitas yang akan dijalankan adalah aplikasi.
Merepresentasikan kelas Application pada C++. Kelas ini menyediakan metode
untuk mengelola representasi suatu versi aplikasi user-level pada simulasi. Para
pengembang diharapkan untuk menguasai kelas Application pada pemprogaman
berbasis object-oriented untuk membuat aplikasi baru. Pada modul ini, kita akan
membahas khususnya kelas aplikasi yang disebut UdpEchoClientApplication dan
UdpEchoServerApplication. Aplikasi ini membangun suatu aplikasi client/server
yang digunakan untuk menghasilkan simulasi suatu paket jaringan.

Channel
Dalam dunia nyata, seseorang dapat menghubungkan komputer ke sebuah
jaringan. Seringkali media dimana data mengalir pada jaringan ini disebut channel
atau saluran. Ketika kita menghubungkan kabel ethernet kita ke jaringan
ethernet, kita menghubungkan komputer kita ke channel komunikasi ethernet.
Pada simulasi NS-3, seseorang menghubungkan node ke sebuah objek yang
merepresentasikan channel komunikasi. Pada source program C++, diwakili dalam
suatu kelas Channel.

Kelas channel seperti kelas-kelas pada penjelasan sebelumnya, menyediakan


metode untuk memanage komunikasi pada objek dan mengkoneksikan node
terhadapnya. Channel ini mungkin juga harus dikhususkan oleh pengemband
pada pemprogaman berbasis object-oriented.

Channel mungkin merepresentasikan suatu model yang sangat simpel seperti


komunikasi kabel. Secara khusus pun bisa merepresentasikan model yang
komplek seperti model ethernet switch yang luas, ataupun wireless network.

Pada modul ini, kita akan menggunakan beberapa channel seperti, CsmaChannel,
PointToPoint Channel, dan WifiChannel. Contohnya, pada CsmaChannel ini, kita
akan mengimplementasikan komunikasi Carrier Sense Multiple Access yang akan
memberikan kita fungsi seperti teknologi Ehternet.

Net Device
Sudah menjadi suatu kasus umum bahwa jika kita ingin menghubungkan
komputer kita ke suatu jaringan, maka kita harus memiliki sebuah kabel jaringan
dan sebuah peripheral card yang telah memiliki beberapa fungsi jaringan biasanya
disebut NIC (Network Interface Card). Pada masa kini, sebagian besar komputer

24 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
telah dilengkapi dengan perangkat keras jaringan ini, tetapi penggunanya jarang
melihat bentuk blok ini.

Sebuah NIC tidak akan bekerja tanpa adanya software driver untuk mengontrol
hardware ini. Pada Unix, hardware ini diklasifikasikan sebagai device, dan
dikontrol menggunakan sebuah driver, dan NIC dikontrol oleh NetDevice atau
network device driver. Kita mengenal NetDevice ini dengan nama yang sudah
biasa kita lihat yaitu eth0 atau wlan0 (Unix atau Linux).

Pada NS-3, NetDevice ini mewakili keduanya baik software maupun hardware.
NetDevice ini di install pada sebuah node untuk memungkinkan sebuah node
berkomunikasi dengan node lainnya pada simulasi melalui channel. Seperti pada
kehidupan nyata, sebuah node dapat terkoneksi kebeberapa channel dengan
menggunakan banyak NetDevice. NetDevice ini direpresentasikan oleh kelas
NetDevice pada source C++ nya.

Pada modul ini kita akan menggunakan beberapa NetDevice, seperti


CsmaNetDevice, PointToPointNetDevice, dan WifiNetDevice. Sama halnya seperti
NIC Ethernet yang bekerja untuk jaringan ethernet, CsmaNetDevice dibuat untuk
bekerja dengan CsmaChannel.

Topology Helper
Pada jaringan yang sesungguhnya, kita akan menemukan sebuah komputer
dilengkapi dengan NIC. Pada NS-3, kita akan menemukan sebuah node yang
dilengkapi dengan NetDevices. Pada simulasi jaringan yang lebih besar, kita perlu
mengatur banyak koneksi antar node, Netdevice dan channel yang digunakan.

Menghubungkan NetDevice ke sebuah Node, menghubungkan NetDevice ke


sebuah Channel, dan menetapkan IP dan lain sebagainya adalah hal yang biasa,
NS-3 menyediakan apa yang disebut dengan Topology Helper untuk memudahkan
simulasi. Contohnya, untuk membuat NetDevice, menambahkan alamat MAC,
menginstall NetDevice ke Node, konfigurasi protokol stack nodenya, dan
mengkoneksikan NetDevice ke suatu Channel. Bahkan operasi yang lebih akan
diperlukan untuk menghubungkan beberapa perangkat ke beberapa channel dan
untuk mengkoneksikan jaringan ke jaringan yang lebih besar. NS-3 menyediakan
objek topology helper yang mengkombinasikan beberapa operasi berbeda
menjadi lebih mudah untuk digunakan.

25 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Beberapa komponen diatas merupakan komponen dasar yang digunakan untuk
membangun simulasi pada NS-3. Luangkan waktu untuk membaca komponen
diatas untuk memudahkan anda memahami script simulasi yang akan dibahas di
modul ini.

C++ pada NS3

C++ adalah bahasa pemrograman komputer yang merupakan perkembangan dari


bahasa C dikembangkan di Bong Labs (Dennis Ritchie) pada awal tahun 1970-an,
Bahasa itu diturunkan dari bahasa sebelumnya, yaitu B, Pada awalnya, bahasa
tersebut dirancang sebagai bahasa pemrograman yang dijalankan pada sistem Unix,
Pada perkembangannya, versi ANSI (American National Standart Institute) Bahasa
pemrograman C menjadi versi dominan. Basic dari Network Simulator 3 adalah
bahasa C++, artinya seluruh modul dan konstruksi NS3 dibangun dari bahasa C++
seperti ditunjukan oleh diagram dibawah :

Gambar 3.2 NS3 C++ construct used by all modules.

Dasar Bahasa C++

Bahasa C++ (baca : si ples ples) merupakan bahasa pemrograman yang dapat
dikatakan berada diantara bahasa tingkat rendah (bahasa yang berorientasi pada
mesin) dan bahasa tingkat tinggi (bahasa yang berorientasi pada manusia).

26 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Pemrograman Berbasis Objek

Ide dasar pada bahasa berorientasi objek (PBO) adalah mengkombinasikan data
dan fungsi untuk mengakses data menjadi sebuah kesatuan unit. Unit ini dikenal
dengan nama object(obyek). Obyek sebenarnya mencerminkan pola pikir kerja
manusia dalam kehidupan sehari-hari. Dalam terminologi PBO, obyek sebenarnya
adalah anggota dari sebuah kelas (class). Dengan kata lain, kelas adalah kumpulan
dari beberapa obyek yang sama. Contohnya seperti ini :
Object = Tantri Kotak, Kaka Slank, Ahmad Dani
Class = Penyanyi Rock And Roll Indonesia
Tiga karakteristik utama dari dari bahasa yang berorientasi obyek adalah
Encapsulation, Inheritance, Polymorphism.
Encapsulation adalah pengemasan data dan fungsi dalam wadah bernama obyek,
data dianggap sama kedudukannya dengan fungsi.
Inheritance merupakan penurunan dari kelas lain ke kelas yang lain.

Polymorphism merupakan suatu konsep yang menyatakan sesuatu yang sama


dapat memiliki berbagai bentuk dan perilaku yang berbeda.

Tipe Data

Pada semua bahasa Pemrograman, Tipe Data merupakan komponen krusial.


Kenapa krusial? Karena Tipe Data berfungsi sebagai komponen yang memberikan
karakteristik terhadap suatu variabel.

Tipe Data Ukuran Memori Nilai Min & Maks

Char 1 byte -128 s/d +127

Int 2 byte -32768 s/d +3267

Long 4 byte -2.147.438.648


s/d
+2.147.438.647

27 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Float 4 byte 3.4 x 10-38 s/d 3.4 x 10+38

Double 8 byte 1.7 x 10-308 s/d 1.7 x 10+308

Long double 10 byte 3.4 x 10-4932 s/d 1.1 x


10+4932

Tipe Data Integer (Bilangan Bulat)


Adalah Tipe Data Bilangan Bulat. Integer memiliki nilai dari -2,147,483,648
sampai 2,147,483,648. Bila kita input diluar itu, maka nilai variabel tsb akan
secara otomatis diberi nilai -2,147,483,648. Pendeklarasian secara umum :
int<spasi>nama_variabel;
Tipe Data Float (Bilangan Pecahan Presisi Tunggal)
Adalah Tipe Data yang memungkinkan kita untuk memberi input/output angka
dibelakang koma (,) namun pada pengoperasiannya, kita diwajibkan untuk
mengganti simbol koma (,) dengan simbol titik(.). Jumlah bit sebanyak 32 bit (4
byte). Pendeklasrasian secara umum :
float<spasi>nama_variabel;
Tipe Data Double (Bilangan Pecahan Presisi Ganda)
Adalah Tipe Data yang memungkinkan kita untuk memberi input/output angka
dibelakang koma (,) sama seperti float bedanya pada jumlah bit sebanyak 64 bit
(8 byte). Pendeklasrasian secara umum :
double<spasi>nama_variabel;
Tipe Data Char (Karakter)
Adalah Tipe Data yang memungkinkan kita untuk memberi input/output angka
dibelakang koma (,) namun pada pengoperasiannya, kita diwajibkan untuk
mengganti simbol koma (,) dengan simbol titik(.). Jumlah bit sebanyak 32 bit (4
byte). Pendeklasrasian secara umum :
float<spasi>nama_variabel;
Tipe Data Void (Tipe Data Tidak Bertipe)
Merupakan tipe data tidak bertipe dan memiliki jumlah bit sebanyak 0 bit.
Biasanya digunakan pada pendeklarasian fungsi.
28 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Konstanta
C++ memungkinkan sesuatu tidak dapat berubah nilainya setelah
didefinisikan. Contohnya adalah bila kita ingin set variabel PHI bernilai
3.141592. Maka yang perlu kita deklarasikan adalah :

const float PHI = 3.14592; atau float PHI = 3.14592 const;

Operator

Operator merupakan simbol yang biasa dilibatkan dalam program untuk


melakukan sesuatu operasi atau manipulasi. Misalnya untuk menjumlahkan dua
buah nilai , memberikan nilai ke suatu variabel , membandingkan kesamaan dua
buah nilai.

Operator Keterangan Contoh


* Perkalian 2*3
/ Pembagian 7/2
% Sisa Pembagian (modulus) 7%2
+ Penjumlahan 5+2
- Pengurangan 5-2

Fungsi Main()

Program C++ tidak pernah lepas dari fungsi. Sebab fungsi adalah salah satu dasar
penyusun blok pada C++. Sebuah program C++ minimal mengandung sebuah
fungsi, yaitu fungsi main(). Fungsi ini menjadi fungsi utama, yaitu awal dan akhir
eksekusi program C++. Contoh pendeklarasian :

Contoh 1

void main()
{
cout<<Halo, selamat belajar Network Simulator 3 \n;
}

29 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Contoh 2

int main()
{
cout<<Halo, selamat belajar Network Simulator 3 \n;
return 0;
}

Command

Dalam membuat program, terdapat komen-komen yang tidak akan dibaca oleh
eksekutor Program. Format pembuatan komen yang tidak akan dibaca oleh
Program tersebut terdapat 2 cara yaitu dengan menggunakan // yang
dikhususkan untuk komen satu baris (single-line) dan juga dengan menggunakan
/* sebagai awal dan */ sebagai akhir, kondisi ini khusus untuk kondisi komen
beberapa baris (multi-line). Lihat contoh :

Gambar 3.8 contoh bentuk command (komen pada script)

Memanggil Library yang tersedia

Sebelum membuat program, kita butuh untuk mendeklarasikan Library terlebih


dahulu. Library atau Pustaka merupakan kumpulan program atau fungsi yang telah
ada, misalnya pustaka apabila kita menggunakan sin, cos, tan maka kita perlu
menggunakan sintaks #include <math.h>. Contoh yang lain adalah cout, ketika kita
menggunakan obyek cout, maka kita perlu mendeklarasikan baris
30 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
#include<iostream.h>, bila tidak, akan terjadi error saat kompilasi. Ada 2 cara
deklarasi untuk memanggil library, yaitu :
#include <namafile.h>

#include namafile.h

Struktur

Struktur bermanfaat untuk mengelompokkan sejumlah data dengan tipe yang


berlainan. Sebuah contoh pendeklarasian struktur dapat dilihat dibawah ini :
struct data_diri
{
String nama;
int usia;
int ukuransepatu;
}
Apabila suatu struktur telah dideklarasikan, struktur ini dapat digunakan untuk
mendefinisikan suatu variabel, misalnya :
data_diri mahasiswa;
Dengan pendefinisan tsb, maka tanggal lahir memiliki 3 buah anggota yaitu : nama,
usia, dan ukuransepatu.

Seleksi Kondisi

Seleksi Kondisi diperlukan untuk mengambil keputusan bila terdapat dua kondisi
atau lebih. Seleksi Kondisi dapat dideklarasi menggunakan if, if sendiri memiliki dua
bentuk pernyataan yaitu :

If saja dan

Else

Pada kedua bentuk pernyataan ini, kondisi yang dapat digunakan dapat
menggunakan kondisi ungkapan, Ungkapan-ungkapan ini dapat melibatkan
operator relasi, misal == atau operator logika seperti && atau | |

Syntax If:

31 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
If (kondisi){
If (kondisi) Perintah 1;
Perintah; Perintah 2;
}

Kondisi digunakan untuk menentukan pengambilan keputusan

Perintah dapat berupa sebuah pernyataan tunggal maupun majemuk. Bagian ini
dijalankan hanya apabila kondisi bernilai benar.

Gambar 3.11 Gambar seleksi kondisi

Repetisi (Loop)

Pada kasus repetisi atau pengulangan dapat menggunakan format For, While, Do-
While

For

Syntax For:

For ( inisialisasi; syarat; penambahan){


Pernyataan;
}

Inisialisasi : keadaan awal dari variabel kontrol. Cth : int i = 0

Syarat : ekspresi relasi yang merupakan kondisi. Cth : i<4

32 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Penambahan : pengatur perubahan nilai variabel control. Cth : i++

While

Syntax While :

Inisialisasi; Int i=0;


While (kondisi) { While (i<4) {
Pernyataan; i++;
} }

Do-While

Syntax Do-While :

Inisialisasi; Int i=0;


Do { Do {
Pernyataan; i++;
} }
While (kondisi) While (i<4)

33 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
SIMULASI P2P

Simulasi NS-3 PointToPoint

PointToPoint merupakan sebuah protokol data link dimana ini menghubungkan dua
node secara langsung (PointToPoint). Jaringan point-to-point merupakan satu bentuk
jaringan yang paling sederhana yang hanya melibatkan dua buah node. Setiap node
terkoneksi dengan node lainnya dengan satu link koneksi.

Gambar 4.1 Point-to-point Network

PointToPoint
Pada bab sebelumnya, kita mengenal yang disebut dengan topology helper. Helper
ini akan kita gunakan untuk membentuk suatu link point-to-point, berikut
merupakan contoh script untuk membuat suatu topologi dengan menggunakan
PointToPointHelper.

PointToPointHelper pointToPoint;
//merupakan topology helper yang berfungsi untuk membuat
topology //point-to-point

//setelah membuat objek helper biasanya bisa ditambahkan dengan


setting //attribute device ataupun channel

34 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
pointToPoint.SetDeviceAttribute ("DataRate", StringValue
("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue
("2ms"));

NetDeviceContainer devices; //membuat netdevice container


devices = pointToPoint.Install (nodes);
// menginstall topology point to point berdasarkan netdevice
dan //channel yang sudah diatur 'default' di helper topology

PointToPoint helper akan membuat sebuah objek yang nantinya dapat digunakan
lagi untuk pembuatan topologi yang sama. Objek pointTopoint ini adalah helper
untuk sebuah topologi dan akan diinstall pada node dengan menggunakan metode
inisiasi NetDeviceContainer terlebih dahulu, seperti pada paparan diatas.

Simulasi point-to-point diatas menggunakan objek helper yang dibuat untuk


mengatur beberapa attribute lain yaitu point-to-point-channel dan point-to-point-
net-device. NS-3 hanya menyediakan satu attribute untuk point-to-point-channel
sedangkan beberapa attribute untuk point-to-point-net-device:
point-to-point-channel
Delay : Delay Propagasi saluran
point-to-point-net-device
Address : MAC address perangkat
DataRate : data rate dari perangkat
TxQueue : antrian pengiriman yang digunakan perangkat
InterframeGap : waktu tunggu antar frame (opsional)
Rx : trace untuk paket yang diterima
Drop : trace untuk paket yang di drop

35 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Dibawah ini merupakan script myfirst.cc yang berada di folder scratch dan
dilakukan modifikasi untuk menambahkan beberapa parameter. Script dibawah ini
merupakan simulasi sederhana PointToPoint antara dua node.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */


/*
* This program is free software; you can redistribute it and/or
modify
* it under the terms of the GNU General Public License version 2
as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA
*/

/*
*Modification had been done by AcccesNetworkLaboratory
@AccessAcademyTraining April 2016,
*for support simulation training in "Point-To-Point" simulation.
*date modified 30-3-2016
*/

/*
* ilustrasi topologi
*
* n0 ----------------- n1
*
*
*/

36 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/netanim-module.h" // entered for animation
configuration and output file

using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("MyFirstScript");

int
main (int argc, char *argv[])
{
Time::SetResolution (Time::NS);
LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);

NodeContainer nodes;
nodes.Create (2);

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue
("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);

InternetStackHelper stack;
stack.Install (nodes);

Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");

Ipv4InterfaceContainer interfaces = address.Assign (devices);

UdpEchoServerHelper echoServer (9);

37 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
ApplicationContainer serverApps = echoServer.Install (nodes.Get
(1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);


echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install (nodes.Get


(0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

// Animation configuration lines


AnimationInterface anim ("myfirst.xml");
anim.SetConstantPosition (nodes.Get(0), 3.0, 3.0 );
anim.SetConstantPosition (nodes.Get(1), 5.0, 5.0 );
anim.UpdateNodeSize(0, 0.2, 0.2);
anim.UpdateNodeSize(1, 0.2, 0.2);
// End of animation configuration

Simulator::Run ();
Simulator::Destroy ();
return 0;
}

Kita akan mengeksekusi file tersebut untuk melihat output yang dikeluarkan. Untuk
mengeksekusi file tersebut, jalankan perintah seperti dibawah, pada root ns3
direktori, maka akan muncul output pada gambar 3.1.2.

./waf run scratch/myfirst

38 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Gambar 3.1.1 Running script myfirst.

Gambar diatas merupakan hasil tampilan running script myfirst.cc dimana terdapat
warning berkaitan dengan mobility model yang tidak diinstall pada node. Tetapi
peringatan ini dapat diabaikan karena kita tidak membutuhkan mobility model
untuk menjalankan simulasi constant atau tidak bergerak.

Script For Netanim


NetAnim merupakan sebuah aplikasi untuk menampilkan salah satu output dari
simulasi pada NS-3. NetAnim ini akan membaca file yang berekstensi .xml, yang
dimana untuk menghasilkan file ini, suatu script yang akan dijalankan harus
memiliki module untuk mendukung script netanim untuk simulasi nya. Agar lebih
jelas mari kita lihat contoh script dibawah.

#include "ns3/netanim-module.h" //module untuk animasi netanim


+
+
+
AnimationInterface anim ("myfirst.xml");//membuat output file
netanim
+
+

Simulator::Run (); //simulator running


Simulator::Destroy (); //simulator destroy
return 0;

39 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Penjabaran script untuk netanim diatas merupakan script minimal yang harus kita
tambahkan untuk mensupport suatu output file animasi. Dari penjabaran diatas,
kita mengetahui.
Module Netanim harus dipastikan telah terdeklarasi pada awal script
beserta module lainnya untuk memastikan library netanim telah dimengerti
ketika menjalankan script.
Netanim mengeluarkan output file dengan nama yang bisa kita rubah pada
bagian perintah AnimationInterface anim (myfirst.xml);.
Perintah untuk membuat file output untuk animasi harus dideklarasikan
sebelum baris Simulator::Run ();
Pada saat kita menjalankan script myfirst.cc kita pasti mendapatkan warning
karena kita tidak mendefinisikan mobility model dari node yang kita buat. Output
file myfirst.xml bisa kita buka menggunakan Netanim dan akan menghasilkan
gambar seperti dibawah.

Gambar 4.1.2 tampilan UI NetAnim dari myfirst.xml.

40 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
SIMULASI CSMA

Simulasi NS-3 CSMA

CSMA (Carrier Sense Multiple Access) model pada NS-3 memodelkan sebuah topologi
bus, walaupun tidak memodelkan jaringan fisik yang real seperti apa yang kita buat,
ini memfungsikan beberapa fungsi yang berguna. Gambar dibawah memperlihatkan
gambar topologi bus yang kita mungkin telah familiar.

Gambar 4.1 CSMA (BUS) Network

NS-3 tidak memodelkan collision detection pada jaringan CSMA ini, karena pada
dasarnya, sebuah collision tidak terjadi pada jaringan Ethernet.

CSMA
Setelah mengenal bagaimana suatu topology helper digunakan pada topologi
point-to-point. Sebenarnya penggunaan helper pada CSMA juga tidak begitu
berbeda. Berikut script bagaimana mengatur suatu topology helper untuk jaringan
CSMA dan beberapa attributenya.

41 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
//topology helper yang berfungsi untuk membuat topology
//point-to-point

CsmaHelper csma;

//setting attribute
csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds
(6560)));

NetDeviceContainer csmaDevices; //membuat netdevice container


csmaDevices = csma.Install (csmaNodes); // menginstall topology
CSMA berdasarkan netdevice dan
//channel yang sudah diatur ataupun 'default' di helper
topology

Simulasi CSMA diatas menggunakan objek helper yang dibuat untuk mengatur
beberapa attribute lain yaitu csma-channel dan csma-net-device. NS-3
menyediakan attribute untuk csma-channel dan attribute csma-net-device:
csma-channel
Delay : delay propagasi saluran
Data Rate : bit rate dari transmisi paket
csma-net-device
Address : MAC address perangkat
Send Enable : enable packet transmission (if true)
Receive Enable : enable packet reception (if true)
Encapsulation Mode : tipe encapsulation yang digunakan
RxErrorModel : error model penerima
TxQueue : antrian pengiriman yang digunakan perangkat
InterframeGap : waktu tunggu antar frame (opsional)
Rx : trace untuk paket yang diterima
Drop : trace untuk paket yang di drop

42 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Dibawah ini merupakan script mysecond.cc yang berada di folder scratch dan
dilakukan modifikasi untuk menambahkan beberapa parameter. Script dibawah ini
merupakan simulasi sederhana CSMA empat node.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */


/*
* This program is free software; you can redistribute it and/or
modify
* it under the terms of the GNU General Public License version 2
as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA
*/

/*
*Modification had been done by AcccesNetworkLaboratory
@AccessAcademyTraining April 2016,
*for support simulation training in "CSMA (LAN Topology)"
simulation. *date modified 30-3-2016
*/

/*
* ilustrasi topologi
*
* n0 n1 n2 n3 n5
* | | | | |
* ===================
* LAN 10.1.1.0
*/

43 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/netanim-module.h" // entered for animation
configuration and output file

using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("MySecondScript");

int
main (int argc, char *argv[])
{
bool verbose = true;
uint32_t nCsma = 5;

CommandLine cmd;
cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices",
nCsma);
cmd.AddValue ("verbose", "Tell echo applications to log if
true", verbose);

cmd.Parse (argc,argv);

if (verbose)
{
LogComponentEnable ("UdpEchoClientApplication",
LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication",
LOG_LEVEL_INFO);
}

NodeContainer csmaNodes;
csmaNodes.Create (nCsma);

CsmaHelper csma;

44 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds
(6560)));

NetDeviceContainer csmaDevices;
csmaDevices = csma.Install (csmaNodes);

InternetStackHelper stack;
stack.Install (csmaNodes);

Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer csmaInterfaces;
csmaInterfaces = address.Assign (csmaDevices);

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install


(csmaNodes.Get (4));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (4),


9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install


(csmaNodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

csma.EnablePcap ("second", csmaDevices.Get (0), true);

// Animation configuration lines


AnimationInterface anim ("mysecond.xml");
anim.SetConstantPosition (csmaNodes.Get(0), 0.0, 3.0 );
anim.SetConstantPosition (csmaNodes.Get(1), 2.0, 3.0 );

45 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
anim.SetConstantPosition (csmaNodes.Get(2), 4.0, 3.0 );
anim.SetConstantPosition (csmaNodes.Get(3), 6.0, 3.0 );
anim.SetConstantPosition (csmaNodes.Get(4), 8.0, 3.0 );
anim.UpdateNodeSize(0, 0.2, 0.2);
anim.UpdateNodeSize(1, 0.2, 0.2);
anim.UpdateNodeSize(2, 0.2, 0.2);
anim.UpdateNodeSize(3, 0.2, 0.2);
anim.UpdateNodeSize(4, 0.2, 0.2);
// End of animation configuration

Simulator::Run ();
Simulator::Destroy ();
return 0;
}

Kita akan mengeksekusi file tersebut untuk melihat output yang dikeluarkan. Untuk
mengeksekusi file tersebut, jalankan perintah seperti dibawah, pada root ns3
direktori, maka akan muncul output pada gambar 3.1.2.

./waf run scratch/mysecond

Gambar 5.1.1-1 Running script mysecond.

46 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Gambar diatas merupakan hasil tampilan running script myfirst.cc dimana terdapat
warning berkaitan dengan mobility model yang tidak diinstall pada node. Tetapi
peringatan ini dapat diabaikan karena kita tidak membutuhkan mobility model
untuk menjalankan simulasi constant atau tidak bergerak. Hasil dari netanim
merupakan mysecond.xml dibuka dengan netanim menghasilkan gambar

Gambar 5.1.1-2 Netaniim script mysecond.xml

47 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
SIMULASI WIRELESS AP-CLIENT

WIRELESS AP-CLIENT

Dalam simulasi Wireless Fidelity atau Wifi kita lihat dulu parameter yang digunakan
untuk standar Wifi itu sendiri. Salah satu yang paling krusial adalah penggunaan
Standar 802.11. Kemudian pada Simulasi Wifi ini terdapat dua jenis node yaitu
Station (Sta) dan Access-Point(AP).

NodeContainer wifiStaNodes;
wifiStaNodes.Create (nWifi);

NodeContainer wifiApNode;
wifiApNode.Create(1);

YansWifiChannelHelper channel = YansWifiChannelHelper::Default


();
YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
phy.SetChannel (channel.Create ());

WifiHelper wifi;
wifi.SetRemoteStationManager ("ns3::AarfWifiManager");

WifiMacHelper mac;
Ssid ssid = Ssid ("ns-3-ssid");
mac.SetType ("ns3::StaWifiMac",
"Ssid", SsidValue (ssid),
"ActiveProbing", BooleanValue (false));

NetDeviceContainer staDevices;
staDevices = wifi.Install (phy, mac, wifiStaNodes);

mac.SetType ("ns3::ApWifiMac",
"Ssid", SsidValue (ssid));

NetDeviceContainer apDevices;
apDevices = wifi.Install (phy, mac, wifiApNode);

48 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Simulasi Wifi diatas menggunakan objek helper WifiHelper dan WifiMacHelper
yang dibuat untuk mengatur beberapa attribute lain.

Simulasi Wireless AP-CLIENT

Dibawah ini merupakan script mythird.cc yang berada di folder scratch dan
dilakukan modifikasi. Script dibawah ini merupakan simulasi sederhana Wifi empat
node.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */


/*
* This program is free software; you can redistribute it and/or
modify
* it under the terms of the GNU General Public License version 2
as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA
*/

/*
*Modification had been done by AcccesNetworkLaboratory
@AccessAcademyTraining April 2016,
*for support simulation training in "Wireless AP-STA (wireless
Topology)" simulation. *date modified 30-3-2016
*/

49 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
#include "ns3/core-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/network-module.h"
#include "ns3/applications-module.h"
#include "ns3/wifi-module.h"
#include "ns3/mobility-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/netanim-module.h" // entered for animation
configuration and output file

/* Ilustrasi topologi
*
* Wifi 10.1.3.0
* AP
* * * * *
* | | | |
* n3 n2 n1 n0
*/

using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("MyThirdScript");

int
main (int argc, char *argv[])
{
bool verbose = true;
uint32_t nWifi = 3;
bool tracing = false;

CommandLine cmd;

cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);


cmd.AddValue ("verbose", "Tell echo applications to log if
true", verbose);
cmd.AddValue ("tracing", "Enable pcap tracing", tracing);

50 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
cmd.Parse (argc,argv);

if (verbose)
{
LogComponentEnable ("UdpEchoClientApplication",
LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication",
LOG_LEVEL_INFO);
}

NodeContainer wifiStaNodes;
wifiStaNodes.Create (nWifi);

NodeContainer wifiApNode;
wifiApNode.Create(1);

YansWifiChannelHelper channel = YansWifiChannelHelper::Default


();
YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
phy.SetChannel (channel.Create ());

WifiHelper wifi;
wifi.SetRemoteStationManager ("ns3::AarfWifiManager");

WifiMacHelper mac;
Ssid ssid = Ssid ("ns-3-ssid");
mac.SetType ("ns3::StaWifiMac",
"Ssid", SsidValue (ssid),
"ActiveProbing", BooleanValue (false));

NetDeviceContainer staDevices;
staDevices = wifi.Install (phy, mac, wifiStaNodes);

mac.SetType ("ns3::ApWifiMac",
"Ssid", SsidValue (ssid));

NetDeviceContainer apDevices;
apDevices = wifi.Install (phy, mac, wifiApNode);

MobilityHelper mobility;

51 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
"MinX", DoubleValue (0.0),
"MinY", DoubleValue (0.0),
"DeltaX", DoubleValue (5.0),
"DeltaY", DoubleValue (10.0),
"GridWidth", UintegerValue (3),
"LayoutType", StringValue
("RowFirst"));

mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue (Rectangle
(-50, 50, -50, 50)));
mobility.Install (wifiStaNodes);

mobility.SetMobilityModel
("ns3::ConstantPositionMobilityModel");
mobility.Install (wifiApNode);

InternetStackHelper stack;
stack.Install (wifiApNode);
stack.Install (wifiStaNodes);

Ipv4AddressHelper address;

address.SetBase ("10.1.1.0", "255.255.255.0");


Ipv4InterfaceContainer wifiStaInterfaces;
wifiStaInterfaces = address.Assign (staDevices);
address.Assign (apDevices);

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install


(wifiStaNodes.Get(0));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

UdpEchoClientHelper echoClient (wifiStaInterfaces.GetAddress


(2), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (10));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (0.5)));

52 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps =
echoClient.Install (wifiStaNodes.Get (2));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

// Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

Simulator::Stop (Seconds (10.0));

if (tracing == true)
{
phy.EnablePcap ("mythird", apDevices.Get (0));;
}

// Animation configuration lines


AnimationInterface anim ("mythird.xml");
anim.EnablePacketMetadata(true);
// End of animation configuration

Simulator::Run ();
Simulator::Destroy ();
return 0;
}

Kita akan mengeksekusi file tersebut untuk melihat output yang dikeluarkan. Untuk
mengeksekusi file tersebut, jalankan perintah seperti dibawah, pada root ns3
direktori, maka akan muncul output pada gambar 3.1.2.

./waf run scratch/mythird

53 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Gambar 5.1.1-1 Running script mysecond.

Gambar diatas merupakan hasil tampilan running script mythird.cc.. Hasil dari
netanim merupakan mythird.xml dibuka dengan netanim menghasilkan gambar

Gambar 5.1.1-2 Netaniim script mythird.xml

54 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
SIMULASI P2P * CSMA * WIFI

Simulasi NS 3 P2P * CSMA * WIFI

Simulasi ini merupakan gabungan dari beberapa simulasi sebelumnya, dimana kita
akan membuat simulasi dengan topologi P2P sebagai penghubung antara jaringan
wireless dan csma. Ilustrasi dibawah menggambarkan bagaimana topologi terbentuk.

Gambar7.1-1 Netaniim script mysecond.xml

Simulation
Berikut merupakan script yang akan kita gunakan untuk membuat simulasi seperti
ilustrasi diaatas.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */


/*
* This program is free software; you can redistribute it and/or
modify
* it under the terms of the GNU General Public License version 2
as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

55 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA
*/

#include "ns3/core-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/network-module.h"
#include "ns3/applications-module.h"
#include "ns3/wifi-module.h"
#include "ns3/mobility-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/netanim-module.h" // entered for animation
configuration and output file

/*
*Modification had been done by AcccesNetworkLaboratory
@AccessAcademyTraining May 2016,
*for support simulation training in "Wifi-P2P-CSMA" simulation.
*date modified 11-5-2016
*/

// Default Network Topology


//
// Number of wifi or csma nodes can be increased up to 250
// |
// Rank 0 | Rank 1
// -------------------------|----------------------------
// Wifi 10.1.3.0
// AP
// * * * *
// | | | | 10.1.1.0
// n5 n6 n7 n0 -------------- n1 n2 n3 n4
// point-to-point | | | |
// ================
// LAN 10.1.2.0

56 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("MyFourthScript");

int
main (int argc, char *argv[])
{
bool verbose = true;
uint32_t nCsma = 3;
uint32_t nWifi = 3;
bool tracing = false;

CommandLine cmd;
cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices",
nCsma);
cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);
cmd.AddValue ("verbose", "Tell echo applications to log if
true", verbose);
cmd.AddValue ("tracing", "Enable pcap tracing", tracing);

cmd.Parse (argc,argv);

// Check for valid number of csma or wifi nodes


// 250 should be enough, otherwise IP addresses
// soon become an issue
if (nWifi > 250 || nCsma > 250)
{
std::cout << "Too many wifi or csma nodes, no more than 250
each." << std::endl;
return 1;
}

if (verbose)
{
LogComponentEnable ("UdpEchoClientApplication",
LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication",
LOG_LEVEL_INFO);
}

57 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
NodeContainer p2pNodes;
p2pNodes.Create (2);

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue
("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

NetDeviceContainer p2pDevices;
p2pDevices = pointToPoint.Install (p2pNodes);

NodeContainer csmaNodes;
csmaNodes.Add (p2pNodes.Get (1));
csmaNodes.Create (nCsma);

CsmaHelper csma;
csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds
(6560)));

NetDeviceContainer csmaDevices;
csmaDevices = csma.Install (csmaNodes);

NodeContainer wifiStaNodes;
wifiStaNodes.Create (nWifi);
NodeContainer wifiApNode = p2pNodes.Get (0);

YansWifiChannelHelper channel = YansWifiChannelHelper::Default


();
YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
phy.SetChannel (channel.Create ());

WifiHelper wifi;
wifi.SetRemoteStationManager ("ns3::AarfWifiManager");

WifiMacHelper mac;
Ssid ssid = Ssid ("ns-3-ssid");
mac.SetType ("ns3::StaWifiMac",
"Ssid", SsidValue (ssid),
"ActiveProbing", BooleanValue (false));

58 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
NetDeviceContainer staDevices;
staDevices = wifi.Install (phy, mac, wifiStaNodes);

mac.SetType ("ns3::ApWifiMac",
"Ssid", SsidValue (ssid));

NetDeviceContainer apDevices;
apDevices = wifi.Install (phy, mac, wifiApNode);

MobilityHelper mobility;

mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
"MinX", DoubleValue (0.0),
"MinY", DoubleValue (0.0),
"DeltaX", DoubleValue (5.0),
"DeltaY", DoubleValue (10.0),
"GridWidth", UintegerValue (3),
"LayoutType", StringValue
("RowFirst"));

mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
"Bounds", RectangleValue (Rectangle
(-50, 50, -50, 50)));
mobility.Install (wifiStaNodes);

mobility.SetMobilityModel
("ns3::ConstantPositionMobilityModel");
mobility.Install (wifiApNode);
mobility.Install (csmaNodes);

InternetStackHelper stack;
stack.Install (csmaNodes);
stack.Install (wifiApNode);
stack.Install (wifiStaNodes);

Ipv4AddressHelper address;

address.SetBase ("10.1.1.0", "255.255.255.0");


Ipv4InterfaceContainer p2pInterfaces;
p2pInterfaces = address.Assign (p2pDevices);

59 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
address.SetBase ("10.1.2.0", "255.255.255.0");
Ipv4InterfaceContainer csmaInterfaces;
csmaInterfaces = address.Assign (csmaDevices);

address.SetBase ("10.1.3.0", "255.255.255.0");


address.Assign (staDevices);
address.Assign (apDevices);

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install


(csmaNodes.Get (nCsma));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress


(nCsma), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps =
echoClient.Install (wifiStaNodes.Get (nWifi - 1));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

Simulator::Stop (Seconds (10.0));

if (tracing == true)
{
pointToPoint.EnablePcapAll ("third");
phy.EnablePcap ("third", apDevices.Get (0));
csma.EnablePcap ("third", csmaDevices.Get (0), true);
}
AnimationInterface anim ("myfourth.xml");

anim.SetConstantPosition (csmaNodes.Get(0), 0.0, 10.0 );


anim.SetConstantPosition (csmaNodes.Get(1), 10.0, 10.0 );
anim.SetConstantPosition (csmaNodes.Get(2), 20.0, 10.0 );

60 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
anim.SetConstantPosition (csmaNodes.Get(3), 30.0, 10.0 );

Simulator::Run ();
Simulator::Destroy ();
return 0;
}

Kita akan mengeksekusi file tersebut untuk melihat output yang dikeluarkan. Untuk
mengeksekusi file tersebut, jalankan perintah seperti dibawah, seperti biasa pada
root ns3 direktori, maka akan muncul output pada gambar 7.1.1.

./waf run scratch/myfourth

Gambar 7.1.1-1 Running script myfourth.

Gambar diatas merupakan hasil tampilan running script myfourth.cc. Hasil dari
netanim merupakan myfourth.xml dibuka dengan netanim menghasilkan gambar

61 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Gambar 7.1.1-2 Netaniim script myfourth.xml

62 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
TRAFFIC AND DATA COLLECTION

Traffic Generation

Traffic Generation adalah model stokastik dari traffic flows atau data source dalam
jaringan komunikasi, misalnya jaringan selular atau jaringan komputer. Sebuah model
generasi paket adalah model generasi lalu lintas dari arus paket atau sumber data
dalam jaringan packet-switched. Misalnya, model lalu lintas web adalah model data
yang dikirim atau diterima oleh web-browser pengguna. Model ini berguna selama
pengembangan teknologi telekomunikasi, dalam pandangan untuk menganalisis
kinerja dan kapasitas berbagai protokol, algoritma dan topologi jaringan. Maka
dibutuhkan Traffic Generator sebagai pembangkit (pengirim) sekaligus penerima
paket-paket yang akan kita simulasikan. Pada NS3 terdapat beberapa Traffic
Generator, seperti OnOffApplication, BulkSendApplication, UDPClientServer,
UDPEcho, dan PacketSink. Perlu diketahui bahwa PacketSink adalah Jenis Traffic
Generator penerima paket, dengan kata lain, PacketSink tidak akan pernah bisa
digunakan sebagai pembangkit Traffic. Pada kesempatan ini kita akan menggunakan
OnOff Application sebagai pembangkit dan PacketSink .

Implementasi
OnOff Application memungkinkan kita untuk :
a. Men-Generate satu atau banyak paket dalam satu atau banyak soket
b. Memulai pengiriman paket ketika Start Application
c. Memberhentikan pengiriman paket ketika Stop Application
d. Parameter Traffic yang dipakai adalah Data Rate dan Packet Size
e. Ketika aplikasi dimulai, transmisi paket pertama terjadi delay (delay =
Packet Size / bit rate). Contoh : jika aplikasi dijalankan pada waktu 3 detik,
transmisi paket pertama akan dijadwalkan untuk waktu 5 detik (3 +
1000/500) dan transmisi berikutnya pada interval 2 detik
f. Ketika aplikasi terjadi transisi dari states on menjadi states off di antara
transmisi paket, sisa waktu sampai kapan transmisi berikutnya akan terjadi
63 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
cache dan digunakan ketika aplikasi dijalankan lagi. Contoh: paket size =
1000 bit, bit rate = 500 bit / detik. Jika aplikasi di atas malah berhenti di
waktu 4 detik, dan dimulai kembali pada waktu 5,5 detik, maka paket
pertama akan dikirim pada waktu 6,5 detik, karena ketika itu berhenti di 4
detik, hanya ada 1 detik tersisa sampai awalnya dijadwalkan transmisi, dan
informasi yang tersisa saat ini adalah cache dan digunakan untuk
menjadwalkan transmisi berikutnya setelah restart.

Generate Packet

8.1.2.1 UDP Packet

a. Preparation

OnOffHelper onoff ("ns3::UdpSocketFactory", InetSocketAddress ("10.1.2.2", 1025));


onoff.SetAttribute ("OnTime", StringValue ("Constant:1.0"));
onoff.SetAttribute ("OffTime", StringValue ("Constant:0.0"));

b. Install Traffic Generator

ApplicationContainer apps;
apps = onoff.Install (csmaNodes.Get (0));

c. Setup TrafficSink
Kondisi bila penerima merupakan salah satu node yang available pada
Simulasi :

PacketSinkHelper sink ("ns3::TcpSocketFactory", InetSocketAddress ("10.1.2.3", 1025));


apps = sink.Install (wifiNodes.Get (1));
apps.Start (Seconds (0.0)); apps.Stop (Seconds (4.0));

64 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Kondisi bila penerima merupakan banyak nodes pada Simulasi :

PacketSinkHelper sink ("ns3::TcpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (),


1025));
apps = sink.Install (wifiNodes.Get (1));
apps.Start (Seconds (0.0)); apps.Stop (Seconds (4.0));

d. Start dan Stop Paket

apps.Start (Seconds (1.0));


apps.Stop (Seconds (4.0));

8.1.2.2 TCP Packet

a. Preparation

OnOffHelper onoff ("ns3::TcpSocketFactory", InetSocketAddress ("10.1.2.2", 1025));


onoff.SetAttribute ("OnTime", StringValue ("Constant:1.0"));
onoff.SetAttribute ("OffTime", StringValue ("Constant:0.0"));

b. Install Traffic Generator

ApplicationContainer apps;
apps = onoff.Install (csmaNodes.Get (0));

c. Setup Traffic Sink


Kondisi bila penerima merupakan salah satu node yang available pada
Simulasi :

65 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress ("10.1.2.3", 1025));
apps = sink.Install (wifiNodes.Get (1));
apps.Start (Seconds (0.0)); apps.Stop (Seconds (4.0));

Kondisi bila penerima merupakan banyak nodes pada Simulasi :

PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (),


1025));
apps = sink.Install (wifiNodes.Get (1));
apps.Start (Seconds (0.0)); apps.Stop (Seconds (4.0));

d. Start dan Stop Paket

apps.Start (Seconds (1.0));


apps.Stop (Seconds (4.0));

Data Colllection

Untuk mengkatifkan data collection, NS -3 memiliki helper yang bernama Flow


Monitor. Untuk dapat mengambil data dari suatu simulasi, NS -3 memiliki kemudahan
dibandingkan dengan NS-2. Hanya tinggal mengaktifkan helper flowmonitor, maka
akan terbentuk file flow-monitor yang bisa dibuka di netanim.

// Flow monitor
Ptr<FlowMonitor> flowMonitor;
FlowMonitorHelper flowHelper;
flowMonitor = flowHelper.InstallAll();
Simulator::Stop (Seconds(stop_time));
Simulator::Run ();
flowMonitor->SerializeToXmlFile("NameOfFile.xml", true, true);

66 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
MANET & VANET

MANET

Mobile Adhoc Network (MANET) merupakan sebuah jaringan yang terdiri dari
gabungan perangkatperangkat bergerak (mobile) tanpa infrastruktur, sehingga
membentuk jaringan yang bersifat sementara. Tiap perangkat memiliki antarmuka
nirkabel dan saling berkomunikasi melalui gelombang radio, kemudian tiap perangkat
tersebut dinamakan node. Beberapa contoh adhoc node yaitu laptop dan personal
digital assistants (PDA) yang saling berkomunikasi secara langsung satu sama lain.

Gambar 9.1-1 Jaringan Ad-hoc sederhana

Karakteristik MANET
Pada MANET terdapat beberapa karakteristik antara lain :

a. Topologi yang dinamis


Nodenode di MANET bebas bisa bergerak kemana saja dan kapan saja. Hal ini
mengakibatkan topologi jaringan dapat berubah secara acak dan cepat pada waktu
yang tidak dapat diprediksikan. Agar komunikasi pada MANET dapat berlangsung,
setiap node harus dapat beradaptasi tehadap trafik dan kondisi pengiriman yang

67 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
dapat sewaktuwaktu berubah sebagai akibat dari pergerakan nodenode pada
jaringan mobile.
b. Multihop routing
Tipe dasar dari algoritma ad hoc routing adalah dapat single hop dan multihop.
Ketika paket dikirimkan dari source node ke destination node yang berada diluar
dari jangkauan transmisi wireless, maka paket akan dikirimkan melalui satu atau
lebih neighbour node.
c. Batasan bandwidth
Jalur wireless biasanya memiliki kapasitas yang berubahubah dibandingkan jalur
kabel. Hal ini dikarenakan komunikasi wireless yang lebih sensitif terhadap
perubahan kondisi lingkungan.
d. Batasan daya
Mobile node menggunakan baterai sebagai sumber dayanya. Daya baterai yang
terbatas mengharuskan setiap operasi harus berjalan secara efisien.

Routing Protokol
Routing adalah suatu fungsi dari lapisan network dimana fungsi ini merupakan suatu
mekanisme untuk menentukan route dari source node menuju destination node. Pada
MANET, fungsi routing dilakukan oleh routing protocol. Selain digunakan dalam
proses routing, routing protocol pada MANET juga dapat melakukan adaptasi
terhadap perubahan topologi dan trafik yang diakibatkan oleh pergerakan node
secara acak.
a. Proaktif atau tabledriven routing protocol
Tabledriven routing berusaha untuk menyediakan informasi routing yang konsisten dan
up to date di setiap node. Setiap node diharuskan mempunyai satu atau lebih tabel untuk
menyimpan informasi routing. Setiap node merespon perubahan dalam topologi
jaringan dengan menjalarkan update informasi tabel routing ke seluruh node di jaringan
untuk memastikan konsistensi routing. Perbedaanperbedaan antar protokol berbasis
tabledriven terletak pada: struktur tabel routing yang digunakan dan metode bagaimana
perubahan topologi jaringan disebarkan. Contoh tabledriven routing: DSDV, CGSR ,
WRP
b. Reaktif atau ondemand routing protocol
68 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Pada pendekatan ondemand, routing hanya dibuat ketika node sumber
membutuhkannya. Saat node sumber membutuhkan routing ke node tujuan, node
sumber melakukan proses route discovery dalam jaringan. Proses ini akan selesai jika
rute telah ditemukan atau semua permutasi rute telah diperiksa. Setelah didapat rute
maka akan dilakukan prosedur routing maintenance hingga node sumber tidak
menginginkan lagi atau node tujuan tidak bisa diakses lagi. Contoh ondemand routing:
AODV, DSR, TORA, SSR, ASR ,AOMDV.
c. Hybrid routing protocol
merupakan gabungan cara kerja dari protocol routing reaktif dan protocol routing
proaktif

Script for MANET


Berikut merupakan script yang akan kita gunakan untuk simulasi MANET.

#include "ns3/vector.h"
#include "ns3/string.h"
#include "ns3/socket.h"
#include "ns3/double.h"
#include "ns3/config.h"
#include "ns3/log.h"
#include "ns3/command-line.h"
#include "ns3/mobility-model.h"
#include "ns3/yans-wifi-helper.h"
#include "ns3/position-allocator.h"
#include "ns3/mobility-helper.h"
#include "ns3/internet-stack-helper.h"
#include "ns3/ipv4-address-helper.h"
#include "ns3/ipv4-interface-container.h"
#include <iostream>
#include "ns3/ocb-wifi-mac.h"
#include "ns3/netanim-module.h"
#include "ns3/application-container.h"
#include "ns3/on-off-helper.h"
#include "ns3/packet-sink-helper.h"
#include "ns3/aodv-module.h"
#include "ns3/flow-monitor-module.h"
#include "ns3/wifi-module.h"

69 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
using namespace ns3;
using namespace std;

NS_LOG_COMPONENT_DEFINE ("wave-simple-5-random");

int main (int argc, char *argv[])


{
double simTime (3.0);
uint32_t PacketSize = 1000;
uint32_t numPackets = 1;
double interval = 1.0;
bool verbose = false;
uint32_t numnodes = 10;
string phyMode ("OfdmRate6MbpsBW10MHz");

CommandLine cmd;
cmd.AddValue("simTime", "Total duration of the simulation
[sec])", simTime);
cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode);
cmd.AddValue ("packetSize", "size of application packet sent",
PacketSize);
cmd.AddValue ("numPackets", "number of packets generated",
numPackets);
cmd.AddValue ("interval", "interval (seconds) between packets",
interval);
cmd.AddValue ("verbose", "turn on all WifiNetDevice log
components", verbose);

cmd.Parse (argc,argv);

NodeContainer nodes;
nodes.Create (numnodes);

WifiHelper wifi;
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
YansWifiChannelHelper wifiChannel =
YansWifiChannelHelper::Default ();
wifiPhy.SetChannel (wifiChannel.Create ());
wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11);

70 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
NqosWifiMacHelper wifi80211Mac = NqosWifiMacHelper::Default ();
wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
"DataMode",StringValue (phyMode),
"ControlMode",StringValue
(phyMode));

NetDeviceContainer devices = wifi.Install (wifiPhy,


wifi80211Mac, nodes);

Ptr<ListPositionAllocator> positionAlloc =
CreateObject<ListPositionAllocator> ();

positionAlloc->Add(Vector (20.0, 20.0, 0.0)); // destination 1


positionAlloc->Add(Vector (30.0, 30.0, 0.0)); // destination 2
positionAlloc->Add(Vector (30.0, 15.0, 0.0)); // destination 3
positionAlloc->Add(Vector (30.0, 0.0, 0.0)); // destination 4

MobilityHelper mobility;

mobility.SetPositionAllocator
("ns3::RandomDiscPositionAllocator",
"X", StringValue ("33.0"),
"Y", StringValue ("33.0"),
"Rho", StringValue
("ns3::UniformRandomVariable[Min=50|Max=100]"));
mobility.SetMobilityModel ("ns3::RandomWaypointMobilityModel",
"Speed", StringValue
("ns3::UniformRandomVariable[Min=6.0|Max=15.0]"),
"Pause", StringValue
("ns3::ConstantRandomVariable[Constant=0.1]"),
"PositionAllocator", PointerValue
(positionAlloc));

mobility.Install (nodes);

AodvHelper aodv;
InternetStackHelper internet;
internet.SetRoutingHelper (aodv);
internet.Install (nodes);

71 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Ipv4AddressHelper ipv4;
ipv4.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer ip = ipv4.Assign (devices);

Ipv4Address dest = ip.GetAddress(numnodes-1);


uint16_t port = 80;
ApplicationContainer onoffapps;

OnOffHelper onoff ("ns3::UdpSocketFactory",


InetSocketAddress(dest, port));
onoff.SetAttribute("OnTime",
StringValue("ns3::ConstantRandomVariable[Constant=1.0]"));
onoff.SetAttribute("OffTime",
StringValue("ns3::ConstantRandomVariable[Constant=0.0]"));
onoff.SetAttribute("DataRate", StringValue("1Mbps")); //Megabits
per second
onoff.SetAttribute("PacketSize", StringValue("512")); //bytes

for (uint32_t i=0; i < numnodes; i++)


{
onoffapps.Add(onoff.Install(nodes.Get(i)));
}

onoffapps.Start(Seconds(1.0));
onoffapps.Stop(Seconds(simTime));

PacketSinkHelper sink("ns3::UdpSocketFactory",
InetSocketAddress(dest, port));
sink.Install(nodes.Get(4));

Simulator::Stop(Seconds(simTime));

AnimationInterface anim ("manet-simple-5-random.xml");


anim.EnablePacketMetadata(true);
for (uint32_t i = 0; i < numnodes; ++i)
{
anim.UpdateNodeSize(i, 5.0, 5.0);
}

Simulator::Run ();

72 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
// monitor->SerializeToXmlFile("flow-monitor-wave-simple-
5-random.xml", true, true);
Simulator::Destroy ();

Eksekusi file tersebut dengan perintah seperti dibawah, sehingga jika dibuka
dengan menggunakan netanim akan memiliki hasil seperti gambar 9.1.3-1

./waf run scratch/ manet-simple-5-random

Gambar 9.1.3-1 running manet-simple-5.cc

Gambar 9.1.3-2 Hasil animasi dari manet-simple-5.xml

73 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
VANET

Vehicular Ad hoc Network (VANET) merupakan subset dari Mobile Ad hoc Network
(MANET) yang membangun ad hoc network di antara kendaraan kendaraan.
Komunikasi wireless ini meliputi komunikasi intervehicle communication (IVC),
vehicle to roadside (V2R), atau roadside to roadside (R2R).
Pada VANET, tiap kendaraan dilengkapi dengan sensor On Board Units (OBU) yang
di install di dalamnya, begitu pula halnya pada infrastruktur jalanan yang dapat ikut
dalam komunikasi atau dikenal sebagai Road Side Units (RSU). Data yang terkumpul
oleh sensor pada kendaraan kemudian dapat ditampilkan pada pengendara, dikirim ke
RSU, atau dibroadcast ke kendaraan lain yang membutuhkan, seperti informasi dari
weather centres, traffic control centres, dan lain sebagainya. Pada layanan keamanan,
VANET dapat membimbing pengendara untuk berkomunikasi dan mengatur
pergerakannya guna terhindar dari kecelakaan lalu lintas, kemacetan, kontrol
kecepatan, blokade jalan, dan lainlain.

Tiaptiap node pada VANET berlaku baik sebagai partisipan ataupun router pada
jaringan, baik bagi node utama atau intermediate node yang berkomunikasi di dalam
radius transmisinya. VANET merupakan jaringan yang selforganized, artinya
jaringan ini tidak bergantung pada infrastruktur jaringan manapun. Walaupun ada
beberapa node yang secara tetap berdiri sebagai road side unit, yakni yang dapat
memfasilitasi jaringan kendaraan dengan informasi data geografis ataupun akses
internet.

74 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Gambar 9.2-1 Netaniim script myfourth.xml

Karakteristik VANET
VANET memiliki beberapa karakteristik khusus yang membedakannya dari
jaringan ad hoc lain. Karakteristik tersebut antara lain :
a. Topologi yang sangat dinamis
Topologi VANET yang sangat dinamis (berubahubah) dikarenakan pergerakan
mobil dalam kecepatan tinggi. Contohnya pada 2 mobil yang bergerak pada
kecepatan 25 m/s dengan range transmisi 250 m, maka konektivitas di antara
keduanya hanya akan bertahan selama 250/25= 10 detik.

b. Putusnya koneksi jaringan secara berkala

Berdasarkan karakteristik di atas dapat disimpulkan bahwa terputusnya koneksi


antara 2 mobil disebabkan akibat tingginya kecepatan kendaraan pada saat
pertukaran informasi dilakukan.

c. Model mobilitas dan prediksi

75 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Model mobilitas node tergantung pada kondisi lalu lintas, struktur jalan, kecepatan
kendaraan, perilaku pengemudi dalam berkendara, dan lain sebagainya.
d. Hard Delay Constraints

Aspek keamanan dari aplikasi VANET terkait kecelakaan, masalah rem, dan lain
lain harus menjamin pengiriman pesan ke nodenode yang relevan. Dengan
demikian, hard delay constraints menjadi isu penting pada VANET.

e. Daya baterai dan kapasitas storage

Kendaraan saat ini difasilitasi daya baterai dan kapasitas storage yang tidak terbatas
ketersediannya. Hal inilah yang mendukung VANET sebagai sarana yang efektif
dalam melakukan komunikasi dan penggunaan routing protocol.

f. Interaksi dengan sensor on board.

Posisi terkini dan pergerakan node dapat dengan mudah dikirim dengan sensor on
board seperti GPS. Ini akan membantu komunikasi dan keputusan routing yang
lebih efektif.

Routing Protokol

Routing protocol merupakan suatu metode dalam menemukan rute terbaik dari link
yang dilalui antar node sumber ke node tujuan yang berhubungan, dimana pemilihan
rute terbaik dilakukan berdasarkan beberapa pertimbangan seperti jarak dan
bandwidth link.

a. Proactive Routing Protocol

Kelebihan dari proactive routing protocol adalah tidak memerlukan discovery route
dikarenakan route tujuan telah tersimpan sebelumnya. Di sisi lain, kekurangannya
adalah lamanya interval waktu antara stimulus dengan respon sehingga tidak cocok

76 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
untuk aplikasi realtime. Proactive Routing protocol meliputi DSDV, FSR, , CGSR,
WRP, dan TBRPF.

b. Reactive Routing Protocol

Kelebihan dari reactive routing protocol adalah pencarian rute dilakukan apabila
dibutuhkan oleh node untuk saling berkomunikasi. Reactive routing protocol
terdiri dari fase discovery route di mana paket yang diminta melakukan
flooding/membanjiri jaringan untuk pencarian jalur dan fase ini selesai ketika rute
ditemukan. Protokol ini disebut sebagai ondemand routing protocol karena
dilakukan pembaharuan table routing secara berkala ketika ada data untuk dikirim.
Reactive routing protocol meliputi AODV, PGB, DSR, TORA, JARR.

c. Hybrid Routing Protocol

Hybrid routing protocol diperkenalkan untuk mengurangi control overhead pada


proactive routing protocol dan mengurangi delay awal pada proses penemuan rute
pada reactive routing protocol. Hybrid routing protocol meliputi ZRP dan HARP.

Script for VANET


Berikut merupakan script yang akan kita gunakan untuk simulasi MANET.

#include "ns3/vector.h"
#include "ns3/string.h"
#include "ns3/socket.h"
#include "ns3/double.h"
#include "ns3/config.h"
#include "ns3/log.h"
#include "ns3/command-line.h"
#include "ns3/mobility-model.h"
#include "ns3/yans-wifi-helper.h"
#include "ns3/position-allocator.h"
#include "ns3/mobility-helper.h"
#include "ns3/internet-stack-helper.h"
#include "ns3/ipv4-address-helper.h"
#include "ns3/ipv4-interface-container.h"

77 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
#include <iostream>
#include "ns3/ocb-wifi-mac.h"
#include "ns3/wifi-80211p-helper.h"
#include "ns3/wave-mac-helper.h"
#include "ns3/netanim-module.h"
#include "ns3/application-container.h"
#include "ns3/on-off-helper.h"
#include "ns3/packet-sink-helper.h"
#include "ns3/aodv-module.h"
#include "ns3/gauss-markov-mobility-model.h"

using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("wave-simple-10");

int main (int argc, char *argv[])


{
uint32_t numnodes = 5;
double simTime (30.0);
std::string phyMode ("OfdmRate6MbpsBW10MHz");

CommandLine cmd;
cmd.AddValue("simTime", "Total duration of the simulation
[sec])", simTime);
cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode);

cmd.Parse (argc,argv);

NodeContainer nodes;
nodes.Create (numnodes);

YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();


YansWifiChannelHelper wifiChannel =
YansWifiChannelHelper::Default ();
wifiPhy.SetChannel (wifiChannel.Create ());
wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11);

NqosWaveMacHelper wifi80211pMac = NqosWaveMacHelper::Default ();


Wifi80211pHelper wifi80211p = Wifi80211pHelper::Default ();

78 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
wifi80211p.SetRemoteStationManager
("ns3::ConstantRateWifiManager",
"DataMode",StringValue
(phyMode),
"ControlMode",StringValue
(phyMode));

NetDeviceContainer devices = wifi80211p.Install (wifiPhy,


wifi80211pMac, nodes);

Ptr<ListPositionAllocator> positionAlloc =
CreateObject<ListPositionAllocator> ();

positionAlloc->Add(Vector (0.0, 0.0, 0.0)); // destination 1


positionAlloc->Add(Vector (100.0, 100.0, 0.0)); // destination
2

MobilityHelper mobility;

mobility.SetPositionAllocator
("ns3::RandomDiscPositionAllocator",
"X", StringValue ("33.0"),
"Y", StringValue ("33.0"),
"Rho", StringValue
("ns3::UniformRandomVariable[Min=10|Max=70]"));

mobility.SetMobilityModel ("ns3::GaussMarkovMobilityModel",
"TimeStep", TimeValue (Seconds
(0.3)),
"MeanVelocity",StringValue
("ns3::UniformRandomVariable[Min=3.0|Max=10.0]"),
"Alpha",DoubleValue (0.2));

mobility.Install (nodes);

AodvHelper aodv;
InternetStackHelper internet;
internet.SetRoutingHelper (aodv);
internet.Install (nodes);

79 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Ipv4AddressHelper ipv4;
ipv4.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer ip = ipv4.Assign (devices);

Ipv4Address dest = ip.GetAddress(numnodes-1);


uint16_t port = 80;
ApplicationContainer onoffapps;

OnOffHelper onoff ("ns3::UdpSocketFactory",


InetSocketAddress(dest, port));
onoff.SetAttribute("OnTime",
StringValue("ns3::ConstantRandomVariable[Constant=1.0]"));
onoff.SetAttribute("OffTime",
StringValue("ns3::ConstantRandomVariable[Constant=0.0]"));
onoff.SetAttribute("DataRate", StringValue("1Mbps")); //Megabits
per second
onoff.SetAttribute("PacketSize", StringValue("512")); //bytes

for (uint32_t i=0; i < numnodes; i++)


{
onoffapps.Add(onoff.Install(nodes.Get(i)));
}

onoffapps.Start(Seconds(1.0));
onoffapps.Stop(Seconds(simTime));

PacketSinkHelper sink("ns3::UdpSocketFactory",
InetSocketAddress(dest, port));
sink.Install(nodes.Get(numnodes-1));

Simulator::Stop(Seconds(simTime));

AnimationInterface anim ("mywave-nodes.xml");


anim.EnablePacketMetadata(false);
for (uint32_t i = 0; i < numnodes; ++i)
{
anim.UpdateNodeSize(i, 5.0, 5.0);
}

Simulator::Run ();

80 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Simulator::Destroy ();

Eksekusi file tersebut dengan perintah seperti dibawah, sehingga jika dibuka
dengan menggunakan netanim akan memiliki hasil seperti gambar 9.2.3-1

./waf run scratch/ mywave-40nodes.cc

Gambar 9.2.3-1 running mywave-40nodes.cc

Gambar 9.1.3-2 Hasil animasi dari mywave-nodes.xml.xml

81 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
MOBILITY MODEL

Mobility Model

Pada simulasi wireless, biasanya tidak asing lagi jika kita mendengar tentang
mobility. Mobility pada NS-3 terlihat dari script sebelumnya, terlihat ada dua
attribute yang biasa diatur untuk setting MobilityHelper ini. Yaitu
PossitionAllocator dan MobilityModel.

Position Allocator
PossitionAllocator mengatur bagaimana suatu node dilokasikan pada simulasi,
dengan kata lain sebagai deklarasi posisi awal dari sebuah node. Bererapa Position
Allocator yang ada pada NS -3 adalah:
GridPositionAllocator
RandomRectanglePositionAllocator
RandomBoxPositionAllocator
RandomDiscPositionAllocator
UniformDiscPositionAllocator

Mobility Model
MobilityModel sendiri adalah jenis dari model pergerakan yang nantinya dipakai
oleh MobilityHelper. Beberapa Mobility yang disupport oleh NS-3 diantaranya:
ConstanPosition
ConstanVelocity
ConstanAcceleration
GaussMarkov
Hierarchial
RandomDirection2D
RandomWalk2D
RandomWaypoint
SteadyStateRandomWaypoint
Waypoint

82 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
OPENFLOW MODEL

OPENFLOW

Berikut merupakan script untuk mensimulasikan OPEN FLOW model.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */


/*
* This program is free software; you can redistribute it and/or
modify
* it under the terms of the GNU General Public License version 2
as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA
*/

// Network topology
//
// n0 n1
// | |
// ----------
// | Switch |
// ----------
// | |
// n2 n3
//
//
// - CBR/UDP flows from n0 to n1 and from n3 to n0
// - DropTail queues

83 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
// - Tracing of queues and packet receptions to file "openflow-
switch.tr"
// - If order of adding nodes and netdevices is kept:
// n0 = 00:00:00;00:00:01, n1 = 00:00:00:00:00:03, n3 =
00:00:00:00:00:07
// and port number corresponds to node number, so port 0 is
connected to n0, for example.

#include <iostream>
#include <fstream>

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/applications-module.h"
#include "ns3/openflow-module.h"
#include "ns3/log.h"

using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("OpenFlowCsmaSwitchExample");

bool verbose = false;


bool use_drop = false;
ns3::Time timeout = ns3::Seconds (0);

bool
SetVerbose (std::string value)
{
verbose = true;
return true;
}

bool
SetDrop (std::string value)
{
use_drop = true;
return true;
}

84 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
bool
SetTimeout (std::string value)
{
try {
timeout = ns3::Seconds (atof (value.c_str ()));
return true;
}
catch (...) { return false; }
return false;
}

int
main (int argc, char *argv[])
{
#ifdef NS3_OPENFLOW
//
// Allow the user to override any of the defaults and the above
Bind() at
// run-time, via command-line arguments
//
CommandLine cmd;
cmd.AddValue ("v", "Verbose (turns on logging).", MakeCallback
(&SetVerbose));
cmd.AddValue ("verbose", "Verbose (turns on logging).",
MakeCallback (&SetVerbose));
cmd.AddValue ("d", "Use Drop Controller (Learning if not
specified).", MakeCallback (&SetDrop));
cmd.AddValue ("drop", "Use Drop Controller (Learning if not
specified).", MakeCallback (&SetDrop));
cmd.AddValue ("t", "Learning Controller Timeout (has no effect
if drop controller is specified).", MakeCallback ( &SetTimeout));
cmd.AddValue ("timeout", "Learning Controller Timeout (has no
effect if drop controller is specified).", MakeCallback (
&SetTimeout));

cmd.Parse (argc, argv);

if (verbose)
{
LogComponentEnable ("OpenFlowCsmaSwitchExample",
LOG_LEVEL_INFO);

85 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
LogComponentEnable ("OpenFlowInterface", LOG_LEVEL_INFO);
LogComponentEnable ("OpenFlowSwitchNetDevice",
LOG_LEVEL_INFO);
}

//
// Explicitly create the nodes required by the topology (shown
above).
//
NS_LOG_INFO ("Create nodes.");
NodeContainer terminals;
terminals.Create (4);

NodeContainer csmaSwitch;
csmaSwitch.Create (1);

NS_LOG_INFO ("Build Topology");


CsmaHelper csma;
csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds
(2)));

// Create the csma links, from each terminal to the switch


NetDeviceContainer terminalDevices;
NetDeviceContainer switchDevices;
for (int i = 0; i < 4; i++)
{
NetDeviceContainer link = csma.Install (NodeContainer
(terminals.Get (i), csmaSwitch));
terminalDevices.Add (link.Get (0));
switchDevices.Add (link.Get (1));
}

// Create the switch netdevice, which will do the packet


switching
Ptr<Node> switchNode = csmaSwitch.Get (0);
OpenFlowSwitchHelper swtch;

if (use_drop)
{

86 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Ptr<ns3::ofi::DropController> controller =
CreateObject<ns3::ofi::DropController> ();
swtch.Install (switchNode, switchDevices, controller);
}
else
{
Ptr<ns3::ofi::LearningController> controller =
CreateObject<ns3::ofi::LearningController> ();
if (!timeout.IsZero ()) controller->SetAttribute
("ExpirationTime", TimeValue (timeout));
swtch.Install (switchNode, switchDevices, controller);
}

// Add internet stack to the terminals


InternetStackHelper internet;
internet.Install (terminals);

// We've got the "hardware" in place. Now we need to add IP


addresses.
NS_LOG_INFO ("Assign IP Addresses.");
Ipv4AddressHelper ipv4;
ipv4.SetBase ("10.1.1.0", "255.255.255.0");
ipv4.Assign (terminalDevices);

// Create an OnOff application to send UDP datagrams from n0 to


n1.
NS_LOG_INFO ("Create Applications.");
uint16_t port = 9; // Discard port (RFC 863)

OnOffHelper onoff ("ns3::UdpSocketFactory",


Address (InetSocketAddress (Ipv4Address
("10.1.1.2"), port)));
onoff.SetConstantRate (DataRate ("500kb/s"));

ApplicationContainer app = onoff.Install (terminals.Get (0));


// Start the application
app.Start (Seconds (1.0));
app.Stop (Seconds (10.0));

// Create an optional packet sink to receive these packets


PacketSinkHelper sink ("ns3::UdpSocketFactory",

87 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Address (InetSocketAddress
(Ipv4Address::GetAny (), port)));
app = sink.Install (terminals.Get (1));
app.Start (Seconds (0.0));

//
// Create a similar flow from n3 to n0, starting at time 1.1
seconds
//
onoff.SetAttribute ("Remote",
AddressValue (InetSocketAddress (Ipv4Address
("10.1.1.1"), port)));
app = onoff.Install (terminals.Get (3));
app.Start (Seconds (1.1));
app.Stop (Seconds (10.0));

app = sink.Install (terminals.Get (0));


app.Start (Seconds (0.0));

NS_LOG_INFO ("Configure Tracing.");

//
// Configure tracing of all enqueue, dequeue, and NetDevice
receive events.
// Trace output will be sent to the file "openflow-switch.tr"
//
AsciiTraceHelper ascii;
csma.EnableAsciiAll (ascii.CreateFileStream ("openflow-
switch.tr"));

//
// Also configure some tcpdump traces; each interface will be
traced.
// The output files will be named:
// openflow-switch-<nodeId>-<interfaceId>.pcap
// and can be read by the "tcpdump -r" command (use "-tt" option
to
// display timestamps correctly)
//
csma.EnablePcapAll ("openflow-switch", false);

88 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
//
// Now, do the actual simulation.
//
NS_LOG_INFO ("Run Simulation.");
Simulator::Run ();
Simulator::Destroy ();
NS_LOG_INFO ("Done.");
#else
NS_LOG_INFO ("NS-3 OpenFlow is not enabled. Cannot run
simulation.");
#endif // NS3_OPENFLOW
}

89 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
LTE MODEL

LTE MODEL

Berikut merupakan script untuk mensimulasikan OPEN FLOW model.

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <ns3/log.h>
#include "ns3/core-module.h"
#include "ns3/wifi-module.h"
#include "ns3/aodv-helper.h"
#include "ns3/olsr-helper.h"
#include "ns3/lte-module.h"
#include "ns3/lte-helper.h"
#include "ns3/network-module.h"
#include "ns3/applications-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-helper.h"
#include "ns3/mobility-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/flow-monitor-module.h"
#include "ns3/gtk-config-store.h"
#include "ns3/constant-position-mobility-model.h"
#include "ns3/constant-velocity-mobility-model.h"
#include "ns3/netanim-module.h"
#include "ns3/basic-energy-source.h"
#include "ns3/simple-device-energy-model.h"

using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("LTE_2-cluster");

int main (int argc, char* argv[]) {

std::string phyMode ("DsssRate11Mbps"); //wifi PHY mode

90 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
double rss = -80; // -dBm, rss=received signal strength
uint32_t nbUE1 = 9; //number of user equipment nodes with double
interface WAVE
uint32_t nbUE2 = 9; //number of user equipment nodes with double
interface WAVE
double simTime = 5.0; //end of simulation (sec)

//command line parameters:


CommandLine cmd;
cmd.AddValue("simTime", "Total duration of the simulation [sec])",
simTime);
cmd.AddValue ("nbUE", "Number of LTE User Equipment devices
cluster 1", nbUE1);
cmd.AddValue ("nbUE", "Number of LTE User Equipment devices
cluster 2", nbUE2);
cmd.AddValue ("rss", "Received signal strength", rss);

cmd.Parse (argc,argv);

LogComponentEnable("OnOffApplication", LOG_LEVEL_INFO);

std::cout << "1. CREATE LTE AND EPC" << std::endl;


//CREATE LTE & EPC
//use lte and epc helper
Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
Ptr<PointToPointEpcHelper> epcHelper =
CreateObject<PointToPointEpcHelper> ();
lteHelper->SetEpcHelper (epcHelper);

//pathloss Model
lteHelper->SetAttribute ("PathlossModel", StringValue
("ns3::FriisPropagationLossModel"));

AodvHelper aodv;
Ipv4StaticRoutingHelper ipv4RoutingHelper;

Ipv4ListRoutingHelper list1;
list1.Add (ipv4RoutingHelper, 10);

Ipv4ListRoutingHelper list2;
list2.Add (aodv, 20);

91 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
std::cout << "2. DEFINE PGW/REMOTE HOST NODES, AND CREATE THE
INTERNET" << std::endl;

//create PGW node


Ptr<Node> pgw = epcHelper->GetPgwNode ();
//Setting untuk Node tidak bergerak
AnimationInterface::SetConstantPosition(pgw,330,130);

//create a single remoteHost node


NodeContainer remoteHostContainer;
remoteHostContainer.Create (1);
Ptr<Node> remoteHost = remoteHostContainer.Get (0);
//Setting untuk Node tidak bergerak
AnimationInterface::SetConstantPosition(remoteHost,390,130);

//install protocol stacks to the remote Host


InternetStackHelper internet;
internet.SetRoutingHelper (list1); //has an effect only on the
next Install()
internet.Install (remoteHostContainer);
internet.Reset(); //clear the stack

//create a p2p network


PointToPointHelper p2p;
p2p.SetDeviceAttribute ("DataRate", DataRateValue (DataRate
("100Gb/s")));
p2p.SetDeviceAttribute ("Mtu", UintegerValue (1500)); //maximum
transmission unit
p2p.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));

//create devices for PGW/remoteHost nodes, and install the p2p


network on them
NetDeviceContainer internetDevices = p2p.Install (pgw,
remoteHost);

//assign IP addresses to internet Devices (pgw,remote host)


Ipv4AddressHelper ipv4h;
ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
Ipv4InterfaceContainer internetInterfaces = ipv4h.Assign
(internetDevices);

92 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
//interface 0 is localhost, 1 is the p2p device
//Ipv4Address remoteHostAddr = internetInterfaces.GetAddress (1);

//specify routes so that the remote host can reach the UEs
Ptr<Ipv4StaticRouting> remoteHostStaticRouting =
ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4>
());
remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address
("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
//7.0.0.0 is the network base of the UE nodes, 255.0.0.0 the mask,
and 1 the port

std::cout << "3. DEFINE THE ENB/UE NODES" << std::endl;

//DEFINE THE ENB/UE NODES


//create eNodeB and UE nodes
NodeContainer enbNodes;
NodeContainer ueNodes1;
NodeContainer ueNodes2;
enbNodes.Create (2);
ueNodes1.Create (nbUE1);
ueNodes2.Create (nbUE2);

//DEFINE LTE MOBILITY MODEL for FIXED position


MobilityHelper enbMobility;
enbMobility.SetMobilityModel("ns3::ConstantPositionMobilityModel")
;
Ptr<ListPositionAllocator> positionAlloc =
CreateObject<ListPositionAllocator> ();
positionAlloc = CreateObject<ListPositionAllocator> ();
positionAlloc->Add (Vector (100.0, 100.0, 0.0));
positionAlloc->Add (Vector (450.0, 450.0, 0.0));
//Install eNodeb position (mobility to be fixed)
enbMobility.SetPositionAllocator(positionAlloc);
enbMobility.Install(enbNodes);

//Create waypoint for UEs Mobility


Ptr<ListPositionAllocator> waypoint1 =
CreateObject<ListPositionAllocator> ();
waypoint1 = CreateObject<ListPositionAllocator> ();

93 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
waypoint1->Add (Vector (100.0, 0.0, 0.0));
waypoint1->Add (Vector (200.0, 0.0, 0.0));
waypoint1->Add (Vector (100.0, 50.0, 0.0));
waypoint1->Add (Vector (200.0, 50.0, 0.0));

Ptr<ListPositionAllocator> waypoint2 =
CreateObject<ListPositionAllocator> ();
waypoint2 = CreateObject<ListPositionAllocator> ();
waypoint2->Add (Vector (100.0, 500.0, 0.0));
waypoint2->Add (Vector (200.0, 500.0, 0.0));
waypoint2->Add (Vector (100.0, 550.0, 0.0));
waypoint2->Add (Vector (200.0, 550.0, 0.0));

MobilityHelper ueMobility1;
MobilityHelper ueMobility2;

ueMobility1.SetPositionAllocator ("ns3::GridPositionAllocator",
"GridWidth", UintegerValue (3),
"MinX", DoubleValue (75.0),
"MinY", DoubleValue (0.0),
"DeltaX", DoubleValue (75.0),
"DeltaY", DoubleValue (10.0));
ueMobility1.SetMobilityModel ("ns3::RandomWaypointMobilityModel",
"Speed", StringValue
("ns3::UniformRandomVariable[Min=5.0|Max=10.0]"),
"Pause", StringValue
("ns3::ConstantRandomVariable[Constant=0.0]"),
"PositionAllocator", PointerValue
(waypoint1));

ueMobility2.SetPositionAllocator ("ns3::GridPositionAllocator",
"GridWidth", UintegerValue (3),
"MinX", DoubleValue (75.0),
"MinY", DoubleValue (500.0),
"DeltaX", DoubleValue (75.0),
"DeltaY", DoubleValue (10.0));
ueMobility2.SetMobilityModel ("ns3::RandomWaypointMobilityModel",
"Speed", StringValue
("ns3::UniformRandomVariable[Min=5.0|Max=10.0]"),

94 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
"Pause", StringValue
("ns3::ConstantRandomVariable[Constant=0.0]"),
"PositionAllocator", PointerValue
(waypoint1));

//ueMobility1 diinstal pada ueNode1


for (uint32_t i=0; i < nbUE1; i++)
{
ueMobility1.Install(ueNodes1.Get(i));
}
//ueMobility2 diinstal pada ueNode2
for (uint32_t i=0; i < nbUE2; i++)
{
ueMobility2.Install(ueNodes2.Get(i));
}

//install LTE devices to eNodeB/UEs


NetDeviceContainer enbDevices = lteHelper->InstallEnbDevice
(enbNodes);
NetDeviceContainer ueDevices1 = lteHelper->InstallUeDevice
(ueNodes1);
NetDeviceContainer ueDevices2 = lteHelper->InstallUeDevice
(ueNodes2);

//install protocol stack to the UEs


for (uint32_t i = 0; i < nbUE1; i++)
{
internet.SetRoutingHelper (list1);//internet
internet.Install (ueNodes1.Get(i));
}
internet.Reset();

for (uint32_t i = 0; i < nbUE2; i++)


{
internet.SetRoutingHelper (list1);//internet
internet.Install (ueNodes2.Get(i));
}
internet.Reset();

95 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
Ipv4InterfaceContainer ueInterfaces1;
Ipv4InterfaceContainer ueInterfaces2;
//assign IP to UEs
ueInterfaces1 = epcHelper->AssignUeIpv4Address (NetDeviceContainer
(ueDevices1));
ueInterfaces2 = epcHelper->AssignUeIpv4Address (NetDeviceContainer
(ueDevices2));

//set the default gateway for the UEs


for (uint32_t u = 0; u < nbUE1; ++u)
{
Ptr<Node> ueNode = ueNodes1.Get (u);
Ptr<Ipv4StaticRouting> ueStaticRouting =
ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
ueStaticRouting->SetDefaultRoute (epcHelper-
>GetUeDefaultGatewayAddress (), 1);
}

for (uint32_t u = 0; u < nbUE2; ++u)


{
Ptr<Node> ueNode = ueNodes2.Get (u);
Ptr<Ipv4StaticRouting> ueStaticRouting =
ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
ueStaticRouting->SetDefaultRoute (epcHelper-
>GetUeDefaultGatewayAddress (), 1);
}

//Pemberian/Assign IPv4 dan internet harus dilakukan sebelum


Attach EPS
for (uint32_t i = 0; i < nbUE1; i++)
{
lteHelper->Attach (ueDevices1.Get(i), enbDevices.Get(0));
}
for (uint32_t i = 0; i < nbUE2; i++)
{
lteHelper->Attach (ueDevices2.Get(i), enbDevices.Get(1));
}

96 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
std::cout << "4. Configure CBR application" << std::endl;

//interface 0 is localhost, 1 is the p2p device


Ipv4Address remoteHostAddr = internetInterfaces.GetAddress (1);

//default values for the cbr application


ApplicationContainer onoffapps;

uint16_t port = 8;
OnOffHelper onoff("ns3::UdpSocketFactory",
InetSocketAddress(remoteHostAddr, port));
onoff.SetAttribute("OnTime",
StringValue("ns3::ConstantRandomVariable[Constant=1.0]"));
onoff.SetAttribute("OffTime",
StringValue("ns3::ConstantRandomVariable[Constant=0.0]"));
onoff.SetAttribute("DataRate", StringValue("10Mbps")); //Megabits
per second
onoff.SetAttribute("PacketSize", StringValue("1024")); //bytes

//install application on the last wifi ad-hoc node


onoffapps.Add(onoff.Install(ueNodes1.Get(nbUE1-1)));
onoffapps.Add(onoff.Install(ueNodes2.Get(nbUE1-1)));

//set the start/stop time


onoffapps.Start(Seconds(1.0));
onoffapps.Stop(Seconds(simTime));

PacketSinkHelper sink("ns3::UdpSocketFactory",
InetSocketAddress(remoteHostAddr, port));
sink.Install(remoteHost);

//p2p.EnablePcapAll("lte-wave");
//phy.EnablePcap ("lte-wave-1", waveDevices1);
//phy.EnablePcap ("lte-wave-2", waveDevices2);

//install FlowMonitor on the last wifiNodes


FlowMonitorHelper flowmon;
Ptr<FlowMonitor> monitor;
monitor = flowmon.Install(ueNodes1);
monitor = flowmon.Install(ueNodes2);
monitor = flowmon.Install(enbNodes);

97 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
monitor = flowmon.Install(remoteHost);

//stop simulation
Simulator::Stop(Seconds(simTime));

//print a start message


std::cout << "Running simulation..." << std::endl;
AnimationInterface anim ("LTE-2-cluster.xml"); // Mandatory
//Deskripsi Node wave dan UE
for (uint32_t i=0; i < nbUE1; i++)
{
anim.UpdateNodeDescription (ueNodes1.Get(i), "UE"); //b Optional
}
for (uint32_t i=0; i < nbUE2; i++)
{
anim.UpdateNodeDescription (ueNodes2.Get(i), "UE"); //b Optional
}

//Setting warna untuk masing2 node


for (uint32_t i=1; i < nbUE1; i++)
{
anim.UpdateNodeColor (ueNodes1.Get(i), 255, 0, 0); // Optional
}
for (uint32_t i=1; i < nbUE2; i++)
{
anim.UpdateNodeColor (ueNodes2.Get(i), 255, 0, 0); // Optional
}

anim.UpdateNodeColor (enbNodes.Get(0), 0, 255, 255); // Optional


anim.UpdateNodeColor (enbNodes.Get(1), 0, 255, 255); // Optional

anim.UpdateNodeDescription (enbNodes.Get(0), "eNodeB1");


anim.UpdateNodeDescription (enbNodes.Get(1), "eNodeB2");

anim.UpdateNodeColor (remoteHostContainer.Get(0), 255, 0, 255);


anim.UpdateNodeDescription (remoteHostContainer.Get(0), "Remote
Host");

98 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
anim.EnablePacketMetadata(true); // Optional
anim.EnableIpv4RouteTracking ("routingtable-LTE-2-cluster-
aodv.xml", Seconds (0), Seconds (5), Seconds (0.25)); //Optional

//run simulation
Simulator::Run();

monitor->CheckForLostPackets ();

Ptr<Ipv4FlowClassifier> classifier =
DynamicCast<Ipv4FlowClassifier> (flowmon.GetClassifier ());
std::map<FlowId, FlowMonitor::FlowStats> stats = monitor-
>GetFlowStats ();
std::map<FlowId, FlowMonitor::FlowStats>::const_iterator vw =
stats.begin ();
std::cout << "Hitung Parameter " << vw->first << std::endl;

for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator


i = stats.begin (); i != stats.end (); ++i)
{
std::cout << "running !!!" << "\n";
Ipv4FlowClassifier::FiveTuple t = classifier-
>FindFlow (i->first);
if ((t.destinationAddress == "1.0.0.2"))
{
std::cout << "Flow number " << i->first
<< " (" << t.sourceAddress << " -> " << t.destinationAddress <<
")\n";
std::cout << " Tx Bytes: " << i-
>second.txBytes << "\n";
std::cout << " Rx Bytes: " << i-
>second.rxBytes << "\n";
std::cout << " Throughput: " << i-
>second.rxBytes * 8.0 / (i->second.timeLastRxPacket.GetSeconds() -
i->second.timeFirstTxPacket.GetSeconds())/1024/1024 << " Mbps\n";
if (i->second.rxPackets > 0)
{
std::cout <<"Delay = " << i-
>second.delaySum.GetSeconds() / i->second.rxPackets <<"\n";
}
}

99 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
else
{
std::cout << "Flow number " << i->first << " (" <<
t.sourceAddress << " -> " << t.destinationAddress << ")\n";
std::cout << " Tx Bytes: " << i-
>second.txBytes << "\n";
std::cout << " Rx Bytes: " << i-
>second.rxBytes << "\n";
std::cout << " Throughput: " << i-
>second.rxBytes * 8.0 / (i->second.timeLastRxPacket.GetSeconds() -
i->second.timeFirstTxPacket.GetSeconds())/1024/1024 << " Mbps\n";
if (i->second.rxPackets > 0)
{
std::cout <<"Delay = " << i-
>second.delaySum.GetSeconds() / i->second.rxPackets <<"\n";
}
}

}
//Tambahan Kode 5 --> menyimpan hasil flow monitor ke file
monitor->SerializeToXmlFile("flow-monitor-LTE-2-cluster.xml",
true, true);
/*
GtkConfigStore config;
config.ConfigureAttributes();
*/

Simulator::Destroy();

//print an end message


std::cout << "Done!!!" << std::endl;

return 0;

Eksekusi file tersebut dengan perintah seperti dibawah, sehingga jika dibuka
dengan menggunakan netanim akan memiliki hasil seperti gambar 9.2.3-1

100 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
./waf run scratch/ mywave-40nodes.cc

Gambar 11.1-1 running lte-2-cluster.cc

Gambar 11.1-2 Hasil animasi lte-2-cluster.xml

101 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
NOTE

102 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
NOTE

103 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6
NOTE

104 | A c c e s s A c a d e m y T r a i n i n g 2 0 1 6