Simula redes de Thread con OTNS

1. Introducción

5abd22afa2f2ee9a.png

¿Qué es Thread & TENOS

Thread es un protocolo de red en malla inalámbrica de bajo consumo basado en IP que permite comunicaciones seguras entre dispositivos y entre dispositivos. Las redes de Thread pueden adaptarse a los cambios de topología para evitar puntos únicos de fallo.

Lanzada por Google OpenThread es una implementación de código abierto de Thread. A pesar de su pequeño tamaño de código y uso de memoria, OpenThread admite todas las funciones que se definen en la Especificación de subprocesos.

El simulador de red OpenThread (OTNS) se puede usar para simular redes Thread mediante la ejecución de nodos de OpenThread simulados en plataformas posix. OTNS proporciona una interfaz web (OTNS-Web) fácil de usar para visualizar y operar redes Thread simuladas.

Qué aprenderás

  • Instala OTNS y sus dependencias
  • Cómo compilar OpenThread para OTNS
  • Cómo agregar, mover o borrar nodos en OTNS-Web
  • Usar otras funciones útiles de OTNS-Web para operar la simulación de redes
  • Cómo verificar el punto de falla sin punto único de OpenThread

Este codelab se enfoca en OTNS-CLI y OTNS-Web. Las otras funciones de OTNS, como la secuencia de comandos de Python, no están cubiertas.

Requisitos

2. Instalación

Instala Go

OTNS requiere Go 1.13+ para compilarse.

  1. Instala Go desde https://golang.org/dl/.
  2. Agrega $(go env GOPATH)/bin (normalmente $HOME/go/bin) a $PATH:
$ export PATH=$PATH:$(go env GOPATH)/bin

Obtener código OTNS

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

Instala las dependencias

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

Es posible que debas ingresar una contraseña para sudo.

Instalar otns

Instala otns en $GOPATH/bin:

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

Comprobemos si otns está instalado correctamente

  1. Ejecuta which otns para verificar si el ejecutable otns se puede buscar en $PATH..
  2. Si no se encuentra el comando otns, verifica que hayas agregado $(go env GOPATH)/bin a $PATH..

3. Compila OpenThread para OTNS

Cómo obtener código de OpenThread desde GitHub

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

Compila OpenThread con 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

Puedes encontrar los archivos ejecutables de OpenThread en el directorio build:

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

Ahora es momento de ejecutar OTNS...

4. Ejecuta OTNS

Ejecuta otns:

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

Cuando se inicie correctamente, OTNS ingresará a una consola de CLI (OTNS-CLI) e iniciará un navegador web para la visualización y administración de la red (OTNS-Web):

a0e05178d66929b1.png

Si solo puedes ver una página en blanco para OTNS-Web, es probable que WebGL no esté habilitado en tu navegador. Consultahttps://superuser.com/a/836833 para habilitar WebGL.

En las siguientes secciones, aprenderás a administrar simulaciones de OTNS a través de OTNS-CLI y OTNS-Web.

5. Descubre OTNS-CLI y OTNS-Web

OTNS-CLI

OTNS-CLI proporciona una interfaz de línea de comandos (CLI) para administrar simulaciones de OTNS.

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

Puedes escribir comandos a través de OTNS-CLI. Consulta la referencia de la CLI de OTNS para obtener una lista completa de los comandos. No te preocupes, solo usarás algunos de estos comandos en este Codelab.

OTNS-Web

OTNS-Web es la herramienta de visualización y administración de redes de OTNS. Proporciona una representación visual de los nodos, mensajes y vínculos de la red Thread simulada. Observa los distintos elementos de OTNS-Web:

4c5b43509a2ca0d0.png

6. Agregar nodos

Agregar nodos a través de OTNS-CLI

Cómo agregar un router en la posición (300, 100)

> add router x 300 y 100
1
Done

Deberías ver un nodo creado en OTNS-Web. El nodo se inicia como un router y se convierte en líder en pocos segundos:

6ca8c2e63ed9818d.png

Agrega más nodos mediante 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

Espera unos segundos a que los nodos se combinen en una partición. Deberías ver los nodos en OTNS-WEB:

3ee67903c01aa612.png

Agrega nodos antes del OTNS-Web

También puedes agregar nodos a través de OTNS-Web. Haz clic en el botón New Router de Action Bar. Deberías ver que se crea un nodo justo encima del botón New Router. Arrastra el nodo para que esté cerca del líder que creaste a través de OTNS-CLI. En algún momento, todos los nodos deberían combinarse en una partición:

420258bb92561146.png

También haz clic en los botones FED, MED y SED de la barra de acciones para crear otros tipos de nodos. Arrástralos a posiciones cercanas a los nodos existentes para adjuntarlos a la red de Thread:

fe15d6f9726a099e.png

Ahora creaste una red Thread de una partición que contiene muchos nodos. En la siguiente sección, ajustaremos la velocidad de la simulación para que se ejecute más rápido.

7. Ajustar velocidad

Actualmente, la simulación debe ejecutarse a una velocidad de 1X, lo que significa que el tiempo de simulación transcurrido hasta el momento es el mismo que el tiempo real desde que creamos el primer nodo.

Ajustar velocidad en OTNS-CLI

Puedes ajustar la velocidad de simulación mediante OTNS-CLI.

Establecer la velocidad de simulación en 100X

> speed 100
Done

Deberías ver que los nodos envían mensajes con mucha más frecuencia que antes.

Establecer la velocidad de simulación en MAX

> speed max
Done

Ahora, OTNS está intentando simular lo más rápido posible, por lo que deberías ver nodos que envían una gran cantidad de mensajes.

