zigbee路由杂谈

在求学的过程中,我想许多人都有这样一个问题,有些东西说起来好像是懂了,但是如果继续深入,比如给你一个路由算法,你怎么编程实现它。虽然网上许多人,写了一些关于zigbee路由的文章,但基本上是差不多的,没有切中要害,让我这些入门不久的菜鸟看的云里雾里,似懂非懂。看完后仿真程序仍然不知从何下手。幸好,老天给了我们一个可以思考的脑子,自力更生最可靠。

   在路由过程中设计到路由表,路由搜索表(中文翻译过来不同版本有点差别),邻居节点表,RREQ,RREP、RERR。首先必须将这些最基本的东西弄清楚。

  路由表:包含此条路由下一跳节点地址,路由状态,目的地址。

  路由搜索表:在路由表建立过程中存在。        

包含以下信息:Route request ID:发起路由请求的节点产生的序列号,越大则表示分组越新:
              Source address:发起路由发现的节点的地址:
              Sender address:将路由请求分组发送给此节点的节点的地址:
              Forward cost:发起路由发现的节点到此节点路径的开销,即路由请求分组中携带的开
销;
              Residual cost:此节点到目的节点的开销,即路由应答分组中携带的开销;
              Expiration time:路由建立过程的有效时间。
 邻居表: ZigBee网络中的每个节点都保存一张邻居节点列表,用来存储此节点传输范围内其它节点的信息。

 PANId:邻节点PAN标识符;
Extended address:邻节点的64-bit IEEE扩展地址,邻节点与本节点存在父子关系时
记录此条信息;
Network address:邻节点16一bit网络地址;
Device type:邻节点类型(0x00=ZigBee协调点,0x01=ZigBee路由节点,0x02=
ZigBee终端节点);
Relationship:邻节点与当前节点的关系(0x00=父节点,OxOI=子节点,0x02=其
它)。

 节点交互的分组:

ZigBee网络层的控制分组包括路由请求(RREQ,Route Request)分组,路由应答(RREP,
Route Reply)分组和路由出错(RERR,Route Error)。

RREQ分组:

ZigBee网络中具有路由功能的节点可以向周围邻节点广播一个RREQ分组,目的是
为了找到一条通往它希望到达的目的节点的有效路径。

具体内容如下:

Command frame identifier:指出此控制分组的类型(0x01=RREQ,0x02=RREP,0x03
=RERR):
Command options:指出此路由请求分组是否是在路由修复过程中产生的;
Route request ID:发起路由请求的节点产生的序列号,越大则表示分组越新;
Destination address:发起路由请求的节点希望建立的路径的目的地址;
Path cost:指从P.REQ的发起节点到当前接收RREQ的节点的路径开销。

RREP分组:

RREQ分组希望到达的目的节点收到RREQ后向RREQ分组的发起节点回复一个
RREP分组。

具体内容如下:

Command frame identifier:指出此控制分组的类型(0x01=RREQ,0x02=I砒P,0x03
=RERR):
Command options:指出此路由应答分组是否是在路由修复过程中产生的:
Route request ID:此分组所应答的路由请求分组的路由请求标识符;
Originator address:发起路由请求的节点的网络地址;
Responderaddress:该条路由的目的节点地址,即响应RREQ的节点的网络地址:
Pathcost:从发起RREP的节点到当前接收RREP的节点的路径开销。

RERR分组:

当节点转发数据分组失败时将产生一个RERR分组,目的是为了通知此数据分组的
源节点分组转发失败。

Command frame identifier:指出此控制分组的类型(Ox01=RREQ,0x02=RKEP,0x03
=RERR);
Error code:指出路由出错的原因:
Destination address:指被转发失败的数据分组的目的地址。

   下面是我根据以上基础知识自己对路由建立过程的理解:首先源节点通过广播发送RREQ分组,具有路由功能的节点收到此信息后,建立反响路由,并转发RREQ分组,并将源节点到此节点的路由开销添加到路由搜索表和RREQ中,知道目的节点收到此RREQ,实际中可能有多条路径到达目的节点,目的节点根据路由开销选择路由开销最少的反向路由,将RREP发送给源节点,中间几点收到RREP也要添加此节点到目的节点的路由开销到路由搜索表和RREP中,最终到达源节点。路由搜索表清楚,各个节点路由表建立。

   以上只是个人一点理解。望各位多多交流,指点。

 

