Differences

This shows you the differences between two versions of the page.

Link to this comparison view

isrm:laboratoare:v2:01 [2024/06/27 22:43]
mbarbulescu [Task 00: Rulare exemple existente]
isrm:laboratoare:v2:01 [2024/06/28 09:48] (current)
mbarbulescu [Task 03: Basic plot]
Line 113: Line 113:
  
 <code bash> <code bash>
-root@isrm-vm:/​home/​student/​isrmls *.pcap+root@isrm-vm:/​home/​student/​isrmls *.pcap
 AccessPoint-0-0.pcap ​ Station-1-0.pcap AccessPoint-0-0.pcap ​ Station-1-0.pcap
 </​code>​ </​code>​
 +
 +<note important>​
 +Dacă vreți să accesați de pe mașina fizică/​virtuală din care rulați docker image-ul fișierele din interiorul docker image, acestea sunt montate prin [[https://​docs.docker.com/​storage/​storagedriver/​overlayfs-driver/​|overlayfs]] și sunt configurate să fie accesibile din folderul: ''​~/​.isrm2024/​merge''​
 +
 +(presupunând că ați rulat scriptul de build cu parametru numele mașinii ''​isrm2024''​)
 +</​note>​
  
 Filtrați și afișați doar pachetele TCP. Fără a citi codul simulării și nici descrierea de la începutul sursei, ci doar PCAP-urile, care credeți că e direcția traficului? Sunt două noduri: 0 și 1 - 0->1 sau 1->0? Filtrați și afișați doar pachetele TCP. Fără a citi codul simulării și nici descrierea de la începutul sursei, ci doar PCAP-urile, care credeți că e direcția traficului? Sunt două noduri: 0 și 1 - 0->1 sau 1->0?
Line 139: Line 145:
  
 <code bash> <code bash>
-student@isrm-vm:~/ns-3-dev$ tshark -T fields -e frame.time_epoch \+root@isrm-vm:/home/​student/​isrm$ tshark -T fields -e frame.time_epoch \
      -e frame.number -e ip.src ​ \     -r ./​AccessPoint-0-0.pcap '​(ip.proto == 6) && (ip.src == 10.0.0.1)'​ > frames.txt      -e frame.number -e ip.src ​ \     -r ./​AccessPoint-0-0.pcap '​(ip.proto == 6) && (ip.src == 10.0.0.1)'​ > frames.txt
 </​code>​ </​code>​
Line 172: Line 178:
 <note tip> <note tip>
 Veți vedea și la curs și vom vedea și pe parcursul laboratoarelor:​ cadrele de date se trimit cu cel mai mare MCS posibil (în anumite condiții) iar cele de management/​control (e.g. beacon, probe request) cu cel mai mic MCS stabilit intre AP și STA - motivul este că pentru acestea vrem o constelație robustă deoarece pierderile nu sunt acceptabile pentru cadre de control. ​ Veți vedea și la curs și vom vedea și pe parcursul laboratoarelor:​ cadrele de date se trimit cu cel mai mare MCS posibil (în anumite condiții) iar cele de management/​control (e.g. beacon, probe request) cu cel mai mic MCS stabilit intre AP și STA - motivul este că pentru acestea vrem o constelație robustă deoarece pierderile nu sunt acceptabile pentru cadre de control. ​
-</​note> ​+</​note>​
  
 +=====  Task 02: Analiza trace-ului ASCII =====
 +
 +Mecanismul de [[https://​www.nsnam.org/​docs/​tutorial/​html/​tracing.html|tracing din ns-3]] ne permite să logăm și în format ASCII evenimentele. Rulați simularea:
 +
 +<code bash>
 +./waf --run "lab3 --numberOfNodes=2 --payloadSize=1400 \
 +    --offeredRate=11Mbps --phyRate=DsssRate11Mbps --simulationTime=2 --tracing=true"​
 +</​code>​
 +
 +Vom obține două trace-uri: unul PCAP (cum am analizat mai sus) și unul text: ''​wifi-lab3.tr''​. Deschideți și inspectați fișierul.
 +
 +Explicația conținutului fișierului:​
 +
 +Prima literă este:
 +
 +<code bash>
 +r for received
 +d for dropped
 ++ for enqueued
 +- for dequeued
 +t is for transmitted #Relevant for WiFi tracefiles
 +</​code>​
 +
 +A doua coloană reprezintă timestamp. ​
 +
 +A treia coloană are următoarea semnificație:​
 +
 +<​note>​name of the event in the configuration namespace, sometimes called the configuration path name. The NodeList value represents the node (A=0, etc), the DeviceList represents the interface, and the final part of the name repeats the action: Drop, MacRx, Enqueue, Dequeue.</​note>​
 +
 +Apoi urmează o serie de nume de clase din [[https://​www.nsnam.org/​doxygen/​group__attribute.html|sistemul de atribute al ns-3]] (''​ns3::​Ipv4Header,​ ns3::​TcpHeader''​) și cu o listă de trace-uri specifice clasei respective. ​
 +
 +=====  Task 03: Basic plot =====
 +
 +Ne propunem să validăm și că funcționează generarea de grafice, lucru pe care îl vom folosi la toate laboratoarele. ​
 +
 +Descarcati fișierul de date numit  **plotting_data1.csv** ce conține:
 +<file csv plotting_data1.csv>​
 + # comentarii ​
 + # X Y
 +   1 2
 +   2 3
 +   3 2
 +   4 1
 +</​file>​
 +
 +Pe baza acestor date, graficul poate fi construit folosind urmatorul template (pe care il puteti folosi si la restul laboratoarelor):​
 +
 +<code python>
 +import copy
 +import numpy as np
 +import matplotlib
 +import matplotlib.pyplot as plt
 +
 +# Calea absoluta catre fisierul de date din care citim
 +# TODO - trebuie inlocuita cu calea corecta
 +DATA_FILE = '​plotting_data1.csv'​
 +columns = ['​x',​ '​y'​]
 +
 +# Citim datele din fisier
 +# Argumentul delimiter precizeaza care este delimitatorul dintre coloane
 +# Argumentul skip_header precizeaza cate linii nu vor fi citite pornind cu inceputul fisierului
 +# Argumentul names este unul foarte util deoarece permite asocierea de nume pentru coloanele din fisier si
 +# de asemenea duce la un acces foarte usor al datelor in script. In acest exemplu, names va fi egal cu ['​x',​ '​y'​]
 +# ceea ce inseamna ca putem accesa valorile din prima coloana prin sim_data['​x'​].
 +# Argumentul dtype setat specifica modul in care vor fi interpretate coloanele (string-urile ca string-uri, float-urile ca float-uri).
 +# In absenta acestui argument, valorile din coloane vor fi interpretate ca float.
 +sim_data = np.genfromtxt(DATA_FILE,​ delimiter='​ ', skip_header=2,​ names=columns,​ dtype=None)
 +
 +def plot_data(sim_data):​
 +    data = copy.deepcopy(sim_data)
 +
 +    # Apelul subplots poate fi folosit pentru a crea mai multe subgrafice in cadrul aceluiasi grafic sau in cadrul unor grafice diferite
 +    # Prin figsize se specifica dimensiunea graficului
 +    fig, ax = plt.subplots(figsize=(12,​12))
 +    # Valori stilistice pentru grafic
 +    ax.grid(color='​b',​ alpha=0.5, linestyle='​dashed',​ linewidth=0.5)
 +    # Denumirile axelor Ox si Oy, precum si titlul graficului
 +    plt.xlabel('​X values'​)
 +    plt.ylabel('​Y values'​)
 +    plt.title('​A very nice looking plot')
 +
 +    # Aici este construit efectiv graficul. Campul label va fi folosit in cadrul legendei graficului
 +    ax.plot(data['​x'​],​ data['​y'​],​ label='​My plot')
 +    ax.legend()
 +    ​
 +    plt.savefig("​l1t3.png"​)
 +
 +if __name__ == '​__main__':​
 +    plot_data(sim_data)
 +</​code>​
  
 +Verificați după rulare că în folderul din docker aveți fișierul ''​l1t3.png''​. De asemenea, pentru că folosim [[https://​docs.docker.com/​storage/​storagedriver/​overlayfs-driver/​|overlayfs]] puteți accesa de pe mașina fizică/​virtuală din care rulați docker-ul din folderul: ''​~/​.isrm2024/​merge/​l1t3.png''​ presupunând că la build ati folosit ca parametru numele docker image-ului ''​isrm2024''​. ​
  
  
isrm/laboratoare/v2/01.1719517387.txt.gz · Last modified: 2024/06/27 22:43 by mbarbulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0