Dependențele necesare
ns-3
sunt descrise în
pagina de instalare. Pentru ISRM vom folosi următoarele pachete pe o distribuție Ubuntu:
student@isrm-vm-2020:~$ sudo apt update
student@isrm-vm-2020:~$ sudo apt -y install libgsl-dev gsl-bin libgslcblas0 \
autoconf cvs bzr unrar \
sqlite sqlite3 libsqlite3-dev \
libxml2 libxml2-dev
Pe mașina virtuală de ISRM aveți deja toate pachetele instalate.
student@isrm-vm-2020:~$ git clone https://gitlab.com/nsnam/ns-3-dev.git
student@isrm-vm-2020:~$ cd ~/ns-3-dev
student@isrm-vm-2020:~/ns-3-dev$ git checkout -b ns-332-rel ns-3.32
-
scopul este de a rula exemplele first.cc, second.cc, …, sixth.cc
din examples/tutorial.
În cadrul laboratorului ne vom concentra pe simulări Wi-Fi (IEEE 802.11). Exemple de simulări (în afara celor pe care le veți primi pentru laboratorul de ISRM) găsiți în ns3/examples/wireless
Ne propunem să rulăm un exemplu simplu: ns3/examples/wireless/wifi-tcp.cc
. Acesta constă dintr-o stație (STA) care se conectează la un access point (AP) folosind 802.11n. Traficul este uplink de la STA la AP. Odată ce build-ul de waf
s-a incheiat cu succes la pasul anterior și hello-simulator
a rulat, putem rula orice exemplu astfel:
student@isrm-vm-2020:~/ns-3-dev$ ./waf --run wifi-tcp
Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build'
Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (1.282s)
1.1s: 45.8086 Mbit/s
1.2s: 55.3472 Mbit/s
(...)
10.9s: 50.8723 Mbit/s
Average throughput: 52.1959 Mbit/s
Alternativ îi puteți specifica calea completă către codul sursă:
student@isrm-vm-2020:~/ns-3-dev$ ./waf --run examples/wifi-tcp
Dacă vrem să transmitem parametrii în linia de comandă simulării (deoarece wifi-tcp
suportă) o putem face cu ghilimele:
student@isrm-vm-2020:~/ns-3-dev$ ./waf --run "wifi-tcp --pcap --simulationTime=3"
Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build'
Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (1.287s)
1.1s: 45.8086 Mbit/s
1.2s: 55.3472 Mbit/s
(...)
3.9s: 52.7565 Mbit/s
Average throughput: 52.9017 Mbit/s
Întrucât opțiunea --pcap
activează mecanismul de pcap tracing din ns-3 (vom discuta mai târziu despre acesta) putem vizualiza cu wireshark următoarele capturi care se generează în directorul curent:
student@isrm-vm-2020:~/ns-3-dev$ ls AccessPoint*.pcap Station*.pcap
AccessPoint-0-0.pcap Station-1-0.pcap
Iată un exemplu de schimb de pachete wifi pentru procedura de asociere a stației la access point:
Avem si un al doilea exemplu care arată traficul TCP schimbat între dispozitive:
Întrucât putem comite greseli in cadrul script-urilor, waf
ne oferă posibilitatea de a ne rula scriptul cu valgrind
, respectiv gdb
.
Pentru exemplul nostru:
student@isrm-vm-2020:~/ns-3-dev$ ./waf --command-template="valgrind \
--leak-check=full --show-reachable=yes %s" \
--run wifi-tcp
Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build'
Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (1.303s)
==21406== Memcheck, a memory error detector
==21406== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==21406== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==21406== Command: /home/vagrant/facultate/isrm/ns-3-dev/build/examples/wireless/ns3.30.1-wifi-tcp-debug
==21406==
(...)
=21406== LEAK SUMMARY:
(...)
==21406== For counts of detected and suppressed errors, rerun with: -v
==21406== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Exemple de pe wiki-ul nsnam pentru lucrul cu: