Modulo QSPN - Dettagli Tecnici

Requisiti

L'utilizzatore del modulo QSPN per prima cosa inizializza il modulo richiamando il metodo statico QspnManager.init ( ) .

Prima di iniziare ad usare il modulo QSPN, il nodo deve essere a conoscenza del suo indirizzo Netsukuku; deve essere un indirizzo non ancora preso nella rete; deve essere un indirizzo compatibile con gli archi del nodo, cioè tale che se il nodo entra in un g-nodo esistente g di livello i abbia almeno un arco verso un altro nodo appartenente a g. Di fatto per ottenere questo il nodo contatta i suoi vicini e raccoglie informazioni sui loro g-nodi di appartenenza ai vari livelli, compreso il livello più alto; poi valuta quale strategia voglia seguire per scegliere su quale g-nodo tra questi voglia entrare, quindi contatta il Coordinator del g-nodo scelto e si accorda con lui per farsi assegnare un posto al suo interno.

Dallo stesso Coordinator del g-nodo g il nodo ottiene anche altre informazioni che servono al modulo QSPN, come l'anzianità di g e dei suoi g-nodi superiori e l'anzianità del g-nodo che il nodo corrente costituirà, per poter produrre il proprio fingerprint di nodo. L'identificativo del fingerprint è generato dal nodo come numero random in uno spazio abbastanza grande di modo che sia presumibilmente univoco a livello di rete.

Quindi il nodo istanzia il suo QspnManager passando al costruttore:

Quando ci sono variazioni sugli archi, richiama sul QspnManager i metodi:

Deliverables

Quando viene costruito il QspnManager gli viene passata una lista di archi. Se non ci sono archi significa che il nodo sta generando una nuova rete, quindi il modulo si considera da subito maturo. Il modulo lo segnala attraverso il segnale qspn_mature di QspnManager.

Se invece ci sono degli archi il modulo si considera non maturo. In questo caso chiede ai vicini di comunicargli le loro mappe con un ETP completo.

Le richieste sono fatte su ogni singolo arco, in parallelo, con protocollo reliable. Se una richiesta fallisce (per problemi al link) il relativo arco viene rimosso e viene emesso il segnale arc_removed di QspnManager.

Alcuni degli archi possono rifiutare la richiesta perché a loro volta non sono ancora maturi. Per questi non viene rimosso l'arco, ma semplicemente non abbiamo potuto ricevere da loro un ETP.

Quando tutte le richieste hanno terminato si avrà una lista di ETP. Se tale lista risultasse vuota allora il modulo emette il segnale failed_hook di QspnManager affinché il nodo consideri fallito l'ingresso nella rete e riprovi da capo.

Se invece la lista contiene uno o più ETP, il modulo li elabora. Poi si considera maturo, quindi emette il segnale qspn_mature di QspnManager.

Il modulo segnala.