从代理访问路由表以获取下一跳

时间:2019-09-02 11:20:56

标签: groovy unetstack

我已经从节点本身设置了路由算法。之后,我要从该路由本身的物理层发送数据报。

例如,如果我的路由是1到2和2到3,并且我想发送1到3的数据报,我希望我的数据报通过2。

对于1的此路由表,如下所示:

1的路由表

  • 至:3 nextHop:2
  • 至:2 nextHop:2
  • 至:1 nextHop: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。

1 个答案:

答案 0 :(得分:2)

要使用路由表条目发送数据报,您需要使用router代理,而代理又使用linkphy代理将数据报发送到目的地。将数据包进一步路由到router代理本身会照顾目的地。因此,我认为您无需为nextHop中的to字段确定DatagramReq

您的DatagramReq可以为-

router.send new DatagramReq(recipient: msg.sender, to: msg.from, protocol: Protocol.DATA)

假设router是定义的AgentID,并且msg.from的值是您的目的地,并且路由表中存在有效的路由。

此外,nextHopgetNextHop()返回邻居节点的地址。