如何在unetstack中查找节点的可用邻居

如何在unetstack中查找节点的可用邻居,unetstack,Unetstack,我正在开发一个基于能量的路由协议,其中一个节点必须知道其可用的邻居,以便它能够获得邻居节点的能量细节并决定其下一跳 a) 如何查找节点的可用邻居 b) 在使用PDU和RemoteGetParamReq时,哪种方法最适合检索邻居节点的能量?a)如果您正在编写自己的代理,您可以发送广播帧来查询邻居,并让邻居上的代理以随机回退的方式响应该帧(以避免MAC冲突)。另一种方法是使用RouteDisoveryReq(请参阅),将to地址设置为不存在的节点。这将导致所有1-hop邻居重新广播您的路由发现请求,

我正在开发一个基于能量的路由协议,其中一个节点必须知道其可用的邻居,以便它能够获得邻居节点的能量细节并决定其下一跳

a) 如何查找节点的可用邻居

b) 在使用
PDU
RemoteGetParamReq
时,哪种方法最适合检索邻居节点的能量?

a)如果您正在编写自己的代理,您可以发送广播帧来查询邻居,并让邻居上的代理以随机回退的方式响应该帧(以避免MAC冲突)。另一种方法是使用
RouteDisoveryReq
(请参阅),将
to
地址设置为不存在的节点。这将导致所有1-hop邻居重新广播您的路由发现请求,并且您将获得每个邻居的
RouteDiscoveryNtf

演示hack的示例脚本(
rdpdemo.groovy
):


b) 答案取决于你如何暴露你的能量信息。如果将其作为参数公开,则可以使用
RemoteGetParamReq
获取它。但是,如果您已经在代理中实现了某些协议,那么使用特定的PDU来传递信息就很容易了。

Hi。请添加您已经尝试过的代码,以便我们可以查看它。先生,我使用
RouteDiscoveryReq
来了解节点的1-hop邻居,但这里为了接收来自多个邻居的多个RouteDiscoveryNtf,我在for循环中使用receive()方法,并尝试使用
getNextHop()在数组中存储nextHop值
这是一个错误。如何在数组中存储nextHop值?因为,我还试图使用
RemoteGetParamReq
获取剩余能量,它作为PHY代理的参数公开。此外,RouteDiscoveryReq和RemoteGetParamReq在查询详细信息时都会消耗能量。请向我推荐一种更好的示例代码方法我已更新了上面的答案,包括如何使用
RouteDiscoveryReq
查找邻居的代码示例。您是对的,路由发现和参数get本身将消耗能源,并且应该在对能源敏感的应用程序中节约使用。如果你负担不起询问他们的能量,你可以考虑对邻居进行“窥探”,倾听他们的传输并估计他们的能量。你也可以通过这种方式收集邻居的信息,除了那些碰巧很安静的邻居。谢谢你,先生。您的代码用于了解邻居,我还尝试使用
RemoteGetParamReq
获取节点2的能量,该节点是节点1的邻居,但由于请求返回
失败
,我无法获取能量。我从扩展调制解调器文件(
MyHalfDuplexModem.groovy
)中使用
phy
代理暴露了能量参数,在该文件中,我添加了能量建模,并且在其中,我还定义了
getParameterList()
方法,该方法返回
HalfDuplexModem
加上自定义调制解调器所需的所有枚举。我认为
get()
方法无法找到我定义枚举的文件。Groovy或类文件必须位于类路径中。通常,在UNETSIM根文件夹中,<>代码>类>代码>在类路径中,因此考虑将类/ Groovy文件放在那里。
// settings
attempts = 1      // try only a single attempt at discovery
phantom = 132     // non-existent node address
timeout = 10000   // 10 second timeout

println 'Starting discovery...'
n = []                        // collect list of neighbors
rdp << new RouteDiscoveryReq(to: phantom, count: attempts)
while (ntf = receive(RouteDiscoveryNtf, timeout)) {
  println("  Discovered neighbor: ${ntf.nextHop}")
  n << ntf.nextHop            // add neighbor to list
}
n = n.unique()                // remove duplicates
println("Neighbors: ${n}")
> rdpdemo
Starting discovery...
  Discovered neighbor: 1
  Discovered neighbor: 2
Neighbors: [1, 2]
>