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節點相同的地方。
到此爲止新的節點添加完成。