Come viene usato il modulo RPC in Netsukuku

Dove vengono istanziati e usati i servers e i clients

I server TCP e UDP vengono avviati in microthreads (vedi il modulo micro). Questi microthread vengono lanciati nel metodo initialize della classe NtkNode (vedi la fase di startup di un nodo).
Esistono però dei metodi per ri-avviare questi server (rpc.stop_tcp_servers e rpc.stop_udp_servers) rinnovando i socket, necessario se i socket diventano invalidi (ad esempio per cambio IP).

Il TCPClient viene istanziato nei metodi store e ip_change della classe Neighbour. In questi metodi infatti l'host corrente apprende dell'esistenza di un certo IP nella sua LAN. Il TCPClient creato viene memorizzato nell'attributo ntk_client[ip] (che è un dict) della classe Neighbour.
Inoltre viene memorizzato nell'attributo ntkd dell'oggetto Neigh ogni volta che se ne istanzia uno.
Gli oggetti Neigh si istanziano per memorizzarli nella ip_table della classe Neighbour, per emettere degli eventi, per passarli a metodi, ecc. Va notato però che gli oggetti memorizzati nella ip_table non hanno valorizzato il membro ntkd.
Va notato che un TCPClient crea il suo socket in fase di connessione, e non ripete questa operazione se non viene prima chiusa la connessione (TCPClient.close). Di norma non chiude la connessione alla fine di una richiesta, ma esiste un metodo di Neighbour (reset_ntk_clients) per chiudere tutte le connessioni rimaste aperte e quindi rinnovare tutti i socket.

Varie istanze del BcastClient vengono create. Alcune per mandare richieste UDP, altre per inviare le relative risposte.
Una istanza viene creata e gestita dalla classe Radar per l'invio di richieste di radar scan.
Altre istanze vengono create e usate una tantum in altri metodi per inviare richieste in altre occasioni, come per richiamare il metodo highest_free_nodes nella fase di hooking.
Altre istanze vengono create e usate una tantum per inviare le risposte a richieste fatte via UDP.

L'istanza di BcastClient del radar viene creata una volta per tutte nel costruttore della classe NtkNode (vedi il modulo di avvio ntkd) e viene associato a tutte le interfacce di rete gestite da Netsukuku. Questa istanza viene passata alla classe Radar che se ne servirà per inviare messaggi in broadcast a tutta la sua LAN, per la gestione del vicinato (vedi anche Funzionamento del Radar)
Esiste però un metodo per rinnovare il socket di un BcastClient, è il metodo BcastClient.reset. Questo viene chiamato dal radar nel suo metodo Radar.radar_reset. Quest'ultimo viene eseguito alla fine di ogni radar scan, e anche come risposta all'evento HOOKED dopo la fase di hooking.

Quali chiamate RPC vengono fatte

Vedi le funzioni remotable.

Netsukuku/ita/UsoDelModuloRPCInNetsukuku (last edited 2009-05-21 15:11:04 by lukisi)