Použití síťových služeb

Azure Sphere může spustit statickou IP adresu, server DHCP (Dynamic Host Configuration Protocol) a server SNTP (Simple Network Time Protocol) pro síťové rozhraní. Server DHCP umožňuje aplikacím Azure Sphere konfigurovat síťové parametry pro externí zařízení v síti. Externí zařízení může pomocí serveru SNTP synchronizovat svůj čas s Azure Sphere.

Konfigurace sítě

Můžete nakonfigurovat ethernetové a Wi-Fi síťové rozhraní tak, aby běžely současně na zařízení Azure Sphere. Ethernet a Wi-Fi síťová rozhraní mohou být připojena k veřejným (připojeným k internetu) nebo k privátním sítím. Alespoň jedno rozhraní musí být připojené k veřejné síti. Najednou je možné nakonfigurovat pouze jedno ethernetové rozhraní.

Privátní a veřejná síťová rozhraní

Pokud používáte veřejné i privátní síťové rozhraní, jako je privátní ethernet s veřejným Wi-Fi, zařízení Azure Sphere nebude fungovat jako směrovač. Nepředá automaticky pakety přijaté v síti Ethernet do Wi-Fi sítě nebo naopak. Aplikace musí implementovat veškerou logiku, která odesílá a přijímá informace v obou sítích.

Duální veřejná síťová rozhraní

Pokud používáte dvě síťová rozhraní s povoleným dynamickým přidělováním IP adres, pokusí se operační systém při výběru adres serveru DNS pro překlad názvů hostitelů použít první rozhraní, které se připojilo k síti. Pokud se rozhraní odpojí od sítě, automaticky se použijí adresy serveru DNS z druhého připojeného rozhraní.

Statická IP adresa

Statickou IP adresu můžete nakonfigurovat na ethernetovém nebo Wi-Fi rozhraní. Pokud chcete nastavit konfiguraci statické IP adresy, vaše aplikace musí používat síťové rozhraní API applibs a manifest aplikace musí povolit funkci NetworkConfig .

Při konfiguraci statické IP adresy je také nutné nastavit vlastní DNS , aby se zajistilo, že operační systém Azure Sphere bude dál fungovat podle očekávání.

Ukázka služby Private Network Services ukazuje, jak připojit Azure Sphere k privátní síti a používat několik síťových služeb.

Tento fragment kódu ukazuje, jak nakonfigurovat síťové rozhraní se statickou IP adresou.

Do oddílu Capabilities souboru app_manifest.json zahrňte následující řádek:

"Capabilities": {
  "NetworkConfig": true
}

Do aplikace zahrňte tyto soubory hlaviček:

#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>

Nastavte IP adresu, masku podsítě a bránu pro konfiguraci IP adresy.

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.

Zadejte síťové rozhraní, které chcete nakonfigurovat:

static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.

Převeďte síťové adresy na celá čísla a použijte je u zadaného síťového rozhraní.

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;
}

Statická adresa DNS

Pokud jste nakonfigurovali zařízení se statickou IP adresou a vyžaduje překlad IP adres, musí aplikace nastavit statickou adresu DNS. Použijte Networking_IpConfig_EnableCustomDns a nastavte jeden nebo více platných překladačů DNS. Pokud je nastaveno více překladačů, budou všechny dotazovány a první platná odpověď DNS bude dotaz vyhovovat. Networking_IpConfig_EnableCustomDns lze také použít k přepsání aktuálního překladače, pokud je nastaven prostřednictvím protokolu DHCP.

Pokud chcete nakonfigurovat síťové rozhraní s vlastními servery DNS, musí manifest aplikace povolit funkci NetworkConfig.

Do oddílu Capabilities souboru app_manifest.json zahrňte následující řádek:

"Capabilities": {
  "NetworkConfig": true
}

Tento fragment kódu ukazuje, jak nakonfigurovat síťové rozhraní s vlastními servery DNS.

Do aplikace zahrňte tyto soubory hlaviček:

#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>

Zadejte počet serverů DNS. Je možné zadat až tři servery DNS. Následující kód nastaví pole tří IP adres serveru DNS, které se mají použít.

// 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.

Zadejte síťové rozhraní, které chcete konfigurovat.

static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.

Převeďte síťové adresy na celá čísla a použijte konfiguraci. Tato konfigurace DNS přepíše všechny servery DNS určené protokolem 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;
}

Server DHCP

Externímu klientskému zařízení připojenému k Azure Sphere přes ethernetové rozhraní musí být přiřazena IP adresa a další parametry sítě, aby mohlo komunikovat se serverovou aplikací na zařízení Azure Sphere. Některá externí zařízení ale nepodporují způsob konfigurace těchto parametrů. Azure Sphere podporuje server DHCP, přes který může aplikace tuto konfiguraci poskytovat. Aplikace musí v manifestu aplikace povolit funkci DhcpService.

Aplikace Azure Sphere volá Networking_DhcpServerConfig_Init a nakonfiguruje server tak, aby klientskému zařízení poskytoval IP adresu, masku podsítě, adresu brány, dobu zapůjčení a až tři adresy serveru NTP. V aktuální verzi je možné nakonfigurovat pouze jednu IP adresu. Potom zavolá Networking_DhcpServer_Start , aby spustil server na konkrétním síťovém rozhraní. Po spuštění serveru DHCP může klientské zařízení odesílat zprávy DHCP všesměrového vysílání, aby zjistilo a požadovalo IP adresy ze serveru DHCP v zadané podsíti.

Server SNTP

Server SNTP umožňuje klientským zařízením synchronizovat systémový čas se systémovým časem zařízení Azure Sphere. Aby mohla aplikace Azure Sphere používat server, musí v manifestu aplikace povolit funkci SntpService.

Aby se server spustil, volá aplikace Azure Sphere Networking_SntpServer_Start a určuje síťové rozhraní, na kterém bude server spuštěn. Klientské zařízení a zařízení Azure Sphere musí být ve stejné místní podsíti sítě, ve které je server spuštěný. Zařízení Azure Sphere musí být připojené alespoň k jedné veřejné síti, aby mohlo získat aktuální čas ze serveru NTP (Public Network Time Protocol). Server SNTP nereaguje na dotazy, dokud nemá aktuální čas.

Poznámka

I když může aplikace nastavit systémový čas přímo, nedoporučuje se to, protože čas nezachovává, když zařízení ztratí napájení. Správa systémového času a RTC v Azure Sphere obsahuje další informace.

Porty pro naslouchání

Pokud aplikace Azure Sphere naslouchá příchozím připojením TCP nebo UDP, musí manifest aplikace zadat porty, které aplikace používá. Příklad:

"Capabilities": {
  "AllowedTcpServerPorts": [ 11000 ],
  "AllowedUdpServerPorts": [ 1024, 50000 ]
} 

Vzorky