Poner simulación en pausa

> speed 0
Done

Si se establece la velocidad de simulación en 0, se detiene la simulación.

Restablecer la simulación a velocidad normal

> speed 1
Done

Si se configura la velocidad de la simulación en un valor mayor que 0, se reanuda la simulación.

Ajustar velocidad en OTNS-Web

Botones de control de velocidad

Busca los botones de control de velocidad 9329157c1bd12672.png en Action Bar. Los botones muestran la velocidad de simulación actual y se pueden usar para ajustar la velocidad de simulación y pausar o reanudar la simulación.

Acelerar la simulación

Para acelerar la simulación, haz clic en el botón 39b88331779277ad.png hasta que la velocidad llegue a MAX: f5f460b2586d299b.png.

Simulación de aceleración

Para ralentizar la simulación, haz clic en el botón 31cca8d5b52fa900.png.

Poner simulación en pausa

Haz clic en el botón 46cc2088c9aa7ab6.png para detener la simulación cuando se esté ejecutando. El botón se cambiará a ce25eda3496ffcd4.png.

Reanudar simulación

Haz clic en el botón ce25eda3496ffcd4.png para reanudar la simulación cuando esté en pausa. El botón volverá a ser 46cc2088c9aa7ab6.png.

Establecer la velocidad de simulación en 10X

Para ahorrar tiempo, utiliza

OTNS-CLI para ajustar la velocidad de simulación a

10X para que podamos observar los cambios de topología en la red mucho más rápido.

> speed 10
Done

8. Encender/apagar radio

Ahora, la simulación debería contener 2 routers (forma hexagonal) y muchos elementos secundarios, y se ejecuta a una velocidad 10 veces mayor.

Busca el líder actual (borde rojo) de los 2 routers con un solo clic para seleccionarlo:

8c6a2e191cdae0c7.png

Apagar la radio

Haz clic en el botón 7ca085f470491dd4.png en la barra de acciones para desactivar la selección del nodo líder:

a3bf58d9d125f95f.png

El líder no podrá enviar ni recibir mensajes con la radio apagada.

Espera unos 12 s (120 s en el tiempo de simulación) para que el otro router se convierta en el nuevo líder:

e3d32f85c4a1b990.png

La red de Thread se recupera automáticamente de una falla de líder mediante la formación de una nueva partición con un nuevo líder. La partición nueva también tiene un color de partición nuevo.

Encender la radio

Selecciona al líder cuya radio se desactivó. Haz clic en el botón 2d9cecb8612b42aa.png de Action Bar para restablecer la conectividad de radio:

7370a7841861aa3a.png

El líder debe volver a conectarse a la red después de que se restablezca la conectividad de radio.

9. Mover nodos

OTNS permite a los usuarios mover nodos con facilidad a través de OTNS-CLI o OTNS-Web.

Mover nodo por OTNS-CLI

Mueve el nodo 5 a una nueva ubicación:

> move 5 600 300
Done

Dado que ahora el nodo 5 está lejos del otro router, deberían perder conectividad entre sí y, después de unos 12 s (120 s en el tiempo de simulación), ambos se convierten en líderes de su propia partición:

c06b4d0a4f183299.png

Mover nodo a través de OTNS-Web

Arrastra el nodo 5 para volver a su ubicación original. Las dos particiones deberían volver a combinarse en una sola:

9ba305c4c5a5f892.png

10. Borrar nodos

Borrar nodos hasta OTNS-CLI

Borra el nodo 8:

> del 8
Done

El nodo 8 debería desaparecer de la simulación:

18156770d9f8bf83.png

Borrar nodos hasta OTNS-Web

Selecciona el nodo 5 y haz clic en el botón 8ff6afd565f4eafc.png en Action Bar para borrarlo:

d4079cceea0105f0.png

Node 1 debería convertirse en líder y Node 7 debería desconectarse, ya que no puede conectarse a ningún router.

Borrar simulación (borrar todos los nodos)

Para borrar la simulación, borra todos los nodos mediante OTNS-Web.

Haz clic en el botón 89618191721e79a0.png de Action Bar.. Todos los nodos desaparecerán a la vez.

Antes de continuar...

Agrega algunos nodos a la simulación por tu cuenta para poder continuar con este instructivo.

11. Contexto del nodo de OTNS-CLI

OTNS-CLI proporciona el modo de contexto de nodos para facilitar la interacción con los nodos y ayudar a los desarrolladores a diagnosticar el estado de un nodo.

Ingresa al modo de contexto del nodo

Ingresa el contexto del nodo del nodo 1:

> node 1
Done
node 1>

El símbolo del sistema de la CLI cambió a node 1> , lo que indica el contexto del nodo actual. Puedes escribir los comandos de la CLI de OpenThread para que se ejecuten en el nodo como si estuvieras interactuando directamente con él.

Ejecuta comandos en el contexto de nodos

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

Cambia a otro contexto de nodo

node 1> node 2
Done
node 2> 

Salir del contexto del nodo

node 1> exit
Done
>

12. Felicitaciones

Felicitaciones, ejecutaste con éxito tu primera simulación de OTNS.

Aprendiste a instalar OTNS y sus dependencias. Compilaste OpenThread para OTNS y también iniciaste la simulación de OTNS con instancias de simulación de OpenThread. Aprendiste a manipular la simulación de varias maneras con OTNS-CLI y OTNS-Web.

Ahora sabes qué es OTNS y cómo puedes usarlo para simular redes de OpenThread.

Próximos pasos

Consulta algunos codelabs sobre los siguientes temas:

Documentos de referencia