路由发现是在网络中的设备互相合作条件下选择,并建立路由的一个流程,该流程通常与特定的源地址和目的地址相对应。多点传送路由是执行关于一个特殊的源设备和多点传送组的路由。多对一路由发现是一个源设备与所有的ZigBee路由器协调器radius范围内与自身建立路由的过程。根据3.7.3.5小节的描述,目的地址可以是16位的广播地址,或是一个设备的16位网络地址,或作为多点传送组ID的16位多点传送地址。如果一个路由请求命令的目的地址是一个特殊设备的路由地址,它的路由请求选项域没有设置多点传送域,则请求为一个单播路由请求。一个路由请求命令,它的路由请求选项域有多点传送位,则设置为多点传送路由请求。多点传送路由请求的目的地址域应设置为多点传送组的ID。一个目的地址域为广播地址(见表)的路由请求命令的载荷应为多对一路由请求。多对一路由请求的路由请求选项的多点传送位应置为0.

1路由发现的初始化

网络层收到其上层发送来的NLDE-ROUTEDISCOVERY.request原语,其中DstAddrMode参数值为0x00,在路由表中没有与目的地址DstAddr相对应的入口,或在MAC层接收到的帧控制域中的路由搜索子域值为0x01,或在网络层帧报头中的目的地址不是当前设备地址或者为广播地址,或没有与网络层帧报头中的目的地址相对应的路由选择表入口。在其他情况下,如果设备没有路由选择能力,并且NIB属性中nwkUseTreeRouting的值为真,则有问题的数据帧将按照分级的路由方法,沿树搜索路由。如果设备没有路由能力,并且NIB属性中nwkUseTreeRouting值为假,那么该帧将被丢弃,网络层按照7小节中描述的产生NLME-ROUTEERROR.indication原语或路由错误命令帧。

多点传送的路由发现过程可以通过网络层初始化,或者通过从高层接收到NLME-ROUTEDISCOVERY.request原语,其中DesAddrMode参数值为0x01,或者通过下面3.7.5.2.2小节所描述的过程完成。

如果设备具有路由选择能力,则建立一个路由选择表入口和路由搜索表入口,并且该入口的状态设置为DISCOVERY-UNDERWAY。如果已经存在一个与目的地址相对应的路由选择表入口,并且状态值为ACTIVE或VALIDATION_UNDERWAY,那么这个如果可以被使用,并且入口的状态域保存为当前值。如果存在路由表入口,但状态值不是ACTIVE,那么入口可以被使用,并且入口的状态值设置为DISCOVERY_UNDERWAY。如果不存在入口,那么设备将建立一个相对应的路由发现表入口。

每一个发送路由请求命令帧的设备维护一个生成路由请求标识符的计数器。当生成一个新的路由请求命令帧时,该计数器加1,并且将该值保存在设备路由搜索表的路由请求标识符中。路由选择表和路由搜索表中的其他域将根据2小节进行设置。

网络层了缓存所接收到的待处理路由搜索帧,或者,如果为单播帧并且NIB树型中的nwkUseTreeRouting值为真,将网络层帧报头中帧控制域的路由选择子域设置为0,然后沿树向前发送数据帧。

一旦设备创建了路由搜索表和路由选择表入口,则将按照图3.10所示的节后创建哟个载有有效载荷的路由请求命令帧,帧中的各子域的设置如下所述:

 

 

(1)       命令帧标识符域设置为路由请求帧。

 

(2)       路由请求标识符设置为路由选择表入口

(3)       多点传送标志位和目的地址域应该设置为与要被发现的目的地址向一致

 

 

(4)       路由成本域设为0

 

在构造完成所广播的路由搜索命令帧后,网络层使用MCPS-DATA.request原语将其传送到MAC层。

在路由搜索的开始阶段,广播一个路由命令请求帧时,网络层在开始广播后,将重播nwkclnitialRREQRetries次,因此,最大的广播次数为nwkclnitialRREQRetries+1次,每次重播的时间间隔为nwkcRREQRetryInterval毫秒。

ZigBee路由器协调器网络层管理实体在接收到上层发送的DstAddrMode 参数值为0x00的NLME-ROUTE-DISCOVERY.request原语后,初始化多对一路由发现。在这种情况下,设备不是必须建立路由表入口。如果路由请求命令帧的目的地址参数为0xfff9,那么就如该小节描述的建立并广播。

