1. Introdução
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+.
- Instale o Go em https://golang.org/dl/
- 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
- Execute
which otns
para verificar se o executávelotns
é pesquisável em$PATH.
. - 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
):
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
:
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:
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
:
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:
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:
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 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 até que a velocidade alcance MAX
: .
Simular lentidão
Para desacelerar a simulação, clique no botão .
Pausar simulação
Clique no botão para pausar a simulação quando ela estiver em execução. O botão será alterado para .
Retomar simulação
Clique no botão para retomar a simulação quando ela estiver pausada. O botão voltará a ser .
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:
Desativar o rádio
Clique no botão na barra de ações para desativar o rádio do nó líder:
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:
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 em Action Bar
para restaurar a conectividade do rádio:
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:
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:
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:
Excluir nós por meio de OTNS-Web
Selecione o nó 5 e clique no botão no Action Bar
para excluir o nó 5:
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 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:
- Como simular uma rede Thread com o OpenThread
- Como simular uma rede Thread usando o OpenThread no Docker
- Crie uma rede Thread com placas nRF52840 e OpenThread