Size: 3015
Comment:
|
← Revision 4 as of 2009-05-21 13:16:04 ⇥
Size: 2646
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 4: | Line 4: |
~+La classe Radar+~, quando viene istanziata, si memorizza il numero massimo di vicini memorizzati (gestiti in una nuova istanza della classe Neighbour) e il numero di pacchetti nel bouquet (li prende dalla [[../VariabileGlobaleSettings|variabile globale settings]]). Il suo metodo {{{radar()}}} manda ''n'' pacchetti in broadcast e calcola delle statistiche (la media dei RTT degli ''n'' pacchetti inviati - vedi il metodo {{{get_avg_rtt}}}) che poi passa all'istanza di Neighbour, tramite il suo metodo {{{store(ip_table)}}} (vedi [[../FunzionamentoDelRadar|Funzionamento del Radar]]). |
|
Line 5: | Line 9: |
--(In seguito aggiunta la classe {{{NodeInfo}}}.)-- | Queste statistiche sono in forma di un dictionary di {{{ip -> Neigh}}}, dove: |
Line 7: | Line 11: |
--(~+La classe {{{NodeInfo}}}+~ rappresenta un nodo all'interno della ip_table della classe Neighbour. Ne memorizza queste informazioni:)-- * --(devs: a dict which maps a device to the average rtt)-- * --(bestdev: a pair (d, avg_rtt), where devs[d] is the best element of devs.)-- * --(ntk: node's ntk remote instance)-- ~+La classe Radar+~, quando viene istanziata, si memorizza --(se lavora in multipath e)-- il numero massimo di vicini memorizzati (gestiti in una nuova istanza della classe Neighbour) e il numero di pacchetti nel bouquet (li prende dalla [[../VariabileGlobaleSettings|variabile globale settings]]). Il suo metodo {{{radar()}}} manda ''n'' pacchetti in broadcast e calcola delle statistiche (la media dei RTT degli ''n'' pacchetti inviati - vedi il metodo {{{get_avg_rtt}}}) che poi passa all'istanza di Neighbour, tramite il suo metodo {{{store(ip_table)}}} (vedi [[../F|Funzionamento del Radar]]). <<BR>> Queste statistiche sono in forma di un dictionary di ip -> Neigh --({{{NodeInfo}}})-- --([bestdev, rtt])-- dove: . ip = [4, 3, 2, 1] . --(bestdev = None se in multipath, altrimenti 'eth0' o la migliore)-- . --(rtt = rtt medio di quel nodo vicino passando per bestdev)-- |
. {{{ip}}} = intero rappresentante il NIP . in {{{neigh}}} vengono memorizzati solo {{{devs}}} e {{{bestdev}}} |
Line 24: | Line 15: |
Nel gestire la sua ip_table, questa classe emette i signal NEIGH_NEW, NEIGH_DEL e NEIGH_REM_CHGED. | <<BR>> Nel gestire la sua ip_table, questa classe emette i signal {{{NEIGH_NEW}}}, {{{NEIGH_DEL}}} e {{{NEIGH_REM_CHGED}}}. |
Line 26: | Line 18: |
La classe Neigh rappresenta un nodo vicino di LAN. Viene usata per passare (ad esempio negli eventi, o nel metodo neigh_list) le informazioni che riguardano un nodo. Anche per rappresentare un nodo all'interno della ip_table della classe Neighbour. Ne memorizza queste informazioni: ip: neighbour's ip; si tratta di un intero che rappresenta tutti i byte dell'indirizzo IP (o nip) tipo 185999660; nip: neighbour's nip; si tratta di una sequenza tipo [44, 33, 22, 11]; ntkd: neighbour's ntk remote instance; si tratta di un TCPClient (vedi il modulo RPC) istanziato nei metodi store() o ip_change() della classe Neighbour; idn: neighbour's id; id univoco all'interno di questo host, associato al ip nella translation_table; devs: a dict which maps a device to the average rtt bestdev: a pair (d, avg_rtt), where devs[d] is the best element of devs. netid: network id of the node; per evitare delle collisioni; ogni host genera casualmente il proprio netid; lo comunica ai suoi vicini di lan durante il Funzionamento del Radar. |
~+La classe Neigh+~ rappresenta un nodo vicino di LAN. Viene usata per passare (ad esempio negli eventi, o nel metodo neigh_list) le informazioni che riguardano un nodo. Ne memorizza queste informazioni: . '''ip''': neighbour's ip; si tratta di un intero che rappresenta tutti i byte dell'indirizzo IP, e.g. 185999660; . '''nip''': neighbour's nip; si tratta di una sequenza, e.g. [44, 33, 22, 11]; . '''ntkd''': neighbour's ntk remote instance; si tratta di un TCPClient (vedi il [[../ModuloRPC|modulo RPC]]) istanziato nei metodi store() o ip_change() della classe Neighbour; . '''idn''': neighbour's id; id univoco all'interno di questo host, associato al ip nella translation_table; . '''devs''': a dict which maps a device to the average rtt . '''bestdev''': a pair (d, avg_rtt), where devs[d] is the best element of devs. . '''netid''': network id come è conosciuto da questo vicino; si tratta di un identificativo della rete usato per rilevare la [[../NetworkCollision|collisione]] di 2 reti Netsukuku nate separatamente. Anche per rappresentare un nodo all'interno della {{{ip_table}}} della classe {{{Neighbour}}} si usa la classe {{{Neigh}}}, ma valorizzando solo i membri {{{devs}}} e {{{bestdev}}}. |
Il modulo Radar
Nel modulo Radar vengono definite le classi Radar, Neighbour e Neigh. Servono a gestire la conoscenza del proprio vicinato da parte dell'host corrente. Cioè quali sono gli altri nodi della sua LAN.
La classe Radar, quando viene istanziata, si memorizza il numero massimo di vicini memorizzati (gestiti in una nuova istanza della classe Neighbour) e il numero di pacchetti nel bouquet (li prende dalla variabile globale settings).
Il suo metodo radar() manda n pacchetti in broadcast e calcola delle statistiche (la media dei RTT degli n pacchetti inviati - vedi il metodo get_avg_rtt) che poi passa all'istanza di Neighbour, tramite il suo metodo store(ip_table) (vedi Funzionamento del Radar).
Queste statistiche sono in forma di un dictionary di ip -> Neigh, dove:
ip = intero rappresentante il NIP
in neigh vengono memorizzati solo devs e bestdev
La classe Neighbour nel suo metodo store fa il merge dell'ip_table passata con quella di cui era già a conoscenza. Oltre a ricordare gli ip dei suoi vicini, assegna ad ognuno un id univoco all'interno di questo host. A questo serve la sua translation_table.
Nel gestire la sua ip_table, questa classe emette i signal NEIGH_NEW, NEIGH_DEL e NEIGH_REM_CHGED.
La classe Neigh rappresenta un nodo vicino di LAN. Viene usata per passare (ad esempio negli eventi, o nel metodo neigh_list) le informazioni che riguardano un nodo. Ne memorizza queste informazioni:
ip: neighbour's ip; si tratta di un intero che rappresenta tutti i byte dell'indirizzo IP, e.g. 185999660;
nip: neighbour's nip; si tratta di una sequenza, e.g. [44, 33, 22, 11];
ntkd: neighbour's ntk remote instance; si tratta di un TCPClient (vedi il modulo RPC) istanziato nei metodi store() o ip_change() della classe Neighbour;
idn: neighbour's id; id univoco all'interno di questo host, associato al ip nella translation_table;
devs: a dict which maps a device to the average rtt
bestdev: a pair (d, avg_rtt), where devs[d] is the best element of devs.
netid: network id come è conosciuto da questo vicino; si tratta di un identificativo della rete usato per rilevare la collisione di 2 reti Netsukuku nate separatamente.
Anche per rappresentare un nodo all'interno della ip_table della classe Neighbour si usa la classe Neigh, ma valorizzando solo i membri devs e bestdev.