NLME-ROUTE-DISCOVERY.request
这里是对 NLME-ROUTE-DISCOVERY.request的解读。
NLME-ROUTE-DISCOVER.request{
DstAddrMode, // mode (简记,方便后面描述, 下同)
DstAddr, // addr
Radius,
NoRouteCache // cache
}
Name | Type | Valid Range | Desc |
---|---|---|---|
mode | Integer | 0-2 | 0(no destination address) 1(16 bit nwk addr of a multicst group) 2(16 bit nwk address of an individual device) |
addr | 16-bit | any nwk addr | 如果mode=0, 该字段不存在 |
Radius | integer | 0x0-0xff | 限制转次跳数 |
cache | bool | true/false | 禁止建立 路由记录表(route record table) TRUE no FALSE ,establish a route record table |
本地处理
- ZIGBEE END 接收到这条原语(primitive) 返回状态 INVALID_REQUEST
- mode != 0, addr 为广播, 返回 INVALID_REQUEST
- FFD设备接收到, 但设备本身没有路由能力, mode != 0, 则使用 NLME_ROUTE-DISCOVERY.confirm(ROUTE_ERROR ,4)返回
- FFD设备接收到,本身拥有路由能力, mode = 2, 启动网络层来进行路由发现,试图建立当前设备跟addr之间的路由
- FFD设备接收到,本身拥有路由能力, mode = 1, 网络层检查设备的nwkGroupIDTable 来判断是否为小组成员,如果是小组成员, NLME-ROUTE-DISCOVERY.confirm(SUCCESS), 停止后续的处理。如果不是小组成员,则网络层会继续进行路由发现,找到当前设备与group id标定设备之间的路由。
- FFD设备接收到,本身拥有路由能力, mode = 0,网络层管理实体发起MANY-TO-ONE路由发现,这一部分在3.6.3.5.1描述。
- 以上3种情况中任意1种路由发现,设备会发送一个route discovery command frame 来开展路由发现。若是mode=0, 则立即返回SUCCESS, mode!=0的情况下,要等收到一个route reply command frame 或者 操作超时 (timeout)。 收到路由应答则返回SUCCESS, 没有收到则返回ROUTE_ERROR。