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

时间:2019-07-10 10:50:42

标签: unetstack

我正在开发一种基于能量的路由协议,在该协议中,节点必须知道其可用邻居,以便它可以获取邻居节点的能量详细信息并确定其下一跳。

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

b)在使用PDURemoteGetParamReq中,哪种方法最适合于获取邻居节点的能量?

1 个答案:

答案 0 :(得分:0)

a)如果您正在编写自己的代理,则可以发送广播帧来查询邻居,并使邻居上的代理通过随机退避对帧进行响应(以避免MAC冲突)。另一种 hack 可能是使用RouteDisoveryReq地址设置为不存在的节点的to(请参阅https://unetstack.net/svc-31-rdp.html)。这将导致所有1跳邻居重新广播您的路由发现请求,并且每个邻居都会获得RouteDiscoveryNtf

展示 hack rdpdemo.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}")

示例运行(在节点3上模拟samples/rt/3-node-network.groovy

> rdpdemo
Starting discovery...
  Discovered neighbor: 1
  Discovered neighbor: 2
Neighbors: [1, 2]
>

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