设备不是必须建立发现表或路由表入口。一个路由请求命令帧可以如3.7.3.5.1小节所示建立并广播。NLME-ROUTE-DISCOVERY.request原语的参数MemoryConstrained为真,那么路由请求命令载荷的目的地址域置为0xfff8.否则,置为0xfff9.

2接收到路由请求命令帧

在接收到路由请求命令帧后,如果设备是一个终端设备,那么丢弃该帧。否则,判断是否有路由能力。

如果设备没有路由能力,并且是多点传送路由请求或多对一路由请求,那么路由请求将被丢弃并且路由请求处理被终止。

如果设备没有路由选择能力,并且路由请求时单播路由请求,则将判断所接收的帧是否来自于有效的路由。所谓有效路由是指所接收的帧来自于设备的子设备,并且全设备为孩子设备的后裔设备;或者来自于设备的父设备,并且,源设备不是设备的子设备。如果路由请求命令帧不是来自于有效路由,则将丢弃该帧。否则,将检查设备是否为预期的目的设备。同样,通过路由请求命令帧有效载荷中的目的地址与它的每一个终端子设备地址比较,检查命令帧的目的地址时都为设备的一个终端子设备。如果路由请求命令帧的目的地址为设备本身或者为设备的一个子设备,则它将用一个路由请求应答命令帧进行应答。当设备用一个路由请求应答命令帧应答路由请求时,将构造一个类型域为0x01的帧。路由请求应答的源地址应设置为创建请求应答设备的16位网络地址,在考虑到路由请求的发起者为最终目的地址的情况下,将帧的目的地址域设置为所计算出来的下一跳的地址。计算下一跳设备到挡墙设备的链路成本,其计算方法详见3.7.3.1小节,并将该成本附着在路由应答帧的路由成本域中。通过发送MCPS-DATA.request原语,将路由应答命令帧单播到下一跳设备。

如果设备不是路由请求命令帧的目的地址,则计算从前一个设备到本设备传送该帧的链路成本,其方法如3.7.3.1节中所述。其成本数值将加到路由请求命令帧的路由成本值中,然后,使用MCPS-DATA.request服务原语,向目的地址单播该路由请求命令帧。同数据帧一样,采用有效载荷中的目的地址域标识来判断设备地址的方法,决定单播传输的下一跳地址。

如果设备没有路由能力,接收的请求是一个单播的路由请求,设备将路由请求命令帧载荷的目的地址与自身的地址比较来判断该设备是否时命令帧的目的地址。它还将路由请求命令帧载荷的目的地址与它的终端子设备地址进行比较。判断命令帧的目的地址是否是自己的终端子设备。如果该设备或设备的终端子节点是路由请求命令帧的目的节点,设备将决定在路由发现表(见表3.50)入口中是否存在相同的路由请求标识符和源地址。如果没有相对应的入口存在,将建立一个入口。

如果设备没有路由能力,并且接收到的路由请求帧的路由请求命令选项域标示为多点传送路由请求,设备将判断在nwkGroupIDTable中是否已经存在其GroupID域与目的地址相配的入口。如果相配的入口存在,设备将判断是否存在一个有相同路由请求标识符和源地址的路由发现表(见表3.50)入口。

对于多对一路由请求,和常规的路由请求,如果参数nwkSymLink的值为TRUE,接收到一个路由请求命令帧后,设备将在邻居表中寻找对应于传输设备的入口。如果没有对应的入口或该入口的输出成本域的值为0,则丢弃该帧,路由请求过程终止。邻居设备的最大输出和输入成本时是用来计算路径成本而不是输入成本。这包括增加重发前一个路由请求帧的路径成本。

当建立了路由发现表入口,则其值设置为与路由请求命令帧相对应的值。唯一例外的是前向成本域,该域是利用前面的发送者的命令帧计算的链路成本,详见3.7.3.1小节。将它加到路由请求命令帧的路径成本中。上述计算的结果保存在新建立的路由发现表入口的前向成本域。

如果nwkSymLink属性值为真,设备将建立一个路由表入口,其目的地址域为路由请求命令帧的源地址,下一跳设置为传输命令帧的前一个设备的地址。状态域置为ACTIVE。然后设备向路由请求命令帧的源地址发送路由应答命令帧。如果设备对于源地址和路由请求标识符对已经有一个路由发现表入口,设备判断在路由请求命令帧中的路径成本是否小于存储在路由发现表入口中的前向成本。该比较通过计算发送该帧的前向设备的链路成本,如3.7.3.1小节所述,加上路由请求命令帧的路径成本。如果该值比路由发现表入口的值大,将丢弃该帧,没有后续的处理。否则,路由发现表中的前向成本和发送地址域将被更新为路由请求命令帧的新的成本和前向设备地址。

