Share via


Netwerkservices gebruiken

Azure Sphere kan een statisch IP-adres, DHCP-server (Dynamic Host Configuration Protocol) en een SNTP-server (Simple Network Time Protocol) uitvoeren voor een netwerkinterface. Met de DHCP-server kunnen Azure Sphere-toepassingen netwerkparameters configureren voor een extern apparaat in het netwerk. Het externe apparaat kan de SNTP-server gebruiken om de tijd te synchroniseren met Azure Sphere.

Netwerkconfiguratie

U kunt een Ethernet- en een Wi-Fi-netwerkinterface configureren voor gelijktijdige uitvoering op een Azure Sphere-apparaat. Ethernet- en Wi-Fi-netwerkinterfaces kunnen worden verbonden met openbare (met internet verbonden) of particuliere netwerken. Ten minste één interface moet zijn verbonden met een openbaar netwerk. Er kan slechts één Ethernet-interface tegelijk worden geconfigureerd.

Privé- en openbare netwerkinterfaces

Als u zowel openbare als particuliere netwerkinterfaces gebruikt, zoals privé-Ethernet met openbare Wi-Fi, fungeert het Azure Sphere-apparaat niet als router. Pakketten die op het Ethernet-netwerk zijn ontvangen, worden niet automatisch doorgegeven aan het Wi-Fi netwerk, of omgekeerd. Uw toepassing moet alle logica implementeren waarmee informatie op beide netwerken wordt verzonden en ontvangen.

Dubbele openbare netwerkinterfaces

Als u twee netwerkinterfaces gebruikt waarvoor dynamische IP-adressering is ingeschakeld, probeert het besturingssysteem de eerste interface te gebruiken die is verbonden met het netwerk wanneer dns-serveradressen worden geselecteerd voor hostnaamomzetting. Als een interface de verbinding met het netwerk verbreekt, worden de DNS-serveradressen van de andere verbonden interface automatisch gebruikt.

Statisch IP-adres

U kunt een statisch IP-adres configureren op een Ethernet- of Wi-Fi-interface. Als u een configuratie van een statisch IP-adres wilt instellen, moet uw toepassing gebruikmaken van de applibs-netwerk-API en moet het toepassingsmanifest de mogelijkheid NetworkConfig inschakelen.

Bij het configureren van een statisch IP-adres moet ook aangepaste DNS worden ingesteld om ervoor te zorgen dat het Azure Sphere-besturingssysteem blijft functioneren zoals verwacht.

In het voorbeeld van Private Network Services ziet u hoe u Azure Sphere verbindt met een privénetwerk en verschillende netwerkservices gebruikt.

Dit codefragment laat zien hoe u een netwerkinterface configureert met een statisch IP-adres.

Neem de volgende regel op in de sectie Mogelijkheden van het bestand app_manifest.json als volgt:

"Capabilities": {
  "NetworkConfig": true
}

Neem deze headerbestanden op in uw toepassing:

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

Stel het IP-adres, het subnetmasker en de gateway in voor de IP-configuratie.

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.

Geef de netwerkinterface op die moet worden geconfigureerd:

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

Converteer de netwerkadressen naar gehele getallen en pas dit toe op de opgegeven netwerkinterface.

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

Statisch DNS-adres

Als u een apparaat met een statisch IP-adres hebt geconfigureerd en naamomzetting vereist, moet uw toepassing een statisch DNS-adres instellen. Gebruik Networking_IpConfig_EnableCustomDns en stel een of meer geldige DNS-resolvers in. Als er meerdere resolvers zijn ingesteld, worden ze allemaal opgevraagd en voldoet het eerste geldige DNS-antwoord aan de query. Networking_IpConfig_EnableCustomDns kan ook worden gebruikt om de huidige resolver te overschrijven als er een is ingesteld via DHCP.

Als u een netwerkinterface met aangepaste DNS-servers wilt configureren, moet het toepassingsmanifest de mogelijkheid NetworkConfig inschakelen.

Neem de volgende regel op in de sectie Mogelijkheden van het bestand app_manifest.json als volgt:

"Capabilities": {
  "NetworkConfig": true
}

Dit codefragment laat zien hoe u een netwerkinterface configureert met aangepaste DNS-servers.

Neem deze headerbestanden op in uw toepassing:

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

Geef het aantal DNS-servers op. Er kunnen maximaal drie DNS-servers worden opgegeven. Met de volgende code stelt u de matrix van drie IP-adressen van de DNS-server in die moeten worden gebruikt.

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

Geef de netwerkinterface op die moet worden geconfigureerd.

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

Converteer de netwerkadressen naar gehele getallen en pas de configuratie toe. Deze DNS-configuratie overschrijft alle DNS-servers die zijn opgegeven door 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

Aan een extern clientapparaat dat via een Ethernet-interface is verbonden met Azure Sphere, moet een IP-adres en andere netwerkparameters worden toegewezen, zodat het kan communiceren met een servertoepassing op het Azure Sphere-apparaat. Sommige externe apparaten ondersteunen echter geen manier om deze parameters te configureren. Azure Sphere ondersteunt een DHCP-server waarmee een toepassing deze configuratie kan leveren. De toepassing moet de DhcpService-mogelijkheid inschakelen in het toepassingsmanifest.

De Azure Sphere-toepassing roept Networking_DhcpServerConfig_Init aan om de server te configureren voor het opgeven van een IP-adres, subnetmasker, gatewayadres, leaseduur en maximaal drie NTP-serveradressen voor een clientapparaat. In de huidige release kan slechts één IP-adres worden geconfigureerd. Vervolgens wordt Networking_DhcpServer_Start aangeroepen om de server op een bepaalde netwerkinterface te starten. Nadat de DHCP-server is gestart, kan het clientapparaat uitgezonden DHCP-berichten verzenden om IP-adressen te detecteren en op te vragen van de DHCP-server in het opgegeven subnet.

SNTP-server

Met de SNTP-server kunnen clientapparaten hun systeemtijd synchroniseren met die van het Azure Sphere-apparaat. Als u de server wilt gebruiken, moet de Azure Sphere-toepassing de mogelijkheid SntpService inschakelen in het toepassingsmanifest.

Om de server te starten, roept de Azure Sphere-toepassing Networking_SntpServer_Start aan en geeft de netwerkinterface op waarop de server wordt uitgevoerd. Het clientapparaat en het Azure Sphere-apparaat moeten zich in hetzelfde lokale subnet bevinden van het netwerk waarop de server wordt uitgevoerd. Het Azure Sphere-apparaat moet zijn verbonden met ten minste één openbaar netwerk, zodat het de huidige tijd van een NTP-server (Public Network Time Protocol) kan ophalen. De SNTP-server reageert pas op query's als deze de huidige tijd heeft.

Opmerking

Hoewel een toepassing de systeemtijd rechtstreeks kan instellen, wordt dit niet aanbevolen omdat de tijd niet aanhoudt wanneer het apparaat stroom verliest. Systeemtijd beheren en de RTC op Azure Sphere heeft meer informatie.

Luisterpoorten

Als de Azure Sphere-toepassing luistert naar binnenkomende TCP- of UDP-verbindingen, moet het toepassingsmanifest de poorten opgeven die door de toepassing worden gebruikt. Bijvoorbeeld:

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

Monsters