SNMP的MIB文件语法

MIB文件就是一个规范的ASN.1的模块,也可以称为MIB模块。
MIB 结构

模块声明部分

  • 所有的MIB模块都需要使用 DEFINITIONS 关键字定义模块,以END标识结束在这里插入图片描述

导入/导出部分:

  • 也就是IMPORT/EXPORT,它一般紧跟在模块声明后,该部分主要声明导入其他模块,尤其是标准模块中定义的数据类型,宏等。只有导入相关数据类型,才可以在本模块中使用。
    利用IMPORTS标识,所有的模块引用使用FROM关键字说明其出处,引用使用分号(;)结束
IMPORTS	
		Unsigned32 				FROM SNMPv2-SMI
		OBJECT-TYPE				FROM RFC-1212
		enterprises				FROM SNMPv2-SMI;

模块标识部分:

  • 一般都使用MODULE-IDENTITY以描述该模块的详细信息。该部分必须紧跟IMPORTS子句后。模块有更新历史时使用关键字REVISION进行描述。
 ipMIB MODULE-IDENTITY
    LAST-UPDATED "200602020000Z"
    ORGANIZATION "IETF IPv6 MIB Revision Team"
    CONTACT-INFO
           "Editor:
            EMail: <sar@iwl.com>"
    DESCRIPTION
           "The MIB module for managing IP and ICMP implementations, but
            excluding their management of IP routes.
    REVISION      "200602020000Z"
    DESCRIPTION
           "The IP version neutral revision with added IPv6 objects for
            ND, default routers, and router advertisements.  As well as
            being the successor to RFC 2011, this MIB is also the
            successor to RFCs 2465 and 2466.  Published as RFC 4293."

    REVISION      "199411010000Z"
    DESCRIPTION
           "A separate MIB module (IP-MIB) for IP and ICMP management
            objects.  Published as RFC 2011."

    REVISION      "199103310000Z"
    DESCRIPTION
           "The initial revision of this MIB module was part of MIB-II,
            which was published as RFC 1213."
    ::= { mib-2 48}

分配OID空间:

  • 该部分使用宏OBJECT IDENTIFIER为管理对象建立OID分支。在这部分可以规划并建立整个MIB中的分支
gcc_test OBJECT IDENTIFIER	::= { enterprises 100 }
gcc_test_entry OBJECT IDENTIFIER	::= { gcc_test 1 }

gcc_test 是一个子树支,它定义在enterprises树支下,“100” 是子树gcc_test 在父树enterprises下的一个唯一对象标识符。

Trap对象的定义:

  • 该部分是使用宏NOTIFICATION-TPYE(或TRAP-TYPE)定义本模块中的Trap对象,它为可选部分。

MIB对象的定义:

  • 指的是使用宏 OBJECT-TYPE定义管理对象。一般来说该部分是MIB文件中的主要内容。
 objectname OBJECT-TYPE
     SYNTAX (syntax)
     MAX-ACCESS (access)
     STATUS (status)
     DESCRIPTION (description)
     ::= { ( parent ) ( number )
test_entry1 OBJECT-TYPE
		SYNTAX OCTET STRING
		MAX-ACCESS read-write
		STATUS current
		DESCRIPTION "entry1"
		::= { gcc_test_entry 1 }

在这里插入图片描述
标量和表格对象
管理对象可以以两种形式定义在MIB中,一种是标量对象,另一种是表格对象。
表格对象的定义
在这里插入图片描述

  • 1)使用SEQUENCE序列结构将各对象定义为序列结构,其中每一项都是标量对象,SEQUENCE的作用就是将这些标量对象按序列的方式组合起来;其中每个标量对象在表格中又称为列对象。要求该序列结构中定义的序列结构顺序一定要和表格中列对象的定义顺序一致,这也是SEQUENCE类型的含义。
  • 2)将SEQUENCE OF定义的序列结构定义为概念行,也称行对象。
  • 3)将概念行作为概念表的语法类型,定义概念表,即表格对象。
  • 表格对象和行对象语法类型都为“not-accessible”。表索引的访问权限也定义为“not-accessible”。
    现实应用中我们定义表时,会将上面3点的定义顺序反过来,请看代码:

