Simulare reti Thread utilizzando OTNS

1. Introduzione

5abd22afa2f2ee9a.png

Che cosa sono Thread e OTNS

Thread è un protocollo di rete mesh wireless a basso consumo basato su IP che consente comunicazioni sicure tra dispositivi. Le reti Thread possono adattarsi ai cambiamenti di topologia per evitare single point of failure.

OpenThread rilasciato da Google è un'implementazione open source di Thread. Nonostante le dimensioni ridotte del codice e l'impatto della memoria, OpenThread supporta tutte le funzionalità definite nella specifica dei thread.

Il Simulatore di rete OpenThread (OTNS) può essere utilizzato per simulare reti Thread eseguendo nodi OpenThread simulati su piattaforme posix. OTNS offre un'interfaccia web (OTNS-Web) facile da usare per visualizzare e utilizzare le reti Thread simulate.

Obiettivi didattici

  • Installa OTNS e le sue dipendenze
  • Creazione di OpenThread per OTNS
  • Come aggiungere/spostare/eliminare i nodi in OTNS-Web
  • Utilizza le altre utili funzionalità di OTNS-Web per gestire la simulazione della rete
  • Verificare il mancato single-point-of-failing di OpenThread

Questo codelab è incentrato su OTNS-CLI e OTNS-Web. Le altre funzionalità di OTNS, come lo script Python, non sono trattate.

Che cosa ti serve

  • Linux x86_64 o Mac OS.
  • Git.
  • Vai a 1.13+.
  • Browser web. OTNS-Web utilizza un browser web per visualizzare le simulazioni.
  • Thread Primer: Dovrai conoscere i concetti di base di Thread per capire cosa insegna in questo codelab.

2. Installazione

Installa Go

La build di OTNS richiede Go 1.13+.

  1. Installa Go da https://golang.org/dl/
  2. Aggiungi $(go env GOPATH)/bin (di solito $HOME/go/bin) a $PATH:
$ export PATH=$PATH:$(go env GOPATH)/bin

Ottieni il codice OTNS

$ git clone https://github.com/openthread/ot-ns.git ./otns
$ cd otns

Installa le dipendenze

$ ./script/install-deps
grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy

Ti potrebbe essere chiesto di inserire una password per sudo.

Installare otns

Installa otns in $GOPATH/bin:

$ ./script/install
otns installed: /usr/local/google/home/simonlin/go/bin/otns

Verifichiamo se l'app otns è installata correttamente

  1. Esegui which otns per verificare se l'eseguibile otns è disponibile per la ricerca in $PATH.
  2. Se il comando otns non viene trovato, verifica di aver aggiunto $(go env GOPATH)/bin a $PATH.

3. Creazione di OpenThread per OTNS

Ottieni il codice OpenThread da GitHub

$ mkdir -p ~/src
$ git clone https://github.com/openthread/openthread ~/src/openthread

Crea OpenThread con OTNS=1

$ cd ~/src/openthread
$ ./script/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_SIMULATION_VIRTUAL_TIME_UART=ON -DOT_SIMULATION_MAX_NETWORK_SIZE=999

Puoi trovare gli eseguibili OpenThread nella directory build:

$ ls ~/src/openthread/build/simulation/examples/apps/cli/
ot-cli-ftd        ot-cli-mtd        ot-cli-radio

Ora è il momento di eseguire OTNS...

4. Esegui OTNS

Esegui otns:

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

Una volta avviato, OTNS accederà a una console dell'interfaccia a riga di comando (OTNS-CLI) e avvierà un browser web per la visualizzazione e la gestione della rete (OTNS-Web):

a0e05178d66929b1.png

Se vedi una pagina vuota solo per OTNS-Web, è probabile che WebGL non sia abilitato nel tuo browser. Fai riferimento alla paginahttps://superuser.com/a/836833 su come attivare WebGL.

Nelle sezioni seguenti imparerai a gestire le simulazioni OTNS tramite OTNS-CLI e OTNS-Web.

5. Scopri OTNS-CLI e OTNS-Web

Interfaccia a riga di comando OTNS

OTNS-CLI fornisce un'interfaccia a riga di comando (CLI) per la gestione delle simulazioni OTNS.

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

Puoi digitare i comandi tramite OTNS-CLI. Per un elenco completo dei comandi, consulta la documentazione di riferimento sull'interfaccia a riga di comando OTNS. Non preoccuparti, utilizzerai solo alcuni di questi comandi in questo codelab.

