TREL – Gleis

Dieses Modul enthält die Plattformabstraktion für Thread Radio Encapsulation Link (TREL) mit DNS-SD und UDP/IPv6.

Zusammenfassung

Typedefs

otPlatTrelPeerInfo typedef
Stellt eine TREL-Peer-Info dar, die mithilfe des DNS-SD-Browsers beim Dienstnamen „_trel._udp“ erkannt wurde.

Funktionen

otPlatTrelDisable(otInstance *aInstance)
void
Deaktiviert die TREL-Plattformebene.
otPlatTrelEnable(otInstance *aInstance, uint16_t *aUdpPort)
void
Initialisiert und aktiviert die TREL-Plattformebene.
otPlatTrelHandleDiscoveredPeerInfo(otInstance *aInstance, const otPlatTrelPeerInfo *aInfo)
void
Dies ist eine Callback-Funktion von der Plattformebene, mit der erkannte TREL-Peer-Informationen gemeldet werden.
otPlatTrelHandleReceived(otInstance *aInstance, uint8_t *aBuffer, uint16_t aLength)
void
Ist ein Callback von der Plattform, um über ein empfangenes TREL UDP-Paket zu informieren.
otPlatTrelRegisterService(otInstance *aInstance, uint16_t aPort, const uint8_t *aTxtData, uint8_t aTxtLength)
void
Registriert einen neuen Dienst, der mit DNS-SD [RFC6763] beworben werden soll.
otPlatTrelSend(otInstance *aInstance, const uint8_t *aUdpPayload, uint16_t aUdpPayloadLen, const otSockAddr *aDestSockAddr)
void
Fordert an, dass ein TREL-UDP-Paket an ein bestimmtes Ziel gesendet werden soll.

Strukturen

otPlatTrelPeerInfo

Stellt eine TREL-Peer-Info dar, die mithilfe des DNS-SD-Browsers beim Dienstnamen „_trel._udp“ erkannt wurde.

Typedefs

otPlatTrelPeerInfo

struct otPlatTrelPeerInfo otPlatTrelPeerInfo

Stellt eine TREL-Peer-Info dar, die mithilfe des DNS-SD-Browsers beim Dienstnamen „_trel._udp“ erkannt wurde.

Funktionen

otPlatTrelDisable

void otPlatTrelDisable(
  otInstance *aInstance
)

Deaktiviert die TREL-Plattformebene.

Nach diesem Aufruf MUSS die Plattformebene die DNS-SD-Suche für den Dienstnamen „_trel._udp“ beenden, das Bewerben des TREL DNS-SD-Dienstes (von otPlatTrelRegisterService()) beenden und den UDP-Socket schließen, der zum Empfangen von TREL-Nachrichten verwendet wird.

[in] aInstance Die OpenThread-Instanz.

otPlatTrelEnable

void otPlatTrelEnable(
  otInstance *aInstance,
  uint16_t *aUdpPort
)

Initialisiert und aktiviert die TREL-Plattformebene.

Bei diesem Aufruf MUSS auf der Plattformebene Folgendes ausgeführt werden:

1) Die TREL-Plattformebene MUSS einen UDP-Socket öffnen, um TREL-Nachrichten von Peers zu überwachen und zu empfangen. Der Socket ist an eine sitzungsspezifische Portnummer gebunden, die von der Plattformebene ausgewählt wurde. Die Portnummer MUSS in aUdpPort zurückgegeben werden. Der Socket ist außerdem an Netzwerkschnittstellen gebunden, auf denen TREL unterstützt werden soll. Der Socket und der ausgewählte Port sollten gültig bleiben, während TREL aktiviert ist.

2) Plattformebene MÜSSEN einen laufenden DNS-SD-Suchlauf für den Dienstnamen „_trel._udp“ innerhalb der lokalen Browserdomain initiieren, um andere Geräte zu finden, die TREL unterstützen. Beim fortlaufenden Suchen werden zwei verschiedene Arten von Ereignissen erzeugt: „add“-Ereignisse und „remove“-Ereignisse. Wenn der Suchvorgang gestartet wird, sollte für jeden derzeit im Netzwerk vorhandenen TREL-Peer ein Ereignis vom Typ „add“ erzeugt werden. Wenn ein TREL-Peer offline geht, sollte ein "remove"-Ereignis ausgelöst werden. „remove“-Ereignisse werden jedoch nicht garantiert. Wenn eine TREL-Dienstinstanz erkannt wird, sollte eine neue laufende DNS-SD-Abfrage nach einem AAAA-Eintrag unter dem Hostnamen gestartet werden, der im SRV-Eintrag der erkannten Instanz angegeben ist. Wenn für einen Peer mehrere Host-IPv6-Adressen erkannt werden, MUSS eine mit dem höchsten Bereich unter allen Adressen gemeldet werden. Wenn mehrere Adressen im selben Bereich vorhanden sind, muss eine davon nach dem Zufallsprinzip ausgewählt werden.

