Simuler des réseaux de threads à l'aide d'OTNS

1. Présentation

5abd22afa2f2ee9a.png

Présentation de Thread et OTNS

Thread est un protocole de mise en réseau sans fil basé sur l'adresse IP, qui permet de sécuriser les communications d'appareil à cloud et entre appareils. Les réseaux Thread peuvent s'adapter aux modifications de la topologie pour éviter les points de défaillance uniques.

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

Le simulateur de réseau OpenThread (OTNS Network Simulator) 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 OTNS-Web facile à utiliser pour visualiser et exploiter des réseaux Thread simulés.

Ce que vous allez apprendre

  • Installer OTNS et ses dépendances
  • Créer OpenThread pour OTNS
  • Comment ajouter/déplacer/supprimer des nœuds dans OTNS-Web
  • Utiliser les autres fonctionnalités utiles d'OTNS-Web pour effectuer la simulation du réseau
  • Vérifier le 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 traitées.

Prérequis

  • Linux x86_64 ou macOS.
  • Git :
  • Go 1.11+.
  • Navigateur Web. OTNS-Web utilise un navigateur Web pour afficher les simulations.
  • Apprêt de fil de discussion. 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.11+ pour la compilation.

  1. Installez Go à partir de la page 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

Dépendances d'installation

$ ./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.

Installer les services mobiles

Installez otns sur $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 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/bootstrap
$ ./bootstrap
$ make -f examples/Makefile-simulation OTNS=1

Les fichiers exécutables OpenThread se trouvent dans le répertoire output:

Linux

$ ls ~/src/openthread/output/simulation/bin
ot-cli-ftd        ot-cli-mtd        ot-ncp-ftd        ot-ncp-mtd        ot-rcp

macOS

$ ls ~/src/openthread/output/simulation/bin
ot-cli-ftd        ot-cli-mtd        ot-ncp-ftd        ot-ncp-mtd        ot-rcp

Vous devez maintenant exécuter OTNS...

4. Exécuter OTNS

Exécutez otns :

$ cd ~/src/openthread/output/simulation/bin
$ otns
> ← OTNS-CLI prompt

Une fois le test lancé, OTNS entre dans une console CLI (OTNS-CLI) et lance un navigateur Web pour la visualisation et la gestion du réseau (OTNS-Web):

A0E05178D66929B1.png

Si une page vide s'affiche pour le service OTNS-Web, il est probable que WebGL ne soit pas activé dans votre navigateur. Pour savoir comment activer WebGL, consultez la pagehttps://superuser.com/a/836833 .

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

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

CLI OTNS

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

$ cd ~/src/openthread/output/simulation/bin
$ otns
> ← OTNS-CLI prompt

Vous pouvez saisir des commandes via OTNS-CLI. Consultez la documentation de référence sur 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 réseau de OTNS. Il fournit une représentation visuelle des nœuds, des messages et des liens du réseau de threads 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

Un nœud créé dans OTNS-Web doit s'afficher. Le nœud démarre en tant que routeur et devient leader en quelques secondes:

6ca8c2e63ed9818d.png

Ajouter 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

Patientez quelques secondes pendant la fusion des nœuds dans une partition. Les nœuds doivent s'afficher dans OTNS-WEB:

3ee67903c01aa612.png

Ajouter des nœuds avant 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 vous trouver à proximité de la variante optimale créée via OTNS-CLI. À terme, tous les nœuds doivent être fusionnés en une seule partition:

420258bb92561146.png

Cliquez également 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 positions situées à proximité des nœuds existants pour les associer à ce réseau Thread:

fe15d6f9726a099e.png

Vous avez maintenant créé un réseau Thread d'une partition contenant de nombreux nœuds. Dans la section suivante, nous allons ajuster la vitesse de simulation pour que la simulation soit plus rapide.

7. Ajuster la vitesse

Actuellement, la simulation doit s'exécuter à la vitesse 1X, ce qui signifie que le temps simulé existant est identique à l'heure réelle depuis la création du premier nœud.

Ajuster la vitesse jusqu'à 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 bien plus souvent qu'avant.

Définir la vitesse de simulation sur MAX

> speed max
Done

