我已经从节点本身设置了路由算法。之后,我要从该路由本身的物理层发送数据报。
例如,如果我的路由是1到2和2到3,并且我想发送1到3的数据报,我希望我的数据报通过2。
对于1的此路由表,如下所示:
1的路由表
所以我希望我的进程msg函数如下:
void processMessage(Message msg) {
if (msg instanceof DatagramNtf && msg.protocol == PING_PROTOCOL && msg.to != nodeInfo.addr)
def dG = new DatagramReq(to: routes.nextHop(msg.to), destination: msg.to)
send new DatagramReq(recipient: msg.sender, to: msg.from, protocol: Protocol.DATA)
}
routes.nextHop所做的也是将目标节点的地址添加到地址中,并从路由表中获取下一跳。
我想知道如何从路由表中获取nextHop。
答案 0 :(得分:2)
要使用路由表条目发送数据报,您需要使用router
代理,而代理又使用link
和phy
代理将数据报发送到目的地。将数据包进一步路由到router
代理本身会照顾目的地。因此,我认为您无需为nextHop
中的to
字段确定DatagramReq
。
您的DatagramReq
可以为-
router.send new DatagramReq(recipient: msg.sender, to: msg.from, protocol: Protocol.DATA)
假设router
是定义的AgentID
,并且msg.from
的值是您的目的地,并且路由表中存在有效的路由。
此外,nextHop
或getNextHop()
返回邻居节点的地址。