Simular redes Thread usando OTNS

1. Introdução

5abd22afa2f2ee9a.png

O que é Thread e OTNS

O Thread é um protocolo de rede mesh sem fio de baixo consumo e baseado em IP que permite a comunicação segura entre dispositivos e na nuvem. As redes de linhas de execução podem se adaptar às mudanças de topologia para evitar pontos únicos de falha.

O OpenThread lançado pelo Google é uma implementação de código aberto do Thread. Apesar do tamanho reduzido do código e da memória, o OpenThread é compatível com todos os recursos definidos na Especificação do Thread.

O simulador de rede do OpenThread (OTNS, na sigla em inglês) pode ser usado para simular redes do Thread executando nós simulados do OpenThread em plataformas posix. O OTNS oferece uma interface da Web fácil de usar (OTNS-Web) para visualizar e operar redes Thread simuladas.

O que você vai aprender

  • Instalar o OTNS e as dependências dele
  • Criar OpenThread para OTNS
  • Como adicionar/mover/excluir nós no OTNS-Web
  • Usar outros recursos úteis do OTNS-Web para operar a simulação de rede
  • Verificar o ponto de falha único do OpenThread

O foco deste codelab é o OTNS-CLI e o OTNS-Web. Os outros recursos do OTNS, como o script Python, não são cobertos.

Pré-requisitos

  • Linux x86_64 ou Mac OS.
  • Git (em inglês).
  • Go 1.13+.
  • Navegador da Web. O OTNS-Web usa um navegador da Web para exibir simulações.
  • Guia de linhas de execução. Você precisa conhecer os conceitos básicos do Thread para entender o que é ensinado neste codelab.

2. Instalação

Instalar o Go

O OTNS requer a criação do Go 1.13+.

  1. Instale o Go em https://golang.org/dl/
  2. Adicione $(go env GOPATH)/bin (normalmente $HOME/go/bin) a $PATH:
$ export PATH=$PATH:$(go env GOPATH)/bin

Receber código OTNS

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

Instalação das dependências

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

Talvez seja necessário inserir uma senha para sudo.

Instalar otns

Instale otns em $GOPATH/bin:

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

Verifique se o otns está instalado corretamente

  1. Execute which otns para verificar se o executável otns é pesquisável em $PATH..
  2. Se o comando otns não for encontrado, verifique se você adicionou $(go env GOPATH)/bin a $PATH.

3. Criar OpenThread para OTNS

Receber código OpenThread do GitHub

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

Criar OpenThread com 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

Você pode encontrar os executáveis do OpenThread no diretório build:

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

Agora é hora de executar o OTNS...

4. Executar OTNS

Execute otns:

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

Quando iniciado, o OTNS entrará em um console da CLI (OTNS-CLI) e iniciará um navegador da Web para visualização e gerenciamento de rede (OTNS-Web):

a0e05178d66929b1.png

Se apenas uma página em branco para OTNS-Web for exibida, é possível que o WebGL não esteja ativado em seu navegador. Consultehttps://superuser.com/a/836833 para saber como ativar a WebGL.

Nas seções a seguir, você aprenderá a gerenciar simulações de OTNS com OTNS-CLI e OTNS-Web.

5. Conheça a OTNS-CLI e a OTNS-Web

CLI do OTNS

OTNS-CLI fornece uma interface de linha de comando (CLI) para gerenciar simulações de OTNS.

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

Você pode digitar comandos usando OTNS-CLI. Consulte a referência da CLI do OTNS para ver uma lista completa de comandos. Não se preocupe, você só usará alguns desses comandos neste codelab.

OTNS: Web

O OTNS-Web é a ferramenta de gerenciamento e visualização de rede do OTNS. Ele fornece uma representação visual dos nós, mensagens e links da rede Thread simulada. Observe os vários elementos de OTNS-Web:

4c5b43509a2ca0d0.png

6. Adicionar nós

Adicionar nós pela OTNS-CLI

Adicionar um roteador na posição (300, 100)

> add router x 300 y 100
1
Done

Você verá um nó criado em OTNS-Web. O nó começa como um roteador e se torna um líder em alguns segundos:

6ca8c2e63ed9818d.png

Adicionar mais nós por 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

Aguarde alguns segundos para que os nós sejam mesclados em uma partição. Você verá os nós em OTNS-WEB:

3ee67903c01aa612.png

Adicionar nós por OTNS-Web

Também é possível adicionar nós por meio do OTNS-Web. Clique no botão New Router do Action Bar. Você verá um nó sendo criado logo acima do botão New Router. Arraste o nó para ficar perto do líder que você criou no OTNS-CLI. Todos os nós precisam se mesclar em uma partição:

420258bb92561146.png

Clique nos botões FED, MED e SED na barra de ações para criar outros tipos de nós. Arraste-os para as posições próximas aos nós existentes para anexá-los a essa rede do Thread:

fe15d6f9726a099e.png

Agora você criou uma rede Thread de uma partição que contém muitos nós. Na próxima seção, vamos ajustar a velocidade de simulação para acelerar a simulação.

7. Ajustar velocidade

Atualmente, a simulação está sendo executada em velocidade 1X, o que significa que o tempo de simulação decorrido até agora é igual ao tempo real desde que criamos o primeiro nó.

Ajustar velocidade usando OTNS-CLI

É possível ajustar a velocidade de simulação em OTNS-CLI.

Definir a simulação de velocidade como 100X

> speed 100
Done

