Usar serviços de rede
Importante
Esta é a documentação do Azure Sphere (herdado). O Azure Sphere (herdado) 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, o servidor DHCP (protocolo de configuração dinâmica de host) e um servidor SNTP (protocolo de tempo para redes simples) para ser usado com a Ethernet privada. 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 horário com o Azure Sphere.
Configuração de rede
Você pode configurar uma Ethernet e um adaptador de rede Wi-Fi para serem executados simultaneamente em um dispositivo do Azure Sphere. As interfaces de rede Ethernet e Wi-Fi podem ser conectadas a redes públicas (conectadas à Internet) ou privadas. Pelo menos uma interface deve estar conectada a uma rede pública. Apenas uma interface Ethernet pode ser configurada por vez.
Interfaces de rede pública e privada
Se você usar ambas as interfaces de rede pública e privada, como Ethernet privada com Wi-Fi público, o dispositivo Azure Sphere não vai atuar como um roteador. Ele não passará automaticamente pacotes recebidos pela rede Ethernet privada 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.
Interfaces de rede pública dupla
Se você usar duas interfaces de rede que têm o endereçamento IP dinâmico habilitado, o sistema operacional tenta usar a primeira interface conectada à rede quando ele seleciona os endereços do servidor DNS para resolução de nome de host. Se uma interface se desconecta da rede, os endereços de servidor DNS da outra interface conectada sã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 definir a configuração de endereço IP estático, seu aplicativo deverá usar a API de rede de applibs, e o manifesto do aplicativo deverá habilitar o recursoNetworkConfig.
Ao configurar um endereço IP estático, o DNS personalizado também deve ser definido para garantir que o sistema operacional do Azure Sphere continue funcionando conforme o esperado.
O exemplo de Serviços de rede privada demonstra como conectar o Azure Sphere a uma rede privada e usa vários serviços de rede.
Este snippet 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 de 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 números inteiros e aplique-os à 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 de DNS válidos. Se vários resolvedores forem definidos, todos eles serão consultados e a primeira resposta DNS válida atenderá à consulta. Networking_IpConfig_EnableCustomDns também pode ser usado para substituir o resolvedor atual se um for 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 snippet 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 números inteiros e aplique a configuração. Essa configuração de DNS substitui todos os 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 que está conectado ao Azure Sphere por meio de uma interface de Ethernet deve ter um endereço IP e outros parâmetros de rede para que possa se comunicar com um aplicativo de servidor no dispositivo do Azure Sphere. No entanto, alguns dispositivos externos não podem configurar esses parâmetros. O Azure Sphere oferece suporte a um servidor DHCP por meio do qual um aplicativo pode fornecer essa configuração. O aplicativo deve habilitar o recurso DhcpService no seu manifesto do aplicativo.
O aplicativo do Azure Sphere chama Networking_DhcpServerConfig_Init para configurar o servidor para fornecer um endereço IP, máscara de sub-rede, endereço do gateway, duração da concessão e até três endereços do servidor NTP para um dispositivo cliente. Somente 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 de difusão de DHCP para descobrir e solicitar os endereços IP do servidor DHCP na sub-rede especificada.
Servidor SNTP
O servidor SNTP permite que os dispositivos cliente sincronizem o horário de seus sistemas com o de um dispositivo do Azure Sphere. Para usar o servidor, o aplicativo do Azure Sphere deve habilitar a funcionalidade SntpService no seu manifesto do aplicativo.
Para iniciar o servidor, o aplicativo do Azure Sphere chama Networking_SntpServer_Start e especifica a interface de rede na qual o servidor será executado. Os dispositivos cliente e do Azure Sphere devem estar na mesma sub-rede local da rede na qual o servidor está em execução. O dispositivo do Azure Sphere deve estar conectado a pelo menos uma rede pública, de forma que ela possa obter o horário atual de um servidor NTP (protocolo NTP) público. O servidor SNTP não responde a consultas até que tenha o horário atual.
Observação
Embora um aplicativo possa definir o horário do sistema diretamente, isso não é recomendado porque ele não é armazenado quando o dispositivo fica sem energia. Gerenciar a hora do sistema e o RTC no Azure Sphere tem mais informações.
Portas de escuta
Se o aplicativo Azure Sphere ficar atento às conexões TCP ou UDP de entrada, o manifesto do aplicativo deverá especificar as portas usadas pelo aplicativo. Por exemplo:
"Capabilities": {
"AllowedTcpServerPorts": [ 11000 ],
"AllowedUdpServerPorts": [ 1024, 50000 ]
}
Amostras
- O exemplo descoberta de serviço DNS 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 usa vários serviços de rede.