À présent, OTNS essaie de simuler le plus rapidement possible. Vous devriez donc constater que les nœuds envoient un grand nombre de messages.

Mettre en pause de la simulation

> speed 0
Done

Définir la vitesse simulée sur 0 met en pause la simulation.

Restaurer la simulation à la vitesse normale

> speed 1
Done

Si vous simulez une vitesse supérieure à 0, la simulation reprend.

Ajuster la vitesse jusqu'à OTNS-Web

Boutons de contrôle de la vitesse

Repérez les boutons de contrôle de la vitesse 9329157c1bd12672.png sur le Action Bar. Les boutons affichent la vitesse de simulation actuelle et peuvent être utilisés pour ajuster la vitesse de simulation et mettre en pause/reprendre la simulation.

Accélérer la simulation

Pour accélérer la simulation, cliquez sur le bouton 39b88331779277ad.png jusqu'à ce que la vitesse atteigne MAX: f5f460b2586d299b.png.

Simulation de ralentissement

Pour ralentir la simulation, cliquez sur le bouton 31cca8d5b52fa900.png.

Mettre en pause de la simulation

Cliquez sur le bouton 46cc2088c9aa7ab6.png pour mettre la simulation en pause 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 en pause. Le bouton redeviendra 46cc2088c9aa7ab6.png.

Définir la vitesse de simulation sur 10X

Pour gagner du temps, utilisez

OTNS-CLI pour ajuster la vitesse de simulation sur

10X afin d'observer les modifications de topologie beaucoup plus rapidement sur le réseau.

> speed 10
Done

8. Allumer/Éteindre la radio

Désormais, la simulation doit contenir deux routeurs (forme hexagone) et plusieurs enfants, et fonctionne à une vitesse 10 fois supérieure.

Localisez le routeur actuel (bordure rouge) des deux routeurs, puis cliquez dessus pour le sélectionner:

8c6a2e191cdae0c7.png

Éteindre le signal radio

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

A3bf58d9d125f95f.png

Le responsable ne peut pas envoyer ni recevoir de messages lorsque la radio est désactivée.

Attendez environ 12 secondes (120 secondes simulant le temps) que l'autre routeur devienne le premier responsable:

e3d32f85c4a1b990.png

Le réseau Thread récupère automatiquement en cas de défaillance du leader en formant une nouvelle partition avec un nouveau responsable. La nouvelle partition dispose également d'une nouvelle couleur de partition.

Allumer le signal radio

Sélectionnez le responsable dont la radio a été éteinte. Cliquez sur le bouton 2d9cecb8612b42aa.png sur la passerelle Action Bar pour restaurer 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

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

Déplacer le nœud dans OTNS-CLI

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

> move 5 600 300
Done

Comme le nœud 5 est maintenant loin de l'autre routeur, ils doivent perdre la connectivité l'un avec l'autre. Au bout d'environ 12 secondes (120 secondes dans le temps de simulation), ils deviennent tous deux des leaders de leur propre partition:

C06b4d0a4f183299.png

Déplacer le nœud via OTNS-Web

Replacez le nœud 5 dans son emplacement d'origine en le faisant glisser. Les deux partitions doivent être fusionnées en une seule:

9ba305c4c5a5f892.png

10. Supprimer les 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, puis cliquez sur le bouton 7ff6afd565f4eafc.png du Action Bar pour supprimer le nœud 5:

D4079cceea0105f0.png

Node 1 doit devenir la variante optimale 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 dans Action Bar.. Tous les nœuds disparaîtront en même temps.

Avant de continuer...

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

11. Contexte des nœuds OTNS-CLI

OTNS-CLI fournit un mode de contexte de nœud pour une interaction facile avec les nœuds, afin d'aider les développeurs à diagnostiquer l'état d'un nœud.

Activer le mode contextuel des nœuds

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 les commandes CLI OpenThread à exécuter sur le nœud comme si vous interagissez directement avec le nœud.

Exécuter des commandes dans un contexte de 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 avez réussi à exécuter votre première simulation OTNS !

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

Vous savez maintenant ce que sont les OTNS et comment les utiliser pour simuler des réseaux OpenThread.

Étape suivante

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

Documentation de référence