1. Introdução
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.
- Instale o Go acessando 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
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
- 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 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
):
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
:
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:
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
:
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:
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:
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 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 até a velocidade atingir MAX
: .
Simulação de lentidão
É possível desacelerar a simulação clicando no botão .
Pausar simulação
Clique no botão para pausar a simulação quando ela estiver em execução. O botão vai mudar para .
Retomar simulação
Clique no botão para retomar a simulação quando ela estiver pausada. O botão voltará para .
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:
Desativar o rádio
Clique no botão na barra de ações para desativar a opção do nó líder:
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:
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 em Action Bar
para restaurar a conectividade de rádio:
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:
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:
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:
Excluir nós até OTNS-Web
Selecione o nó 5 e clique no botão no Action Bar
para excluir o nó 5:
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 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:
- Como simular uma rede Thread com o OpenThread
- Como simular uma rede Thread usando o OpenThread no Docker
- Criar uma rede Thread com placas nRF52840 e OpenThread