Network Collision

Quando due reti Netsukuku nate separatamente si incontrano si può verificare che diversi (g)nodi abbiano lo stesso (g)ID.

Per rilevare questa situazione e quindi prendere le misure necessarie a risolvere il problema si adotta la tecnica di assegnare ad una rete Netsukuku un identificativo, alla sua nascita.
Il nodo che al suo avvio si ritrova solo, genera un netid random - vedi il modulo hook e anche la fase di startup di un nodo.
Il nodo che al suo avvio ha dei vicini riceve il netid di questi - tramite il radar. TODO: proseguire
In conclusione, ogni singolo nodo conosce il netid della sua rete.

Quando un nodo riceve ulteriori ETP (vedi il Modulo QSPN) richiama il metodo collision_check; in esso verifica che il netid del suo vicino sia lo stesso del suo.
Se sono diversi, quindi i due nodi appartengono a due reti prima separate, l'algoritmo è diverso nei due casi:

1) il nodo che ha la mappa più piccola o il netid minore calcola il livello (sia level) in cui i nodi hanno un gnodo padre con lo stesso ID. Ad esempio, se il mio IP è 1.2.3.4 e quello del mio vicino è 1.2.5.6 questi nodi sembrano appartenere allo stesso gnodo di livello 2. In realtà non è così perché appartengono a due reti diverse.
Esamina le destinazioni contenute nelle routes di livello level della porzione di mappa R dell'ETP ricevuto, per vedere se la rete del nodo vicino contiene già un gnodo di livello level con lo stesso (g)ID del mio (g)nodo di livello level.
In questo modo ho scoperto se il gnodo (di qualsiasi livello) a cui appartengo è invalido nella rete che ho incontrato. TODO: però se non siamo a livello 4 questo non basta, perché probabilmente si formerebbe un gnodo di livello level +1 non compatto. Giusto?
Se il gnodo (di qualsiasi livello) a cui appartengo è invalido devo fare il rehook, altrimenti non è necessario che io lo faccia, posso semplicemente entrare nell'altra rete con il mio attuale IP. TODO: Serve in questo caso coordinarsi con il coordinator node? Direi di sì. Come ci si accerta che qualcun altro non sta facendo hook alla rete con lo stesso gnodo?

2) di verificare la reale presenza di (g)ID che collidono, e di riavviare se necessario la procedura di hooking. Tramite questa si vedrà ri-assegnato il netid.

TODO: approfondire / dettagliare