Repository for the first homework of the Communication Networks class. In this homework the students will implement the dataplane of a router.
Ca idee de implementare si algoritm m-am folosit de indicatiile din enuntul temei (https://pcom.pages.upb.ro/tema1 - acei pasi cu numere de la IPv4 si ARP) si unde au fost probleme m-am uitat la video-urile sugerate in enuntul temei, cat si in laborator.
Ideiile le-am concretizat folosindu-ma de:
- notiuni din laborator (functiile pentru conversia din host order in network order)
- din enuntul temei am luat anumite valori globale (pt identificare IPv4, ARP, numarul maxim de intrari in tabela de routare)
- am cautat pe internet (valorile asocitate pt Ethernet, ICMP, TCP, arp request/respone)
- tot pe internet am cautat tipul si posibilii parametrii ai functiei inet_pton (https://pubs.opengroup.org/onlinepubs/009619199/inet_pton.htm)
- din enuntul temei am pornit pe ideea cu trie (m-am folosit atat de informatii de pe internet legate de trie folosite de routere: https://hogonext.com/how-to-build-efficient-router-tables-tries-for-ip-lookups/, m-am folosit din amintirile de la SDA de anul trecut si m-am uitat pe un site cu algoritmul de implementare a trie: https://www.digitalocean.com/community/tutorials/trie-data-structure-in-c-plus-plus)
Cerinte rezolvate: (checkerul da punctaj maxim)
- procesul de dirijare (pachetele sunt trimise peste tot) - trece toate testele
- longest prefix match eficient (cu trie) - trece toate testele
- protocolul ARP (tabela arp e memorata dinamic, iar pachetele pentru care se asteapta ARP - reply sunt trecute in coada si cand primim raspunsul vor fi procesate) - trece toate testele
- protocolul ICMP - trece toate testele
Pentru testare trebuie urmati urmatorii pasi:
- checker.sh si checker.py trebuie facute executabile (sunt ambele fisiere in folderul checker)
- trebuie sters fisierul arp_table.txt (pentru ca altfel nu se va lucra cu tabele de rutare dinamice)
- pentru activarea checkerului se va rula din radacina repository-ului comanda sudo ./checker/checker.sh