-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME
More file actions
59 lines (49 loc) · 2.69 KB
/
README
File metadata and controls
59 lines (49 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Copyright 2022 Tulpan Andrei 324CA - Tema 1 PCom (Router)
# Task-uri rezolvate: Protocolul ARP, Procesul de dirijare,
# Longest Prefix Match, Protocolul ICMP, actualizarea sumei
# de control incrementale (bonus)
# Am vorbitul cu laborantul si am folosit 2 sleep days
<-------------------------Introducere------------------------->
In implementarea data plane-ului pentru router, am
impartit functionalitatile acestuia in mai multe functii
pentru o mai buna vizibilitate asupra codului. La pornirea
routerului initializez un pachet, tabela de rutare, cache-ul
ARP si 2 cozi de pachete.
<--------------------------Data Plane------------------------->
In fiecare pas al buclei de functionare din implementarea
data plane-ului extrag header-ul ethernet al pachetului
primit si aflu din ether_type-ul acestuia ce tip de pachet
este (ARP/IPv4). In functie de tipul pachetului execut anumite
functii specifice, dar inainte de executia acestora verific
daca pachetul are adresa mac de destinatie a interfetei pe
care a intrat sau daca are aceasta adresa setata ca adresa de
broadcast.
<--------------------------Pachete ARP------------------------>
Daca primesc un ARP request, ii trimit inapoi sursei un
pachet de tip ARP reply cu adresa mac de pe interfata
routerului pe care a intrat pachetul.
Daca primesc un ARP reply, salvez adresa mac a sursei
in cache-ul ARP si apoi trimit toate pachetele din coada
de pachete curenta, care depindeau de acest ARP reply.
<-------------------------Pachete IPv4------------------------>
In cazul in care pachetul este de tip IPv4, verific daca
TTL-ul pachetului mai este valabil si daca a fost gasita o ruta
catre urmatoarea destinatie in tabela de rutare, in caz contrar
pentru aceste doua situatii trimit pachete de tip ICMP pentru a
anunta aruncarea pachetului. Tot aici se va verifica si
checksum-ul daca este corect, in caz contrar se vor arunca si
aceste pachete. Dupa toate aceste verificari, caut daca exista
o intrare in memoria cache ARP pentru next hop si trimit
pachetul, in caz contrar trimit un ARP request pentru a afla
mac-ul acestuia si adaug pachetul in coada curenta.
<-------------------------Alte Detalii------------------------>
Inainte de trimiterea fiecarui pachet am updatat header-ul
ethernet si respectiv fiecare header specific pachetelor in
parte (ARP/IPv4/ICMP) pentru a ajunge la destinatia corecta.
Pentru implementarea updatarii sumei de control in urma
scaderii TTL-ului, m-am folosit de urmatoarea formula:
new_checksum = old_checksum + old_ttl + ~new_ttl
Pentru o implementare eficienta a LPM-ului am incercat
sa folosesc o cautare binara, dar cred ca este aproape
imposibil si ar fi trebuit incercat inca de la inceput
folosirea unui trie.