Você verá que os nós enviam mensagens com muito mais frequência do que antes.

Definir a simulação de velocidade como MAX

> speed max
Done

Agora, o OTNS está tentando simular o mais rápido possível, então você verá os nós enviando um grande número de mensagens.

Pausar simulação

> speed 0
Done

Definir a simulação de velocidade como 0 pausa a simulação.

Restaurar simulação na velocidade normal

> speed 1
Done

A definição da simulação da velocidade como um valor maior que 0 retoma a simulação.

Ajustar velocidade usando OTNS-Web

Botões de controle de velocidade

Encontre os botões de controle de velocidade 9329157c1bd12672.png na Action Bar. Os botões mostram a velocidade de simulação atual e podem ser usados para ajustar a velocidade de simulação e pausar/retomar a simulação.

Acelere a simulação

É possível acelerar a simulação clicando no botão 39b88331779277ad.png até que a velocidade alcance MAX: f5f460b2586d299b.png.

Simular lentidão

Para desacelerar a simulação, clique no botão 31cca8d5b52fa900.png.

Pausar simulação

Clique no botão 46cc2088c9aa7ab6.png para pausar a simulação quando ela estiver em execução. O botão será alterado para ce25eda3496ffcd4.png.

Retomar simulação

Clique no botão ce25eda3496ffcd4.png para retomar a simulação quando ela estiver pausada. O botão voltará a ser 46cc2088c9aa7ab6.png.

Definir a simulação de velocidade como 10X

Para economizar tempo, use

OTNS-CLI para ajustar a velocidade de simulação para

10X para que possamos observar as mudanças na topologia da rede muito mais rapidamente.

> speed 10
Done

8. Ativar/desativar rádio

Agora, a simulação deve conter dois roteadores (formato hexágono) e muitos filhos e ser executada em uma velocidade 10 vezes maior.

Encontre o líder atual (borda vermelha) dos dois roteadores. Clique uma vez para selecioná-lo:

8c6a2e191cdae0c7.png

Desativar o rádio

Clique no botão 7ca085f470491dd4.png na barra de ações para desativar o rádio do nó líder:

a3bf58d9d125f95f.png

O líder não poderá enviar nem receber mensagens com o rádio desativado.

Aguarde cerca de 12 segundos (120 segundos na simulação do tempo) para que o outro roteador se torne o novo líder:

e3d32f85c4a1b990.png

A rede Thread se recupera de falhas de líderes automaticamente formando uma nova partição com um novo líder. A nova partição também tem uma nova cor de partição.

Ativar o rádio

Selecione o líder com o rádio desativado. Clique no botão 2d9cecb8612b42aa.png em Action Bar para restaurar a conectividade do rádio:

7370a7841861aa3a.png

O líder deve se reconectar à rede depois que a conectividade de rádio for restaurada.

9. Mover nós

O OTNS permite que os usuários movam nós facilmente por OTNS-CLI ou OTNS-Web.

Mover nó por OTNS-CLI

Mova o nó 5 para um novo local:

> move 5 600 300
Done

Como agora o nó 5 está longe do outro roteador, ele perderá a conectividade entre si e, após cerca de 12 segundos (120 segundos na simulação do tempo), ambos se tornarão líderes da própria partição:

c06b4d0a4f183299.png

Mover nó por meio do OTNS-Web

Arraste o nó 5 de volta para o local original. As duas partições devem ser mescladas novamente em uma partição:

9ba305c4c5a5f892.png

10. Excluir nós

Excluir nós por meio de OTNS-CLI

Exclua o nó 8:

> del 8
Done

O nó 8 desaparecerá da simulação:

18156770d9f8bf83.png

Excluir nós por meio de OTNS-Web

Selecione o nó 5 e clique no botão 7ff6afd565f4eafc.png no Action Bar para excluir o nó 5:

d4079cceea0105f0.png

Node 1 precisa se tornar líder e Node 7 precisa ser desanexado, porque não consegue alcançar nenhum roteador.

Limpar simulação (excluir todos os nós)

É possível limpar a simulação excluindo todos os nós até OTNS-Web.

Clique no botão 89618191721e79a0.png em Action Bar.. Todos os nós desaparecerão de uma vez.

Antes de continuar...

Adicione alguns nós à simulação por conta própria para continuar neste tutorial.

11. Contexto de nó da CLI OTNS

O OTNS-CLI fornece o modo de contexto de nó para facilitar a interação com nós para ajudar os desenvolvedores a diagnosticar o status de um nó.

Entrar no modo de contexto do nó

Digite o contexto do nó 1:

> node 1
Done
node 1>

O prompt da CLI mudou para node 1> , indicando o contexto atual do nó. Você pode digitar comandos da CLI do OpenThread para serem executados no nó como se estivesse interagindo diretamente com ele.

Executar comandos no contexto do nó

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

Alternar para outro contexto de nó

node 1> node 2
Done
node 2> 

Sair do contexto de nó

node 1> exit
Done
>

12. Parabéns

Parabéns, você executou sua primeira simulação de OTNS!

Você aprendeu a instalar o OTNS e as dependências dele. Você criou o OpenThread para OTNS e iniciou a simulação do OTNS com instâncias de simulação do OpenThread. Você aprendeu a manipular a simulação de várias maneiras com OTNS-CLI e OTNS-Web.

Agora você sabe o que é OTNS e como usar o OTNS para simular redes do OpenThread.

A seguir

Confira alguns destes codelabs:

Documentos de referência