Funzionamento del Radar

Ogni volta che viene richiamato il metodo radar() della classe Radar (vedi il modulo Radar) vengono inviati in broadcast n pacchetti.
Questo avviene richiamando nei nodi vicini di LAN (usando una istanza di BcastClient - vedi il modulo RPC) il metodo radar.reply(self.ntkd_id, self.radar_id). In esso, tramite le informazioni del CallerInfo, (vedi sempre il modulo RPC) viene richiamato "indietro" al chiamante il metodo radar.time_register(radar_id, self.netid) - grazie all'identificativo radar_id la chiamata a time_register viene ignorata dagli altri nodi della LAN. (In effetti il FakeRmt TCPClient dopo aver inviato il messaggio resta in ascolto sul socket per la risposta e la restituisce al chiamante locale, mentre il FakeRmt BcastClient dopo aver inviato il messaggio ritorna subito senza aspettare risposta. Per questo viene usata la chiamata di ritorno al metodo time_register.)
Quindi si aspettano maxwait secondi. In questo tempo (se nella rete c'è qualcuno) si generano un numero di richieste RPC al metodo time_register. Questo metodo riceve la struttura CallerInfo dalla quale si estrapola l'IP del chiamante e il net_device (interfaccia) attraverso il quale è stato raggiunto; inoltre accetta i parametri radar_id e netid, il primo per sapere a quale radar-scan si riferisce la risposta e il secondo per comunicare l'ID della rete di appartenenza (per rilevare eventuali collisioni di rete).
Scaduto il tempo si aggiorna la propria ip_table, si incrementa il numero di radar inviati, si emette il signal SCAN_DONE con argomento numero di radar inviati.

Netsukuku/ita/FunzionamentoDelRadar (last edited 2009-04-15 10:14:42 by anonymous)