Korzystanie z usług sieciowych
Usługa Azure Sphere może uruchamiać statyczny adres IP, serwer DHCP (Dynamic Host Configuration Protocol) i prosty serwer protokołu SNTP dla interfejsu sieciowego. Serwer DHCP umożliwia aplikacjom Azure Sphere skonfigurowanie parametrów sieciowych dla urządzenia zewnętrznego w sieci. Urządzenie zewnętrzne może używać serwera SNTP do synchronizowania czasu z usługą Azure Sphere.
Konfiguracja sieci
Możesz skonfigurować sieć Ethernet i Wi-Fi interfejs sieciowy tak, aby działał jednocześnie na urządzeniu Azure Sphere. Interfejsy sieciowe Ethernet i Wi-Fi mogą być połączone z sieciami publicznymi (połączonymi z Internetem) lub prywatnymi. Co najmniej jeden interfejs musi być połączony z siecią publiczną. Jednocześnie można skonfigurować tylko jeden interfejs Ethernet.
Interfejsy sieci prywatnej i publicznej
Jeśli używasz zarówno interfejsów sieci publicznych, jak i prywatnych, takich jak prywatna sieć Ethernet z publiczną siecią Wi-Fi, urządzenie Azure Sphere nie będzie działać jako router. Nie będzie automatycznie przekazywać pakietów otrzymanych w sieci Ethernet do sieci Wi-Fi i na odwrót. Aplikacja musi zaimplementować wszystkie logiki, które wysyła i odbiera informacje w obu sieciach.
Dwa interfejsy sieci publicznej
Jeśli korzystasz z dwóch interfejsów sieciowych, dla których włączono dynamiczne adresy IP, system operacyjny próbuje użyć pierwszego interfejsu połączonego z siecią po wybraniu adresów serwera DNS w celu rozpoznawania nazw hostów. Jeśli interfejs odłączy się od sieci, adresy serwera DNS z innego połączonego interfejsu zostaną automatycznie użyte.
Statyczny adres IP
Statyczny adres IP można skonfigurować w interfejsie Sieci Ethernet lub Wi-Fi. Aby skonfigurować konfigurację statycznego adresu IP, aplikacja musi używać interfejsu API sieciowego applibs, a manifest aplikacji musi włączyć funkcję NetworkConfig .
Podczas konfigurowania statycznego adresu IP należy również ustawić niestandardowy system DNS , aby zapewnić, że system operacyjny Azure Sphere będzie nadal działać zgodnie z oczekiwaniami.
W przykładzie usług sieci prywatnej pokazano, jak połączyć usługę Azure Sphere z siecią prywatną i korzystać z kilku usług sieciowych.
Ten wstawka kodu pokazuje, jak skonfigurować interfejs sieciowy ze statycznym adresem IP.
W sekcji Możliwości pliku app_manifest.json umieść następujący wiersz w następujący sposób:
"Capabilities": {
"NetworkConfig": true
}
Uwzględnij następujące pliki nagłówków w aplikacji:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Ustaw adres IP, maskę podsieci i bramę dla konfiguracji adresów 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.
Określ interfejs sieci, który chcesz skonfigurować:
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Konwertuj adresy sieciowe na liczby całkowite i zastosuj je do określonego interfejsu sieciowego.
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;
}
Statyczny adres DNS
Jeśli skonfigurowano urządzenie ze statycznym adresem IP i wymagasz rozpoznawania nazw, aplikacja musi ustawić statyczny adres DNS. Użyj Networking_IpConfig_EnableCustomDns i ustaw co najmniej jeden prawidłowy system rozpoznawania nazw DNS. Jeśli ustawiono wiele programów do rozpoznawania nazw, wszystkie zostaną przesłane zapytania, a pierwsza prawidłowa odpowiedź DNS zadowoli zapytanie. Networking_IpConfig_EnableCustomDns może być również używany do zastępowania bieżącego programu do rozpoznawania nazw, jeśli jest on ustawiony za pośrednictwem protokołu DHCP.
Aby skonfigurować interfejs sieciowy z niestandardowymi serwerami DNS, manifest aplikacji musi włączyć funkcję NetworkConfig.
W sekcji Możliwości pliku app_manifest.json umieść następujący wiersz w następujący sposób:
"Capabilities": {
"NetworkConfig": true
}
Ten wycinek kodu pokazuje, jak skonfigurować interfejs sieciowy z niestandardowymi serwerami DNS.
Uwzględnij następujące pliki nagłówków w aplikacji:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Określ liczbę serwerów DNS. Można określić maksymalnie trzy serwery DNS. Poniższy kod konfiguruje tablicę trzech adresów IP serwera DNS do użycia.
// 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.
Określ interfejs sieci, który chcesz skonfigurować.
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Konwertuj adresy sieciowe na liczby całkowite i zastosuj konfigurację. Ta konfiguracja DNS zastępuje wszystkie serwery DNS określone przez 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;
}
Serwer DHCP
Zewnętrznemu urządzeniu klienckiemu podłączonemu do usługi Azure Sphere za pośrednictwem interfejsu Ethernet musi być przypisany adres IP i inne parametry sieciowe, aby można było komunikować się z aplikacją serwera na urządzeniu Azure Sphere. Jednak niektóre urządzenia zewnętrzne nie obsługują sposobu konfigurowania tych parametrów. Usługa Azure Sphere obsługuje serwer DHCP, za pośrednictwem którego aplikacja może zapewnić tę konfigurację. Aplikacja musi włączyć funkcję DhcpService w swoim manifeście aplikacji.
Aplikacja Azure Sphere wywołuje Networking_DhcpServerConfig_Init w celu skonfigurowania serwera w celu zapewnienia adresu IP, maski podsieci, adresu bramy, czasu trwania dzierżawy i maksymalnie trzech adresów serwera NTP na urządzeniu klienckim. W bieżącej wersji można skonfigurować tylko jeden adres IP. Następnie wywołuje Networking_DhcpServer_Start , aby uruchomić serwer w określonym interfejsie sieciowym. Po uruchomieniu serwera DHCP urządzenie klienckie może wysyłać rozgłaszane wiadomości DHCP w celu odnajdowania i żądania adresów IP z serwera DHCP w określonej podsieci.
Serwer SNTP
Serwer SNTP umożliwia urządzeniom klienckim synchronizowanie czasu systemowego z czasem używanym na urządzeniu Azure Sphere. Aby korzystać z serwera, aplikacja Azure Sphere musi włączyć funkcję SntpService w swoim manifeście aplikacji.
Aby uruchomić serwer, aplikacja Azure Sphere wywołuje Networking_SntpServer_Start i określa interfejs sieciowy, na którym będzie uruchamiany serwer. Urządzenie klienckie i urządzenie Azure Sphere muszą znajdować się w tej samej lokalnej podsieci sieci, w której działa serwer. Urządzenie Azure Sphere musi być połączone z co najmniej jedną siecią publiczną, aby można było uzyskiwać bieżący czas z serwera protokołu NTP (Public Network Time Protocol). Serwer SNTP nie odpowiada na zapytania, dopóki nie ma bieżącej godziny.
Uwaga
Chociaż aplikacja może bezpośrednio ustawić czas systemowy, nie jest to zalecane, ponieważ czas nie utrzymuje się, gdy urządzenie traci zasilanie. Zarządzaj czasem systemowym, a funkcja RTC w usłudze Azure Sphere zawiera więcej informacji.
Słuchanie portów
Jeśli aplikacja Azure Sphere nasłuchuje przychodzących połączeń TCP lub UDP, manifest aplikacji musi określić porty używane przez aplikację. Na przykład:
"Capabilities": {
"AllowedTcpServerPorts": [ 11000 ],
"AllowedUdpServerPorts": [ 1024, 50000 ]
}
Próbki
- W przykładzie odnajdowania usługi DNS pokazano, jak kwerendować i przetwarzać odpowiedzi z serwera DNS.
- W przykładzie usług sieci prywatnej pokazano, jak połączyć usługę Azure Sphere z siecią prywatną i korzystać z kilku usług sieciowych.