Die TREL-Plattform MÜSSEN die erkannten Peer-Informationen mit dem otPlatTrelHandleDiscoveredPeerInfo()-Callback zurückgeben. Dieser Callback MUSS aufgerufen werden, wenn ein neuer Peer erkannt wird, wenn sich an einem vorhandenen Eintrag eine Änderung ergibt (z.B. ein neuer TXT-Eintrag, eine neue Portnummer oder eine neue IPv6-Adresse) oder wenn der Peer entfernt wird.

Details
Parameter
[in] aInstance
Die OpenThread-Instanz.
[out] aUdpPort
Ein Zeiger, um die ausgewählte Portnummer nach Plattformebene zurückzugeben.

otPlatTrelHandleDiscoveredPeerInfo

void otPlatTrelHandleDiscoveredPeerInfo(
  otInstance *aInstance,
  const otPlatTrelPeerInfo *aInfo
)

Dies ist eine Callback-Funktion von der Plattformebene, mit der erkannte TREL-Peer-Informationen gemeldet werden.

Details
Parameter
[in] aInstance
Die OpenThread-Instanz.
[in] aInfo
Ein Zeiger auf die TREL-Peer-Informationen.

otPlatTrelHandleReceived

void otPlatTrelHandleReceived(
  otInstance *aInstance,
  uint8_t *aBuffer,
  uint16_t aLength
)

Ist ein Callback von der Plattform, um über ein empfangenes TREL UDP-Paket zu informieren.

Details
Parameter
[in] aInstance
Die OpenThread-Instanzstruktur.
[in] aBuffer
Ein Zwischenspeicher, der die empfangene UDP-Nutzlast enthält.
[in] aLength
Länge der UDP-Nutzlast (Anzahl der Byte).

otPlatTrelRegisterService

void otPlatTrelRegisterService(
  otInstance *aInstance,
  uint16_t aPort,
  const uint8_t *aTxtData,
  uint8_t aTxtLength
)

Registriert einen neuen Dienst, der mit DNS-SD [RFC6763] beworben werden soll.

Der Dienstname lautet „_trel._udp“. Für die Plattform sollte ein eigener Hostname verwendet werden, der in Kombination mit dem Dienstnamen und dem lokalen DNS-SD-Domainnamen den vollständigen Dienstinstanznamen ergibt, zum Beispiel "example-host._trel._udp.local.".

Die Domain, unter der der Name der Serviceinstanz angezeigt wird, ist für mDNS „lokal“. Im Fall eines lokalen DNS-SD-Dienstes ohne mDNS ist die Domain die Domain, die für die Dienstregistrierung verwendet wird.

Durch einen nachfolgenden Aufruf dieser Funktion wird der vorherige Dienst aktualisiert. Sie wird verwendet, um die Daten des TXT-Eintrags und/oder die Portnummer zu aktualisieren.

Der Puffer aTxtData wird nach der Rückgabe von dieser Funktion nicht beibehalten. Die Plattformebene DARF NICHT den Zeiger beibehalten und stattdessen den Inhalt bei Bedarf kopieren.

Details
Parameter
[in] aInstance
Die OpenThread-Instanz.
[in] aPort
Die Portnummer, die in den SRV-Eintrag des beworbenen Dienstes aufgenommen werden soll.
[in] aTxtData
Ein Verweis auf die (codierten) TXT-Eintragsdaten, die in den beworbenen Dienst aufgenommen werden sollen.
[in] aTxtLength
Die Länge von aTxtData (Anzahl der Byte).

otPlatTrelSend

void otPlatTrelSend(
  otInstance *aInstance,
  const uint8_t *aUdpPayload,
  uint16_t aUdpPayloadLen,
  const otSockAddr *aDestSockAddr
)

Fordert an, dass ein TREL-UDP-Paket an ein bestimmtes Ziel gesendet werden soll.

Details
Parameter
[in] aInstance
Die OpenThread-Instanzstruktur.
[in] aUdpPayload
Ein Zeiger auf UDP-Nutzlast.
[in] aUdpPayloadLen
Die Länge der Nutzlast (Anzahl der Byte).
[in] aDestSockAddr
Die Socket-Zieladresse

Ressourcen

OpenThread API-Referenzthemen stammen aus dem Quellcode, der auf GitHub verfügbar ist. Weitere Informationen finden Sie unter Ressourcen. Dort können Sie auch einen Beitrag zu unserer Dokumentation leisten.