网络管理
地址分配机制
Z-stack 采用分布式分配机制,整个网络架构由 3 个值决定
Lm :网络的最大深度
Cm :每个父设备拥有子设备数
Rm : 每个父设备拥有路由子设备数
d : 父设备所在的网络深度
则父设备下的路由器子设备间地址间隔:
当 Rm = 1
1 + Cm * (Lm - d - 1)
当 Rm != 1
Cskip(d)= (1 + Cm -Rm - Cm *(Rm) ^ (Lm - d -1))/(1 - Rm)
父设备给路由器分配的网络地址
Achild = Aparent + (n - 1) *Cskip(d) +1
父设备给终端分配的网络地址
Achild = Aparent + Rm * Cskip(d)+ n
对协调器来说
Cskip(d)= (1 + Cm - Rm - Cm * (Rm) ^ (Lm - d - 1)) / (1 - Rm)
= (1 + 5 - 3 - 5 * 3 ^ (3 - 0 - 1)) / (1 - 3)
= 21
路由器地址 = Aparent + (n - 1)* Cskip(d) + 1
路由器1 = 0x0000 + 1 = 0x0001
路由器2 = 0x0000 + 21 + 1 = 0x0016
路由器3 = 0x0000 + 2 * 21 +1 = 0x002b
终端地址 = Aparent + Rm * Cskip(d) + n
终端1 = 0x0000 + 3 * 21 +1 = 0x0040
终端2 = 0x0000 + 3 * 21 + 2 = 0x0041
对路由器1来说
Cskip (d)= (1 + Cm - Rm - Cm * (Rm)^ (Lm - d - 1))/ (1 - Rm)
= (1 + 5 - 3 - 5 * 3 ^ (3 - 1 - 1 )) / (1 - 3)
= 6
路由地址 = Aparent + (n + 1) * Cskip(d)+1
路由器1 = 0x0001 + 1 = 0x0002
路由器2 = 0x0001 + 1 + 6 = 0x0008
路由器3 = 0x0001 + 1 + 2 * 6 = 0x000E
终端地址 = Aparent + Rm* Cskip(d)+ n
终端1 = 0x0001 + 3 * 6 + 1 = 0x0014
终端2 = 0x0001 + 3 * 6 + 2 = 0x0015
网络管理函数
在NLMED.h 里有 4 个网络管理函数
//返回指向本设备的MAC地址的指针
byte * NLME_GetExtAddr(void);
//返回本设备的网络地址
uint16 NLME_GetShortAddr(void);
//返回父设备的网络地址函数
uint16 NLME_GetCoordShortAddr(void);
//参数是指向父设备的MAC地址的指针
void NLME_GetCoordExtAddr(byte * buf);