many-to-one route failue

大神们,你好:

         最近遇到的问题有点多,使用的是CC2530,协议栈版本2.5.1a,现在有如下问题需要请教一下:

         1、网关使用的是many-to-one路由方式,现在是终端A给协调器发送一包数据,协调器响应时,是包含了路径,到了终端A的父节点的时候,由于某些原因,终端A的父节点没将数据成功的发给终端A,导致终端A的父节点会给协调器发送一条Network Status的命令,状态码为Many-to-one Route Failure,目的地址是终端A,请问一下父节点发送给终端子节点失败时,会不会导致父节点把该终端节点的信息从关联表中给删除了?因为我从某些迹象来看,采用Many-to-one的包含路径的方式发送,如果发送失败会导致父节点把终端子节点的信息从关联表删除,不过这只是我猜测,想确认一下。

         2、当我把协调器关了,都关了几个小时了,但是还是发现父节点是不是的向协调器发送Network Status的命令,状态码依然是Many-to-one Route Failure,目的地址还是终端A,除了协调器开启了Many-to-one的路由方式,所有路由都没开启该方式,协调器都关了,怎么还会有这样的状态命令发向给协调器呢?

8 个回复

  • 如下图,父节点F6AD给终端节点C1E4发送数据是成功的,但是后面还是会出现Many-to-one Route Failure这样的状态命令

  • 1、多次失败的话会删除
    2、Network Status是维护网络的,之前帖子里就讨论过,这个路由很可能出了问题

    若该回复解决了您的问题,请点击“确认此为答案”,谢谢。

     

  • 回复 Viki Shi:

    针对于问题2,哪个帖子有讨论呢,能不能附个连接,我搜“many-to-one”有几个相关的帖子,但是不是我这样的内容。Network Status是维护网络的,这部分的代码有没有开源?但是我在路由上电之前就一直没开协调器的话,路由是不会出现这样的Network Status.
  • 回复 wenjie lin5:

    Many-to-One Route Maintenance
    If a link failure is encountered while a device is forwarding a Many-to-One routed frame (notice that a Many-to-One routed frame itself has no difference from a regular unicast data packet, however, the routing table entry has a field to specify that the destination is a concentrator), the device will generate a network status command with code “Many-to-One route failure”. The network status command will be relayed to the concentrator through a random neighbor and hopefully that neighbor still has a valid route to the concentrator. When the concentrator receives the route failure, the application will decide whether or not to re-issue a Many-to-One route request.

    When the concentrator receives network status command indicating Many-to-One route failure, it passes the indication to the ZDO layer and the following ZDO callback function in zd_app.c is called:

    void ZDO_ManytoOneFailureIndicationCB()
    By default, this function will redo a Many-to-One route discovery to recover the routes. You can modify this function if you want a more complicated process other than the default.

    很遗憾这部分也是不开源的,ZDO callback function这部分有

    若该回复解决了您的问题,请点击“确认此为答案”,谢谢。

     

  • 回复 Viki Shi:

    另外还想问一下,Network Status是维护网络的,但是我路由节点没有开启“many-to-one”的路由方式,在关掉协调器的情况下,但是为什么路由节点也会报Many-to-one Route Failure,目的地址是其他路由节点,所以这个维护网络,需要满足怎样的条件,才不会报Many-to-one Route Failure
  • 回复 wenjie lin5:

    我看了抓包的信息,只是做一个假设,会不会是协调器开启many-to-one,在路径请求的时候,在路由节点上即使不开启该方式,也会有相关的记录?

    如下图,虽然我已经关掉了协调器,但是路由节点5E89还会给协调器发送信息,发送的信息不是使用“many-to-one”方式,不带整路径的,路径的下一跳是25F5,此时就会出现了一个25F5的报Network Status的命令,该命令码是Many-to-one route Failure,而且目的地址就是上一跳的5E89,此时网络中是没有协调器的,路由设备往协调器发送数据,为什么会出现这样的Network Status:Many-to-one route Failure

  • 回复 wenjie lin5:

    多对一路由就是为了防止所有节点开启路由发现导致的网络堵塞问题,建议看一下如下链接的Many-to-One Routing Protocol:
    dev.ti.com/.../z-stack-overview.html

    若该回复解决了您的问题,请点击“确认此为答案”,谢谢。

     

  • 回复 Viki Shi:

    我明白多对一是防止所有节点开启路由发现导致的网络堵塞问题,不明白的是,我路由节点并没有开启多对一路由发现,那为什么我路由节点往协调器发送命令时,却会出现Network Status:Many-to-one route Failure,这个不应该是在协调器在进行多对一路由发现时,才会出现的吗?现在是路由器往协调器发送数据,下一跳的路由器,就出现Network Status:Many-to-one route Failure,而且报错的目的地址是上一跳,这看似不应该,想不明白这样的问题是什么原因导致的。