= Funzionamento del Radar =
Ogni volta che viene richiamato il metodo radar() della classe Radar (vedi il [[../ModuloRadar|modulo Radar]]) vengono inviati in broadcast n pacchetti.
<
>
Questo avviene richiamando nei nodi vicini di LAN (usando una istanza di {{{BcastClient}}} - vedi il [[../ModuloRPC|modulo RPC]]) il metodo {{{radar.reply(self.ntkd_id, self.radar_id)}}}. In esso, tramite le informazioni del {{{CallerInfo}}}, (vedi sempre il [[../ModuloRPC|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 [[../NetworkCollision|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.