Simuler des réseaux Thread à l'aide d'OTNS

1. Introduction

5abd22afa2f2ee9a.png

Thread et OTNS

Thread est un protocole de réseau maillé sans fil basse consommation basé sur les adresses IP, qui permet une communication sécurisée d'appareil à appareil et de cloud à appareil. Les réseaux Thread peuvent s'adapter aux changements de topologie pour éviter un point de défaillance unique.

OpenThread publié par Google est une implémentation Open Source de Thread. Malgré sa petite taille de code et son faible encombrement, OpenThread est compatible avec toutes les fonctionnalités définies dans la spécification Thread.

Vous pouvez utiliser le simulateur de réseau OpenThread (OTNS) pour simuler des réseaux Thread en exécutant des nœuds OpenThread simulés sur des plates-formes posix. Ce service fournit une interface Web facile à utiliser (OTNS-Web) pour visualiser et exploiter des réseaux Thread simulés.

Points abordés

  • Installer OTNS et ses dépendances
  • Compiler OpenThread pour OTNS
  • Ajouter, déplacer et supprimer des nœuds dans OTNS-Web
  • Utiliser les autres fonctionnalités utiles d'OTNS-Web pour simuler le réseau
  • Vérifier l'absence de point de défaillance d'OpenThread

Cet atelier de programmation est axé sur OTNS-CLI et OTNS-Web. Les autres fonctionnalités d'OTNS, telles que les scripts Python, ne sont pas couvertes.

Ce dont vous avez besoin

  • Linux x86_64 ou Mac OS.
  • Git,
  • Go 1.13+
  • Navigateur Web. OTNS-Web utilise un navigateur Web pour afficher les simulations.
  • Primaire Thread Vous devez connaître les concepts fondamentaux de Thread pour comprendre les concepts présentés dans cet atelier de programmation.

2. Installation

Installer Go

OTNS nécessite Go 1.13+ pour compiler.

  1. Installez Go depuis le site https://golang.org/dl/.
  2. Ajoutez $(go env GOPATH)/bin (normalement $HOME/go/bin) à $PATH:
$ export PATH=$PATH:$(go env GOPATH)/bin

Obtenir le code OTNS

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

Installer des dépendances

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

Vous serez peut-être invité à saisir un mot de passe pour sudo.

Installation d'OTT

Installez otns sur $GOPATH/bin:

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

Vérifions si otns est correctement installé

  1. Exécutez which otns pour vérifier si l'exécutable otns peut faire l'objet de recherches dans $PATH..
  2. Si la commande otns est introuvable, vérifiez que vous avez ajouté $(go env GOPATH)/bin à $PATH..

3. Compiler OpenThread pour OTNS

Obtenir le code OpenThread depuis GitHub

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

Compiler OpenThread avec 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

Vous trouverez les exécutables OpenThread dans le répertoire build:

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

Il est maintenant temps d'exécuter les OTNS...

4. Exécuter OTNS

Exécutez otns :

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

Une fois lancée, l'OTNS accède à une console CLI (OTNS-CLI) et lance un navigateur Web pour la visualisation et la gestion du réseau (OTNS-Web):

A0E05178D66929B1.png

Si vous ne voyez qu'une page vierge pour OTNS-Web, cela signifie probablement que WebGL n'est pas activé dans votre navigateur. Pour savoir comment activer WebGL, consultez la pagehttps://superuser.com/a/836833 .

Dans les sections suivantes, vous apprendrez à gérer les simulations OTNS via OTNS-CLI et OTNS-Web.

5. Découvrir OTNS-CLI et OTNS-Web

OTNS – CLI

OTNS-CLI fournit une interface de ligne de commande (CLI) pour gérer les simulations OTNS.

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

Vous pouvez saisir des commandes via OTNS-CLI. Consultez la documentation de référence de la CLI OTNS pour obtenir la liste complète des commandes. Ne vous inquiétez pas, vous n'utiliserez que quelques-unes de ces commandes dans cet atelier de programmation.

OTNS-Web

OTNS-Web est l'outil de gestion et de visualisation du réseau d'OTNS. Il fournit une représentation visuelle des nœuds, messages et liens du réseau Thread simulé. Notez les différents éléments de OTNS-Web:

