http://blog.chinaunix.net/uid-23069658-id-3251526.html
管理信息库 MIB:
所谓管理信息库,或者MIB,就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合,或者叫管理对象的集合,在RFC 1213 [McColghrie 和Rose 1991]中定义了MIB-II,即第二版的MIB库。
MIB是采用SMI(RFC 1155)来定义的。SMI全称为Structure Management Information,管理信息结构。SMI规范定义了一个基本框架,使用框架内的规范可以定义MIB,而SMI同时又是ASN.1的一个子集,它主要约定了使用到的语法、类型、宏、数据格式等
ASN.1语法:
ASN.1(Abstract Syntax Notification 1),抽象语法描述语言,是一种独立于机器的描述语言,用于描述在网络上传递的消息。
在SNMP开发中,用ASN.1编写MIB文件,还要使用ASN.1中的BER进行编解码。
语法规则:从数据类型、内容顺序或结构等方面来描述消息的内容
编码规则:如何编码、解码实际消息中的数据
语法部分用于对数据结构、类型、顺序进行描述。编码则将语法部分描述的数据进行编码,变为二进制比特流,以便在网络上传输,或反方向地将接收到的数据流进行解码。这使得编码流可以跨平台、跨设备进行传输。
/*注释用成对的连字符(--)在注释的每行开始处表示
*标识符(取值和字段的名称)、类型引用(类型的名称)和模块名称由大写字母、小写字母、数字和连字符组成,由大写字母开始
*n1 粗斜体表示变量、[] 粗的方括号标示该值为可选项、{} 粗的大括号表示一组相关项、| 粗体竖杠表示一组之中的内容可任选其一、… 粗体省略号表示重复出现、= 粗体等号,用一个子项表示该项
*
*/
模块(module):
是ASN.1规范中的基本构造块,定义一个名为modulereference的模块,其格式如下:
DEFINITIONS ::=
BEGIN
EXPORTS
IMPORTS
AssignmentList
END
其中:EXPORTS 这个模块中的定义可能被其他模块引入,用的比较少;IMPORTS 定义将要由其他模块引入的对象或子模块;AssignmentList 这个模块中将定义类型分配、值分配及宏定义。
六种基本数据类型:
BOOLEAN,INTEGER,ENUMERATED,REAL,BIT STRING,OCTET STRING
还有NULL空值 、用户依据现有数据类型灵活定义的各种数据类型
子类型:是在现有的数据类型基础上,增加明确的限定条件,如取值范围,缺省值等
赋值:
赋值在MIB库文件中的定义是最常见的一部分。
语法: ::=
value name :由用户自定义,但一般最好不要重名;
type:就是前面ASN.1的内置数据类型,或用户自定义类型;
value:当然就是该变量的值,一般要和变量类型所限定的范围一致。
示例:ipInReceives Counter ::= 2450
ASN.1的结构体类型
l SEQUENCE 一个或多个类型的有序集合,类似于C语言中的struct 类型定义:
UserAccount ::= SEQUENCE {
username PrintableString,
password PrintableString,
accountNr INTEGER
}
赋值
myAccount UserAccount ::= {
username “tly”,
password “guesswhat”,
accountNr 2345
}
还有SEQUENCE OF SET(一个或多个的类型集合) SET OF (0个或多个某个给定类型多次出现的无序集合)
CHOICE 多个类型其中的一个,类似于C语言中的枚举型