Size: 3069
Comment:
|
Size: 3048
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 32: | Line 32: |
. '''bestdev''': a pair (d, avg_rtt), where devs[d] is the best element of devs. . '''netid''': network id of the node; per evitare delle collisioni; ogni host genera casualmente il proprio netid; lo comunica ai suoi vicini di LAN durante il [[../FunzionamentoDelRadar|Radar Scan]]. |
. '''bestdev''': a pair (d, avg_rtt), where devs[d] is the best element of devs. . '''netid''': network id come è conosciuto da questo vicino; si tratta di un identificativo della rete usato per rilevare la [[../NetworkCollision|collisione]] di 2 reti Netsukuku nate separatamente. |
Il modulo Radar
Nel modulo Radar vengono definite le classi Radar, Neighbour e Neigh. Servono a gestire la conoscenza del proprio vicinato da parte dell'host corrente. Cioè quali sono gli altri nodi della sua LAN.
In seguito aggiunta la classe NodeInfo.
La classe NodeInfo rappresenta un nodo all'interno della ip_table della classe Neighbour. Ne memorizza queste informazioni:
devs: a dict which maps a device to the average rtt
bestdev: a pair (d, avg_rtt), where devs[d] is the best element of devs.
ntk: node's ntk remote instance
La classe Radar, quando viene istanziata, si memorizza se lavora in multipath e il numero massimo di vicini memorizzati (gestiti in una nuova istanza della classe Neighbour) e il numero di pacchetti nel bouquet (li prende dalla variabile globale settings).
Il suo metodo radar() manda n pacchetti in broadcast e calcola delle statistiche (la media dei RTT degli n pacchetti inviati - vedi il metodo get_avg_rtt) che poi passa all'istanza di Neighbour, tramite il suo metodo store(ip_table) (vedi Funzionamento del Radar).
Queste statistiche sono in forma di un dictionary di ip -> Neigh NodeInfo [bestdev, rtt] dove:
- ip = [4, 3, 2, 1]
bestdev = None se in multipath, altrimenti 'eth0' o la migliore
rtt = rtt medio di quel nodo vicino passando per bestdev
La classe Neighbour nel suo metodo store fa il merge dell'ip_table passata con quella di cui era già a conoscenza. Oltre a ricordare gli ip dei suoi vicini, assegna ad ognuno un id univoco all'interno di questo host. A questo serve la sua translation_table.
Nel gestire la sua ip_table, questa classe emette i signal NEIGH_NEW, NEIGH_DEL e NEIGH_REM_CHGED.
La classe Neigh rappresenta un nodo vicino di LAN. Viene usata per passare (ad esempio negli eventi, o nel metodo neigh_list) le informazioni che riguardano un nodo. Anche per rappresentare un nodo all'interno della ip_table della classe Neighbour. Ne memorizza queste informazioni:
ip: neighbour's ip; si tratta di un intero che rappresenta tutti i byte dell'indirizzo IP, e.g. 185999660;
nip: neighbour's nip; si tratta di una sequenza, e.g. [44, 33, 22, 11];
ntkd: neighbour's ntk remote instance; si tratta di un TCPClient (vedi il modulo RPC) istanziato nei metodi store() o ip_change() della classe Neighbour;
idn: neighbour's id; id univoco all'interno di questo host, associato al ip nella translation_table;
devs: a dict which maps a device to the average rtt
bestdev: a pair (d, avg_rtt), where devs[d] is the best element of devs.
netid: network id come è conosciuto da questo vicino; si tratta di un identificativo della rete usato per rilevare la collisione di 2 reti Netsukuku nate separatamente.