如果属性nwkSymLink的值为TRUE,接收到的路由请求命令帧是一个单播路由请求,设备仍将建立一个路由表入口,其目的地址设置为路由请求命令帧的源地址,下一跳域设置为传输命令帧的前一个设备的地址。状态域设置为ACTIVE。然后设备将响应一个路由回复命令帧。在任何一种情况下,如果设备是代表它的一个终端子设备响应,那么路由回复命令帧载荷的响应地址应与终端子设备的地址一致,而不是响应设备的地址。

当一个具有路由选择能力的设备不是接收到的路由请求命令帧的目的设备时,则判断在路由选择表(见表3.50)中是否存在一个有相同的路由请求标识符和源地址域入口。如果入口不存在,则创建一个入口。路由请求定时器终止时间设置为nwkcRouteDiscoveryTime毫秒。如果相对应与目的地址的路由地址的路由表入口存在,并且其状态值不为ACTIVE,那么将其设置为DISCOVERY_UNDERWAY。如果不存在这样的入口,并且该帧为单播路由请求,将建立一个入口,其状态值为DISCOVERY_UNDERWAY。如果nwkSymLink属性为TRUE或者是多对一路由请求帧,则设备也将建立一个路由表入口,并且它的目的地址设置为路由请求命令帧的源地址,下一跳的地址设置为上一个传送该命令帧设备的网络地址。如果是多对一的路由请求帧,则多对一域和路由表入口应设置为真,如果目的地址域是0xfff8则MemoryConstrained标志位设为真否则设为假;如果下一跳域改变了,路由记录要求域则设为真。状态域设置为ACTIVE。当路由请求定时器终止时,设备将从路由选择表中删除该路由请求入口。在这种情况下,如果它的状态域的值为DISCOVERY_UNDERWAY并且为目的地址在路由发现表中没有其他的入口,则与路由表入口对应的目的路由地址也要被删除。如果在路由选择表中存在一个入口,则路由请求命令帧中的路由成本将与路由选择表入口的前向成本相比较,比较是通过计算先前设备的链路成本,详见3.7.3.1,加上路由请求帧中的路由成本。如果路由成本更大,则丢弃该路由强求命令帧,不对其进行处理;否则,路由选择表中的前向成本和发送者地址域将更新为路由请求命令帧中的新的成本和上一个发送该帧的设备地址。此外,路由请求命令帧中的路由成本域的值为新的计算结果。如果nwkSymLink属性为TRUE,则设备也将更新它的路由表入口,目的地址将更新为路由请求命令帧的源地址,下一跳的地址将更新为上一个传送该命令帧的设备网络地址。状态域设置为ACTIVE,然后,设备将使用MCPS_DATA.request原语,重新广播该路由请求命令帧。

当重新广播路由请求命令帧时,网络层将使用下面的公式,用一个随机不稳定值计算出重传的时延。

 

 

2·R[nwkcMinRREQJitter,nwkcMaxRREqJitter]

 

其中R[a,b]是在[a,b]参数区间的随机函数,不稳定值的单位为毫秒。设备可调整这个不稳定值,以使接收到的路由成本大的路由请求命令帧比路由成本小的延时更大。网络层将在初始中继后重试广播nwkcRREQRetries次,以至于每次中继为最大的nwkcRREQRetries+1次。当相当的源和路由请求标识符的帧比等候重传帧所花费路由成本小时,设备可能丢弃等待重传的路由选择命令帧。

设备根据有效载荷中的目的地址,将相对应的路由表入口的状态域设为DISCOVERY-UNDERWAY。如果不存在这样的入口,则重新建立一个入口。

当对一个路由请求帧进行应答时,具有与路由请求的源地址、路由请求标识符相对应的路由选择表的入口的设备将构建一个帧类型域为0x01的命令帧。网络头的源地址域设置为当前设备的16位网络地址,目的地址域设置为对应路由选择表入口中的发送者地址域。构造路由应答的设备将按照下述方法在组成载荷域。网络命令标识符设置为路由应答,路由请求标识符域的值设置为与路由请求命令帧的路由请求标识符域中的值相同,起始者域设置为路由请求命令帧中的网络头中的源地址。利用路由请求命令帧中的网络帧报头中的源地址与它相对应的路由选择表入口的起始者地址,并根据3.7.3.1小节中描述的来计算链路成本。该链路成本设置在路由成本域中,然后,利用MCPS-DATA.request原语,将路由请求应答帧单播到目的地址,从路由选择表中所得到的发送地址作为下一跳地址。