OTNS-Web

OTNS-Web è lo strumento di visualizzazione e gestione della rete di OTNS. Fornisce una rappresentazione visiva dei nodi, dei messaggi e dei link della rete Thread simulata. Prendi nota dei vari elementi di OTNS-Web:

4c5b43509a2ca0d0.png

6. Aggiungi nodi

Aggiungi nodi tramite OTNS-CLI

Aggiungi un router in posizione (300, 100)

> add router x 300 y 100
1
Done

Dovresti vedere un nodo creato in OTNS-Web. Il nodo parte da router e diventa leader in pochi secondi:

6ca8c2e63ed9818d.png

Aggiungi altri nodi tramite OTNS-CLI

> add fed x 200 y 100
2
Done
> add med x 400 y 100
3
Done
> add sed x 300 y 200
4
Done

Attendi qualche secondo che i nodi vengano uniti in una partizione. Dovresti vedere i nodi in OTNS-WEB:

3ee67903c01aa612.png

Aggiungi nodi entro il giorno OTNS-Web

Puoi anche aggiungere nodi tramite OTNS-Web. Fai clic sul pulsante New Router di Action Bar. Dovresti vedere un nodo creato subito sopra il pulsante New Router. Trascina il nodo in modo che si trovi vicino al leader creato tramite OTNS-CLI. Tutti i nodi alla fine dovrebbero essere uniti in un'unica partizione:

420258bb92561146.png

Fai clic anche sui pulsanti FED, MED e SED sulla barra delle azioni per creare altri tipi di nodi. Trascinali nelle posizioni vicino ai nodi esistenti per collegarli a quella rete Thread:

fe15d6f9726a099e.png

Ora hai creato una rete Thread di una partizione che contiene molti nodi. Nella sezione successiva, modificheremo la velocità di simulazione per velocizzare la simulazione.

7. Regola velocità

Attualmente, la simulazione deve essere eseguita alla velocità 1X, il che significa che il tempo simulato trascorso finora corrisponde all'ora effettiva da quando abbiamo creato il primo nodo.

Regola la velocità con OTNS-CLI

Puoi regolare la velocità di simulazione tramite OTNS-CLI.

Imposta la velocità di simulazione su 100X

> speed 100
Done

Dovresti vedere che i nodi inviano messaggi con maggiore frequenza rispetto a prima.

Imposta la velocità di simulazione su MAX

> speed max
Done

Ora, OTNS cerca di simulare il più velocemente possibile, quindi dovresti vedere i nodi che inviano un numero elevato di messaggi.

Sospendi simulazione

> speed 0
Done

Se imposti la velocità di simulazione su 0, la simulazione viene messa in pausa.

Ripristina simulazione a velocità normale

> speed 1
Done

L'impostazione della velocità di simulazione per un valore superiore a 0 riprende la simulazione.

Regola la velocità con OTNS-Web

Pulsanti del controllo di velocità

Trova i pulsanti di controllo della velocità 9329157c1bd12672.png su Action Bar. I pulsanti mostrano la velocità di simulazione attuale e possono essere utilizzati per regolare la velocità di simulazione e mettere in pausa/riprendere la simulazione.

Accelera la simulazione

Per velocizzare la simulazione, fai clic sul pulsante 39b88331779277ad.png finché la velocità non raggiunge MAX: f5f460b2586d299b.png.

Rallentamento simulazione

Puoi rallentare la simulazione facendo clic sul pulsante 31cca8d5b52fa900.png.

Sospendi simulazione

Fai clic sul pulsante 46cc2088c9aa7ab6.png per mettere in pausa la simulazione quando è in esecuzione. Il pulsante diventerà ce25eda3496ffcd4.png.

Riprendi la simulazione

Fai clic sul pulsante ce25eda3496ffcd4.png per riprendere la simulazione quando è in pausa. Il pulsante verrà modificato di nuovo in 46cc2088c9aa7ab6.png.

Imposta la velocità di simulazione su 10X

Per risparmiare tempo, utilizza

OTNS-CLI per regolare la velocità di simulazione su

10X in modo da poter osservare molto più velocemente i cambiamenti nella topologia della rete.

> speed 10
Done

8. Attiva/Disattiva la radio

Ora, la simulazione dovrebbe contenere 2 router (forma esagonale) e molti figli ed essere eseguita a una velocità 10X.

