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.
La classe Radar, quando viene istanziata, si memorizza 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, dove:
ip = intero rappresentante il NIP
in neigh vengono memorizzati solo devs e 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. 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.
Anche per rappresentare un nodo all'interno della ip_table della classe Neighbour si usa la classe Neigh, ma valorizzando solo i membri devs e bestdev.