snmp总结二:MIB语法

snmp总结二:MIB语法

MIB(Management Information Base,管理信息库)是 MO(Managed Object 管理对象)定义的集合。MIB 文件是按照 ASN.1 定义的文本文件。每个管理对象都对应一个节点,并且用 OID(Object Identifier)来标识;数据管理对象对应叶子节点;所有的管理对象形成了一棵管理树。

自定义 MIB 包含的内容有:模块信息、对象定义(OBJECT TYPE,包括标量对象和表对象)、陷阱定义(TRAP TYPE)。
  1. MODULE-IDENTITY (根节点)

    模块标识符,该定义添加了一个公共的标示段来对整个信息描述块进行顶层的文字描述,也就是根节点,以加强对管理 MIB 描述块的文档管理和控制,每个 MIB 定义中都会有该定义。如:

    -- 1.3.6.1.4.1.9999 根节点
    fiberhome MODULE-IDENTITY -- 根节点,企业信息
    LAST-UPDATED "202209010000Z"
    ORGANIZATION "FiberHome, LTD."
    CONTACT-INFO
    "Postal: No.88 Hubei Province, China
    Tel: +86 xxxx
    E-mail: xxxx@fiberhome.com"
    DESCRIPTION
    "The Structure of Management Information for the FiberHome enterprise."
    REVISION "202209010000Z"
    DESCRIPTION
    "FH SNMP Start."

     ::= { enterprises 9999 }					-- assigned by IANA,尚未申请
    
  2. OBJECT-IDENTITY(子树)

    对象标识符,该定义用于给对象标示符的说明加上附加信息,包括状态,文字说明等,可用于对一组对象类型或一个表中几个参数的不同组合的意义的说明。如:

    myBranch OBJECT IDENTIFIER ::= { parentBranch 10 }

    其中 myBranch 是一个子树支,它定义在 parentBranch 树支下,“10”是子树 myBranch在父树支 parentBranch 下的一个唯一对象标识符,即通常所说的 OID。在 parentBranch 树支下,可以定义多个子树支,但子树支的名字和数字(如上的 10)不能重复,即必须是唯一的。

  3. OBJECT-TYPE( 叶子)

3.1 标量

exampleObject1 OBJECT-TYPE
	SYNTAX Integer32
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Example:Integer32."
	::= { exampleObject 1 }

以上的各部分解释如下:

(1)exampleObject1:这是被管对象的名字,ASN.1 句法要求所有对象的名字必须以小写字母开头,而且该名字在 MIB 中必须是唯一的。OBJECT-TYPE:这是一个每一个叶子对象的所必须的关键字。

(2)SYNTAX:被管对象类型的关键字,说明随后跟着的是一个类型。被管对象的类型,ASN.1 句法要求所有的对象类型必须以大写字母开头,其中已预定义了的类型有 Counter、Gauge、DisplayString、INTEGER 等等。

(3)MAX-ACCESS:被管对象的访问方式的关键字。访问方式可为如下列举值中之一:read-only、read-write、 no-accessible,SNMP 第 2 版中又新增了 read-create。

(4)STATUS:被管对象的状态的关键字。可取的值为:mandatory 、optional、obsolete、deprecate(SNMP 第 1 版中),current、obsolete、deprecate(SNMP 第 2 版)。

status 说明
mandatory 表示该对象的状态是必备的
optional 表示该对象的状态是可选的
obsolete 使用该值使得 MIB 的某些部分标记为过时,被标记为“废弃”的对象将从现行版本中删除,并在新的 MIB版本中标记为“过时”。
current 表示该对象的状态是当前可用的

(5)DESCRIPTION:对被管对象的功能、特征等等进行描述的关键字。

(6)(::=):包含此叶子对象的树支,即叶子对象的父亲必须是用“OBJECT IDENTIFIER”声明。同时说明在此父树支下的第几个叶子对象,这个数字在此父树支下必须是唯一的。一般都是从取 1 开始的。例如:“::={ myObject 22 }”,则在 myObject 树支下 22 必须是唯一的,否则在用 MIB 编译器进行编译时会提示有错。

除此之外,还有一些关键字:UNITS、INDEX、REFERENCE、DEFVAL 等等,分别代表被管对象的单位、索引、参考、缺省值。值得注意的是 INDEX 关键字在表对象定义中必须存在的,否则表内的对象不能使用。

3.2 表类型

表类型是一个特殊类型的声明,表内声明的对象称为列对象,表对象可以看作是一些标量对象的集合。利用SEQUENCE 和 SEQUENCE OF 定义表格和表格中的行, 通常来说,表格对象的名字后面加有后缀 Table,行对象的名字后面加有后缀 Entry。

simpleTable OBJECT-TYPE
	SYNTAX SEQUENCE OF SimpleEntry
	MAX-ACCESS not-accessible
	STATUS current
	DESCRIPTION
		"这是一个表名为simpleTable的表对象."
	::= { exampleObject 9 }
	