Trova l'attuale leader (bordo rosso) dei due router, fai clic per selezionarlo:

8c6a2e191cdae0c7.png

Disattiva segnale cellulare

Fai clic sul pulsante 7ca085f470491dd4.png nella barra delle azioni per disattivare la radio del nodo Leader:

a3bf58d9d125f95f.png

Il leader non potrà inviare o ricevere messaggi con la radio disattivata.

Attendi circa 12 secondi (120 secondi in fase di simulazione) affinché l'altro router diventi il nuovo leader:

e3d32f85c4a1b990.png

La rete Thread recupera automaticamente dagli errori di Leader formando una nuova partizione con un nuovo leader. La nuova partizione ha anche un nuovo colore di partizione.

Attiva segnale cellulare

Seleziona il leader la cui radio è stata disattivata. Fai clic sul pulsante 2d9cecb8612b42aa.png su Action Bar per ripristinare la connettività radio:

7370a7841861aa3a.png

Il leader dovrebbe ricollegarsi alla rete dopo il ripristino della connettività radio.

9. Spostamento nodi

OTNS consente agli utenti di spostare facilmente i nodi tramite OTNS-CLI o OTNS-Web.

Sposta il nodo tramite OTNS-CLI

Sposta il nodo 5 in una nuova posizione:

> move 5 600 300
Done

Poiché ora il nodo 5 è lontano dall'altro router, dovrebbero perdere connettività tra loro e, dopo circa 12s (120s in tempo di simulazione), entrambi diventano leader della propria partizione:

c06b4d0a4f183299.png

Sposta il nodo tramite OTNS-Web

Riporta il nodo 5 nella posizione originale trascinandolo. Le due partizioni devono essere unite nuovamente in un'unica partizione:

9ba305c4c5a5f892.png

10. Elimina nodi

Elimina nodi tramite OTNS-CLI

Elimina nodo 8:

> del 8
Done

Il nodo 8 dovrebbe scomparire dalla simulazione:

18156770d9f8bf83.png

Elimina nodi tramite OTNS-Web

Seleziona il nodo 5 e fai clic sul pulsante 7ff6afd565f4eafc.png su Action Bar per eliminare il nodo 5:

d4079cceea0105f0.png

Node 1 dovrebbe diventare leader e Node 7 dovrebbe disconnettersi perché non può raggiungere alcun router.

Cancella la simulazione (elimina tutti i nodi)

Puoi cancellare la simulazione eliminando tutti i nodi tramite OTNS-Web.

Fai clic sul pulsante 89618191721e79a0.png su Action Bar. Tutti i nodi scompariranno contemporaneamente.

Prima di continuare...

Aggiungi alcuni nodi alla simulazione in modo da poter continuare nel tutorial.

11. Contesto del nodo OTNS-CLI

OTNS-CLI fornisce la modalità contesto del nodo per semplificare l'interazione con i nodi al fine di aiutare gli sviluppatori a diagnosticare lo stato di un nodo.

Entra in modalità contesto nodo

Inserisci il contesto del nodo 1:

> node 1
Done
node 1>

La richiesta dell'interfaccia a riga di comando è stata modificata in node 1> e indica il contesto del nodo attuale. Puoi digitare i comandi dell'interfaccia a riga di comando di OpenThread da eseguire sul nodo come se interagissi direttamente con il nodo.

Eseguire i comandi nel contesto del nodo

node 1> state
leader
Done
node 1> channel
11
Done
node 1> panid
0xface
Done
node 1> networkname
OpenThread
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:d800
fdde:ad00:beef:0:2175:8a67:1000:6352
fe80:0:0:0:2075:82c2:e9e9:781d
Done

Passa a un altro contesto nodo

node 1> node 2
Done
node 2> 

Esci dal contesto del nodo

node 1> exit
Done
>

12. Congratulazioni

Complimenti, hai eseguito con successo la tua prima simulazione OTNS.

Hai imparato a installare OTNS e le sue dipendenze. Hai creato OpenThread per OTNS e hai avviato la simulazione OTNS con istanze di simulazione OpenThread. Hai imparato a manipolare la simulazione in vari modi sia su OTNS-CLI che su OTNS-Web.

Ora sai cos'è OTNS e come utilizzare OTNS per simulare reti OpenThread.

Passaggi successivi

Dai un'occhiata ad alcuni di questi codelab...

Documentazione di riferimento