SNMP: ASN.1 Определения MIB. Ссылка на таблицу в таблице

Был некоторое время, так как я записал ASN.1 так..

Наша модель данных состоит из нескольких определений таблицы в таблице. Это не осуществимо в SNMP, таким образом, мы должны сгладить определения. Самый легкий способ сделать этому должен был бы индексировать встроенную таблицу тот же OID как родительская таблица. Таким образом

someTableEntry ::= SEQUENCE {
   someTableIndex
        Integer32,
   someTableDomain
        Integer32,
   someTableFooTable
        SEQUENCE OF SomeTableFooTable
} 

становится

    someTableEntry ::= SEQUENCE {
       someTableIndex
            Integer32,
       someTableDomain
            Integer32,
    } 

someTableFooTable ::= SEQUENCE {
    someTableIndex
       Integer32,
....
} 

Хорошая вещь состоит в том, что в нашем приложении никогда не будет никакого вида НАБОРА, ПОЛУЧАТЬ или ПОЛУЧАТЬ NEXT так никакая потребность в обходе SNMP (существуют некоторые очень серьезные основания для этого, которые заменяют потребность в элегантности управления сетью. Обо всех атрибутах сообщат через прерывания только. Я думаю, что это - допустимый SNMP определения MIB, но требуемый для получения некоторой обратной связи.

Заранее спасибо.

13
задан Doug 24 March 2010 в 17:58
поделиться

1 ответ

Похоже, вы на правильном пути. Чтобы определить таблицу как дочернюю по отношению к другой таблице, вы просто индексируете ее по индексу родительского элемента плюс индекс дочернего элемента (например, 0.1.8.23.7.2.42 , где 2 - родительский индекс и 42 дочерний индекс).

Например, вы можете определить родительский элемент, например:

parentTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF parentEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Parent table"
    ::= { example 1 }

parentEntry OBJECT-TYPE
    SYNTAX       ParentEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Entry in Parent table"
    INDEX        { parentIndex }
    ::= { parentTable 1 }

ParentEntry ::= SEQUENCE {
    parentIndex            Unsigned32,
    -- other columns in the table
    }

-- define the columns in the parent table

С дочерней таблицей, определенной как:

childTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF childEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Child table"
    ::= { example 2 }

childEntry OBJECT-TYPE
    SYNTAX       ChildEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Entry in Child table"
    INDEX        { parentIndex,
                   childIndex }
    ::= { childTable 1 }

ChildEntry ::= SEQUENCE {
    childIndex            Unsigned32,
    -- other columns in the table
    }

-- define the columns in the child table

Обратите внимание, что указывать parentIndex в последовательности ChildEntry необязательно, поскольку он уже объявлен где-то в MIB.

Этот метод работает хорошо и даже без проблем реагирует на обходы snmp.

Если у вас есть MIB, которая, по вашему мнению, точно определяет желаемую структуру, вы можете проверить ее с помощью smilint , если вы работаете на компьютере с Linux или у вас установлен cygwin, или вы можете проверить его онлайн. .

Обновление

Этот шаблон также будет работать для более глубокого вложения.

Таблица внуков может быть определена как:

grandChildTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF grandChildEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Grandchild table"
    ::= { example 3 }

grandChildEntry OBJECT-TYPE
    SYNTAX       GrandChildEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Entry in Grandchild table"
    INDEX        { parentIndex,
                   childIndex,
                   grandChildIndex }
    ::= { grandChildTable 1 }

grandChildEntry ::= SEQUENCE {
    grandChildIndex            Unsigned32,
    -- other columns in the table
    }

-- define the columns in the grandChild table

Единственное ограничение на глубину вложенности - это максимальная длина OID (которая, я полагаю, составляет 127): базовая длина OID столбца плюс количество индексов для таблицы должны быть меньше максимальной длины OID.

Еще один важный момент: на каждом уровне может быть несколько братьев и сестер.

Второй дочерний элемент может быть определен как:

secondchildTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF secondchildEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Second child table"
    ::= { example 4 }

secondchildEntry OBJECT-TYPE
    SYNTAX       SecondchildEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION  "Entry in Second child table"
    INDEX        { parentIndex,
                   secondchildIndex }
    ::= { secondchildTable 1 }

SecondchildEntry ::= SEQUENCE {
    secondchildIndex            Unsigned32,
    -- other columns in the table
    }

-- define the columns in the second child table
20
ответ дан 1 December 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: