Simular redes Thread usando OTNS

1. Introdução

5abd22afa2f2ee9a.png

O que é o Thread & OTNS

O Thread é um protocolo de rede mesh sem fio de baixo consumo e baseado em IP que permite comunicações seguras entre dispositivos e entre nuvens. As redes Thread podem se adaptar às mudanças de topologia para evitar um ponto único de falha.

O OpenThread lançado pelo Google é uma implementação de código aberto do Thread. Apesar do pequeno tamanho de código e do consumo de memória, o OpenThread oferece suporte a todos os recursos definidos na especificação de linha de execução (link em inglês).

O simulador de rede OpenThread (OTNS, na sigla em inglês) pode ser usado para simular redes Thread executando nós do OpenThread simulados 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 os outros recursos úteis do OTNS-Web para operar a simulação de rede
  • Verificar o ponto único de falha do OpenThread

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

O que é necessário

  • 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.
  • Thread Primer 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 o Go 1.13+ para ser criado.

  1. Instale o Go acessando 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

Instalar 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 o app otns no $GOPATH/bin:

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

Vamos conferir 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 o 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

Encontre 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 vai 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 você só conseguir ver uma página em branco para o OTNS-Web, é provável que o WebGL não esteja ativado no seu navegador. Consultehttps://superuser.com/a/836833 para saber como ativar o WebGL.

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

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

OTNS-CLI

O 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

É possível digitar comandos usando o 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

OTNS-Web é a ferramenta de visualização e gerenciamento de rede do OTNS. Ela 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 usando a OTNS-CLI

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

> add router x 300 y 100
1
Done

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

6ca8c2e63ed9818d.png

Adicione mais nós usando 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

Adicione nós até OTNS-Web

Também é possível adicionar nós usando 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ó até o líder que você criou usando OTNS-CLI. Todos os nós precisam se mesclar em uma partição:

420258bb92561146.png

Clique também nos botões FED, MED e SED na barra de ações para criar outros tipos de nós. Arraste-os para posições perto dos nós atuais para anexá-los a essa rede Thread:

fe15d6f9726a099e.png

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 execução.

7. Ajustar velocidade

Atualmente, a simulação deve estar sendo executada na velocidade 1X, o que significa que o tempo de simulação decorrido até o momento é igual ao tempo real desde a criação do primeiro nó.

Ajustar velocidade no OTNS-CLI

Você pode ajustar a velocidade de simulação usando a OTNS-CLI.

Definir a velocidade de simulação como 100X

> speed 100
Done

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

Definir a velocidade de simulação 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

Definir a simulação de velocidade para um valor maior que 0 retoma a simulação.

Ajustar velocidade no OTNS-Web

Botões de controle de velocidade

Encontre os botões de controle de velocidade 9329157c1bd12672.png no 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

Você pode acelerar a simulação clicando no botão 39b88331779277ad.png até a velocidade atingir MAX: f5f460b2586d299b.png.

Simulação de lentidão

É possível desacelerar a simulação clicando 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 vai mudar 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á para 46cc2088c9aa7ab6.png.

Definir a velocidade de simulação como 10X

Para economizar tempo, use

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

10X para observar mudanças na topologia da rede com muito mais rapidez.

> speed 10
Done

8. Ligar/desligar rádio

Agora, a simulação deve conter dois roteadores (em formato hexagonal) e muitos filhos e ser executada a uma velocidade de 10x.

Encontre o líder atual (borda vermelha) dos dois roteadores e clique para selecioná-lo:

8c6a2e191cdae0c7.png

Desativar o rádio

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

a3bf58d9d125f95f.png

O líder não poderá enviar nem receber mensagens com essa opção desativada.

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

e3d32f85c4a1b990.png

A rede Thread se recupera automaticamente da falha do líder, formando uma nova partição com um líder novo. A nova partição também tem uma nova cor.

Ativar o rádio

Selecione o líder cujo rádio estava desligado. Clique no botão 2d9cecb8612b42aa.png em Action Bar para restaurar a conectividade de rádio:

7370a7841861aa3a.png

O líder precisa se reconectar à rede após restaurar a conectividade de rádio.

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, eles devem perder a conectividade entre si e, após cerca de 12 segundos (120 segundos em tempo de simulação), ambos se tornam líderes da própria partição:

c06b4d0a4f183299.png

Mover nó pelo OTNS-Web

Mova o nó 5 de volta ao local original arrastando-o. As duas partições precisam ser mescladas novamente em uma só partição:

9ba305c4c5a5f892.png

10. Excluir nós

Excluir nós até OTNS-CLI

Exclua o nó 8:

> del 8
Done

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

18156770d9f8bf83.png

Excluir nós até 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 deve se tornar líder e Node 7 deve ser desconectado, 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 por meio de OTNS-Web.

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

Antes de continuar...

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

11. Contexto do nó OTNS-CLI

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

Entrar no modo de contexto do nó

Insira o contexto do nó 1:

> node 1
Done
node 1>

O comando da CLI mudou para node 1> , indicando o contexto atual do nó. É possível digitar os comandos da CLI do OpenThread para executar no nó como se você estivesse interagindo com ele diretamente.

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 do nó

node 1> exit
Done
>

12. Parabéns

Parabéns! Você executou sua primeira simulação do OTNS.

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

Agora você sabe o que é o OTNS e como pode usá-lo para simular redes OpenThread.

A seguir

Confira alguns destes codelabs:

Documentos de referência