zstack中怎样才能得到一条传输路径上的这个节点的下一跳节点是谁的信息?
比如,数据帧刚刚从节点A,依次经过B、C、D、E到达F。
然后,这时的C点的应用层想知道如果从他这要到达F,他的下一跳是谁(实际中是D),这个要怎么操作呢?
zstack中有路由表、邻居表、父节点等,据网上资料说好像下一跳的节点在这三个地方都有可能,这样我就想知道其中是什么样的规则?
要是有个API,给出目的节点,直接返回下一跳节点地址,这样就很方便了。
谢谢!
对于mesh网络来说,C到F的下一跳可能不是D。
首先你需要清楚Zigbee mesh网络里面,具体是怎么实现的,你可以看下《Z-Stack Developer's Guide》中的第5节
extern uint16 RTG_GetNextHop( uint16 DstAddress, uint16 avoidAddr,
uint16 avoidAddr2, uint16 avoidAddr3, uint8 options );
这个函数就可以返回下一跳的地址
谢谢W,
这个函数
extern uint16 RTG_GetNextHop( uint16 DstAddress, uint16 avoidAddr,
uint16 avoidAddr2, uint16 avoidAddr3, uint8 options );
,除第一个目的参数外,其余参数什么含义并且要怎么设置呢?TI文档和网上资料都没有这个函数的介绍。
你好!
DstAddress: 目的地址
avoidAddr:不应该出现的地址,比方说自己nwk source address
avoidAddr2:不应该出现的地址,自己的mac address
avoidAddr3:不应该是无效的地址,0xFFFE
options:多播或者单播
这部分程序我们以library的方式提供
谢谢W!
这样基本上就明白了。
但是还有些小问题:
1、函数参数列表中avoidAddr2是uint16的,而您说的“avoidAddr2:不应该出现的地址,自己的mac address”,
这个mac是64位的吧?这里怎么理解呢?
2、您提到的“options:多播或者单播”, 我要设置具体值去调用,那么这个具体的宏名或数值分别是多少呢?
您好,请问下mac地址不是64位的嘛?您那个是16位的。这个不是有点冲突嘛?
这里指的mac address指的是位于数据帧中MAC层的短地址。
这个函数不好理解的话,你完全可以自己通过route request把路径找出来,这样你的下一跳也来了!
uint16 next=0xFFFF;
uint16 dst=0;
uint16 self=NLME_GetShortAddr();
next = RTG_GetNextHop(dst, self, self,self, NO_ROUTE_CACHE);
为什么next被RTG_GetNextHop()赋值,但是值还是保持原来的?
即,调用前为0xFFFF,或0x0003,或0x0006,这样被RTG_GetNextHop()赋值后,值仍为对应的0xFFFF,或0x0003,或0x0006。
另外,我做这个的目的是,设想一帧刚从A->B->C->D->E->F路径传输了,这样,以C点为例,在传输完几秒内,这条到F的路径基本上还是有效的。于是,我希望通过RTG_GetNextHop()或类似的API直接从类似路径缓冲中将下一跳地址直接取出,而避免再次通过route request等方式,后者会使网络中多出了部分无线信号。这样,通过在类似路径缓冲区中收集A/B/C/D/E的分别的下一跳地址,就能整理出刚才一帧所走过的节点路径以供展示。
要是TI有这种现成的展示数据帧所经过的节点路径的API或工程例子或方案,那就更好了,不知道有没有?
你的思路类似做静态路由的思想。实际工作过程中,网络是动态变化的,而且这条路径既然已经存过,不会有很多的的route request,对于中间节点来说也会有相应的路由维护的。
您好,不知道您的问题解决了没啊?我想请教下您一些问题,您现在还在做z-stack吗?怎样联系你啊?、急急急
您好,请问怎么自己 route request 把路径找出来啊?VV
这里指的mac address指的是位于数据帧中MAC层的短地址。
这个函数不好理解的话,你完全可以自己通过route request把路径找出来,这样你的下一跳也来了!