1. Introduction
OpenThread publié par Google est une implémentation Open Source du protocole de mise en réseau Thread. Google Nest a lancé OpenThread pour permettre aux développeurs d'accéder à la technologie utilisée par les produits Nest afin d'accélérer le développement de produits pour la maison connectée.
La spécification Thread définit un protocole de communication d'appareil à appareil sans fil fiable, sécurisé et basse consommation pour les applications domestiques. OpenThread implémente toutes les couches réseau Thread, y compris IPv6, 6LoWPAN, IEEE 802.15.4 avec sécurité MAC, Mesh Link Establishment et Mailing Routing.
Cet atelier de programmation vous explique comment simuler un réseau Thread sur des appareils émulés à l'aide de Docker.
Points abordés
- Configurer la chaîne d'outils de compilation OpenThread
- Comment simuler un réseau Thread
- Authentifier les nœuds Thread
- Gérer un réseau Thread avec le thread Thread OpenThread
Ce dont vous avez besoin
- Docker
- Connaissances de base de Linux, routage réseau
2. Configurer Docker
Cet atelier de programmation est conçu pour utiliser Docker sur une machine Linux, Mac OS X ou Windows. Linux est l'environnement recommandé.
Installer Docker
Installez Docker sur l'OS de votre choix.
Extraire l'image Docker
Une fois Docker installé, ouvrez une fenêtre de terminal et extrayez l'image Docker openthread/environment
. Cette image illustre OpenThread et le Daemon OpenThread et sont prêts à être utilisés pour cet atelier de programmation.
$ docker pull openthread/environment:latest
Notez que le téléchargement peut prendre quelques minutes.
Dans une fenêtre de terminal, démarrez un conteneur Docker à partir de l'image et connectez-vous à son interface système bash
:
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
L'option --rm
supprime le conteneur lorsque vous le quittez. N'utilisez pas cette option si vous ne souhaitez pas supprimer le conteneur.
Notez les options obligatoires pour cet atelier de programmation:
--sysctl net.ipv6.conf.all.disable_ipv6=0
: cette option active IPv6 dans le conteneur.--cap-add=net_admin
: active la fonctionnalité NET_ADMIN, qui vous permet d'exécuter des opérations liées au réseau, comme l'ajout de routes IP
Une fois dans le conteneur, vous devriez avoir une invite semblable à celle-ci:
root@c0f3912a74ff:/#
Dans l'exemple ci-dessus, c0f3912a74ff
est l'ID du conteneur. L'ID de votre instance de conteneur Docker sera différent de celui indiqué dans les invites de cet atelier de programmation.
Utiliser Docker
Dans cet atelier de programmation, nous partons du principe que vous maîtrisez les bases de l'utilisation de Docker. Vous devez rester dans le conteneur Docker pendant toute la durée de l'atelier de programmation.
3. Simuler un réseau Thread
L'exemple d'application que vous utiliserez pour cet atelier de programmation présente une application OpenThread minimale qui expose les interfaces de configuration et de gestion OpenThread via une interface de ligne de commande (CLI) de base.
Cet exercice vous explique les étapes minimales requises pour pinguer un appareil Thread émulé à partir d'un autre appareil Thread émulé.
La figure ci-dessous décrit une topologie de réseau Thread de base. Pour cet exercice, nous allons émuler les deux nœuds dans le cercle vert: un leader de thread et un routeur de thread avec une seule connexion entre eux.
Créer le réseau à l'aide de la commande suivante
1. Démarrer le nœud 1
Si vous ne l'avez pas déjà fait, dans une fenêtre de terminal, démarrez le conteneur Docker et connectez-vous à son interface système bash
:
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
Dans le conteneur Docker, générez le processus de CLI pour un appareil Thread émulé à l'aide du binaire ot-cli-ftd
.
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1
Remarque:Si vous ne voyez pas l'invite >
après avoir exécuté cette commande, appuyez sur enter
.
Ce binaire implémente un appareil OpenThread. Le pilote radio IEEE 802.15.4 est implémenté sur UDP (les trames IEEE 802.15.4 sont transmises dans les charges utiles UDP).
L'argument de 1
est un descripteur de fichier qui représente les bits les moins significatifs de la norme IEEE EUI-64 "attribuée par l'utilisateur" pour l'appareil émulé. Cette valeur est également utilisée pour la liaison à un port UDP pour l'émulation radio IEEE 802.15.4 (port = 9000 + descripteur de fichier). Chaque instance d'un appareil Thread émulé dans cet atelier de programmation utilisera un descripteur de fichier différent.
Remarque:Utilisez uniquement des descripteurs de fichier 1
ou supérieurs, comme indiqué dans cet atelier de programmation, lorsque vous générez le processus pour un appareil émulé. Un descripteur de fichier 0
est réservé à une autre utilisation.
Créez un ensemble de données opérationnel et validez-le en tant qu'ensemble de données actif. L'ensemble de données opérationnel est la configuration du réseau Thread que vous créez.
> dataset init new Done > dataset Active Timestamp: 1 Channel: 20 Channel Mask: 07fff800 Ext PAN ID: d6263b6d857647da Mesh Local Prefix: fd61:2344:9a52:ede0/64 Network Key: e4344ca17d1dca2a33f064992f31f786 Network Name: OpenThread-c169 PAN ID: 0xc169 PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4 Security Policy: 0, onrcb Done
Validez cet ensemble de données comme étant actif:
> dataset commit active Done
Affichez l'interface IPv6:
> ifconfig up Done
Démarrez l'opération de protocole Thread:
> thread start Done
Patientez quelques secondes, puis vérifiez que l'appareil est devenu le leader du thread. Le responsable est l'appareil chargé de gérer l'attribution des ID de routeur.
> state leader Done
Affichez les adresses IPv6 attribuées à l'interface Thread du nœud 1 (votre résultat sera différent):
> ipaddr fd61:2344:9a52:ede0:0:ff:fe00:fc00 fd61:2344:9a52:ede0:0:ff:fe00:5000 fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6 fe80:0:0:0:94da:92ea:1353:4f3b Done
Notez les types d'adresses IPv6 spécifiques:
- Commence par
fd
= réseau maillé local - Commence par
fe80
= link-local
Les types d'adresses locaux maillés sont classés de façon plus approfondie:
- Contient
ff:fe00
= Outil de localisation de routeur (RLOC) - Ne contient pas
ff:fe00
= identifiant de point de terminaison (EID)
Identifiez l'EID dans le résultat de votre console et notez-le pour une utilisation ultérieure. Dans l'exemple de résultat ci-dessus, l'EID est le suivant:
fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6
2. Démarrer le nœud 2
Ouvrez un nouveau terminal et exécutez une interface système bash
dans le conteneur Docker en cours d'exécution à utiliser pour le nœud 2.
$ docker exec -it codelab_otsim_ctnr bash
À cette nouvelle invite bash
, générez le processus de la CLI avec l'argument 2
. Voici votre deuxième appareil Thread émulé:
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2
Remarque:Si vous ne voyez pas l'invite >
après avoir exécuté cette commande, appuyez sur enter
.
Configurez la clé réseau Thread et l'ID PAN, en utilisant les mêmes valeurs que l'ensemble de données opérationnel du nœud 1:
> dataset networkkey e4344ca17d1dca2a33f064992f31f786 Done > dataset panid 0xc169 Done
Validez cet ensemble de données comme étant actif:
> dataset commit active Done
Affichez l'interface IPv6:
> ifconfig up Done
Démarrez l'opération de protocole Thread:
> thread start Done
L'appareil s'initialise en tant qu'enfant. Un enfant Thread est équivalent à un appareil final, c'est-à-dire un appareil Thread qui transmet et reçoit un trafic unicast uniquement avec un appareil parent.
> state child Done
Dans les deux minutes qui suivent, le changement d'état doit passer de child
à router
. Un routeur Thread est capable de router le trafic entre les appareils Thread. Elle est également appelée "Parent".
> state router Done
Vérifier le réseau
Un moyen simple de vérifier le réseau maillé consiste à consulter la table du routeur.
1. Vérifier la connectivité
Sur le nœud 2, obtenez RLOC16. Le RLOC16 correspond aux 16 derniers bits de l'adresse IPv6 RLOC de l'appareil.
> rloc16 5800 Done
Sur le nœud 1, recherchez la table RLOC16 du nœud 2 dans la table du routeur. Assurez-vous d'abord que le nœud 2 est passé à l'état du routeur.
> router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+--------+-------+---+--------------------+ | 20 | 0x5000 | 63 | 0 | 0 | 0 | 0 | 96da92ea13534f3b | | 22 | 0x5800 | 63 | 0 | 3 | 3 | 23 | 5a4eb647eb6bc66c |
Le RLOC 0x5800
du nœud 2 est indiqué dans la table, ce qui confirme qu'il est connecté au réseau maillé.
2. Pinguez le nœud 1 du nœud 2
Vérifiez la connectivité entre les deux appareils Thread émulés. Dans le nœud 2, ping
l'EID attribué au nœud 1:
> ping fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6 > 16 bytes from fd61:2344:9a52:ede0:d041:c5ba:a7bc:5ce6: icmp_seq=1 hlim=64 time=12ms
Appuyez sur enter
pour revenir à l'invite de la CLI >
.
Tester le réseau
Maintenant que vous pouvez pinguer correctement deux appareils Thread émulés, testez le réseau maillé en mettant un nœud hors connexion.
Revenez au nœud 1 et arrêtez Thread:
> thread stop Done
Passez au nœud 2 et vérifiez l'état. Au bout de deux minutes, le nœud 2 détecte que le nœud principal (nœud 1) est hors connexion. Vous devriez voir que le nœud 2 est le leader
du réseau:
> state router Done ... > state leader Done
Une fois la configuration terminée, arrêtez Thread et rétablissez la configuration d'usine du nœud 2, puis revenez à l'invite Docker bash
. Le rétablissement de la configuration d'usine permet de s'assurer que les identifiants du réseau Thread que nous avons utilisés dans cet exercice ne sont pas transférés vers l'exercice suivant.
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
Vous devrez peut-être appuyer sur enter
plusieurs fois pour afficher l'invite >
après une commande factoryreset
. Ne quittez pas le conteneur Docker.
Rétablissez également la configuration d'usine et quittez le nœud 1:
> factoryreset > > exit root@c0f3912a74ff:/#
Consultez la documentation de référence de la CLI OpenThread pour découvrir toutes les commandes CLI disponibles.
4. Authentifier des nœuds avec la mise en service
Dans l'exercice précédent, vous avez configuré un réseau Thread avec deux appareils simulés et une connectivité validée. Toutefois, cela permet uniquement de transmettre le trafic d'adresses IPv6 locales non authentifiées entre les appareils. Pour acheminer le trafic IPv6 mondial entre eux (et Internet via un routeur de bordure Thread), les nœuds doivent être authentifiés.
Pour s'authentifier, un appareil doit faire office de commissaire. Le Commissioner est le serveur d'authentification actuellement élu pour les nouveaux appareils Thread. Il est également l'autorisation de fournir les identifiants réseau requis pour que les appareils rejoignent le réseau.
Dans cet exercice, nous allons utiliser la même topologie à deux nœuds. Pour l'authentification, le responsable de threads joue le rôle de Commissaire, du routeur de threads en tant que Joiner.
Docker
Pour chaque nœud (fenêtre de terminal) dans les exercices restants, assurez-vous d'exécuter le conteneur Docker avec le build OpenThread. Si vous avez suivi l'exercice précédent, vous devriez toujours avoir deux invites bash
dans le même conteneur Docker. Si ce n'est pas le cas, consultez l'étape Résoudre les problèmes liés à Docker ou recommencez simplement l'exercice Simuler un réseau Thread.
1. Créer un réseau
Dans le nœud 1, générez le processus de la CLI:
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1
Remarque:Si vous ne voyez pas l'invite >
après avoir exécuté cette commande, appuyez sur enter
.
Créez un ensemble de données opérationnel, validez-le en tant qu'ensemble de données actif, puis démarrez Thread:
> dataset init new Done > dataset Active Timestamp: 1 Channel: 12 Channel Mask: 07fff800 Ext PAN ID: e68d05794bf13052 Mesh Local Prefix: fd7d:ddf7:877b:8756/64 Network Key: a77fe1d03b0e8028a4e13213de38080e Network Name: OpenThread-8f37 PAN ID: 0x8f37 PSKc: f9debbc1532487984b17f92cd55b21fc Security Policy: 0, onrcb Done
Validez cet ensemble de données comme étant actif:
> dataset commit active Done
Affichez l'interface IPv6:
> ifconfig up Done
Démarrez l'opération de protocole Thread:
> thread start Done
Attendez quelques secondes, puis vérifiez que l'appareil est désigné comme l'un des meilleurs threads:
> state leader Done
2. Démarrer le rôle de commissaire
Toujours sur le nœud 1, démarrez le rôle "Commissaire" :
> commissioner start Done
Autorisez n'importe quel Joiner (à l'aide du caractère générique *
) avec les identifiants Joiner J01NME
à la commission sur le réseau. Un Joiner est un appareil ajouté par un administrateur humain à un réseau Thread commandé.
> commissioner joiner add * J01NME Done
3. Démarrer le rôle Joiner
Dans une deuxième fenêtre de terminal, dans le conteneur Docker, générez un nouveau processus CLI. Il s'agit du nœud 2.
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 2
Sur le nœud 2, activez le rôle Joiner via les identifiants du Joiner J01NME
.
> ifconfig up Done > joiner start J01NME Done
... attendez quelques secondes pour la confirmation ...
Join success
En tant que Joiner, l'appareil (Node 2) s'est authentifié auprès du Commissioner (Node 1) et a reçu les identifiants du réseau Thread.
Maintenant que le nœud 2 est authentifié, démarrez Thread:
> thread start Done
4. Valider l'authentification réseau
Vérifiez le state
du nœud 2 pour vérifier qu'il a maintenant rejoint le réseau. Dans les deux minutes qui suivent, le nœud 2 passe de child
à router
:
> state child Done ... > state router Done
5. Réinitialiser la configuration
Pour préparer l'exercice suivant, réinitialisez la configuration. Sur chaque nœud, arrêtez Thread, rétablissez la configuration d'usine et quittez l'appareil Thread émulé:
> thread stop Done > factoryreset > > exit root@c0f3912a74ff:/#
Vous devrez peut-être appuyer sur enter
plusieurs fois pour afficher l'invite >
après une commande factoryreset
.
5. Gérer le réseau avec le daemon OpenThread
Pour cet exercice, nous allons simuler une instance de CLI (un seul thread SOC intégré) et une instance du co-processeur de radio (RCP).
ot-daemon
est un mode de l'application OpenThread Posix qui utilise un socket UNIX en entrée et en sortie, de sorte que le noyau OpenThread puisse s'exécuter en tant que service. Un client peut communiquer avec ce service en se connectant au socket en utilisant la CLI OpenThread comme protocole.
ot-ctl
est une CLI fournie par ot-daemon
pour gérer et configurer le RCP. Nous connecterons le RCP au réseau créé par l'appareil Thread.
Docker
Pour chaque nœud (fenêtre de terminal) de cet exercice, assurez-vous d'exécuter le conteneur Docker avec le build OpenThread. Si vous continuez à partir de l'exercice précédent, vous devriez déjà avoir deux invites bash
dans le même conteneur Docker. Si ce n'est pas le cas, reportez-vous à l'étape Résoudre les problèmes liés à Docker.
Utiliser ot-daemon
Cet exercice utilise trois fenêtres de terminal, correspondant aux éléments suivants:
- Instance CLI de l'appareil Thread simulé (nœud 1)
- Nœud de traitement
ot-daemon
ot-ctl
instance de CLI
1. Démarrer le nœud 1
Dans la première fenêtre du terminal, exécutez le processus de CLI pour votre appareil Thread émulé:
root@c0f3912a74ff:/# /openthread/build/examples/apps/cli/ot-cli-ftd 1
Remarque:Si vous ne voyez pas l'invite >
après avoir exécuté cette commande, appuyez sur enter
.
Créez un ensemble de données opérationnel, validez-le en tant qu'ensemble de données actif, puis démarrez Thread:
> dataset init new Done > dataset Active Timestamp: 1 Channel: 13 Channel Mask: 07fff800 Ext PAN ID: 97d584bcd493b824 Mesh Local Prefix: fd55:cf34:dea5:7994/64 Network Key: ba6e886c7af50598df1115fa07658a83 Network Name: OpenThread-34e4 PAN ID: 0x34e4 PSKc: 38d6fd32c866927a4dfcc06d79ae1192 Security Policy: 0, onrcb Done
Validez cet ensemble de données comme étant actif:
> dataset commit active Done
Affichez l'interface IPv6:
> ifconfig up Done
Démarrez l'opération de protocole Thread:
> thread start Done
Affichez les adresses IPv6 attribuées à l'interface Thread du nœud 1:
> ipaddr fd55:cf34:dea5:7994:0:ff:fe00:fc00 fd55:cf34:dea5:7994:0:ff:fe00:d000 fd55:cf34:dea5:7994:460:872c:e807:c4ab fe80:0:0:0:9cd8:aab6:482f:4cdc Done >
Comme expliqué à l'étape Simuler un réseau Thread, une adresse est de type lien local (fe80
) et trois d'entre elles sont de type maillage local (fd
). L'EID est l'adresse locale du maillage qui ne contient pas ff:fe00
dans l'adresse. Dans cet exemple de sortie, l'EID est fd55:cf34:dea5:7994:460:872c:e807:c4ab
.
Identifiez l'EID spécifique de la sortie ipaddr
, qui sera utilisé pour communiquer avec le nœud.
2. Démarrer ot-daemon
Dans la deuxième fenêtre de terminal, créez un nœud d'appareil tun
et définissez les autorisations de lecture/écriture:
root@c0f3912a74ff:/# mkdir -p /dev/net && mknod /dev/net/tun c 10 200 root@c0f3912a74ff:/# chmod 600 /dev/net/tun
Cet appareil est utilisé pour la transmission et la réception de paquets dans les appareils virtuels. Un message d'erreur peut s'afficher si l'appareil a déjà été créé. Cela est normal et peut être ignoré.
Démarrez ot-daemon
pour un nœud RCP, que nous appellerons le nœud 2. Utilisez l'indicateur détaillé -v
pour afficher la sortie du journal et vérifier qu'elle est en cours d'exécution:
root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+forkpty:///openthread/build/examples/apps/ncp/ot-rcp?forkpty-arg=2'
Si l'opération réussit, ot-daemon
en mode détaillé génère un résultat semblable à celui-ci:
ot-daemon[31]: Running OPENTHREAD/297a880; POSIX; Feb 1 2022 04:43:39 ot-daemon[31]: Thread version: 3 ot-daemon[31]: Thread interface: wpan0 ot-daemon[31]: RCP version: OPENTHREAD/297a880; SIMULATION; Feb 1 2022 04:42:50
Laissez ce terminal ouvert et exécuté en arrière-plan. Vous ne saisirez aucune autre commande.
3. Utiliser ot-ctl pour joindre le réseau
Nous n'avons pas encore commandé de nœud 2 (le protocole RCP ot-daemon
) à un réseau Thread. C'est là que ot-ctl
entre en jeu. ot-ctl
utilise la même CLI que l'application CLI OpenThread. Par conséquent, vous pouvez contrôler les nœuds ot-daemon
de la même manière que les autres appareils Thread simulés.
Ouvrez une troisième fenêtre de terminal et exécutez le conteneur existant:
$ docker exec -it codelab_otsim_ctnr bash
Une fois dans le conteneur, démarrez ot-ctl
:
root@c0f3912a74ff:/# /openthread/build/posix/src/posix/ot-ctl >
Vous utiliserez ot-ctl
dans cette troisième fenêtre de terminal pour gérer le nœud 2 (nœud RCP) que vous avez démarré dans la deuxième fenêtre de terminal avec ot-daemon
. Vérifiez les state
du nœud 2:
> state disabled Done
Obtenez le eui64
du nœud 2 pour limiter la jointure à l'outil de jointure en question:
> eui64 18b4300000000001 Done
Sur le nœud 1 (première fenêtre de terminal), démarrez le Commissioner et limitez la jointure à cette eui64:
> commissioner start Done > commissioner joiner add 18b4300000000001 J01NME Done
Dans la troisième fenêtre de terminal, affichez l'interface réseau du nœud 2 et rejoignez le réseau:
> ifconfig up Done > joiner start J01NME Done
... attendez quelques secondes pour la confirmation ...
Join success
En tant que Joiner, le RCP (Node 2) s'est authentifié auprès du Commissaire (Node 1) et a reçu les identifiants du réseau Thread.
Associez le nœud 2 au réseau Thread (dans la troisième fenêtre de terminal):
> thread start Done
4. Valider l'authentification réseau
Dans le troisième terminal, vérifiez le state
sur le nœud 2 afin de vérifier qu'il a bien rejoint le réseau. Dans les deux minutes qui suivent, le nœud 2 passe de child
à router
:
> state child Done ... > state router Done
5. Valider la connectivité
Dans la troisième fenêtre du terminal, quittez ot-ctl
à l'aide de la commande Ctrl+D ou exit
, puis revenez à la console bash
du conteneur. Dans cette console, pinguez le nœud 1 en utilisant son EID avec la commande ping6
. Si l'instance RCP ot-daemon
est correctement associée au réseau Thread et communique avec elle, le ping aboutit:
root@c0f3912a74ff:/# ping6 -c 4 fd55:cf34:dea5:7994:460:872c:e807:c4ab PING fd55:cf34:dea5:7994:460:872c:e807:c4ab (fd55:cf34:dea5:7994:460:872c:e807:c4ab): 56 data bytes 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=0 ttl=64 time=4.568 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=1 ttl=64 time=6.396 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=2 ttl=64 time=7.594 ms 64 bytes from fd55:cf34:dea5:7994:460:872c:e807:c4ab: icmp_seq=3 ttl=64 time=5.461 ms --- fd55:cf34:dea5:7994:460:872c:e807:c4ab ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 4.568/6.005/7.594/1.122 ms
6. Dépannage Docker
Si vous avez quitté le conteneur Docker
bash
invites, vous devrez peut-être vérifier s'il est en cours d'exécution, puis redémarrer ou saisir à nouveau si nécessaire. Tous les conteneurs Docker que vous avez créés sans utiliser l'option --rm
devraient toujours exister.
Pour afficher les conteneurs Docker en cours d'exécution:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 505fc57ffc72 environment "bash" 10 minutes ago Up 10 minutes codelab_otsim_ctnr
Pour afficher tous les conteneurs Docker (en cours d'exécution et arrêtés):
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 505fc57ffc72 environment "bash" 10 minutes ago Up 10 minutes codelab_otsim_ctnr
Si vous ne voyez pas le conteneur codelab_otsim_ctnr
dans le résultat de l'une des commandes docker ps
, exécutez-le à nouveau:
$ docker run --name codelab_otsim_ctnr -it --rm \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ --cap-add=net_admin openthread/environment bash
N'utilisez l'option --rm
que si vous souhaitez supprimer le conteneur lorsque vous le quittez.
Si le conteneur est arrêté (indiqué dans docker ps -a
, mais pas dans docker ps
), redémarrez-le:
$ docker start -i codelab_otsim_ctnr
Si le conteneur Docker est déjà en cours d'exécution (répertorié dans docker ps
), reconnectez-vous au conteneur dans chaque terminal:
$ docker exec -it codelab_otsim_ctnr bash
Erreurs "Opération non autorisée"
Si vous rencontrez des erreurs Operation not permitted
lors de la création de nœuds OpenThread (à l'aide de la commande mknod
), assurez-vous d'exécuter Docker en tant qu'utilisateur racine, conformément aux commandes fournies dans cet atelier de programmation. Cet atelier de programmation ne permet pas d'exécuter Docker en mode racine.
7. Félicitations !
Vous avez simulé votre premier réseau Thread à l'aide d'OpenThread. Parfait !
Dans cet atelier de programmation, vous avez appris à :
- Démarrer et gérer le conteneur Docker de simulation OpenThread
- Simuler un réseau Thread
- Authentifier les nœuds Thread
- Gérer un réseau Thread avec le daemon OpenThread
Pour en savoir plus sur Thread et OpenThread, consultez les références suivantes:
- Primaire Thread sur Openthread.io
- Spécification du thread
- Dépôt GitHub OpenThread
- Documentation de référence de la CLI OpenThread
- Compatibilité Docker OpenThread supplémentaire
Vous pouvez également essayer d'utiliser OpenThread Border Router dans un conteneur Docker.