源地址:https://blog.csdn.net/carechere/article/details/51236184
對MIB文件中一些常見的宏定義的描述
1.DEFINITIONS ::= BEGIN
SNMP始終使用ASN.1概念中的描述塊(module)來組織ASN.1對象的,ASN.1的描述塊是一些相關描述語句的集合,module的結構如下
<<module>> DEFINITIONS ::= BEGIN
<<linkage>>
<<declarations>>
END
2.<<basetype>> ::= TEXTUAL-CONVENTION
定義了對標准數據類型的進行擴展的語法
很多MIB定義中都會先定義一些基於標准類型的擴展類型,如:
CiFlowDirection ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"The direction of data flow thru a circuit.
transmit(1) - Only transmitted data
receive(2) - Only received data
both(3) - Both transmitted and received data."
SYNTAX INTEGER {
transmit(1),
receive(2),
both(3)
}
CiFlowDirection 是基於INTEGER的枚舉類型
3.<<mibname>> MODULE-IDENTITY
該定義添加了一個公共的標示段來對整個信息描述塊進行頂層的文字描述,以加強對管理MIB描述塊的文檔管理和控制,每個MIB定義中都會有該定義。
如:
circuitIfMIB MODULE-IDENTITY
4.OBJECT-IDENTIFIFIER
聲明一個節點
如:
atmClpTaggingNoScr OBJECT-IDENTITY
5.OBJECT-TYPE
如:
ciCircuitTable OBJECT-TYPE
SYNTAX SEQUENCE OF CiCircuitEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The Circuit Interface Circuit Table."
::= { ciObjects 1 }
包括了SNMP定義該管理對象的全部信息,相當於一個模板。
表,實體,葉子都是該類型。
SNMPv2中對SNMP的兼容性做了規定,主要是通過引入三個宏: OBJECT-GROUP,MODULE-COMPLIANCE,AGENT-CAPABILITIES.
6.OBJECT-GROUP
定義相關管理對象集合以及他們彼此關聯的一致性程度。OBJECT-GROUP聲明的MIB對象是實現該組所必須包括的MIB對象的最小集合。也就是說,要實現這個組,必須包括這些對象。
7.MODULE-COMPLIANCE
通過定義模塊內所包含的組來保證模塊的兼容性。
規定了要實現該模塊必須包含的組的最小集合。
其中MANDATORY-GROUPS規定了此模塊必須實現的組的名稱。GROUP子句說明條件必須活條件可選的組。
8.AGENT-CAPABILITIES
管理代理實現了模塊中的哪些組以及這些組中的MIB對象在實現時和原定義的差別在管理信息結構中由此宏定義表示。此宏定義在實際應用中很少見。
9.OBJECT-IDENTITY
對象標示宏,此宏定義用於說明對象標示符(OBJECT-IDENTIFIER),給對象標示符的說明加上附加信息,包括狀態,文字說明等,可用於對一個表中幾個參數的不同組合的意義的說明。
10.NOTIFICATION-TYPE
說明了SNMPv2的trap格式。定義了通知類型報文中傳輸的數據。
MIB file的開始和結束
所有的MIB file的都以DEFINITIONS ::= BEGIN關鍵字開始,以END結束。我們所有添加的節點均應在此之間。
XXX-TEST-MIB DEFINITIONS ::= BEGIN
……
……
END
模塊引用區域
在MIB開始關鍵字后,即是模塊引用區域,利用IMPORTS標識,所有的模塊引用及群組的引用均使用FROM關鍵字說明其出處,引用使用分號(;)結束。
注:分號,英文全角分號。
在一個MIB file中,所有引用到的數據類型均應有引用。
如:
IMPORTS
enterprises
FROM RFC1155-SMI
Integer32
FROM SNMPv2-SMI
DisplayString
FROM SNMPv2-TC;
MIB核心部分(對象標識,標量節點,表格對象的定義)
對象標識
對象標識用關鍵字OBJECT IDENTIFIER聲明,它的主要功能是用來將一類功能的對象結合起來。展開或折疊此對象標識即可展開或折疊此類功能的所有對象。
在ASN.1中,對象標識符類型描述對象的抽象信息,MIB樹中的每一個標號是用對象標識符描述的。
例如:
xxx OBJECT IDENTIFIER ::= {enterprises 22566}
xxx是一個子樹支,它定義在enterprises樹支下,“22566” 是子樹xxx在父樹enterprises下的一個唯一對象標識符。
其編譯后的視圖為:
標量節點
在每一個樹支下,可以定義被管理資源的管理對象,其中一類是標量節點(直觀地看象樹葉的節點)。利用OBJECT-TYPE定義。其定義的句法如下:
objectname OBJECT-TYPE
SYNTAX (syntax)
MAX-ACCESS (access)
STATUS (status)
DESCRIPTION (description)
::= { ( parent ) ( number )
關鍵字 |
說明 |
備注 |
objectname |
被管理對象的名字 |
必須以小寫字母開頭 |
OBJECT-TYPE |
每一個葉子對象所必須的關鍵字 |
|
syntax |
被管理對象類型的關鍵字 |
Counter(計數) Gauge(標准) DisplayString(顯示字符串) Interger(整數) TimeTicks(時間戳) NetworkAddress(網絡地址) IpAddress(Ipv4地址) |
access |
該節點支持的訪問方式 |
read-only(只讀) read-write(讀寫) read-create(讀和創建) no-accessible(不可訪問) |
status |
該節點的狀態 |
current (當前的) deprecated (反對的) obsolete(廢棄的) |
description |
對被管理對象的功能、特征等進行描述的關鍵字 |
|
例如:
Xxxx OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"
"
::= { xxxx 1 }
表類型
表類型是一個特殊類型的聲明,表內聲明的對象稱為列對象,表對象可以看作是一些標量對象的集合。利用SEQUENCE和SEQUENCE OF定義表格和表格中的行, 通常來說,表格對象的名字后面加有后綴Table,行對象的名字后面加有后綴Entry。
其聲明如下:
tablename OBJECT-TYPE
SYNTAX SEQUENCE OF Entrytype
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION (description)
:: ={ (parent) (number)}
entryname OBJECT-TYPE
SYNTAX Entrytype
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION description
INDEX { index list }
:: ={ (tablename) 1}
(Entrytype) :: =
SEQUENCE {
(column1) (column1type),
(column2) (column1type),
( columnN) (columnNtype) }
關鍵字 |
說明 |
備注 |
tablename |
表格名 |
xxxxTable首字母小寫 |
Entrytype |
表對象名 |
XxxxEntry首字母大寫 |
not-accessible |
訪問方式 |
此處必須是not-accessible |
entryname |
行名 |
和XxxxEntry名相同,首字母小寫xxxxEntry |
description |
描述信息 |
|
源碼如下:
XXX-TEST-MIB DEFINITIONS ::= BEGIN
IMPORTS
enterprises
FROM RFC1155-SMI
Integer32
FROM SNMPv2-SMI
DisplayString
FROM SNMPv2-TC;
xxx OBJECT IDENTIFIER ::= {enterprises 22566}
zkClassInfoTable OBJECT IDENTIFIER ::= {xxx 1}
zkClassInfoTable2 OBJECT IDENTIFIER ::= {xxx 2}
zkClassInfoTable OBJECT-TYPE
SYNTAX SEQUENCE OF ZkClassInfoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"
This is test table.
"
::= {xxx 1}
zkClassInfoEntry OBJECT-TYPE
SYNTAX ZkClassInfoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"
This is teat entry.
"
INDEX {zkClassInfoIndex}
::= {zkClassInfoTable 1}
ZkClassInfoEntry ::= SEQUENCE {
zkClassInfoIndex Integer32,
zkClassInfoSex Integer32,
zkClassInfoAge Integer32,
zkCLassInfoName DisplayString,
zkClassInfoAddress DisplayString
}
zkClassInfoIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 1}
zkClassInfoSex OBJECT-TYPE
SYNTAX Integer32 {
man(1),
woman(2)
}
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 2}
zkClassInfoAge OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 3}
zkCLassInfoName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 4}
zkClassInfoAddress OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 5}
zkClassInfoTable2 OBJECT-TYPE
SYNTAX SEQUENCE OF ZkClassInfoEntry2
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"
This is test table.
"
::= {xxx 2}
zkClassInfoEntry2 OBJECT-TYPE
SYNTAX ZkClassInfoEntry2
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"
This is teat entry.
"
INDEX {zkClassInfoIndex}
::= {zkClassInfoTable2 1}
ZkClassInfoEntry2 ::= SEQUENCE {
zkClassInfoSex2 Integer32,
zkClassInfoAge2 Integer32,
zkCLassInfoName2 DisplayString,
zkClassInfoAddress2 DisplayString
}
zkClassInfoSex2 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry2 1}
END
XXX-TEST_MIB DEFINITIONS ::= BEGIN
IMPORTS
enterprises
FROM RFC1155-SMI
Integer32
FROM SNMPv2-SMI
DisplayString
FROM SNMPv2-TC;
xxx OBJECT IDENTIFIER ::= {enterprises 40256}
zkClassInfoTable OBJECT IDENTIFIER ::= {xxx 1}
zkClassInfoTable2 OBJECT IDENTIFIER ::= {xxx 2}
zkClassInfoTable OBJECT-TYPE
SYNTAX SEQUENCE OF ZkClassInfoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"
This is test table.
"
::= {xxx 1}
zkClassInfoEntry OBJECT-TYPE
SYNTAX ZkClassInfoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"
This is teat entry.
"
INDEX {zkClassInfoIndex}
::= {zkClassInfoTable 1}
ZkClassInfoEntry ::= SEQUENCE {
zkClassInfoIndex Integer32,
zkClassInfoSex Integer32,
zkClassInfoAge Integer32,
zkCLassInfoName DisplayString,
zkClassInfoAddress DisplayString
}
zkClassInfoIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 1}
zkClassInfoSex OBJECT-TYPE
SYNTAX Integer32 {
man(1),
woman(2)
}
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 2}
zkClassInfoAge OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 3}
zkCLassInfoName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 4}
zkClassInfoAddress OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry 5}
zkClassInfoTable2 OBJECT-TYPE
SYNTAX SEQUENCE OF ZkClassInfoEntry2
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"
This is test table.
"
::= {xxx 2}
zkClassInfoEntry2 OBJECT-TYPE
SYNTAX ZkClassInfoEntry2
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"
This is teat entry.
"
INDEX {zkClassInfoIndex}
::= {zkClassInfoTable2 1}
ZkClassInfoEntry2 ::= SEQUENCE {
zkClassInfoSex2 Integer32,
zkClassInfoAge2 Integer32,
zkCLassInfoName2 DisplayString,
zkClassInfoAddress2 DisplayString
}
zkClassInfoSex2 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"
"
::= {zkClassInfoEntry2 1}
END