Utiliser des services réseau
Important
Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).
Azure Sphere peut exécuter une adresse IP statique, un serveur DHCP (Dynamic Host Configuration Protocol) et un serveur SNTP (Simple Network Time Protocol) pour une interface réseau. Le serveur DHCP permet aux applications Azure Sphere de configurer les paramètres réseau d’un appareil externe sur le réseau. L'appareil externe peut utiliser le serveur SNTP pour synchroniser son heure avec Azure Sphere.
Configuration réseau
Vous pouvez configurer une interface réseau Ethernet et Wi-Fi à des fins d'exécution simultanée sur un appareil Azure Sphere. Les interfaces réseau Ethernet et Wi-Fi peuvent être connectées à des réseaux publics (connectés à Internet) ou privés. Au moins une interface doit être connectée à un réseau public. Une seule interface Ethernet peut être configurée à la fois.
Interfaces réseau privé et public
Si vous utilisez les deux interfaces réseau public et privé, comme un réseau Ethernet privé avec un réseau Wi-Fi public, l’appareil Azure Sphere ne fera pas office de routeur. Jamais il ne transmet automatiquement au réseau Wi-Fi les paquets reçus sur le réseau Ethernet, ou inversement. Votre application doit implémenter toute logique qui envoie et reçoit des informations sur les deux réseaux.
Doubles interfaces réseau public
Si vous utilisez deux interfaces réseau pour lesquelles l'adressage IP est activé, le système d’exploitation tente d’utiliser la première interface à s'être connectée au réseau lorsqu'il sélectionne les adresses de serveur DNS à des fins de résolution du nom d'hôte. Si une interface se déconnecte du réseau, les adresses de serveur DNS de l’autre interface connectée sont automatiquement utilisées.
Adresse IP statique
Vous pouvez configurer une adresse IP statique sur une interface Ethernet ou Wi-Fi. Pour définir une configuration d'adresse IP statique, votre application doit utiliser les API de mise en réseau des bibliothèques d'applications et le manifeste de l'application doit activer la fonctionnalité NetworkConfig.
Lors de la configuration d’une adresse IP statique, le DNS personnalisé doit également être défini pour garantir que le système d’exploitation Azure Sphere continue de fonctionner comme prévu.
L'exemple Services réseau privés montre comment connecter Azure Sphere à un réseau privé et comment utiliser plusieurs services réseau.
Cet extrait de code montre comment configurer une interface réseau avec une adresse IP statique.
Incluez la ligne suivante dans la section Fonctionnalités du fichier app_manifest.json comme suit :
"Capabilities": {
"NetworkConfig": true
}
Incluez ces fichiers d’en-tête dans votre application :
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Définissez l’adresse IP, le masque de sous-réseau et la passerelle pour la configuration IP.
static const char staticIpInDotNotation[] = "yourStaticIp"; // Your static IP in x.x.x.x notation.
static const char subnetMaskInDotNotation[] =
"yourSubnetMask"; // Your subnet mask in x.x.x.x notation.
static const char gatewayIpInDotNotation[] = "yourGatewayIp"; // Your gateway IP in x.x.x.x notation.
Spécifiez l’interface réseau à configurer :
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Convertissez les adresses réseau en entiers et appliquez-les à l’interface réseau spécifiée.
struct in_addr staticIpAddress;
struct in_addr subnetMask;
struct in_addr gatewayIpAddress;
Networking_IpConfig ipConfig;
// Convert the addresses from the numbers-and-dots notation into integers.
if (inet_pton(AF_INET, staticIpInDotNotation, &staticIpAddress) != 1) {
Log_Debug("ERROR: Invalid static IP address or address family specified.\n");
return -1;
}
if (inet_pton(AF_INET, subnetMaskInDotNotation, &subnetMask) != 1) {
Log_Debug("ERROR: Invalid subnet mask or address family specified.\n");
return -1;
}
if (inet_pton(AF_INET, gatewayIpInDotNotation, &gatewayIpAddress) != 1) {
Log_Debug("ERROR: Invalid gateway IP address or address family specified.\n");
return -1;
}
Networking_IpConfig_Init(&ipConfig);
Networking_IpConfig_EnableStaticIp(&ipConfig, staticIpAddress, subnetMask, gatewayIpAddress);
int result =
Networking_IpConfig_EnableCustomDns(&ipConfig, dnsServers, numOfDnsServerAddressSpecified);
if (result != 0) {
Log_Debug("ERROR: Networking_IpConfig_EnableCustomDns: %d (%s)\n", errno, strerror(errno));
Networking_IpConfig_Destroy(&ipConfig);
return -1;
}
int result = Networking_IpConfig_Apply(networkInterfaceToConfigure, &ipConfig);
Networking_IpConfig_Destroy(&ipConfig);
if (result != 0) {
Log_Debug("ERROR: Networking_IpConfig_Apply: %d (%s)\n", errno, strerror(errno));
return -1;
}
Adresse DNS statique
Si vous avez configuré un appareil avec une adresse IP statique et que vous avez besoin d’une résolution de noms, votre application doit définir une adresse DNS statique. Utilisez Networking_IpConfig_EnableCustomDns et définissez un ou plusieurs résolveurs DNS valides. Si plusieurs résolveurs sont définis, ils sont tous interrogés, et la première réponse DNS valide répond à la requête. Networking_IpConfig_EnableCustomDns peut également être utilisé pour remplacer le programme de résolution actuel si un programme de résolution est défini via DHCP.
Pour configurer une interface réseau avec des serveurs DNS personnalisés, le manifeste de l’application doit activer la fonctionnalité NetworkConfig.
Incluez la ligne suivante dans la section Fonctionnalités du fichier app_manifest.json comme suit :
"Capabilities": {
"NetworkConfig": true
}
Cet extrait de code montre comment configurer une interface réseau avec des serveurs DNS personnalisés.
Incluez ces fichiers d’en-tête dans votre application :
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Spécifiez le nombre de serveurs DNS. Jusqu’à trois serveurs DNS peuvent être spécifiés. Le code suivant configure le tableau de trois adresses IP du serveur DNS à utiliser.
// A maximum of 3 DNS server addresses can be specified.
static const size_t numOfDnsServerAddressSpecified = 3;
static const char *dnsServerIpAddress[] = {
"yourDnsServer1", "yourDnsServer2", "yourDnsServer3"}; // Your DNS servers in x.x.x.x notation.
Spécifiez l’interface réseau à configurer.
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Convertissez les adresses réseau en entiers et appliquez la configuration. Cette configuration DNS remplace tous les serveurs DNS spécifiés par DHCP.
Networking_IpConfig ipConfig;
// Convert the addresses from the numbers-and-dots notation into integers.
struct in_addr dnsServers[numOfDnsServerAddressSpecified];
for (int i = 0; i < numOfDnsServerAddressSpecified; i++) {
if (inet_pton(AF_INET, dnsServerIpAddress[i], &dnsServers[i]) != 1) {
Log_Debug("ERROR: Invalid DNS server address or address family specified.\n");
return -1;
}
}
Networking_IpConfig_Init(&ipConfig);
int result =
Networking_IpConfig_EnableCustomDns(&ipConfig, dnsServers, numOfDnsServerAddressSpecified);
if (result != 0) {
Log_Debug("ERROR: Networking_IpConfig_EnableCustomDns: %d (%s)\n", errno, strerror(errno));
Networking_IpConfig_Destroy(&ipConfig);
return -1;
}
result = Networking_IpConfig_Apply(networkInterfaceToConfigure, &ipConfig);
Networking_IpConfig_Destroy(&ipConfig);
if (result != 0) {
Log_Debug("ERROR: Networking_IpConfig_Apply: %d (%s)\n", errno, strerror(errno));
return -1;
}
Serveur DHCP
À un appareil client externe connecté à Azure Sphere par le biais d’une interface Ethernet doivent être attribués une adresse IP et d’autres paramètres réseau pour qu’il puisse communiquer avec une application serveur sur l’appareil Azure Sphere. Toutefois, certains appareils externes ne prennent en charge aucun moyen de configurer ces paramètres. Azure Sphere prend en charge un serveur DHCP par le biais duquel une application peut fournir cette configuration. L’application doit activer la fonctionnalité DhcpService dans son manifeste.
L’application Azure Sphere appelle Networking_DhcpServerConfig_Init pour configurer le serveur afin de fournir à un appareil client une adresse IP, un masque de sous-réseau, une adresse de passerelle, une durée de bail et jusqu’à trois adresses de serveur NTP. Une seule adresse IP peut être configurée dans la version actuelle. Elle appelle ensuite Networking_DhcpServer_Start pour démarrer le serveur sur une interface réseau particulière. Une fois que le serveur DHCP démarre, l’appareil client peut envoyer des messages DHCP de diffusion pour découvrir et demander des adresses IP du serveur DHCP sur le sous-réseau spécifié.
Serveur SNTP
Le serveur SNTP permet aux appareils clients de synchroniser leur heure système avec celle de l’appareil Azure Sphere. Pour utiliser le serveur, l’application Azure Sphere doit activer la fonctionnalité SntpServic dans son manifeste.
Pour démarrer le serveur, l’application Azure Sphere appelle Networking_SntpServer_Start et spécifie l’interface réseau sur laquelle le serveur va s’exécuter. L’appareil client et l’appareil Azure Sphere doivent être dans le même sous-réseau local du réseau sur lequel le serveur s’exécute. L’appareil Azure Sphere doit être connecté à au moins un réseau public, pour pouvoir obtenir l’heure actuelle auprès d’un serveur NTP (Network Time Protocol) public. Le serveur SNTP ne répond pas aux requêtes tant qu’il n’a pas l’heure actuelle.
Remarque
Même si une application peut définir l’heure du système directement, cette pratique est déconseillée car l’heure ne persiste pas quand l’appareil n’est plus sous tension. Pour plus d'informations, consultez Gérer l’heure système et l’horloge en temps réel (RTC) sur Azure Sphere.
Ports d’écoute
Si l’application Azure Sphere écoute les connexions TCP ou UDP entrantes, le manifeste d’application doit spécifier les ports utilisés par l’application. Par exemple :
"Capabilities": {
"AllowedTcpServerPorts": [ 11000 ],
"AllowedUdpServerPorts": [ 1024, 50000 ]
}
Exemples
- L'exemple Détection de service DNS montre comment interroger et traiter les réponses d'un serveur DNS.
- L'exemple Services réseau privés montre comment connecter Azure Sphere à un réseau privé et comment utiliser plusieurs services réseau.