Usar serviços de rede
Importante
Esta é a documentação do Azure Sphere (Legado). O Azure Sphere (Legado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (Integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).
O Azure Sphere pode executar um endereço IP estático, um servidor DHCP (protocolo de configuração dinâmica de host) e um servidor SNTP (protocolo de tempo de rede) simples para uma interface de rede. O servidor DHCP permite que os aplicativos do Azure Sphere configurem parâmetros de rede para um dispositivo externo na rede. O dispositivo externo pode usar o servidor SNTP para sincronizar seu tempo com o Azure Sphere.
Configuração de rede
Você pode configurar uma interface de rede Ethernet e Wi-Fi para ser executada simultaneamente em um dispositivo Azure Sphere. As interfaces de rede Ethernet e Wi-Fi podem ser ligadas a redes públicas (ligadas à Internet) ou privadas. Pelo menos uma interface deve estar conectada a uma rede pública. Apenas uma interface Ethernet pode ser configurada de cada vez.
Interfaces de rede pública e privada
Se você usar interfaces de rede pública e privada, como Ethernet privada com Wi-Fi público, o dispositivo Azure Sphere não atuará como um roteador. Ele não passará automaticamente os pacotes recebidos na rede Ethernet para a rede Wi-Fi, ou vice-versa. Seu aplicativo deve implementar toda a lógica que envia e recebe informações em ambas as redes.
Duas interfaces de rede pública
Se você usar duas interfaces de rede com endereçamento IP dinâmico habilitado, o sistema operacional tentará usar a primeira interface conectada à rede quando seleciona endereços de servidor DNS para resolução de nomes de host. Se uma interface se desconectar da rede, os endereços do servidor DNS da outra interface conectada serão usados automaticamente.
Endereço IP estático
Você pode configurar um endereço IP estático em uma interface Ethernet ou Wi-Fi. Para configurar uma configuração de endereço IP estático, seu aplicativo deve usar a API de rede applibs e o manifesto do aplicativo deve habilitar o recurso NetworkConfig.
Ao configurar um endereço IP estático, o DNS personalizado também deve ser definido para garantir que o sistema operacional Azure Sphere continue a funcionar conforme o esperado.
O exemplo de Serviços de Rede Privada demonstra como conectar o Azure Sphere a uma rede privada e usar vários serviços de rede.
Este trecho de código demonstra como configurar uma interface de rede com um endereço IP estático.
Inclua a seguinte linha na seção Recursos do arquivo app_manifest.json da seguinte maneira:
"Capabilities": {
"NetworkConfig": true
}
Inclua estes arquivos de cabeçalho em seu aplicativo:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Defina o endereço IP, a máscara de sub-rede e o gateway para a configuração 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.
Especifique a interface de rede a ser configurada:
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Converta os endereços de rede em inteiros e aplique isso à interface de rede especificada.
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;
}
Endereço DNS estático
Se você configurou um dispositivo com um IP estático e requer resolução de nomes, seu aplicativo deve definir um endereço DNS estático. Use Networking_IpConfig_EnableCustomDns e defina um ou mais resolvedores DNS válidos. Se vários resolvedores forem definidos, todos eles serão consultados e a primeira resposta DNS válida satisfará a consulta. Networking_IpConfig_EnableCustomDns também pode ser usado para substituir o resolvedor atual se um estiver definido via DHCP.
Para configurar uma interface de rede com servidores DNS personalizados, o manifesto do aplicativo deve habilitar o recurso NetworkConfig.
Inclua a seguinte linha na seção Recursos do arquivo app_manifest.json da seguinte maneira:
"Capabilities": {
"NetworkConfig": true
}
Este trecho de código demonstra como configurar uma interface de rede com servidores DNS personalizados.
Inclua estes arquivos de cabeçalho em seu aplicativo:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Especifique o número de servidores DNS. Até três servidores DNS podem ser especificados. O código a seguir configura a matriz de três endereços IP do servidor DNS a serem usados.
// 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.
Especifique a interface de rede a ser configurada.
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Converta os endereços de rede em inteiros e aplique a configuração. Esta configuração DNS substitui quaisquer servidores DNS especificados pelo 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;
}
Servidor DHCP
Um dispositivo cliente externo conectado ao Azure Sphere por meio de uma interface Ethernet deve receber um endereço IP e outros parâmetros de rede para que possa se comunicar com um aplicativo de servidor no dispositivo Azure Sphere. No entanto, alguns dispositivos externos não suportam uma maneira de configurar esses parâmetros. O Azure Sphere dá suporte a um servidor DHCP por meio do qual um aplicativo pode fornecer essa configuração. O aplicativo deve habilitar o recurso DhcpService em seu manifesto do aplicativo.
O aplicativo Azure Sphere chama Networking_DhcpServerConfig_Init para configurar o servidor para fornecer um endereço IP, máscara de sub-rede, endereço de gateway, duração da concessão e até três endereços de servidor NTP para um dispositivo cliente. Apenas um endereço IP pode ser configurado na versão atual. Em seguida, ele chama Networking_DhcpServer_Start para iniciar o servidor em uma interface de rede específica. Depois que o servidor DHCP é iniciado, o dispositivo cliente pode enviar mensagens DHCP de difusão para descobrir e solicitar endereços IP do servidor DHCP na sub-rede especificada.
Servidor SNTP
O servidor SNTP permite que os dispositivos cliente sincronizem a hora do sistema com a do dispositivo Azure Sphere. Para usar o servidor, o aplicativo Azure Sphere deve habilitar o recurso SntpService em seu manifesto do aplicativo.
Para iniciar o servidor, o aplicativo Azure Sphere chama Networking_SntpServer_Start e especifica a interface de rede na qual o servidor será executado. O dispositivo cliente e o dispositivo Azure Sphere devem estar na mesma sub-rede local da rede na qual o servidor está sendo executado. O dispositivo Azure Sphere deve estar conectado a pelo menos uma rede pública, para que possa obter a hora atual de um servidor NTP (protocolo de tempo de rede pública). O servidor SNTP não responde a consultas até que tenha a hora atual.
Nota
Embora um aplicativo possa definir a hora do sistema diretamente, isso não é recomendado porque o tempo não persiste quando o dispositivo perde energia. Gerencie o tempo do sistema e o RTC no Azure Sphere tem mais informações.
Portas de escuta
Se o aplicativo Azure Sphere escutar conexões TCP ou UDP de entrada, o manifesto do aplicativo deverá especificar as portas que o aplicativo usa. Por exemplo:
"Capabilities": {
"AllowedTcpServerPorts": [ 11000 ],
"AllowedUdpServerPorts": [ 1024, 50000 ]
}
Exemplos
- O exemplo DNS Service Discovery demonstra como consultar e processar respostas de um servidor DNS.
- O exemplo de Serviços de Rede Privada demonstra como conectar o Azure Sphere a uma rede privada e usar vários serviços de rede.