Cerințe temă

În acest repo găsiți scheletul temei, infrastructura și checker-ul automat.

Pentru rezolvarea temei, trebuie să implementați dataplane-ul unui router. Va recomandăm să folosiți cel puțin ping pentru a testa implementarea și Wireshark pentru depanare și analiză corectitudinii. Punctajul este împărțit în mai multe componente, după cum urmează:

  • Procesul de dirijare (30p). Va trebui să implementați pașii prezentați în secțiunea IPv4. Pentru acest exercițiu nu este nevoie să implementați și funcționalitatea referitoare la ICMP și puteți folosi o tabela statică de ARP.

  • Longest Prefix Match eficient (16p). La laborator, am implementat LPM folosind o căutare liniară, i.e. trecând de fiecare dată prin toate întrările din tabel. În practică, o tabelă de routare poate conține foarte multe întrări 1 -- astfel de căutare este ineficientă. O abordare mai bună este să folosim trie

    Orice implementare mai eficientă decât căutarea liniară valorează 16 puncte.

  • Protocolul ARP (33p). Vom implementa pașii din sectiuena ARP pentru a popula dinamic tabela ARP. Va trebui să implementați și funcționalitatea de caching; după ce primiți un răspuns ARP, rețineți adresa MAC a hostului interogat. În realitate, intrările dintr-un cache sunt temporare, fiind șterse după un anumit interval de timp. Pentru implementarea temei, este suficient să folosiți intrări permanente. Pentru a nu bloca routerul, pachetele pentru care așteptăm un ARP Reply vor fi puse într-o coadă.

    Va recomandăm să folosiți comanda arping pentru a face cereri ARP. Comanda arp afișează tabela ARP a unui host.

    Tema se poate preda și cu o tabelă de ARP statică, cu pierderea punctajului aferent. În arhivă aveți inclusă o astfel de tabelă. Prezența acestui fișier în arhivă va opri checkerul din a rula teste de ARP, deci nu veți primi puncte pe ele. Dacă ați implementat protocolul ARP, nu adăugați fișierul arp_table.txt.

    Este normal ca testul forward sa pice daca folositi tabela statica de ARP.

  • Protocolul ICMP (21p). Implementați pe router funcționalitatea descrisă în secțiunea ICMP. Puteți folosi ping -t 1 pentru a trimite un pachet cu TTL 1. Va recomandăm să testați și cu traceroute.

Pentru a fi punctata o tema, in README trebuie prezentata solutia voastra pe scurt. De asemenea, trebuie mentionat si ce subcerințe ați rezolvat.

Notă: Puteți scrie implementarea în C sau C++.