-- 1.3.6.1.4.1.9999.3.9.1
simpleEntry OBJECT-TYPE
	SYNTAX SimpleEntry
	MAX-ACCESS not-accessible
	STATUS current
	DESCRIPTION
		"Description."
	INDEX { simpleTbColum1 }
	::= { simpleTable 1 }
	
SimpleEntry ::= SEQUENCE {
	simpleTbColum1 Integer32,
	simpleTbColum2 Integer32,
	}

(simpleTable)和(simpleEntry)中的 ACCESS 为 not-accessible,这是因为表和行对象没有叶子对象,因此不能被 SNMP 访问。ASN.1 句法中关于定义一个表的规则如下:

(1) 在表名的命名中,必须要有一个“Table”关键字,例如定义一 个表对象“simpleTable”

(2) 同样,在表对象下面的表格也须有一个“Entry”关键字,例如 “simpleEntry”。

(3) (simpleTbColum1)是表的列对象,(Integer32)是此列对象的类型 ,举例如下:

-- 1.3.6.1.4.1.9999.3.9.1.1
simpleTbColum1 OBJECT-TYPE
	SYNTAX Integer32 (1..65536)
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Description."
	::= { simpleEntry 1 }
  1. 完整的示例

test.mib

TEST-MIB DEFINITIONS ::= BEGIN

IMPORTS
	OBJECT-GROUP, MODULE-COMPLIANCE, NOTIFICATION-GROUP
		FROM SNMPv2-CONF
	enterprises, Integer32, Unsigned32, OBJECT-TYPE, MODULE-IDENTITY,
	NOTIFICATION-TYPE
		FROM SNMPv2-SMI
	DisplayString
		FROM SNMPv2-TC;

-- 企业
FiberHome OBJECT IDENTIFIER ::= { enterprises 5888 }

-- 产品型号或系列
FitON-DP48 OBJECT IDENTIFIER ::= { FiberHome 1 }

-- 系统信息
systemInformation OBJECT IDENTIFIER ::= { FitON-DP48 1 }

identManufacturer OBJECT-TYPE
	SYNTAX	DisplayString
	MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
		"Manufacturer"
	::= { systemInformation 1 }

identModel OBJECT-TYPE
    SYNTAX  DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Model"
    ::= { systemInformation 2 }

identSN OBJECT-TYPE
    SYNTAX  DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Serial Number"
    ::= { systemInformation 3 }


identSoftwareVersion OBJECT-TYPE
    SYNTAX  DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "SoftwareVersion"
    ::= { systemInformation 4 }

-- 标量示例(只读、可读写)
Sensor OBJECT IDENTIFIER ::= { FitON-DP48 2 }

Rsensor1 OBJECT-TYPE
	SYNTAX	Integer32
	MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
		"sensor read-only"
	::= { Sensor 1 }

Rsensor2 OBJECT-TYPE
    SYNTAX  Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "sensor read-only"
    ::= { Sensor 2 }

RWsensor1 OBJECT-TYPE
    SYNTAX  Integer32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "sensor read-write"
    ::= { Sensor 3 }

RWsensor2 OBJECT-TYPE
    SYNTAX  Integer32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "sensor read-write"
    ::= { Sensor 4 }

-- 表类型示例(温湿度传感器表)
temp_humidity OBJECT IDENTIFIER ::= { FitON-DP48 3 }

    temp_humidityTable OBJECT-TYPE
        SYNTAX SEQUENCE OF Temp_humidityEntry
        MAX-ACCESS not-accessible 
        STATUS current
        DESCRIPTION
            "Description."
        ::= { temp_humidity 1 }

        temp_humidityEntry OBJECT-TYPE
            SYNTAX Temp_humidityEntry
            MAX-ACCESS not-accessible 
            STATUS current
            DESCRIPTION
                "Description."
            INDEX { thIndex }
            ::= { temp_humidityTable 1 }

        Temp_humidityEntry ::=
            SEQUENCE {
                thIndex         Integer32,
                temperature     Integer32,
                humidity        Integer32,
                temperature_cal Integer32,
                humidity_cal    Integer32,
                }

thIndex OBJECT-TYPE
	SYNTAX	Integer32
	MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
		"The index of temp_humidity sensor."
	::= { temp_humidityEntry 1 }

temperature OBJECT-TYPE
	SYNTAX	Integer32
	MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
		"The temperature of sensor."
	::= { temp_humidityEntry 2 }
	
humidity OBJECT-TYPE
	SYNTAX	Integer32
	MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
		"The humidity of sensor."
	::= { temp_humidityEntry 3 }

temperature_cal OBJECT-TYPE
	SYNTAX	Integer32
	MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
		"The sensor temperature calibration."
	::= { temp_humidityEntry 4 }
	
humidity_cal OBJECT-TYPE
	SYNTAX	Integer32
	MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
		"The sensor humidity calibration."
	::= { temp_humidityEntry 5 }

END
posted @ 2025-06-19 17:29  silencehuan  阅读(107)  评论(0)    收藏  举报