Как использовать RowStatus?

Я пишу SNMP-менеджер и симулированный SNMP-агент из MIB (для тестирования менеджера). У меня есть таблица, аналогичная приведенной ниже, в которой менеджер должен иметь возможность добавлять/удалять строки. Как это обычно делается с помощью RowStatus? Сначала устанавливается RowStatus? Можно ли включить в PDU другие OID?

Мой первоначальный вариант использования - таблица пуста при запуске. Итак, если я отправлю SET PDU следующим образом:

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

Должно ли это работать для определения ниже? Что должно произойти, если cRowStatus не указан?

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 }

Обратите внимание, что это MIB SMI v1, использующий RowStatus в качестве определенного типа, аналогичный описанному здесь. Таким образом, чтение-создание подразумевается, а не указано здесь.


person Steve Jackson    schedule 03.02.2011    source источник


Ответы (1)


Текстовое соглашение RowStatus на самом деле дает агенту достаточную свободу действий в том, как он его реализует. Таким образом, менеджер должен поддерживать оба этих способа, а агент должен поддерживать только один (но может поддерживать два):

  1. Последовательные PDU:
    1. Установите для переменной состояния строки значение «createAndWait».
    2. Установите все столбцы, которые вы хотите настроить (в одном PDU или во многих)
    3. Установите для переменной состояния строки значение «активно».
  2. Установите для переменной состояния строки значение «createAndGo» и включите **все** переменные, которые вам нужно установить, в один PDU.

К сожалению, менеджер должен быть умным и знать, как разговаривать с агентами, которые поддерживают одно или другое. Принято считать, что менеджеры крупнее и имеют больше возможностей для решения проблем, чем тщедушные агенты. Однако многие небольшие устройства поддерживают только пункт 2 выше.

person Wes Hardaker    schedule 03.02.2011
comment
В #2 агент ожидает, что переменная состояния строки будет первой загружена в PDU? Должно ли это иметь значение? - person Steve Jackson; 04.02.2011
comment
Это не должно иметь значения, но одна вещь, которую я усвоил за эти годы, заключается в том, что люди пишут код, который не следует правилам, и возлагают на них надежды, которых не следует ожидать. Итак... Я бы поставил это на первое место, потому что некоторые агенты, скорее всего, ожидают этого. - person Wes Hardaker; 04.02.2011
comment
Мне приходилось иметь дело с агентами SNMP от Nortel, которые не могли отличить скалярные объекты от столбчатых, и с агентами Cisco, которые могли вывести из строя корпоративный коммутатор ATM. SNMP довольно прост, и удивительно, как мало разработчиков на самом деле читают RFC. - person PP.; 10.02.2011
comment
Менеджмент — это последнее, на что большинство людей хотят тратить деньги, и поэтому большинство поставщиков относятся к нему именно так. Спросите себя, что вы предпочитаете: коробку с лучшим управлением или коробку с новой функцией маршрутизации X. Большинство людей выбирают второе, и поставщики это знают. Новые функции превосходят управление в любой день. - person Wes Hardaker; 11.02.2011