原创
Microchip zigbee协议栈路由协议学习(4):路由表
Microchip的zigbee协议栈路由协议实现代码中有3张与路由有关的表:路由表(routing table)、路由发现表(route discovery table)和邻居表(neighbor table)。
在对数据分组转发中,主要进行下一跳地址定位的函数为GetRoutingAddress()(用于网状路由)和RouteAlongTree()(用于树状路由)。
GetRoutingAddress()方法的主要流程为:
- 通过NWKLookupNodeByShortAddrVal()方法在邻居表中查找节点;
- 如果找到了并且该节点属于本节点的下属节点(currentNeighborRecord.deviceInfo.bits.Relationship == NEIGHBOR_IS_CHILD):
- 否则:
- 如果设置了支持网状路由算法的话:
- 先通过HaveRoutingCapacity()检测路由表(routing table)和路由发现表(route discovery table)是否存在目的地址的路由或者有空记录(可以发起对目的地址的路由发现)。
- 如果具备路由能力:
- 如果输入参数指定强制发现路由(discoverRoute == ROUTE_DISCOVERY_FORCE):
- 启动路由发现:InitiateRouteDiscovery();
- 否则:
- 通过GetNextHop()遍历路由表,找到目的地址对应的路由记录,从路由记录中取下一跳地址及路由状态;
- 如果返回成功(ROUTE_ACTIVE):
- 否则:
- 通过RouteAlongTree()使用树状路由算法转发分组;
- 否则:
- 通过RouteAlongTree()使用树状路由算法转发分组;
- 否则:
- 通过RouteAlongTree()使用树状路由算法转发分组;
注:GetRoutingAddress()方法本身不执行分组的转发,而是通过返回ROUTE_SEND_TO_MAC_ADDRESS状态由它的调用者来执行分组转发。
在RouteAlongTree()方法中,对邻居表中的每条记录进行判断,如果该邻居属于本节点的子节点,则判断目的地址是否该节点或该节点的下级节点(通过IsDescendant()方法实现判断),是的话就转发分组。
相关推荐阅读
-
用户138786
2015-03-16 18:38
-
WIFI模块(HED10W07SN)应用设计入门
-
WIFI模块(HED10W07SN)应用设计入门
以下系列帖子记录我学习WIFI模块(HED10W07SN)的过程和心得,以及为学生设计的入门指引。
...
-
用户138786
2015-03-16 18:37
-
HED10W07SN串口应用设计
-
串口通信应用设计
HED10W07SN模块有两个串口。厂家提供的参考实现中,串口0用于管理:AT指令、EM_WIFI程序下载、Boot Loader程序下载(...
-
用户138786
2015-03-16 16:42
-
HED10W07SN基本I/O设计
-
基本I/O设计
芯片中没有与其它外设功能复用的GPIO引脚只有3个:GPIO11、GPIO12、GPIO13。
底层提供...
-
用户138786
2015-03-16 16:40
-
WIFI模块HED10W07SN开发环境
-
开发环境
选择联盛德微电子的HED10W07SN模块入手进行学习是带点偶然的。
拿WIFI模块和CC2530结合做网关是很早就想做的事,但WIFI模...
-
用户138786
2014-11-27 19:29
-
无线单片机入门导学(基于CC2530)
-
无线单片机(WSN/Zigbee)应用设计入门导学(基于CC2530)
我们学习无线单片机编程/应用设计是为了什么呢?
1、设计有用的应用...
-
用户138786
2014-11-27 19:24
-
web方式远程控制
-
web方式远程控制应用设计
这一类应用的特点是客户端通过浏览器(http协议)方式对无线单片机进行远程控制及数据采集。
...
用户138786 2011-5-8 18:31