Differences between revisions 1 and 2
Revision 1 as of 2009-04-08 17:09:30
Size: 2455
Editor: anonymous
Comment:
Revision 2 as of 2009-04-08 18:07:25
Size: 2619
Editor: anonymous
Comment:
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
--(Ogni spazio è creato solo quando viene esplicitamente usato per la prima volta.)-- Ogni spazio viene creato usando il costruttore dataclass con i parametri lvl e id, così che l'informazione di dove si trova nella mappa ce l'ha lo stesso nodo (al momento la classe RouteNode non ne fa uso).<<BR>> --(Ogni spazio è creato solo quando viene esplicitamente usato per la prima volta.)-- Ogni spazio viene creato usando il costruttore dataclass con i parametri lvl e id, così che l'informazione di dove si trova nella mappa ce l'ha lo stesso nodo (al momento la [[/ClasseRouteNode|classe RouteNode]] non ne fa uso).<<BR>>
Line 12: Line 12:
E' possibile anche resettare un intero livello o l'intera mappa senza far emettere alcun segnale (map_reset, level_reset). Questa tecnica è usata dopo aver fatto un re-hook in un diverso gnodo e aver reimpostato il nuovo IP su tutti i Nic attivi (vedi la classe Hook). E' possibile anche resettare un intero livello o l'intera mappa senza far emettere alcun segnale ({{{map_reset}}}, {{{level_reset}}}). Questa tecnica è usata dopo aver fatto un re-hook in un diverso gnodo e aver reimpostato il nuovo IP su tutti i Nic attivi (vedi la [[/ClasseHook|classe Hook]]).
Line 14: Line 14:
Nella classe Map c'è anche l'indicazione del proprio spazio, cioè <il mio Netsukuku-IP>. Quindi si ha un metodo che dice se un certo nodo o gnodo appartiene allo stesso nostro gnodo di livello x.<<BR>>
Il proprio indirizzo è indicato nella forma di una sequenza di ID per i vari livelli dallo 0 al più alto. (un Netsukuku-IP o nip)<<BR>>
self.me = [1,1,168,192] (notare che il primo elemento della sequenza è il livello 0 (gnodo = nodo))<<BR>>
Un altro nodo da confrontare è sempre fornito nella stessa forma. Se si ha l'identificativo nella forma di un unico intero (=192*256^3+168*256^2+1*256^1+*256^0 detto semplicemente ip) si possono usare i metodi ip_to_nip e nip_to_ip.<<BR>>
nip = [2,2,168,192]<<BR>>
In questo caso self.is_in_level(nip,0) darebbe False;<<BR>>
invece self.is_in_level(nip,1) darebbe True.
Nella classe Map l'attributo {{{me}}} memorizza il proprio spazio, cioè il proprio Netsukuku-IP (abbreviato {{{nip}}}).
<<BR>>
Un nip è indicato nella forma di una sequenza di ID per i vari livelli dallo 0 al più alto.
<<BR>>
{{{ self.me = [1,1,168,192]}}}
<<BR>>
Notare che il primo elemento della sequenza è il livello 0 (gnodo = nodo)
<<BR>>
Un altro modo di rappresentare uno spazio nella mappa è un intero, detto semplicemente {{{ip}}}, dato dal calcolo 192*256^3^+168*256^2^+1*256^1^+1*256^0^.
<<BR>>
Per convertire tra le 2 notazioni si possono usare i metodi ip_to_nip e nip_to_ip.
<<BR>>
{{{ nip = [2,2,168,192]}}}
Line 22: Line 28:
Un altro confronto si può fare per dire di 2 Netsukuku-IP quale sia il primo livello differente. La ricerca parte dall'ultimo elemento delle sequenze (levels -1). Tra i 2 nip citati prima dovrebbe restituire 1. Il metodo is_in_level ci dice se un certo nodo o gnodo appartiene allo stesso nostro gnodo di livello x.
In questo caso {{{self.is_in_level(nip,0)}}} darebbe {{{False}}};<<BR>>
invece {{{self.is_in_level(nip,1)}}} darebbe {{{True}}}.
Line 24: Line 32:
Il metodo lvlid_to_nip partendo da lvl e id guarda nella mappa e restituisce il nip equivalente. Lo fa partendo dal proprio nip (self.me) azzerando i livelli sotto lvl. Il metodo nip_cmp dice di 2 Netsukuku-IP quale sia il primo livello differente. La ricerca parte dall'ultimo elemento delle sequenze (levels -1). Tra i 2 nip citati prima {{{nip_cmp(nipA, nipB)}}} dovrebbe restituire 1.

Il metodo {{{lvlid_to_nip(lvl, id)}}}
partendo da lvl e id guarda nella mappa e restituisce il nip equivalente. Lo fa partendo dal proprio nip (self.me) sostituendo il livello lvl con id e azzerando i livelli sotto lvl.

la classe Map

Rappresenta una mappa di oggetti generici (dataclass) con uno spazio di levels x gsize. Cioè 4 x 256.

Ricorda che il livello 0 indica i singoli nodi, mentre il livello 3 è l'intero dominio di IPv4.

Ogni spazio è creato solo quando viene esplicitamente usato per la prima volta. Ogni spazio viene creato usando il costruttore dataclass con i parametri lvl e id, così che l'informazione di dove si trova nella mappa ce l'ha lo stesso nodo (al momento la classe RouteNode non ne fa uso).
La dataclass deve avere il metodo is_free per dire se lo spazio in questione è usato o no.
E' possibile segnalare la presenza di un nuovo nodo nella mappa. Si fa con il metodo node_add. In questo momento viene emesso il signal NODE_NEW.
E' possibile anche rimuovere un elemento dalla mappa. Si fa con il metodo node_del. In questo caso viene anche emesso il signal NODE_DELETED.

E' possibile anche resettare un intero livello o l'intera mappa senza far emettere alcun segnale (map_reset, level_reset). Questa tecnica è usata dopo aver fatto un re-hook in un diverso gnodo e aver reimpostato il nuovo IP su tutti i Nic attivi (vedi la classe Hook).

Nella classe Map l'attributo me memorizza il proprio spazio, cioè il proprio Netsukuku-IP (abbreviato nip).
Un nip è indicato nella forma di una sequenza di ID per i vari livelli dallo 0 al più alto.
   self.me = [1,1,168,192]
Notare che il primo elemento della sequenza è il livello 0 (gnodo = nodo)
Un altro modo di rappresentare uno spazio nella mappa è un intero, detto semplicemente ip, dato dal calcolo 192*2563+168*2562+1*2561+1*2560.
Per convertire tra le 2 notazioni si possono usare i metodi ip_to_nip e nip_to_ip.
   nip = [2,2,168,192]

Il metodo is_in_level ci dice se un certo nodo o gnodo appartiene allo stesso nostro gnodo di livello x. In questo caso self.is_in_level(nip,0) darebbe False;
invece self.is_in_level(nip,1) darebbe True.

Il metodo nip_cmp dice di 2 Netsukuku-IP quale sia il primo livello differente. La ricerca parte dall'ultimo elemento delle sequenze (levels -1). Tra i 2 nip citati prima nip_cmp(nipA, nipB) dovrebbe restituire 1.

Il metodo lvlid_to_nip(lvl, id) partendo da lvl e id guarda nella mappa e restituisce il nip equivalente. Lo fa partendo dal proprio nip (self.me) sostituendo il livello lvl con id e azzerando i livelli sotto lvl.

Netsukuku/ita/ClasseMap (last edited 2009-05-26 18:53:31 by lukisi)