3接收到路由应答命令帧

一旦设备接收到路由应答命令帧,将按照下述所描述的流程,对应答帧进行处理。

如果接收设备不具有路由选择能力,它的NIB属性中的nwkUseTreeRouting的值为真,则利用树型路由转发路由应答。如果接收设备不具有路由选择能力,并且它的NIB属性中的nwkUseTreeRouting的值为假,则丢弃该命令帧。在转发路由应答命令帧之前,根据3.7.3.1小节中所介绍的方法,计算从下一跳设备到它本身的链路成本,将该链路成本与载荷中的路由成本域中的值相加,并将其结果更新载荷中的路由成本域,得到新的路由成本。

如果接受设备具有路由能力,则将设备地址同路由应答命令帧载荷的始发者地址域的内容比较,来判断设备是否为路由应答命令帧的目的设备。如果是该应答命令帧的目的设备,则在路由搜索表中搜索与路由应答命令帧载荷中的路由请求标识符相对应的入口。如果不存在这样的入口,将丢弃路由应答命令帧,并终止对路由应答帧的处理。如果存在有这样的路由选择表入口,则设备将在路由选择表搜索一个与路由应答命令帧中响应地址相对应的入口。如果不存在这样的路由选择表入口,则丢弃路由应答命令帧,且即使对应于路由应答命令帧中的路由请求标识符的路由搜索表入口存在,也要删除该应答帧,并且,终止对路由应答帧的处理流程。如果路由选择表入口和路由搜索表入口都存在,且路由选择表入口的状态域为DISCOVERY-UNDEERWAY,如果路由表入口的GroupId标志位为真,则需要改为ACTIVE,并且路由选择表中的下一跳域应设置为向前发送路由应答命令帧的前一个设备的地址。将路由搜索表入口中的剩余的成本域值设置到路由应答载荷的路由成本域中。

如果状态域已经设置为ACTIVE,则设备对路由应答命令帧中的路由成本域路由搜索表入口中的剩余路由成本进行比较,并且如果路由应答命令帧中的成本更小,则更新在路由选择表中的剩余路由成本域和下一跳域。如果路由应答命令帧中的成本更大或相同,则丢弃该路由应答帧,部队该帧进行处理。

如果接收到路由应答的设备不是目的地址设备,则设备搜索与路由应答命令帧载荷中的始发者的地址和路由请求标识符相对应的路由搜索表入口。如果不存在这样的路由搜索表入口,则将丢弃该路由应答命令帧。如果存在这样的路由搜索表入口,则对路由应答命令帧中的路由成本与路由搜索表入口中的剩余路由成本进行比较。如果路由搜索选择表入口的值更小,则将丢弃路由应答命令帧。否则,设备将搜索与路由应答命令帧中的发送者地址相对应的路由选择表入口。如果路由搜索表入口存在,但没有相对应的路由选择表入口,此时就是产生一个错误,则应丢弃该路由应答命令帧。利用向前发送该路由应答帧设备地址替代下一跳地址的方法,对路由选择表入口进行更新。同时,利用路由应答命令帧中的成本替代剩余成本的方法,更新路由搜索表入口。

当接收的路由应答使得响应路由表入口的下一跳地址更改,路由表入口的GroupId标志为TRUE,如果设备是路由应答帧的目的地址,那么设备将响应的路由发现表入口的expiration time域设置为nwkcWaitBeforeValidation毫秒,如果不是,则设置为nwkcRouteDiscoveryTime毫秒。

在更新本身的路由入口后,设备将向目的地址发送路由应答。在向前发送路由应答帧前,需要更新路由成本。发送者通过在路由搜索表中搜索与与路由请求标识符、源地址以及所提取的发送者地址相应入口的方法,找到下一跳到路由应答的目的地址。利用下一跳地址,根据1小节的计算方法,计算链路成本,并将该成本加到路由应答的路由成本域中。在命令帧网络头中的目的地址应设置为下一跳地址,并且通过MCPS-DATA.request原语向下一跳设备单播发送。

4 初始化和处理路由记录命令帧