—定义概念表,非叶子节点,不可访问:not-accessible

gccTestTable OBJECT-TYPE
	SYNTAX SEQUENCE OF GccTestEntry
	MAX-ACCESS not-accessible
	STATUS	current
	DESCRIPTION "概念表,not-accessible"
	::= { gcc_test 2 }

—以序列结构定义概念表中的概念行,非叶子节点,不可访问:not-accessible

gccTestEntry OBJECT-TYPE
	SYNTAX GccTestEntry
	MAX-ACCESS not-accessible
	STATUS	current
	DESCRIPTION "概念行,not-accessible"
	INDEX { gcctestIndex } --INDEX 子句定位
	::= { gccTestTable 1 }

—定义序列结构

GccTestEntry::=
	SEQUENCE {
	gcctestIndex Integer32,  --整型 index
	gcctestValue Integer32,
	gcctestString DisplayString
	}

—标量;定义表中的索引,通过索引区分分列对象

gcctestIndex OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS not-accessible
	STATUS	current
	DESCRIPTION "表索引,通过索引区分列对象"
	::= { gcctestEntry 1 }	

—标量;定义了一个整型的管理对象

gcctestValue OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS	current
	DESCRIPTION "列对象"
	::= { gcctestEntry 2 }

—标量;定义了一个字符型的管理对象

gcctestString OBJECT-TYPE
	SYNTAX DisplayString
	MAX-ACCESS read-create
	STATUS	current
	DESCRIPTION "列对象"
::= { gcctestEntry 3 }	

上面的代码定义的表结构如图所示:

概念行列对象- gcctestIndex列对象- gcctestValue列对象- gcctestString

以上表格定义方法可以总结如下:表格名以小写字符开头,一般为了便于辨认以“Table”结束。xxxZzzTable的语法为SEQUENCE OF XxxZzzTable,其含义为定义表格的行对象。行对象的名称中首字母要求大写,以“Entry”结束。

MIB开发人员将MIB编写完成后,还需要使用工具对其进行编译,使之转化为NMS可使用的格式。对于使用Net-SNMP开发的人员来说一般都还需要将MIB转化为代码框架,这也涉及到对MIB文件的解析。

ASN.1是一种用于描述结构化客体的结构和内容的语言,基于编码规则BER(Basic Encoding Rules)是ASN.1标准定义的一种传送文法。每个MIB变量格式是SMI规定的,用ASN.1描述如下: OBJECTNAME BOJECT-TYPE DESCRIPTION:(description) SYNTAX: (syntax) ACCESS: (access) STATUS: (status) ::={(Parent)number} OBJECTNAME是被管对象的名字,ASN.1要求所有对象的名字在MIB中必须是唯一的;BOJECT-TYPE 是每一个节点对象所必需的关键字;SYNTAX是被管对象类型的关键字,随后跟着的是一个类型(syntax);ACCESS是被管对象的访问方式关键字,在 SNMP 第二版中为MAX-ACCESS 关键字,(access)是被管对象的访问方式,可为如下列举值之一: read-only、read-write、no-accessible, SNMP 第2 版中又增加了read-create;STATUS是被管对象关键字,(status)是被管对象的状态,如必备的、可选的或废弃的;DESCRIPTION是 对被管对象的功能、特征等进行描述的关键字,(description)是被管对象的文本描述,在:::={(Parent)number }中,Parent表示位于MIB树中的父节点,number表示是第几个子节点。 MIB 树 每个MIB对象都用对象标识符(OID)来唯一的标识,这是用定义在ASN.1语法中的树型结构来组织的可用信息,其中每个可用信息是一个带标号的节点,每个节点用数字和字符两种方式显示,其中对象标识符OID是由句点隔开的一组整数,也就是从根节点通向它的路径,它命名节点并指示它在ASN.1树中的准确位置。一个带标号节点可以拥有包含其它带标号节点为它的子树,如果没有子树它就是叶子节点,它包含一个值并被称为对象。图3是带有ASN.1编号的MIB树实例:可以看出MIB-Ⅱ的OID是:1.3.6.1.2.1或者iso.org.dod.internet.mgmt.mib2。在SNMP中,实现应用到的MIB对象都是MIB-Ⅱ的子树节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值