Modulo QSPN - Analisi Funzionale

Il modulo realizza lo scambio di ETP con i vicini del nodo per l'esplorazione della rete (vedi documento esplorazione).

L'obiettivo è di mantenere per ogni destinazione fino a n percorsi disgiunti, che siano i più rapidi (vedi documento rotte disgiunte).

Struttura gerarchica della rete

La rete è strutturata gerarchicamente in l livelli. Il livello 0 rappresenta il singolo nodo. Nel livello più alto l è presente un solo gruppo che costituisce tutta la rete.

Ogni gruppo di livello i contiene un numero massimo fissato di gruppi di livello i-1.

Il numero massimo di elementi di un gruppo è detto gsize. Ogni livello da 0 a l-1 può avere un valore gsize diverso. Chiamiamo gsize(i) il numero massimo di elementi in un gruppo di livello i+1.

Ogni gruppo di livello i ha un identificativo che lo individua univocamente all'interno del suo gruppo di livello i+1. Tale identificativo è un numero intero da 0 a gsize(i) - 1.

(vedi documento "Documents/livelli e bits")

Mappa gerarchica della rete

Il modulo genera e mantiene una mappa a topologia gerarchica della rete.

Per ogni livello della rete in tale mappa sono memorizzati tutti i gnodi di quel livello di cui il nodo conosce l'esistenza (e di conseguenza almeno una rotta).

Per ogni gnodo la mappa mantiene queste informazioni:

Se per un gnodo vengono rilevate due path che differiscono per il loro fingerprint e se questa situazione si mantiene per un certo lasso di tempo, questo è sintomo dello split del gnodo in questione. Il modulo lo segnala con un evento.
Il tempo di tolleranza è direttamente proporzionale alla somma dei costi associati alle due path che differiscono. Ma essendo l'oggetto costo non del tutto noto al modulo qspn, viene fornita una callback al modulo per tradurre questo costo somma in un lasso temporale.

Requisiti

Deliverables

L'identificativo del proprio nodo, come anche l'identificativo di ogni vicino, è un oggetto il cui contenuto non è del tutto noto al modulo qspn. L'interfaccia di questo oggetto nota al modulo (IQspnNodeData) gli consente di:

Un arco è un oggetto il cui contenuto non è del tutto noto al modulo qspn. L'interfaccia di questo oggetto nota al modulo (IQspnArc) gli consente di:

Il costo di un arco (come il costo di una path) è un oggetto non del tutto noto a questo modulo. La sua interfaccia nota al modulo (IQspnREM) gli consente di:

Il fingerprint di un gnodo è un oggetto non del tutto noto a questo modulo. La sua interfaccia nota al modulo (IQspnFingerprint) gli consente di:

Il fingerprint a livello 0 è il guid del proprio nodo. Il fingerprint a livello levels è l'identificativo della rete.

Il Netsukuku address è l'indirizzo di una risorsa all'interno della rete, ad

Un nodo conosce (come requisito) il suo Naddr e da questo può costruire i

Un nodo può venire a conoscenza di Naddr e PartialNaddr di qualsiasi punto della

Nel caso però, in cui un [Partial]Naddr abbia il suo livello direttamente

Per questo l'interfaccia del proprio indirizzo è distinta dalla interfaccia di

Le interfacce note al modulo sono dunque: