我正在开发一种基于能量的路由协议,在该协议中,节点必须知道其可用邻居,以便它可以获取邻居节点的能量详细信息并确定其下一跳。
a)如何找到节点的可用邻居?
b)在使用PDU
和RemoteGetParamReq
中,哪种方法最适合于获取邻居节点的能量?
答案 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来传达信息就很容易了。