1.首先需要添加的是下面的idbObjDesc_t 结构:
LOCAL idbObjDesc_t xxxNodeVersion_objDesc[] = {
{xxxNodeVersion,1,4,/*localId=0 1.3.6.1.2.1.68.1.1*/
{0,0},IDB_INTEGER,IDB_READ,
(IDB_VALID),xxxMibScalarHandler,
(char *)0,"xxxMib:xxxNodeVersion"},
{0}
}
(1),上面加粗的三个地方“xxxNodeVersion_objDesc”,“xxxNodeVersion”,“xxxMib:xxxNodeVersion”,这三个地方都是和名字相关的,需要修改,就是修改为你想添加的节点的名称,例如:sysName,sysLocal这些节点的名称,但是修改的时候记得要和原先的结构保持一致不要破坏之前的结构。
(2).上面标红的两个地方要保持一致,即xxxNodeVersion后面的“x”必须是你添加的节点的最后一个数值,另外要注意新添加的节点一定不要和原有的节点冲突,所以要仔细检查之前的节点,确认之前的节点是从x.x.x.x.x.x.x ----- x.x.x.x.y.y.y.y,然后新的节点添加为x.x.x.x.y.y.y.y+ 1,这样才能添加成功。
(3).上面加下划线的两个地方:“IDB_INTEGER”,“IDB_READ”,第一个是表示的是数据交互类型,这个类型在mib中有很多,这里就不说了,可以从其他的结构中看到这些类型,复制那些结构中的类型修改我们添加的节点的类型就行。第二个是表示的节点是可读可写性,这个同样是模仿其他节点来修改我们的结构。
(4).上面标紫色的地方是节点信息处理函数,这个函数最好使用之前原本就有的函数,我们在其中添加新的节点即可,不用重新写函数,不然会很复杂;当然这个函数必须是标量处理函数。
2.修改下面的idbOidTable_t结构:
LOCAL idbOidTable_t oidTable[] = {
{IDB_SNMP_STRUCT,{1,3,6,1,2,1,68,1},9,
0,1,{0},
xxxNodeVersion_objDesc },
...
...
...
在这里添加新的节点,必须在这里添加。
{IDB_TERMINATOR}
}
在上述结构中其实是把我们第一步创建的结构又进行了封装,并且带了其他的信息我们只需要按照原先的内容复制一份,添加到上述红色字体的位置就行,然后进行修改,修改内容包括:1,3,6,1,2,1,68,1,这是节点的索引所以需要修改为我们添加的节点索引;
“xxxNodeVersion_objDesc ”这个要修改为和我们在第一步中添加的结构的名称一样的名字。
3.修改下面的结构idbXlateTable_t:
LOCAL idbXlateTable_t xlateTable[] = {
{&oidTable[ 0],&xxxNodeVersion_objDesc[0]},
...
...
...
添加新的结构一定要添加在这里
{0}
}
上述添加新的结构的时候需要注意的是:oidTable后面的数组的索引,要修改成xlateTable这个结构中的所有元素的最后一个,比如添加的新的节点位置的前一个所以的9,那么我们添加新的就是10.
4.修改节点处理函数:
case xxxNodeVersion:
{
switch(requset)
{
case IDB_GET_NEXT:
case IDB_GET:
break;
case IDB_VALIDATE:
case IDB_SET_NVM:
case IDB_COMMIT:
break;
}
break;
}
上述修改中,在IDB_GET属性下面修改get数据时候的操作,一定要注意处理数据的时候使用的向前端推送的int和字符串或者ip等格式的数据采用的推送函数是不一样的,不要使用错误。IDB_COMMIT后面添加set数据时候的操作。xxxNodeVersion这个定义可以添加到和其他的mib节点相同的地方。
到此为止新的节点添加完成。