Differences between revisions 6 and 7
Revision 6 as of 2009-04-16 14:47:03
Size: 5352
Editor: anonymous
Comment:
Revision 7 as of 2009-04-16 15:15:22
Size: 5456
Editor: anonymous
Comment:
Deletions are marked like this. Additions are marked like this.
Line 27: Line 27:
   2. Il suo ID. Inizia una lista di blocchi con un primo blocco di livello 0. In esso inizia una lista di nodi (di livello 0) con un primo nodo che rappresenta se stesso. Per questo mette il suo ID di livello 0 e una {{{NullRem}}}. <<BR>> Quando un nodo mette il suo ID in un ETP mette sempre {{{NullRem}}} come efficienza del link. Spetta al nodo che '''riceve''' l'ETP valorizzare questa REM in base ai dati della sua mappa. <<BR>> '''''Nota''': secondo il documento qspn.pdf il rem è impostato dal nodo che invia l'ETP, non andrebbe corretto il documento?''    2. Il suo ID. Inizia una lista di blocchi con un primo blocco di livello 0. In esso inizia una lista di nodi (di livello 0) con un primo nodo che rappresenta se stesso. Per questo mette il suo ID di livello 0 e una {{{NullRem}}}. <<BR>> Quando un nodo crea inizialmente un ETP, mette sempre insieme al suo ID una {{{NullRem}}} perché non deve indicare l'efficienza di nessun link. Spetta al nodo che '''riceve''' l'ETP indicare, in base ai dati della sua mappa, la Rem del link tra lui e il nodo che glielo ha inviato. <<BR>> '''''Nota''': secondo il documento qspn.pdf il rem è impostato dal nodo che invia l'ETP, non andrebbe corretto il documento?''
Line 46: Line 46:
   2. Il suo ID e la {{{NullRem}}}. Inizia una lista di blocchi con un primo blocco di livello 0. In esso inizia una lista di nodi (di livello 0) con un primo nodo che rappresenta se stesso. Per questo mette il suo ID di livello 0 e una {{{NullRem}}}.    2. Il suo ID. Inizia una lista di blocchi con un primo blocco di livello 0. In esso inizia una lista di nodi (di livello 0) con un primo nodo che rappresenta se stesso. Per questo mette il suo ID di livello 0 e una {{{NullRem}}}. <<BR>> Vedi commento sopra.

Il modulo qspn

Nel modulo qspn.py viene definita la classe Etp.
Questa viene istanziata nel costruttore della classe NtkNode. Si mette in ascolto degli eventi prodotti dalla classe Neighbour (vedi il modulo Radar). In particolare è interessata agli eventi NEIGH_NEW, NEIGH_REM_CHGED e NEIGH_DELETED, che sono emessi quando viene rilevato un nuovo vicino, oppure cambia l'efficienza del link ad un vicino, oppure un vicino abbandona la rete.
In risposta a questi eventi:

  • Aggiorna la mappa delle routes note chiamando i metodi routeneigh_xxx della classe MapRoute;

  • Genera gli ETP;

  • Tramite i TCPClient li invia ai vicini interessati.

Inoltre fornisce il remotable method etp_exec, nel quale processa gli ETP ricevuti dai suoi vicini.

Infine emette i segnali ETP_EXECUTED e NET_COLLISION. Entrambi sono gestiti dalla classe Hook, entrambi con funzioni microfunc di tipo "con dispatcher".

Caso "vicino con REM modificata"

In questo evento la classe intraprende le seguenti azioni:

  • Aggiorna la mappa con la nuova REM del vicino.
  • Avvalendosi del metodo bestroutes_get della classe MapRoute, crea la lista M|; è una lista di 4 liste, una per ogni livello; ogni lista contiene le migliori routes per ogni destinazione, tra tutte quelle conosciute.

  • Filtra questa lista M| eliminando quelle che hanno come gateway il vicino stesso; ottiene così la lista R.

  • Se la lista R risulta vuota l'algoritmo si ferma.

  • La lista R è composta da routes espresse come tupla (dst, rem)

  • Crea un ETP composto da:
    1. La lista di routes R.

    2. Il suo ID. Inizia una lista di blocchi con un primo blocco di livello 0. In esso inizia una lista di nodi (di livello 0) con un primo nodo che rappresenta se stesso. Per questo mette il suo ID di livello 0 e una NullRem.
      Quando un nodo crea inizialmente un ETP, mette sempre insieme al suo ID una NullRem perché non deve indicare l'efficienza di nessun link. Spetta al nodo che riceve l'ETP indicare, in base ai dati della sua mappa, la Rem del link tra lui e il nodo che glielo ha inviato.
      Nota: secondo il documento qspn.pdf il rem è impostato dal nodo che invia l'ETP, non andrebbe corretto il documento?

    3. Un flag di interesse posto a 1.
  • Invia l'ETP prodotto al "vicino con REM modificata".

Caso "vicino nuovo"

In questo caso la classe si comporta allo stesso modo del caso "vicino con REM modificata".

Caso "vicino non più rilevato"

In questo evento la classe intraprende le seguenti azioni:

  • Avvalendosi del metodo bestroutes_get della classe MapRoute, crea la lista M| (vedi sopra).

  • Filtra questa lista M| trattenendo solo quelle che hanno come gateway il vicino stesso; ottiene così la lista R.

  • Se la lista R risulta vuota l'algoritmo si ferma. (questo passo non dovrebbe avvenire dopo aver aggiornato la mappa?)

  • Aggiorna la mappa eliminando le routes che passano per il vicino.
  • Avvalendosi del metodo bestroutes_get della classe MapRoute, crea la lista M|, aggiornata.

  • Filtra questa lista M| trattenendo solo quelle che hanno come destinazione le destinazioni delle routes appena eliminate; ottiene così la lista R|.

  • Calcola la lista R| con le nuove migliori routes (ottenute con il metodo best_route delle istanze di RouteNode contenute nella classe MapRoute) verso le stesse destinazioni presenti nella precedente lista R.

  • Crea un ETP composto da:
    1. La lista di routes R|.

    2. Il suo ID. Inizia una lista di blocchi con un primo blocco di livello 0. In esso inizia una lista di nodi (di livello 0) con un primo nodo che rappresenta se stesso. Per questo mette il suo ID di livello 0 e una NullRem.
      Vedi commento sopra.

    3. Un flag di interesse posto a 1.
  • Invia l'ETP prodotto a tutti i suoi vicini tranne il "vicino non più rilevato".

Processazione degli ETP ricevuti dai vicini (metodo etp_exec)

Prima c'è un controllo sulla collisione di 2 reti nate separatamente, dal quale potrebbe risultare l'abbandono di tutta questa procedura.
Poi ancora, c'è una serie di operazioni per la gestione dei blocchi di vari livelli di mappa.
Poi inizia la procedura come delineata nel documento qspn.pdf.

Alla ricezione di un ETP la classe intraprende le seguenti azioni:

  • Verifica che il proprio ID non sia già presente nella lista percorsa dall'ETP (Acyclic rule). Se è presente ignora il pacchetto e termina la processazione.
  • Scorre la lista percorsa dall'ETP.
    • Dalla propria mappa recupera la REM verso il nodo che ci ha inviato l'ETP. A partire da questa, man mano che si scorre la lista dell'ETP, somma le REM relative ai singoli passi. Per ogni passo verifica se la REM fino qui sommata indica che quella percorsa è una route migliore di quella nella sua mappa. Casomai aggiorna la mappa e anche segna il ATP come interesting+=1

Netsukuku/ita/ModuloQSPN (last edited 2009-05-29 21:37:26 by lukisi)