如3小节所述,如果设备正在处理一个单播数据信息,并且目的地址的路由表入口的路由记录请求域为TRUE,它将首先检测路由表入口的Memory Constrained域。如果目的地址没有强制记忆,那么设备将向目的地址发送单播路由记录命令,如果向下一跳传输成功,则路由表入口的路由记录请求域置为FALSE。如果目的地址强制记录,并且要转发的消息由本地生成,或者接收于一个终端子设备,则向目的地址单播路由记录命令,否则不发该命令。

每一个接收到路由记录命令的转发节点应将它的网络地址、转发计数器增量、前向消息附加到其命令载荷。如果路由记录命令成功传输到下一跳,目的地址不是强制记忆,则目的地址路由表入口的路由记录请求域为FALSE。如果没有下一跳地址,或者若果向下一跳发送失败,或者对于id载荷没有足够的空间,则命令帧将被丢弃,网络层管理实体将通过NLME-ROUTE-ERROR.indication原语通知上层。

目的地址接收到路由记录命令后,路由将被存储在源路由表中。任何一个现有的消息路由的路线或中间节点都将被新的路由信息取代。

6 结束路由发现表入口

当建立一个路由发现表入口,它的终止时间应设置为nwkcRouteDiscoveryTime毫秒。对于GroupId标志为TRUE的入口,当接收到的路由回复引起下一跳改变,则响应的路由发现表入口的终止时间域也发生改变。如果设备是路由回复的目的地址,则将终止时间域设置为nwkcWaitBeforeValidation毫秒,否则设置为nwkcRouteDiscoveryTime毫秒。当时间终止了,设备将从路由发现表中删除路由请求入口。如果设备是路由请求的始发设备,对应于目的地址的路由表入口的状态域值为VALIDATION_UNDERWAY,那么设备将通过一个有效的路由传输消息。该消息或者为缓冲的未决路由发现,或者为路由错误命令,其错误代码为0x0a(有效路由)。如果对应于目的地址的路由表入口的状态值不是ACTIVE,并且在路由发现表中没有相同目的地址的入口,则路由表入口也将被删除。

路由维护

每一个设备的网络层为每一个邻居设备维护一个失效计数器,该邻居设备具有一条输出链路,即要求发送一个数据帧。如果输出链路失效计数器的值超过了nwkcRepaitThreshold,则设备根据如下所述方法,开始路由维护。可选择一个简单的失效计数方案来生成这个失效计数器值,或者使用一个更加准确的时间窗口方案。需要注意的是,由于修复操作涉及在整个网络,可能导致其他通信中断,因此,不可能经常对路由进行修复。退休的链路和终止查找失败的程序超出了该协议的范围。

1路由修复

当设备正在处理一个路由表入口的many-to-one域为TRUE的单播数据帧时,如果链路失败,则生成一个错误码为Many-to-one route failure的路由错误信息。路由错误命令帧网络帧头的目的地址域应与导致错误的帧的网络层帧头的目的地址域一致。路由错误命令的目的地址域应与导致错误的帧的网络层帧头的源地址一致。利用MCPS-DATA.request原语向它的随机路由器邻居单播路由错误信息。因为时多对一路由,所有的邻居都被认为由对应于目的地址的路由表入口。接收到路偶错误帧后,如果没有对应于目的地址的路由表入口,或者向路由表入口的下一跳传输路由错误信息失败,那么将利用MCPS-DATA.request原语随机的向它的路由器邻居发送路由错误信息。网络层帧头的半径将限制路由错误转发的最大次数。目的地址接收到路由错误帧,它将利用NLME-ROUTE-ERROR.indication原语通知上层路由错误。网络层不能自动的重新发现多对一路由。

 


如果指定终端目的地址的父节点接收到路由错误命令帧,其命令帧载荷的错误代码值为0x01或0x02,表明链路失败,如果存在命令帧载荷中的目的地址相对应的路由表入口,网络层将移除该入口。然后向终端设备转发该帧。

如果终端设备接收到路由错误命令帧,网络层将向上层发送NLME-ROUT-EERROR.indication原语。

如果是终端设备并且简化功能设备与父节点发生链路失败,终端设备将向上层发送NLME-ROUT-EERROR.indication原语,其状态参数值为0x09,表明父节点连接失败.同样,如果没有路由能力的ZigBee路由器与其父节点链路失败,其nwkUseTreeRouting值为TRUE,它将向上层发送状态参数为0x09的NLME-ROUT-EERROR.indication原语,表明父节点链路失败。

你可能感兴趣的:(zigbee路由杂谈)