获取MTD IPv6地址
Obtaining MTD IPv6 address
我的拓扑是:
T1 - T2 - T4
- T3 -
Thread MTD 设备 (T4) 已随机分配了它的 IPv6 地址。
如果我不知道该地址,如何将数据包从 T1 寻址到 T4(FTD 通过 NCP,wpan0 接口)。如何解决?
我尝试使用服务 API,但没有成功。服务是否可以在 MTD 上注册,如果是,线程网络是否会将服务 RLOC16 分配给
IPv6 地址and/or 设备发现被认为是应用层服务,超出了 Thread 的范围。其他人已经实现的一些应用层机制包括:
- 正在向特定于应用程序的服务器注册 IPv6 地址。这与您也可以使用的 DNS 非常相似。
- IPv6 多播查询使用特定于应用程序的设备标识符和单播响应。这与 mDNS/DNS-SD 非常相似,您也可以使用它。
希望对您有所帮助。
最简单的方法 - 我认为 - 是发送广播请求消息(使用多播地址,例如 ff03::2),每个设备都必须回复该消息。
一旦您收到来自设备的响应消息,您也应该能够获得发件人的 IPv6 地址。发件人地址信息位于 otMessageInfo
.
参见 git 上 cli_udp_example.cpp 的示例。
void UdpExample::HandleUdpReceive(otMessage *aMessage, const otMessageInfo *aMessageInfo)
我的拓扑是:
T1 - T2 - T4
- T3 -
Thread MTD 设备 (T4) 已随机分配了它的 IPv6 地址。
如果我不知道该地址,如何将数据包从 T1 寻址到 T4(FTD 通过 NCP,wpan0 接口)。如何解决?
我尝试使用服务 API,但没有成功。服务是否可以在 MTD 上注册,如果是,线程网络是否会将服务 RLOC16 分配给
IPv6 地址and/or 设备发现被认为是应用层服务,超出了 Thread 的范围。其他人已经实现的一些应用层机制包括:
- 正在向特定于应用程序的服务器注册 IPv6 地址。这与您也可以使用的 DNS 非常相似。
- IPv6 多播查询使用特定于应用程序的设备标识符和单播响应。这与 mDNS/DNS-SD 非常相似,您也可以使用它。
希望对您有所帮助。
最简单的方法 - 我认为 - 是发送广播请求消息(使用多播地址,例如 ff03::2),每个设备都必须回复该消息。
一旦您收到来自设备的响应消息,您也应该能够获得发件人的 IPv6 地址。发件人地址信息位于 otMessageInfo
.
参见 git 上 cli_udp_example.cpp 的示例。
void UdpExample::HandleUdpReceive(otMessage *aMessage, const otMessageInfo *aMessageInfo)