1. Introdução
O que é Thread &OTNS
A Thread é um protocolo de rede mesh sem fio de baixo consumo e baseado em IP que permite comunicações seguras entre dispositivos e da nuvem. As redes de linhas de execução 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 tamanho pequeno de código e da presença de memória, o OpenThread é compatível com todos os recursos definidos na Especificação de Thread.
O OpenThread Network Simulator (OTNS) pode ser usado para simular redes Thread executando nós do OpenThread simulados em plataformas posix. A 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 em OTNS-Web
- Usar outros recursos úteis da ferramenta OTNS-Web' para operar a simulação de rede
- Verificar o ponto de falha sem ponto único do OpenThread
Este codelab é focado na OTNS-CLI e na OTNS-Web. Outros recursos do OTNS, como script em Python, não são cobertos.
O que é necessário
- Linux x86_64 ou Mac OS.
- Git (em inglês).
- Go 1.13 e versões posteriores.
- Navegador da Web. A OTNS-Web usa um navegador da Web para exibir simulações.
- Thread Primer: Você precisa conhecer os conceitos básicos da Thread para entender o que aprendeu neste codelab.
2. Instalação
Instalar o Go
A 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
Vamos verificar se a otns
está instalada corretamente
- Execute
which otns
para verificar se o executávelotns
pode ser pesquisado em$PATH.
. - Se o comando
otns
não for encontrado, verifique se você adicionou$(go env GOPATH)/bin
ao$PATH.
.
3. Criar OpenThread para OTNS
Receber o código do OpenThread no 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
É possível 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 as 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, é provável que o WebGL não esteja ativado no seu navegador. Consultehttps://superuser.com/a/836833 para ver como ativar o WebGL.
Nas seções a seguir, você aprenderá a gerenciar simulações de OTNS por meio de OTNS-CLI
e OTNS-Web
.
5. Conheça o OTNS-CLI & OTNS-Web
CLI OTNS
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 pelo OTNS-CLI
. Consulte a referência da CLI 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. Ele oferece 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 por 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 nós em 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 com 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 próximo do líder criado pelo OTNS-CLI
. Todos os nós vão ser mesclados em uma partição:
Clique também nos botões FED, MED e SED da barra de ações para criar outros tipos de nós. Arraste-os para posições próximas aos nós existentes para anexá-los a essa rede Thread:
Agora você criou uma rede Thread de uma partição com muitos nós. Na próxima seção, vamos ajustar a velocidade da simulação para acelerar a simulação.
7. Ajustar velocidade
No momento, a simulação precisa ser executada na velocidade 1X
, o que significa que o tempo de simulação decorrido até o momento é o mesmo que o tempo real desde que criamos o primeiro nó.
Ajuste a velocidade em OTNS-CLI
Você pode ajustar a velocidade de simulação em OTNS-CLI
.
Definir a simulação da 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 da velocidade como MAX
> speed max Done
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 da velocidade como 0
pausa a simulação.
Restaurar simulação na velocidade normal
> speed 1 Done
Definir a simulação de velocidade como um valor maior que 0
retoma a simulação.
Ajuste a velocidade em OTNS-Web
Botões de controle de velocidade
Localize os botões de controle de velocidade do 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.
Simulação de aceleração
É possível acelerar a simulação clicando no botão até que a velocidade alcance
MAX
: .
Simulação de lentidão
Você pode 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 ser alterado para
.
Retomar simulação
Clique no botão para retomar a simulação quando ela estiver pausada. O botão voltará para
.
Definir a simulação da velocidade como 10X
Para economizar tempo, use
OTNS-CLI
para ajustar a velocidade de simulação para
10X
para observar as alterações de topologia na rede com muito mais rapidez.
> speed 10 Done
8. Ativar/desativar rádio
Agora, a simulação deve conter 2 roteadores (formato hexagonal) e muitos filhos e ser executado em velocidade 10 vezes.
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 desligado.
Aguarde cerca de 12 s (120 s em simulação de tempo) para que o outro roteador se torne o novo Líder:
A rede Thread se recupera automaticamente da falha de um líder 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 a líder com o rádio desativado. Clique no botão em
Action Bar
para restaurar a conectividade de rádio:
O líder deve se reconectar à rede após a restauração da conectividade de rádio.
9. Mover nós
Com a OTNS, os usuários podem mover nós com facilidade pelo OTNS-CLI
ou pelo 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 perderão a conectividade entre si e, após cerca de 12 s (120 s na simulação do tempo), ambos se tornarão líderes da própria partição:
Mover o nó pelo OTNS-Web
Arraste o nó 5 de volta para o local original arrastando-o. As duas partições serão mescladas em uma única partição:
10. Excluir nós
Excluir nós até OTNS-CLI
Excluir o nó 8:
> del 8 Done
O nó 8 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
será o líder, e o Node 7
será removido, porque não é possível acessar 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 só vez.
Antes de continuar...
Adicione alguns nós à simulação por conta própria para continuar este tutorial.
11. Contexto do nó da OTNS-CLI
OTNS-CLI
fornece o modo de contexto de nós para fácil interação com os nós para ajudar os desenvolvedores a diagnosticar o status de um nó.
Entrar no modo de contexto de nós
Digite o contexto de nó do nó 1:
> node 1 Done node 1>
O prompt da CLI foi alterado para node 1>
, indicando o contexto atual do nó. Digite comandos da CLI do OpenThread para serem executados no nó como se você estivesse interagindo diretamente com o nó.
Executar comandos no contexto de nós
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ós
node 1> exit Done >
12. Parabéns
Parabéns, você realizou sua primeira simulação de OTNS!
Você aprendeu como instalar o OTNS e as dependências dele. Você criou OpenThread para OTNS e iniciou a simulação de OTNS 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 é OTNS e como pode usá-lo para simular redes do OpenThread.
A seguir
Confira alguns destes codelabs:
- Simular uma rede Thread com o OpenThread
- Simular uma rede Thread usando o OpenThread no Docker
- Crie uma rede Thread com placas nRF52840 e OpenThread