2010-03-24 4 views
12

ASN.1을 작성한 이래로 얼마 지나지 않았습니다.SNMP : ASN.1 MIB 정의. 테이블 내에서 테이블 참조하기

데이터 모델은 테이블 내에 여러 테이블 정의로 구성되어 있습니다. 이것은 SNMP에서는 작동하지 않으므로 정의를 병합해야합니다. 이렇게하는 가장 쉬운 방법은 부모 테이블과 같은 OID로 포함 된 테이블을 인덱싱하는 것입니다. 따라서

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

은 좋은 일이 우리의 응용 프로그램에 아주 좋은 이유가 (GET 또는 SNMP 거리에 대한 NEXT 그래서 필요를 얻을, SET의 어떤 종류가 결코 것입니다

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

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

된다 네트워크 관리 우아함의 필요성을 대체하는이를 위해. 모든 속성은 트랩을 통해보고됩니다 만. 나는이 유효한 SNMP MIB 정의라고 생각하지만, 일부 피드백을 얻고 싶었다.

감사합니다 사전에.

답변

19

제대로 된 것 같습니다. 표를 다른 표의 하위 항목으로 정의하려면 상위 색인과 하위 색인 (예 : 0.1.8.23.7.2.42)을 사용하여 색인을 생성하십시오 (예 : 2은 상위 색인이고 42은 하위 색인 임). 그것은 이미 이후 ChildEntry 순서에 parentIndex를 나열 할 필요는 없습니다 것을

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 

참고 :로 정의 된 자식 테이블로

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 

:

는 예를 들어, 같은 부모를 정의 할 수 있습니다 MIB의 다른 곳에서 선언되어야합니다.

이 방법은 잘 작동하며 문제없이 SNMP 산책에 응답합니다.

원하는 구조를 정확하게 정의했다고 생각되는 MIB를 가지고 있다면 리눅스 머신에 있거나 cygwin이 설치되어 있거나 validate it online 일 수 있다면 smilint을 사용하여 유효성을 검사 할 수 있습니다.

업데이트

이 패턴뿐만 아니라 깊은 중첩에 대해 작동합니다.

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의 길이 (I 믿고, 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 
+1

아주 좋은 :

두 번째 아이

는 다음과 같이 정의 할 수있다. 빠른 피드백에 감사드립니다. – Doug

+1

이 원칙은 세 번째 테이블에 적용됩니까? 즉, 3 개의 인덱스가 있거나 계층 구조의 깊이가 커짐에 따라 더 나은 관리 방법이 있습니까? – TheJuice

+2

@ TheJuice : 예, 원칙은 최대 OID 길이까지 어린이 테이블에 적용됩니다 (나는 127이라고 생각합니다). 추측 하듯이 각각의 추가 레벨은 다른 색인을가집니다. 내 대답을 편집하여 예제를 포함시켜 보겠습니다. 나는 더 깊은 계급을 관리하는 더 좋은 방법을 알지 못한다. – lostriebo