1. 程式人生 > >SNMP MIB中的含read-create節點的表的實現

SNMP MIB中的含read-create節點的表的實現

     做過snmp/mib開發的知道,常見的節點型別一般只有no-accessible,read-only,read-write三種訪問型別。snmp V2中引入了一種新的訪問型別:read-create。

     最近在一個產品的snmp管理介面開發中,需要實現snmpTargetMIB(.1.3.6.1.6.3.12),其下面兩個表snmpTargetAddrEntry和snmpTargetParamsTable的節點都是read-create型別。

    

    read沒什麼好說的,關鍵是這個create。Create是指這個表的行可以通過“snmp途徑”來操作(增加,刪除)。這些行操作是通過表中的“RowStatus”節點來進行的,比如上圖中的snmpTargetAddrRowStatus和snmpTargetParamsRowStatus。mib中這兩個節點的型別定義如下:

        ROWSTATUS INTEGER {active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6) }

      1.表中行的建立/刪除操作 

       如果把rowstauts節點值設成(SnmpSet)4,5則表示在表中建立一個新的行(索引值同rowstatus節點)。

        而1,2,3則是用來標記這一行描述的物件的狀態的(前提是已經建立)。即建立一行後,應根據物件的=狀態來更新rowstatus節點值到1/2/3。

        如果把RowStatus的值設成6,則表示要刪除這行。

        可能有點繞,總結一下,有管理軟體(發起snmp命令的)和被管理方(MIB所在處),表的行的節點建立&刪除指令由管理軟體來發送,由被管理方來執行。

        舉個例子:

             比如表中已經有兩條記錄:  

             snmpTargetAdrrRowStatus(1) --->Active

             snmpTargetAddrRowStatus(2) ---->notReady

             要增加一個索引為3的記錄,管理方發起一條 snmpSet snmpTargetAddrRowStatus(3) --->createAndGo,被管理方收到這條訊息後,在表中建立一條索引為3的記錄,包括snmpTargetAddrRowStatus(3)節點。

       2.表中行的節點值的維護/更新

       錶行中所有的節點的值,除了rowStatus的4,5,6只能由管理軟體來寫(snmp-set),其他節點的值和RowStatus的2,3,4可以由管理軟體或被管理方來更新。這點mib定義是未做約束的,我覺得這樣也是合理的,可以根據需要靈活處理。

         比如要新增一個告警目標(IP地址),這個地址通過管理軟體來設定(snmp-set snmpTargetAddrTAddress),也可以在被管理方上來設定(比如通過Console介面,配置檔案等)。  而這個目標是否可以連通則由被管理方來檢測(根據結果設定rowStatus的值到1/2/3)。其實每個節點在建立後被管理方都應給它個預設值。


     關於read-create節點表的軟體實現,提供點思路吧。

     管理方軟體:

             其實就是snmp-get 和snmp-set的命令組合,和read-write節點操作一樣。“create”是通過snmp-set RowStatus節點來實現的。

     被管理方軟體:

             對於RowStatus節點,定義好對RowStatus節點操作的回撥函式,回撥函式中根據寫入的值來建立/刪除表中的記錄行。對於其他節點的實現則和read-write節點一樣。