Differences between revisions 2 and 35 (spanning 33 versions)
Revision 2 as of 2015-02-28 08:45:55
Size: 3857
Editor: lukisi
Comment:
Revision 35 as of 2016-07-28 08:54:14
Size: 100
Editor: lukisi
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= 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 sceglie uno di questi g-nodi per entrarvi, quindi contatta il Coordinator del g-nodo scelto e si accorda con lui per farsi assegnare un posto al suo interno.

La strategia che si adotta per la scelta del g-nodo non è di competenza del modulo QSPN. Viene descritta nel documento '''TODO: inserire'''.

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:

 * Il proprio indirizzo Netsukuku (istanza di IQspnNaddr ''my_naddr'').
 * Il numero massimo di percorsi per destinazione da memorizzare (int ''max_paths'').
 * Il massimo rapporto di hops comuni nella verifica di disgiunzione (double ''max_common_hops_ratio'').
 * Gli archi che esistono tra il nodo e i suoi vicini (lista di istanze di IQspnArc ''my_arcs'').
 * Il suo fingerprint come nodo (istanza di IQspnFingerprint ''my_fingerprint'').
 * Il calcolatore del tempo di tolleranza (istanza di IQspnThresholdCalculator ''threshold_calculator'').
 * La stub factory (istanza di IQspnStubFactory ''stub_factory'').
 * La factory per produrre istanze di ETP (istanza di IQspnEtpFactory ''etp_factory'').

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

 * arc_add (IQspnArc ''arc'').
 * arc_is_changed (IQspnArc ''changed_arc'').
 * arc_remove (IQspnArc ''removed_arc'').

== 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. Quando viene emesso il segnale ''failed_hook'' l'utilizzatore del modulo è tenuto a scartare l'istanza di !QspnManager.

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.
[[https://github.com/lukisi/documentation/blob/master/ita/ModuloQspn/DettagliTecnici.md|Redirect]]

Netsukuku/ita/docs/ModuloQSPN/DettagliTecnici (last edited 2016-07-28 08:54:14 by lukisi)