4c5b43509a2ca0d0.png

6. Ajouter des nœuds

Ajouter des nœuds via OTNS-CLI

Ajouter un routeur à la position (300, 100)

> add router x 300 y 100
1
Done

Vous devriez voir un nœud créé dans OTNS-Web. Le nœud démarre en tant que routeur, et devient un leader en quelques secondes:

6ca8c2e63ed9818d.png

Ajoutez des nœuds via 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

Attendez quelques secondes que les nœuds se fusionnent en une seule partition. Les nœuds devraient s'afficher dans OTNS-WEB:

3ee67903c01aa612.png

Ajoutez des nœuds d'ici le OTNS-Web

Vous pouvez également ajouter des nœuds via OTNS-Web. Cliquez sur le bouton New Router de Action Bar. Un nœud doit être créé juste au-dessus du bouton New Router. Faites glisser le nœud pour qu'il se trouve à proximité du leader que vous avez créé via OTNS-CLI. À terme, tous les nœuds devraient être fusionnés en une seule partition:

420258bb92561146.png

Vous pouvez également cliquer sur les boutons FED, MED et SED de la barre d'action pour créer d'autres types de nœuds. Faites-les glisser vers des emplacements à proximité de nœuds existants pour les associer à ce réseau Thread:

fe15d6f9726a099e.png

Vous venez de créer un réseau Thread sur une partition contenant de nombreux nœuds. Dans la section suivante, nous allons ajuster la vitesse de simulation pour accélérer l'exécution de la simulation.

7. Ajuster la vitesse

Actuellement, la simulation doit s'exécuter à la vitesse de 1X, ce qui signifie que le temps de simulation écoulé jusqu'à présent est identique au temps réel depuis la création du premier nœud.

Ajuster la vitesse via OTNS-CLI

Vous pouvez régler la vitesse de simulation via OTNS-CLI.

Définir la vitesse de simulation sur 100X

> speed 100
Done

Les nœuds doivent envoyer des messages beaucoup plus fréquemment qu'auparavant.

Définir la vitesse de simulation sur MAX

> speed max
Done

Le service de distribution par contournement (OTNS, over-the-top) tente de simuler le plus vite possible. Les nœuds doivent donc envoyer un grand nombre de messages.

Mettre en pause de la simulation

> speed 0
Done

Définir la vitesse de simulation sur 0 suspend la simulation.

Restaurer la simulation à vitesse normale

> speed 1
Done

Définir la vitesse de simulation sur une valeur supérieure à 0 reprend la simulation.

Ajuster la vitesse via OTNS-Web

Boutons de contrôle de la vitesse

Recherchez les boutons de contrôle de la vitesse 9329157c1bd12672.png sur la Action Bar. Les boutons indiquent la vitesse de simulation actuelle et peuvent être utilisés pour ajuster la vitesse de simulation et suspendre/reprendre la simulation.

Simulation d'accélération

Pour accélérer la simulation, cliquez sur le bouton 39b88331779277ad.png jusqu'à atteindre la vitesse MAX: F5F460B2586d299b.png.

Simulation de ralentissement

Vous pouvez ralentir la simulation en cliquant sur le bouton 31cca8d5b52fa900.png.

Mettre en pause de la simulation

Cliquez sur le bouton 46cc2088c9aa7ab6.png pour mettre en pause la simulation pendant son exécution. Le bouton est remplacé par ce25eda3496ffcd4.png.

Reprendre la simulation

Cliquez sur le bouton ce25eda3496ffcd4.png pour reprendre la simulation lorsqu'elle est en veille. Le bouton va être redéfini sur 46cc2088c9aa7ab6.png.

Définir la vitesse de simulation sur 10X

Pour gagner du temps, utilisez

OTNS-CLI pour régler la vitesse de simulation sur

10X pour observer les changements de topologie dans le réseau beaucoup plus rapidement.

> speed 10
Done

8. Activer/Désactiver la radio

À présent, la simulation doit contenir 2 routeurs (hexagonaux) et de nombreux enfants, et fonctionne 10 fois plus vite.

