TREL - 平台

此模块包含使用 DNS-SD 和 UDP/IPv6 的线程无线装置封装链接 (TREL) 的平台抽象。

摘要

类型定义符

otPlatTrelPeerInfo typedef
表示使用 DNS-SD 浏览针对服务名称“_trel._udp”发现的 TREL 对等方信息。

函数

otPlatTrelDisable(otInstance *aInstance)
void
停用 TREL 平台层。
otPlatTrelEnable(otInstance *aInstance, uint16_t *aUdpPort)
void
初始化并启用 TREL 平台层。
otPlatTrelHandleDiscoveredPeerInfo(otInstance *aInstance, const otPlatTrelPeerInfo *aInfo)
void
这是来自平台层的回调函数,用于报告发现的 TREL 对等方信息。
otPlatTrelHandleReceived(otInstance *aInstance, uint8_t *aBuffer, uint16_t aLength)
void
是平台发出的回调,用于通知已收到 TREL UDP 数据包。
otPlatTrelRegisterService(otInstance *aInstance, uint16_t aPort, const uint8_t *aTxtData, uint8_t aTxtLength)
void
注册要使用 DNS-SD [RFC6763] 通告的新服务。
otPlatTrelSend(otInstance *aInstance, const uint8_t *aUdpPayload, uint16_t aUdpPayloadLen, const otSockAddr *aDestSockAddr)
void
请求发送到指定目标的 TREL UDP 数据包。

结构体

otPlatTrelPeerInfo

表示使用 DNS-SD 浏览针对服务名称“_trel._udp”发现的 TREL 对等方信息。

类型定义符

otPlatTrelPeerInfo

struct otPlatTrelPeerInfo otPlatTrelPeerInfo

表示使用 DNS-SD 浏览针对服务名称“_trel._udp”发现的 TREL 对等方信息。

函数

otPlatTrelDisable

void otPlatTrelDisable(
  otInstance *aInstance
)

停用 TREL 平台层。

此调用之后,平台层必须停止服务名称“_trel._udp”上的 DNS-SD 浏览,停止通告 TREL DNS-SD 服务(来自 otPlatTrelRegisterService()),并必须关闭用于接收 TREL 消息的 UDP 套接字。

[输入] aInstance:OpenThread 实例。

otPlatTrelEnable

void otPlatTrelEnable(
  otInstance *aInstance,
  uint16_t *aUdpPort
)

初始化并启用 TREL 平台层。

进行此调用后,平台层必须执行以下操作:

1) TREL 平台层必须打开 UDP 套接字来监听和接收来自对等方的 TREL 消息。套接字绑定到平台层选择的临时端口号。必须在 aUdpPort 中返回端口号。套接字还绑定到支持 TREL 的网络接口。启用 TREL 时,套接字和所选端口应保持有效。

2) 平台层必须对本地浏览网域中的服务名称“_trel._udp”启动持续的 DNS-SD 浏览,以发现支持 TREL 的其他设备。持续浏览会生成两种不同类型的事件:“添加”事件和“移除”事件。浏览启动时,它应该为网络上当前存在的每个 TREL 对等方生成一个“add”事件。每当 TREL 对等网络离线时,都应生成“remove”事件。不过,我们无法保证“remove”事件一定能生效。发现 TREL 服务实例后,应在所发现实例的 SRV 记录中指明的主机名上启动针对 AAAA 记录的新持续 DNS-SD 查询。如果发现对等端的多个主机 IPv6 地址,则必须报告所有地址中范围最大的一个(如果同一范围内有多个地址,必须随机选择一个)。

TREL 平台必须使用 otPlatTrelHandleDiscoveredPeerInfo() 回调发回发现的对等设备信息。当发现新的对等设备、现有条目(例如,新的 TXT 记录、新端口号或新的 IPv6 地址)发生更改时,或当对等设备被移除时,必须调用此回调。

具体说明
参数
[in] aInstance
OpenThread 实例。
[out] aUdpPort
用于按平台层返回所选端口号的指针。

otPlatTrelHandleDiscoveredPeerInfo

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

这是来自平台层的回调函数,用于报告发现的 TREL 对等方信息。

具体说明
参数
[in] aInstance
OpenThread 实例。
[in] aInfo
指向 TREL 对等方信息的指针。

otPlatTrelHandleReceived

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

是平台发出的回调,用于通知已收到 TREL UDP 数据包。

具体说明
参数
[in] aInstance
OpenThread 实例结构。
[in] aBuffer
包含收到的 UDP 载荷的缓冲区。
[in] aLength
UDP 载荷长度(字节数)。

otPlatTrelRegisterService

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

注册要使用 DNS-SD [RFC6763] 通告的新服务。

服务名称为“_trel._udp”。平台应使用自己的主机名,将该主机名与服务名称和本地 DNS-SD 域名结合使用,即可生成完整的服务实例名称,例如“example-host._trel._udp.local”。

对于 mDNS,服务实例名称所在的网域将是“local”;如果是非 mDNS 本地 DNS-SD 服务,则将是用于服务注册的任何网域。

对此函数的后续调用会更新前一个服务。用于更新 TXT 记录数据和/或端口号。

aTxtData 缓冲区在从此函数返回后不会持久保留。平台层不得保留指针,而是根据需要复制内容。

具体说明
参数
[in] aInstance
OpenThread 实例。
[in] aPort
要添加到所通告服务的 SRV 记录中的端口号。
[in] aTxtData
指向要在所通告服务中包含的 TXT 记录数据(已编码)的指针。
[in] aTxtLength
aTxtData 的长度(字节数)。

otPlatTrelSend

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

请求发送到指定目标的 TREL UDP 数据包。

具体说明
参数
[in] aInstance
OpenThread 实例结构。
[in] aUdpPayload
指向 UDP 载荷的指针。
[in] aUdpPayloadLen
载荷长度(字节数)。
[in] aDestSockAddr
目标套接字地址。

资源

OpenThread API 参考文档源自 GitHub 上提供的源代码。如需了解详情,或者为我们的文档做贡献,请参阅资源