经过2周努力,已经初步实现相应的功能。标量的获取和设置都已经没有问题,上次咨询的表的查询部分问题也已经得到解决,但是只能实现含2个节点的表,如图:
对sensorTable进行Get Table操作,可以获取数据(其中数据时我随意写的,没什么关系),如图:
An example for a private MIB is part of the "minimal Unix" project:
contrib/ports/unix/proj/minimal/lwip_prvmib.c
附件是unix项目中的提供的模板代码,做相应的修改,此处表的数据时在系统启动的时候初始化的,有一定的局限性,当表的数据未知时,我怎们能随时插入表的行数呢?
void lwip_privmib_init(void)
{
int index=0 ,i;
struct mib_list_node *dummy;
struct mib_list_rootnode *iprte_rn;
for(i=0;i<3;i++) //对表增加3行数据
{
iprte_rn=&sensor_addr_inf.sensor_list_rn;
dummy=NULL;
snmp_mib_node_insert(iprte_rn,i,&dummy);
}
if (sensor_addr_inf.sensor_list_rn.count != 0)
{
/* enable sensor table, 2 tree_levels under this node
one for the registers and one for the index */
sensorentry.tree_levels = 2;
}
}
在下面这个函数中将表的对象数返回值进行修改就可实现:
static u16_t
sensorentry_length(void* addr_inf, u8_t level)
{
struct sensor_inf* sensors = addr_inf;
if (level == 0)
{
/* one object (temperature) */
/*表中有2个节点,返回2,当表中有3个节点时,我改为return 3,getnextrequest这个表,导致死机。但是我单独获取每 个节点时没有问题*/
return 2;
}
else if (level == 1)
{
/* number of sensor indexes */
/*表的数据行数*/
return sensors->sensor_list_rn.count;
}
else
{
return 0;
}
}
当表中含3个节点,如图:
我单独get每个节点,即分别对节点sensorIndex,sensorName,sensorValue进行Get Colunm操作,可以获取相应的数据,
如图:
但是我对sensorTable进行Get Table操作时,系统死机。
请问还有哪些地方需要修改的吗?修改过lwip的SNMP,所以这个问题应该不难,望赐教,谢谢了!