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文件的解析。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值