2011-02-03 15 views
5

Piszę menedżera SNMP i symulowanego agenta SNMP z MIB (aby przetestować menedżera). Mam tabelę podobną do poniższej, którą kierownik powinien mieć możliwość dodawania/usuwania wierszy. Jaki jest zwyczajowy sposób na wykonanie tego przy użyciu RowStatus? Czy RowStatus jest ustawiony jako pierwszy? Czy inne OID mogą być zawarte w PDU?Jak korzystać z RowStatus?

Moim początkowym przypadkiem użycia jest tabela pusta przy uruchomieniu. Więc jeśli wyślę SET PDU w ten sposób:

createStuffEntry.1.1.1 = 1 
createStuffEntry.2.1.1 = 1 
createStuffEntry.3.1.1 = 99 
createStuffEntry.4.1.1 = "Dustbunnies" 
createStuffEntry.5.1.1 = 5 

Czy to powinno być zgodne z poniższą definicją? Co powinno się stać, jeśli cRowStatus zostanie pominięty?

createStuffTable OBJECT-TYPE 
    SYNTAX SEQUENCE OF CreateStuffEntry 
    ACCESS not-accessible 
    STATUS mandatory 
    DESCRIPTION 
      "A table for creating stuff." 
    ::= { parentGroup 1 } 

createStuffEntry OBJECT-TYPE 
    SYNTAX CreateStuffEntry 
    ACCESS not-accessible 
    STATUS mandatory 
    DESCRIPTION 
      "An entry for building a stuff to create." 
    INDEX { cPlanID, cID } 
    ::= { createStuffTable 1 } 

CreateStuffEntry ::= 
    SEQUENCE { 
     cPlanID 
      INTEGER, 
     cID 
      INTEGER, 
     cTemplateID 
      INTEGER, 
     cStuffName 
      DisplayString, 
     cRowStatus 
      RowStatus 
    } 

cPlanID OBJECT-TYPE 
    SYNTAX INTEGER 
    ACCESS read-write 
    STATUS mandatory 
    DESCRIPTION 
      "The plan ID (cpPlanID)" 
    ::= { createStuffEntry 1 } 

cID OBJECT-TYPE 
    SYNTAX INTEGER 
    ACCESS read-write 
    STATUS mandatory 
    DESCRIPTION 
      "The table entry index." 
    ::= { createStuffEntry 2 } 

cTemplateID OBJECT-TYPE 
    SYNTAX INTEGER 
    ACCESS read-write 
    STATUS mandatory 
    DESCRIPTION 
      "The ID of the stuff template to create this stuff from." 
    ::= { createStuffEntry 3 } 

cStuffName OBJECT-TYPE 
    SYNTAX DisplayString 
    ACCESS read-write 
    STATUS mandatory 
    DESCRIPTION 
      "The stuff name." 
    ::= { createStuffEntry 4 } 


cRowStatus OBJECT-TYPE 
    SYNTAX RowStatus 
    ACCESS read-write 
    STATUS current 
    DESCRIPTION 
     "This OID uses six main statuses: 
     active(1)   is in use and available in stuffTable 
     notinService(2) it is present but not yet created 
     notReady(3)  it is present but missing info 
     createAndGo(4) create stuff in stuffTable. Row will be 
          added to this table if necessary. 
     createAndWait(5) add stuff row to this table 
     destroy(6)  will remove the stuff row 

     This OID is used to add/remove rows for stuff creation. 
     It can also be used to determine if a stuff has been 
     created successfully." 
    ::= { createStuffEntry 5 } 

Uwaga to SMI V1 MIB pomocą RowStatus jako określonego typu, podobnie do opisanego here. Tak więc read-create jest domniemany, a nie tutaj.

Odpowiedz

3

Konwencja tekstowa RowStatus w rzeczywistości zapewnia pośrednikowi dużą swobodę w sposobie jego implementacji. Tak więc, menedżer musi obsługiwać oba te sposoby i agent musi obsługiwać tylko jeden (ale może obsługiwać dwa):

  1. konsekutywne PDU:
    1. ustawiona zmienna stanu rząd do „createAndWait”
    2. Ustaw wszystkie kolumny, które chcesz skonfigurować (w jednym lub wielu) PDU
    3. ustawić zmienną do „aktywnego”
  2. ustawić zmienną stanu rząd do „createAndGo” i obejmują wszystkie ** ** zmienne stanu wiersz ty nie d, aby utworzyć pojedynczą jednostkę PDU

Niestety, menedżer musi być inteligentny i wiedzieć, jak rozmawiać z agentami, które obsługują jedno lub drugie. Ogólne przekonanie jest takie, że menedżerowie są więksi i mają więcej miejsca na kodowanie problemów niż słabi agenci. Wiele małych urządzeń obsługuje tylko # 2 powyżej.

+0

W punkcie 2 agent będzie oczekiwał, że zmienna stanu wiersza zostanie najpierw załadowana do jednostki PDU? Czy to ma znaczenie? –

+2

To ** nie powinno ** mieć znaczenia, ale jedyną rzeczą, której nauczyłem się przez te wszystkie lata jest to, że ludzie piszą kod, który nie przestrzega zasad i nie spełnia oczekiwań. Więc ... Powiedziałbym to pierwszy, ponieważ niektórzy agenci prawdopodobnie będą tego oczekiwać. –

+1

Miałem do czynienia z agentami SNMP firmy Nortel, którzy nie byli w stanie odróżnić obiektów skalarnych i kolumnowych od agentów Cisco, które mogłyby obniżyć przełącznik ATM w przedsiębiorstwie. SNMP jest dość prosty i jest zadziwiające, jak niewielu implementatorów czyta RFC. –