Simulare reti Thread utilizzando OTNS

1. Introduzione

5abd22afa2f2ee9a.png

Che cos'è Thread e OTNS

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

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

È possibile utilizzare OpenThread Network Simulator (OTNS) per simulare reti Thread eseguendo nodi OpenThread simulati sulle piattaforme posix. OTNS fornisce un'interfaccia web (OTNS-web) di facile utilizzo per visualizzare e utilizzare le reti Thread simulate.

Obiettivi didattici

  • Installare OTNS e le rispettive dipendenze
  • Creare OpenThread per OTNS
  • Come aggiungere/spostare/eliminare nodi in OTNS-Web
  • Utilizzare altre utili funzionalità di OTNS-Web per gestire la simulazione di rete
  • Verificare il singolo punto di errore di OpenThread

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

Che cosa ti serve

  • Linux x86_64 o Mac OS.
  • Git.
  • Passa a 1.13 e versioni successive.
  • Browser web. OTNS-Web utilizza un browser web per la visualizzazione delle simulazioni.
  • Thread Primer. Per capire cosa viene insegnato in questo codelab, devi conoscere i concetti di base di Thread.

2. Installazione

Installa Go

OTNS richiede Go 1.13 o versioni successive per creare.

  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

Richiedi 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

Verifica che l'app otns sia 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. Creare OpenThread per OTNS

Recupera 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

Corsa di otns:

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

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

a0e05178d66929b1.png

Se visualizzi solo una pagina vuota per OTNS-Web, è probabile che WebGL non sia attivo nel browser. Visita la paginahttps://superuser.com/a/836833 per scoprire 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

OTNS-CLI

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 il riferimento per l'interfaccia a riga di comando OTNS. Non preoccuparti, utilizzerai solo pochi di questi comandi in questo codelab.

OTNS-web

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

4c5b43509a2ca0d0.png

6. Aggiungi nodi

Aggiungi nodi tramite OTNS-CLI

Aggiungi un router nella posizione (300, 100)

> add router x 300 y 100
1
Done

Dovresti vedere un nodo creato in OTNS-Web. Il nodo inizia come 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 affinché i nodi vengano uniti in una partizione. Dovresti vedere i nodi in OTNS-WEB:

3ee67903c01aa612.png

Aggiungi nodi per OTNS-Web

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

420258bb92561146.png

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

fe15d6f9726a099e.png

Ora hai creato una rete Thread di una partizione che contiene molti nodi. Nella sezione successiva regoleremo la velocità di simulazione per velocizzare l'esecuzione della simulazione.

7. Regola velocità

Attualmente, la simulazione dovrebbe essere in esecuzione a una velocità pari a 1X, il che significa che il tempo di simulazione trascorso finora è uguale al tempo effettivo dalla creazione del primo nodo.

Regola la velocità di 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 molto più spesso rispetto a prima.

Imposta la velocità di simulazione su MAX

> speed max
Done

Ora, OTNS sta facendo il possibile per simulare il più rapidamente possibile, quindi dovresti vedere i nodi che inviano un grande numero di messaggi.

Interrompi simulazione

> speed 0
Done

L'impostazione della velocità di simulazione su 0 mette in pausa la simulazione.

Ripristina la simulazione a velocità normale

> speed 1
Done

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

Regola la velocità di OTNS-Web

Pulsanti per il controllo della velocità

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

Velocizza la simulazione

Puoi velocizzare la simulazione facendo clic sul pulsante 39b88331779277ad.png finché la velocità non raggiunge MAX: f5f460b2586d299b.png.

Simulazione rallentata

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

Interrompi simulazione

Fai clic sul pulsante 46cc2088c9aa7ab6.png per mettere in pausa la simulazione mentre è in esecuzione. Il pulsante verrà modificato in ce25eda3496ffcd4.png.

Riprendi la simulazione

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

Imposta la velocità di simulazione su 10X

Per risparmiare tempo, usa

OTNS-CLI per regolare la velocità di simulazione su

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

> speed 10
Done

8. Accendere/spegnere la radio

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

Trova il Leader (bordo rosso) corrente dei 2 Router, fai clic con un singolo 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 tempo simulato) affinché l'altro router diventi il nuovo leader:

e3d32f85c4a1b990.png

La rete Thread si riprende automaticamente da un errore del leader creando una nuova partizione con un nuovo leader. La nuova partizione ha anche un nuovo colore.

Attiva segnale cellulare

Seleziona il leader con la radio spenta. Fai clic sul pulsante 2d9cecb8612b42aa.png su Action Bar per ripristinare la connettività radio:

7370a7841861aa3a.png

Il Leader deve riconnettersi alla rete dopo aver ripristinato la connettività radio.

9. Sposta nodi

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

Sposta nodo tramite OTNS-CLI

Sposta il nodo 5 in una nuova posizione:

> move 5 600 300
Done

Dato che ora il nodo 5 è lontano dall'altro router, dovrebbero perdere la connettività l'uno all'altro e dopo circa 12 secondi (120 secondi in tempo di simulazione) entrambi diventano leader della propria partizione:

c06b4d0a4f183299.png

Sposta il nodo tramite OTNS-Web

Sposta il nodo 5 nella posizione originale trascinandolo. Le due partizioni devono unirsi di nuovo in un'unica partizione:

9ba305c4c5a5f892.png

10. Elimina nodi

Elimina nodi tramite OTNS-CLI

Elimina il 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 in Action Bar per eliminare il nodo 5:

d4079cceea0105f0.png

Node 1 deve diventare leader e Node 7 deve staccarsi perché non può raggiungere nessun router.

Cancella simulazione (elimina tutti i nodi)

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

Fai clic sul pulsante 89618191721e79a0.png in Action Bar. Tutti i nodi scompaiono contemporaneamente.

Prima di continuare...

Aggiungi personalmente alcuni nodi alla simulazione per continuare con questo tutorial.

11. Contesto del nodo OTNS-CLI

OTNS-CLI fornisce la modalità contesto dei nodi per interagire facilmente con i nodi e aiutare gli sviluppatori a diagnosticare lo stato di un nodo.

Inserisci la modalità contestuale del nodo

Inserisci il contesto del nodo 1:

> node 1
Done
node 1>

Il prompt dell'interfaccia a riga di comando è cambiato in node 1> , che indica il contesto attuale del nodo. Puoi digitare comandi dell'interfaccia a riga di comando OpenThread da eseguire sul nodo come se stessi interagendo direttamente con il nodo.

Esegui 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 di nodo

node 1> node 2
Done
node 2> 

Esci dal contesto del nodo

node 1> exit
Done
>

12. Complimenti

Congratulazioni, hai eseguito correttamente la tua prima simulazione OTNS.

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

Ora sai cos'è OTNS e come puoi utilizzarlo per simulare le reti OpenThread.

Passaggi successivi

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

Documenti di riferimento