Был некоторое время, так как я записал 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, но требуемый для получения некоторой обратной связи.
Заранее спасибо.
Похоже, вы на правильном пути. Чтобы определить таблицу как дочернюю по отношению к другой таблице, вы просто индексируете ее по индексу родительского элемента плюс индекс дочернего элемента (например, 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