a) Если вы пишете свой собственный агент, вы можете отправить широковещательный кадр для запроса соседей, и ваш агент на соседних узлах отвечает на этот кадр случайным откатом (чтобы избежать коллизий MAC). Альтернативным hack может быть использование RouteDisoveryReq
(см. https://unetstack.net/svc-31-rdp.html) с адресом to
, установленным на несуществующий узел. Это приведет к тому, что все соседние узлы с 1 прыжком будут повторно отправьте запрос на обнаружение маршрута, и вы получите RouteDiscoveryNtf
для каждого из этих соседей.
Пример сценария, демонстрирующего взлом (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}")
Пример выполнения (моделирование samples/rt/3-node-network.groovy
на узле 3):
> rdpdemo
Starting discovery...
Discovered neighbor: 1
Discovered neighbor: 2
Neighbors: [1, 2]
>
б) Ответ на этот вопрос зависит от того, как вы раскрываете свою энергетическую информацию. Если вы выставите его как параметр, вы можете использовать RemoteGetParamReq
, чтобы получить его. Но если вы уже внедрили некоторый протокол в своем агенте, достаточно легко иметь конкретный PDU для передачи информации.