Identifiez la bordure supérieure des deux routeurs, en un clic:

8c6a2e191cdae0c7.png

Éteindre le signal radio

Cliquez sur le bouton 7ca085f470491jj4.png de la barre d'action pour désactiver la radio du nœud Leader:

A3bf58d9d125f95f.png

Le responsable ne pourra plus envoyer ni recevoir de messages lorsque la radio sera désactivée.

Attendez environ 12 s (120 s en simulation) pour que l'autre routeur devienne le leader:

e3d32f85c4a1b990.png

Le réseau Thread récupère automatiquement les instances défaillantes en formant une nouvelle partition avec une nouvelle variante optimale. La nouvelle partition a également une nouvelle couleur de partition.

Allumer le signal radio

Sélectionnez le responsable dont la radio a été désactivée. Cliquez sur le bouton 2d9cecb8612b42aa.png sur Action Bar pour rétablir la connectivité radio:

7370a7841861aa3a.png

Le leader doit se reconnecter au réseau une fois la connectivité radio rétablie.

9. Déplacer des nœuds

Le service OTNS permet aux utilisateurs de déplacer facilement les nœuds via OTNS-CLI ou OTNS-Web.

Déplacer le nœud via OTNS-CLI

Déplacez le nœud 5 vers un nouvel emplacement:

> move 5 600 300
Done

Étant donné que le nœud 5 est loin de l'autre routeur, ils doivent perdre la connectivité les uns aux autres. Au bout d'environ 12 secondes (simulant un temps de simulation), ils deviennent tous deux des leaders de leur propre partition:

c06b4d0a4f183299.png

Déplacer un nœud via OTNS-Web

Replacez le nœud 5 à son emplacement d'origine en le faisant glisser. Les deux partitions doivent ensuite fusionner en une seule:

9ba305c4c5a5f892.png

10. Supprimer des nœuds

Supprimer des nœuds via OTNS-CLI

Supprimez le nœud 8:

> del 8
Done

Le nœud 8 doit disparaître de la simulation:

18156770d9f8bf83.png

Supprimer des nœuds via OTNS-Web

Sélectionnez le nœud 5 et cliquez sur le bouton 7ff6afd565f4eafc.png sur la Action Bar pour supprimer le nœud 5:

D4079cceea0105f0.png

Node 1 devrait devenir leader et Node 7 doit se dissocier, car il ne peut accéder à aucun routeur.

Effacer la simulation (supprimer tous les nœuds)

Vous pouvez effacer la simulation en supprimant tous les nœuds via OTNS-Web.

Cliquez sur le bouton 89618191721e79a0.png sur Action Bar. Tous les nœuds disparaissent en même temps.

Avant de continuer...

Ajoutez vous-même des nœuds à la simulation pour continuer ce tutoriel.

PCI 11. Contexte des nœuds OTNS-CLI

OTNS-CLI fournit un mode de contexte de nœud pour permettre aux développeurs d'interagir facilement avec les nœuds afin de diagnostiquer l'état d'un nœud.

Passer en mode contexte du nœud

Saisissez le contexte du nœud 1:

> node 1
Done
node 1>

L'invite de la CLI a été remplacée par node 1> , indiquant le contexte actuel du nœud. Vous pouvez saisir des commandes de CLI OpenThread à exécuter sur le nœud comme si vous interagissez directement avec lui.

Exécuter des commandes dans le contexte du nœud

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

Basculer vers un autre contexte de nœud

node 1> node 2
Done
node 2> 

Quitter le contexte du nœud

node 1> exit
Done
>

12. Félicitations

Félicitations, vous avez exécuté votre première simulation OTNS !

Vous avez appris à installer un service OTNS et ses dépendances. Vous avez créé OpenThread pour OTNS et commencé la simulation OTNS avec des instances de simulation OpenThread. Vous avez appris à manipuler la simulation de différentes manières à travers OTNS-CLI et OTNS-Web.

Vous savez maintenant ce qu'est un service de distribution par contournement et comment l'utiliser pour simuler des réseaux OpenThread.

Étape suivante

Explorez ces ateliers de programmation :

Documents de référence