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

1. Introduction

5abd22afa2f2ee9a.png

Qu'est-ce que Thread et OTNS

Thread est un protocole de réseau maillé sans fil basse consommation basé sur l'adresse IP, qui permet des communications sécurisées d'appareil à appareil et d'appareil à cloud. Les réseaux Thread peuvent s'adapter aux changements de topologie pour éviter le 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 empreinte mémoire, OpenThread prend en charge toutes les fonctionnalités définies dans la spécification de thread.

Le simulateur de réseau OpenThread (OTNS) peut être utilisé pour simuler des réseaux Thread en exécutant des nœuds OpenThread simulés sur des plates-formes Posix. OTNS 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
  • Créer OpenThread pour OTNS
  • Ajouter, déplacer et supprimer des nœuds dans OTNS-Web
  • Utiliser les autres fonctionnalités utiles d'OTNS-Web pour exécuter la simulation de réseau
  • Vérifier l'absence de point de défaillance unique d'OpenThread

Cet atelier de programmation est consacré à OTNS-CLI et OTNS-Web. Les autres fonctionnalités d'OTNS, telles que les scripts Python, ne sont pas abordées.

Prérequis

  • Linux x86_64 ou Mac OS
  • Git :
  • Version 1.13 ou ultérieure.
  • Navigateur Web. OTNS-Web utilise un navigateur Web pour afficher des simulations.
  • Apprêt Thread : Vous devez connaître les concepts de base de Thread pour comprendre ce qui est enseigné dans cet atelier de programmation.

2. Installation

Installer Go

OTNS nécessite Go 1.13+ pour pouvoir être compilé.

  1. Installez Go depuis 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'OTN

Installez otns dans $GOPATH/bin:

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

Vérifions que otns est correctement installé

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

3. Créer OpenThread pour OTNS

Obtenir le code OpenThread à partir de 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 pouvez trouver 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

Maintenant, il est temps d'exécuter OTNS...

4. Exécuter OTNS

Exécutez otns :

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

Une fois démarré, 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, il est probable que WebGL ne soit pas activé dans votre navigateur. Pour savoir comment activer WebGL, consultezhttps://superuser.com/a/836833 .

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

5. Découvrez 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 des réseaux d'OTNS. Il fournit une représentation visuelle des nœuds, des messages et des 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

Ajoutez 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, puis devient 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 fusionnent en une partition. Les nœuds doivent 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. Vous devriez voir un nœud en cours de création juste au-dessus du bouton New Router. Faites glisser le nœud pour le placer à proximité de la direction que vous avez créée via OTNS-CLI. À terme, tous les nœuds devraient fusionner en une seule partition:

420258bb92561146.png

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

fe15d6f9726a099e.png

Vous avez maintenant créé un réseau Thread composé d'une partition contenant de nombreux nœuds. Dans la section suivante, nous allons ajuster la vitesse de simulation pour qu'elle s'exécute plus rapidement.

7. Ajuster la vitesse

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

Ajuster la vitesse dans OTNS-CLI

Vous pouvez ajuster la vitesse de simulation via OTNS-CLI.

Définir la vitesse de simulation sur 100X

> speed 100
Done

Vous devriez constater que les nœuds envoient des messages beaucoup plus fréquemment qu'auparavant.

Définir la vitesse de simulation sur MAX

> speed max
Done

Maintenant, OTNS tente de simuler le plus vite possible. Vous devriez donc voir des nœuds qui envoient un grand nombre de messages.

Mise en pause de la simulation

> speed 0
Done

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

Restaurer la simulation à une vitesse normale

> speed 1
Done

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

Ajuster la vitesse dans OTNS-Web

Boutons de contrôle de la vitesse

Repérez les boutons de contrôle de la vitesse 9329157c1bd12672.png sur l'écran Action Bar. Les boutons affichent la vitesse de simulation actuelle et permettent d'ajuster la vitesse de simulation, et de mettre en pause/reprendre la simulation.

Accélérer la simulation

Vous pouvez accélérer la simulation en cliquant sur le bouton 39b88331779277ad.png jusqu'à ce que la vitesse atteigne MAX: f5f460b2586d299b.png.

Ralentir la simulation

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

Mise en pause de la simulation

Cliquez sur le bouton 46cc2088c9aa7ab6.png pour suspendre la simulation lorsqu'elle est en cours d'exécution. Le bouton sera remplacé par ce25eda3496ffcd4.png.

Reprendre la simulation

Cliquez sur le bouton ce25eda3496ffcd4.png pour reprendre la simulation lorsqu'elle est mise en pause. Le bouton sera à nouveau dé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 pouvoir observer les changements de topologie du réseau beaucoup plus rapidement.

> speed 10
Done

8. Activer/Désactiver la radio

La simulation doit maintenant contenir deux routeurs (de forme hexagonale) et de nombreux enfants, et s'exécuter à une vitesse 10 fois supérieure.

Recherchez la variante optimale actuelle (bordure rouge) des deux routeurs, puis cliquez une fois pour la sélectionner:

8c6a2e191cdae0c7.png

Éteindre le signal radio

Cliquez sur le bouton 7ca085f470491dd4.png dans la barre d'action pour désactiver la case d'option du nœud "Leader" :

a3bf58d9d125f95f.png

Il ne peut pas envoyer ni recevoir de messages lorsque la case est désactivée.

Attendez environ 12 s (120 s en temps de simulation) pour que l'autre routeur devienne la nouvelle variante optimale:

e3d32f85c4a1b990.png

Le réseau Thread se remet automatiquement de l'échec de la variante optimale en formant une nouvelle partition avec une nouvelle partition principale. La nouvelle partition a également une nouvelle couleur de partition.

Allumer le signal radio

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

7370a7841861aa3a.png

Il doit se reconnecter au réseau une fois la connexion radio rétablie.

9. Déplacer des nœuds

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 maintenant éloigné de l'autre routeur, ils devraient perdre la connectivité l'un avec l'autre. Au bout de 12 s (120 s en temps de simulation), tous deux deviennent des leaders de leur propre partition:

c06b4d0a4f183299.png

Déplacer le nœud via OTNS-Web

Replacer le nœud 5 à son emplacement d'origine en le faisant glisser Les deux partitions devraient à nouveau fusionner en une seule:

9ba305c4c5a5f892.png

10. Supprimer les nœuds

Supprimer les 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 les nœuds via OTNS-Web

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

d4079cceea0105f0.png

Node 1 doit devenir "Leader" et Node 7 doit être dissocié, car il ne peut atteindre 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 d'un coup.

Avant de continuer...

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

11. Contexte du nœud OTNS-CLI

OTNS-CLI fournit un mode contexte de nœud pour faciliter l'interaction avec les nœuds afin d'aider les développeurs à 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 est passée à node 1> , indiquant le contexte actuel du nœud. Vous pouvez saisir des commandes CLI OpenThread à exécuter sur le nœud comme si vous interagissiez directement avec le nœud.

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

Passer à 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 venez d'exécuter votre première simulation OTNS !

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

Vous savez maintenant ce qu’est OTNS et comment l’utiliser pour simuler des réseaux OpenThread.

Étape suivante

Découvrez quelques-uns des ateliers de programmation...

Documents de référence