Chiamate a metodi remoti
Nel programma Netsukuku esistono delle funzioni (metodi) richiamabili da remoto attraverso il meccanismo RPC (vedi il modulo RPC).
Si può specificare quali metodi di una certa classe sono remotable.
A partire da un certo oggetto (istanza di una classe) chiamato root_instance, che viene specificato al momento dell'avvio del MicroTCPServer e dei MicroUDPServer (un UDP per ogni scheda di rete), tutti i suoi attributi si possono "accedere" da remoto. E per ogni attributo che contiene un oggetto, di nuovo tutti i suoi attributi si possono "accedere" da remoto.
Dicendo che "si può accedere" si intende che si possono richiamare i suoi metodi.
Bisogna poi vedere quali di questi metodi si possono veramente richiamare. Questo si controlla appunto specificando quali metodi di una data classe sono remotable.
Oggetto radice e suoi attributi
La root_instance fornita dal demone di Netsukuku è l'unica istanza della classe NtkNode.
Tra i suoi attributi sono:
self.radar = radar.Radar(...)
self.neighbour = self.radar.neigh
self.maproute = maproute.MapRoute(...)
self.etp = qspn.Etp(...)
self.p2p = p2p.P2PAll(...)
self.coordnode = coord.Coord(...)
self.hook = hook.Hook(...)
In particolare l'attributo p2p è un oggetto P2PAll. Questo ha un numero dinamico di attributi interessanti, perché richiamando un suo attributo con nome PID_n (dove n è un qualsiasi intero) si ottiene un oggetto della classe P2P.
I TCPClient sono memorizzati sull'attributo ntkd dell'oggetto Neigh.
Gli oggetti Neigh si passano insieme agli eventi NEIGH_NEW, NEIGH_REM_CHGED, NEIGH_DELETED oppure si richiedono alla istanza locale di Neighbour con il metodo neigh_list.
Quindi sul codice si trovano pezzi simili a questo:
neigh.ntkd.etp.etp_exec(...)
neigh è un oggetto Neigh ricevuto attraverso un evento. Attraverso l'attributo ntkd esegue una chiamata RPC. La root_instance (sull'host remoto) è l'oggetto NtkNode, il quale ha un attributo etp che è una istanza della classe Etp. La classe Etp ha la funzione remotable etp_exec. La chiamata quindi risulta corretta.
Altro esempio potrebbe essere:
n.ntkd.p2p.PID_12.msg_send(...)
n è un oggetto Neigh richiesto alla istanza locale di Neighbour. Attraverso l'attributo ntkd esegue una chiamata RPC. La root_instance (sull'host remoto) è l'oggetto NtkNode, il quale ha un attributo p2p che è una istanza della classe P2PAll. La classe P2PAll ha un attributo (dinamico) PID_12 che è una istanza della classe P2P. La classe P2P ha la funzione remotable msg_send. La chiamata quindi risulta corretta.
Invece il BcastClient viene istanziato e memorizzato sull'attributo broadcast dell'oggetto Radar.
Oppure si può istanziare un BcastClient all'abbisogna.
Quindi sul codice si trovano pezzi simili a questo:
self.broadcast.radar.reply(...)
self.broadcast è un oggetto BcastClient attraverso il quale si esegue una chiamata RPC in broadcast. La root_instance (su tutti gli host Netsukuku della LAN) è l'oggetto NtkNode, il quale ha un attributo radar che è una istanza della classe Radar. La classe Radar ha la funzione remotable reply. La chiamata quindi risulta corretta.
Parametri formali speciali
TODO: spiegazione del _rpc_caller
Elenco dei metodi remotable
Modulo radar
class Radar(object)
reply Riceve _rpc_caller
time_register Riceve _rpc_caller
class Neighbour(object)
ip_change
Modulo route
class MapRoute(Map)
free_nodes_nb
Modulo qspn
class Etp
etp_exec
Modulo hook
class Hook(object)
communicating_vessels
highest_free_nodes
Modulo p2p
class P2P(RPCDispatcher)
partecipant_add
msg_send
class P2PAll(object)
pid_getall
Modulo coord
class MapCache(Map)
map_data_merge
class Coord(P2P)
going_out
going_out_ok
going_in