Share via


Använda nätverkstjänster

Azure Sphere kan köra en statisk IP-adress, DHCP-server (Dynamic Host Configuration Protocol) och en enkel SNTP-server (Network Time Protocol) för ett nätverksgränssnitt. DHCP-servern gör det möjligt för Azure Sphere-program att konfigurera nätverksparametrar för en extern enhet i nätverket. Den externa enheten kan använda SNTP-servern för att synkronisera sin tid med Azure Sphere.

Nätverkskonfiguration

Du kan konfigurera ett Ethernet- och ett Wi-Fi nätverksgränssnitt så att det körs samtidigt på en Azure Sphere-enhet. Ethernet- och Wi-Fi nätverksgränssnitt kan anslutas till offentliga (internetanslutna) eller privata nätverk. Minst ett gränssnitt måste vara anslutet till ett offentligt nätverk. Endast ett Ethernet-gränssnitt kan konfigureras i taget.

Gränssnitt för privata och offentliga nätverk

Om du använder både offentliga och privata nätverksgränssnitt, till exempel privat Ethernet med offentligt Wi-Fi, fungerar inte Azure Sphere-enheten som en router. Paket som tas emot på Ethernet-nätverket överförs inte automatiskt till Wi-Fi-nätverket eller tvärtom. Programmet måste implementera all logik som skickar och tar emot information på båda nätverken.

Dubbla gränssnitt för offentligt nätverk

Om du använder två nätverksgränssnitt som har dynamisk IP-adress aktiverad försöker operativsystemet använda det första gränssnittet som anslöts till nätverket när DNS-serveradresserna väljs för värdnamnsmatchning. Om ett gränssnitt kopplas från nätverket används DNS-serveradresserna från det andra anslutna gränssnittet automatiskt.

Statisk IP-adress

Du kan konfigurera en statisk IP-adress i ett Ethernet- eller Wi-Fi-gränssnitt. Om du vill konfigurera en statisk IP-adresskonfiguration måste programmet använda applibs-nätverks-API:et och programmanifestet måste aktivera networkconfig-funktionen .

När du konfigurerar en statisk IP-adress måste anpassad DNS också anges för att säkerställa att Azure Sphere-operativsystemet fortsätter att fungera som förväntat.

Exemplet med privata nätverkstjänster visar hur du ansluter Azure Sphere till ett privat nätverk och använder flera nätverkstjänster.

Det här kodavsnittet visar hur du konfigurerar ett nätverksgränssnitt med en statisk IP-adress.

Ta med följande rad i avsnittet Funktioner i filen app_manifest.json enligt följande:

"Capabilities": {
  "NetworkConfig": true
}

Ta med dessa huvudfiler i programmet:

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

Ange IP-adress, undernätsmask och gateway för IP-konfigurationen.

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.

Ange nätverksgränssnittet som ska konfigureras:

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

Konvertera nätverksadresserna till heltal och tillämpa detta på det angivna nätverksgränssnittet.

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

Statisk DNS-adress

Om du har konfigurerat en enhet med en statisk IP och kräver namnmatchning måste programmet ange en statisk DNS-adress. Använd Networking_IpConfig_EnableCustomDns och ange en eller flera giltiga DNS-matchare. Om flera lösningsspelare har angetts kommer alla frågor att efterfrågas och det första giltiga DNS-svaret uppfyller frågan. Networking_IpConfig_EnableCustomDns kan också användas för att åsidosätta den aktuella resolvern om en anges via DHCP.

Om du vill konfigurera ett nätverksgränssnitt med anpassade DNS-servrar måste programmanifestet aktivera funktionen NetworkConfig.

Ta med följande rad i avsnittet Funktioner i filen app_manifest.json enligt följande:

"Capabilities": {
  "NetworkConfig": true
}

Det här kodavsnittet visar hur du konfigurerar ett nätverksgränssnitt med anpassade DNS-servrar.

Ta med dessa huvudfiler i programmet:

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

Ange antalet DNS-servrar. Upp till tre DNS-servrar kan anges. Följande kod konfigurerar matrisen med tre DNS-server-IP-adresser som ska användas.

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

Ange nätverksgränssnittet som ska konfigureras.

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

Konvertera nätverksadresserna till heltal och tillämpa konfigurationen. Den här DNS-konfigurationen åsidosätter alla DNS-servrar som anges av 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;
}

DHCP-server

En extern klientenhet som är ansluten till Azure Sphere via ett Ethernet-gränssnitt måste tilldelas en IP-adress och andra nätverksparametrar så att den kan kommunicera med ett serverprogram på Azure Sphere-enheten. Men vissa externa enheter stöder inte ett sätt att konfigurera dessa parametrar. Azure Sphere har stöd för en DHCP-server genom vilken ett program kan tillhandahålla den här konfigurationen. Programmet måste aktivera DhcpService-funktionen i programmanifestet.

Azure Sphere-programmet anropar Networking_DhcpServerConfig_Init för att konfigurera servern för att tillhandahålla en IP-adress, undernätsmask, gatewayadress, lånetid och upp till tre NTP-serveradresser till en klientenhet. Endast en IP-adress kan konfigureras i den aktuella versionen. Den anropar sedan Networking_DhcpServer_Start för att starta servern på ett visst nätverksgränssnitt. När DHCP-servern startar kan klientenheten skicka ut sända DHCP-meddelanden för att identifiera och begära IP-adresser från DHCP-servern på det angivna undernätet.

SNTP-server

SNTP-servern gör det möjligt för klientenheter att synkronisera sin systemtid med Azure Sphere-enhetens. Om du vill använda servern måste Azure Sphere-programmet aktivera SntpService-funktionen i programmanifestet.

För att starta servern anropar Azure Sphere-programmet Networking_SntpServer_Start och anger nätverksgränssnittet som servern ska köras på. Klientenheten och Azure Sphere-enheten måste finnas i samma lokala undernät i nätverket där servern körs. Azure Sphere-enheten måste vara ansluten till minst ett offentligt nätverk så att den kan få aktuell tid från en NTP-server (Public Network Time Protocol). SNTP-servern svarar inte på frågor förrän den har den aktuella tiden.

Observera

Även om ett program kan ställa in systemtiden direkt rekommenderas inte detta eftersom tiden inte kvarstår när enheten förlorar ström. Hantera systemtid och RTC på Azure Sphere innehåller mer information.

Lyssningsportar

Om Azure Sphere-programmet lyssnar efter inkommande TCP- eller UDP-anslutningar måste programmanifestet ange portarna som programmet använder. Till exempel:

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

Prover