一、 理解和掌握ASN.1句法
1. 对象标识符 类型(OBJECT IDENTIFIER)
在ASN.1中,对象标识符 类型 描述对象的抽象信息,MIB树中的每一个标号是用对象标识符描述的。由于树的各个分支是用数值表示的,所以实际上对象标识符是一个整数数值的序列。它用OBJECT IDENTIFIER来声明,如:
myBranch OBJECT IDENTIFIER ::= { parentBranch 10 }
其中myBranch是一个子树支,它定义在parentBranch树支下,“10”是子树myBranch在父树支parentBranch下的一个唯一对象标识符,即通常所说的OID。在parentBranch树支下,可以定义多个子树支,但子树支的名字和数字(如上的10)不能重复,即必须是唯一的。
2. 标量(叶子)对象标识符
在一个树支下,读者可以定义多个子树,也可以定义被管理资源的管理对象,其定义的句法如下:
(objectname) OBJECT-TYPE
SYNTAX (syntax)
ACCESS (access)
STATUS (status)
DESCRIPTION (description)
::= { (parent) (number) }
以上的各部分解释如下:
(1)(objectname). 这是被对象的名字,ASN.1句法要求所有对象的名字必须以小写字母开头,而且该名字在MIB中必须是唯一的。
(2)OBJECT-TYPE.这是一个每一个叶子对象的所必须的关键字。
(3)SYNTAX.被管对象类型的关键字,说明随后跟着的是一个类型。
(4)(syntax).被管对象的类型,ASN.1句法要求所有的对象类型必须以大写字母开头,其中已预定义了的类型有Counter、Gauge、DisplayString、INTEGER等等,请参阅“3.对象语法定义”及“5.ASN.1的派生类型”。
(5)ACCESS.被管对象的访问方式的关键字。在SNMP第二版中为MAX-ACCESS关键字。
(6)(access).被管对象的访问方式,可为如下列举值中之一:read-only、read-write、 no-accessible,SNMP第2版中又新增了read-create。
(7)STATUS.被管对象的状态的关键字。
(8)(status).可取的值为:mandatory 、optional、obsolete、deprecate(SNMP第1版中),current、obsolete、deprecate(SNMP第2版)。
其中:mandatory为该对象的状态是必备的
optional为该对象的状态是可选的
obsolete为该对象的状态是不再使用
deprecate使用该值使得MIB的某些部分标记为过时,被标记为“废弃”的对象将从现行版本中删除,并在新的MIB版本中标记为“过时”。
current为该对象的状态是当前可用的。
(7)DESCRIPTION.对被管对象的功能、特征等等进行描述的关键字。
(8)(description).被管对象的文本描述。须用双引号把其文本说明括起来,有时由于用MIB编译器编译结果太大时,可以把文本说明删除,即只保留一个空的双引号。
(9)(parent).包含此叶子对象的树支,即叶子对象的父亲必须是用“OBJECT IDENTIFIER”声明。
(10)(number).在此父树支下的第几个叶子对象,这个数字在此父树支下必须是唯一的。一般number都是从取1开始的。例如:“::={ myObject 22 }”,则在myObject树支下22必须是唯一的,否则在用MIB编译器(如pSOS所提供的MIB编译器)进行编译时会提示有错。
除此之外,还有一些关键字:UNITS、INDEX、REFERENCE、DEFVAL等等,分别代表被管对象的单位、索引、参考、缺省值。这些关键字都并不是很重要,有兴趣的读者可参阅RFC1155的说明。值得注意的是INDEX关键字在表对象定义中必须存在的,否则表内的对象不能使用。