设备是路由,汇报属性后父节点协调器没有ack 6240行,6244行设备发出route request,之后汇报的数据都又另一个路由转发了。但这条数据失败了。
之前的协调器的前两次 linkstatus 6160 6202,与设备B478已经不通了,设备与协调器的还是通的。这个情况怎么解决
路由linkstatus不同6160行6264行.zip
user4381970:
路由设备汇报数据没有收到ack,发起了route request,然后有relay,之后数据正常,但这条数据丢失了,怎么办
Alvin Chen:
回复 user4381970:
建议加上APS-ACK机制。
AF_DataRequest的options參數上去使能AF_ACK_REQUEST后,可以收到ACK confirm 回调则确认发送成功。
user4381970:
回复 Alvin Chen:
我的问题是怎么回事呢?正常的吗?还是bug
都加APS-ACK好像大大增加网络通讯了,APS-ACK本身也有需要转发。各家品牌产品貌似只有个别安防设备使用了,路由设备几乎都没有
Alvin Chen:
回复 user4381970:
你的问题看上去路由设备汇报数据 没有发送成功,然后重发了3次都没成功,是设备找不到ZC了。ZR 认为原有路径已经失效,route request 去寻找一个新的路径,这些都是正常操作。
dev.ti.com/…/z-stack-overview.html
user4381970:
回复 Alvin Chen:
em,前面分析都是对的,路由失效也很正常,发送数据是需要重新发现路由。但是发现路由成功后这个数据是不是应该再次发送啊。否则数据丢失了啊。
Alvin Chen:
回复 user4381970:
并不会重发,因为失败后已经重发了三次,重发失败释放了RF buf这个数据已经释放掉了,除非你自己去做逻辑。
user4381970:
回复 Alvin Chen:
那这个设计是不是不太合理啊。如果是路由失效很正常的。父节点断电或者什么情况都会导致路由失效,那么不能自动修复吗?非要等到应用发送数据时候,才发现路由不通,才重新建立路由,然后建立成功也不重发,这条数据就丢失了吗?
linkstatus不是没15s发一次吗,维护邻居表,没有用吗?设计就注定路由发现时候丢失一条数据?
user4381970:
回复 Alvin Chen:
Z-Stack 3.0
Developer’s Guide5.2 Routing protocol
the NWK layer will repeat the process of transmitting the packet and waiting for the
acknowledgement, up to a maximum of NWK_MAX_DATA_RETRIES times. The maximum data retries in the NWK
layer can be configured in f8wconfig.cfg. If an active entry cannot be found in the routing table or using an
entry failed after the maximum number of retries, a route discovery is initiated and the packet is buffered until that
process is completed.最后一句话,当重发失败最大次数后,路由发现被启动并且数据包被缓存直到进程被结束。没有释放buf啊,如果重发失败后启动路由发现,之后不再次启动重发,那么最后一句话什么意思呢
user4381970:
回复 Alvin Chen:
zstack这种情况都没有重复数据吗?这样的情况应该会碰到很多啊,大家都是自己再去写重发机制吗?重发机制不好写啊
Alvin Chen:
回复 user4381970:
你的摘录的那段说的是NWK_MAX_DATA_RETRIES 是网络层重发次数,重发NWK_MAX_DATA_RETRIES没收到就释放了。
APS-ACK你应该是知道的吧,使用APS-ACK,当接收端收到了会回复ACK或者response。发送端没有收到ACK或者response就去重发。定义一个定时器发送数据出去开始计时,一段时间内没有收到反馈,再去重发。