Как использовать RowStatus? - PullRequest
5 голосов
/ 04 февраля 2011

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

Мой первоначальный вариант использования - таблица пуста при запуске.Поэтому, если я отправлю 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 }

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

1 Ответ

3 голосов
/ 04 февраля 2011

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

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

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

...