Z-stack 之 打印路由表 和 邻居表
来源:互联网 发布:淘宝网的电话号码 编辑:程序博客网 时间:2024/04/29 12:30
邻居表和路由表在Z-stack已经定义,我们可以从网络属性库中利用z-stack提供的API来打印信息。
函数原型:(在NLMEDE.h中定义)
ZStatus_t NLME_GetRequest(ZNwkAttributes_t NIBAttribute,uint 16 index,void *Value);
参数描述: NIBAttribute-支持的属性:
nwkCapabilityInfo 网络容量
nwkNumNeighborTableEntries 邻居表数目
nwkNeighborTable 邻居表
nwkNumRoutingTableEntries 路由表数目
nwkRoutingTable 路由表
Index-------用于表的索引
Value-------指向包含属性值的内存位置的指针
如果要使用此函数,首先要看看已编辑的文件中是不是包含了NLMEDE.h的头文件,没有请包含。
初次使用API,感觉重要的是要把参数以及格式处理好。我使用的方法是在z-stack中搜索这个函数,发现在ZDO中使用过这个函数,就按照它的格式进行修改。代码如下:
/*******************************************************************邻居表和路由表的读取
********************************************************************/
uint8 capabilities;
NLME_GetRequest(nwkCapabilityInfo, 0, &capabilities);
byte ntnum=0;
NLME_GetRequest(nwkNumNeighborTableEntries,0,&ntnum);
byte index=0;
neighborEntry_t* ntTable;
uint8 *pNtBuf = NULL;
pNtBuf =osal_mem_alloc((short)(ntnum*sizeof(neighborEntry_t)));
if(pNtBuf!=NULL){
ntTable = (neighborEntry_t *)pNtBuf;
for(;index<ntnum;index++)
{
NLME_GetRequest(nwkNeighborTable,index,(void *)ntTable);
ntTable++;
}
}
/******************************************************************
neighborEntry_t nt2;
NLME_GetRequest(nwkNeighborTable,1,&nt2);
*****************************************************************/
byte rtnum;
NLME_GetRequest(nwkNumRoutingTableEntries,0,&rtnum);
uint8 *pRtBuf = NULL;
rtgItem_t* rtTable;
pRtBuf =osal_mem_alloc((short)rtnum* sizeof(rtgItem_t));
if(pNtBuf!=NULL){
rtTable = (rtgItem_t *)pRtBuf;
for(index=0;index<rtnum;index++)
{
NLME_GetRequest(nwkRoutingTable,index,(void *)rtTable);
rtTable++;
}
}
/*****************************************************************
rtgItem_t rt;
NLME_GetRequest(nwkRoutingTable,0,&rt);
******************************************************************/
/*******************************************************************
邻居表和路由表的读取
********************************************************************/
其间遇到了许多问题,诸如一定要在路由器,协调器关联好后,再查看路由表和邻居表的信息,否则出现的信息一直很奇怪。
相邻表条目定义格式:
typedef struct
{
uint16 neighborAddress; //相邻地址
uint16 panId; //所属的PAN网络ID
linkInfo_t linkInfo; //连接信息(包括发送/接收和安全帧计数)
} neighborEntry_t;
linkInfo_t定义格式:
typedef struct
{
uint8 txCounter; // Counter of transmission success/failures
uint8 txCost; // Average of sending rssi values if link staus is enabled
// i.e. NWK_LINK_STATUS_PERIOD is defined as non zero
uint8 rxLqi; // average of received rssi values
// needs to be converted to link cost (1-7) before used
uint8 inKeySeqNum; // security key sequence number
uint32 inFrmCntr; // security frame counter..
uint16 txFailure; // higher values indicate more failures
} linkInfo_t;
路由表定义格式
typedef struct
{
uint16 dstAddress; //目标地址
uint16 nextHopAddress; //单跳地址
byte expiryTime; //有效时间
byte status; //状态
} rtgEntry_t;
我简单的做了个实验来分析路由表,和邻居表。拓扑图如下:1号节点的儿子节点是2号。2号节点的儿子节点是三号。节点左边的地址上面是父节点地址,下面是自己节点短地址。
3号节点有两个邻居表,请注意是两个,不是三个。分别是1号节点(0x0000),和4号节点(0x4DC5)。为什么没有它的父节点信息呢?现在还没有研究。
其路由表有1个,目的地址是协调器,下一跳是0x359A,即是2号节点。
2号节点有邻居表两个:分别是0x2E91和0x4DC5。这是它的两个孩子节点,可还是没有父节点。
路由表个数为0个。
1号节点邻居表有三个,分别是2 3 4号节点。路由表个数也是0;
- Z-stack 之 打印路由表 和 邻居表
- OSPF之邻居路由
- Zigbee之Z-Stack
- z-stack调试之ZDApp_init
- Z-Stack中路由表的大小(Design Notes:Z-Stack routing table size)
- 路由域和路由表
- IP路由和路由表
- Z-STACK之cc2530LED驱动详解
- Z-STACK之cc2530key驱动详解
- Z-STACK之cc2530DMA驱动详解
- ZigBee Z-stack 学习之osal_task
- Z-STACK问题之串口结构uartCfg_t
- Z-stack之OSAL初始化流程
- bgp中的数据表--邻居表
- 路由子系统之路由表组织结构
- linux路由表和静态路由
- Linux 路由表和静态路由
- 路由和路由表生成算法
- 黑马程序员_java学习笔记16—java5的新特性
- Oracle 10.2.0.5 Dataguard creation and switchover/failover practise with RMAN in redhat 5.8 x64
- 临时存入datatable
- 车站调度问题
- MySql Sql语句总结
- Z-stack 之 打印路由表 和 邻居表
- 网络基础之载波、载频、单载波和多载波的理解
- 最优二叉树解决Fruit问题
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- 版本控制的分支策略及初步实践
- java mysql 中文乱码的解决方法
- C# Windows服务自动安装与注册
- 静静的在心里承受所有的伤痛和不快乐
- Linux软连接和硬链接