SNMP在IT运营、网络设备管理、通信网元管理、物联网上应用广泛。以下章节将分析Linux/pSos等嵌入式环境下SNMP Agent流程特点及使用嵌入式设计SNMP Agent的技术细节(其中涉及到信息模型设计、C/C++语言等内容请各位看官提前学习哈)。本章也可以作为嵌入式下SNMP Agent的软件开发开发指导书。
(一)SNMP协议体系及技术要点
(二)SNMP Agent的设计
(三)SNMP Agent的实现
1 (三)SNMP Agent的实现
1.1 MIB的创建
创建MIB主要需要完成本设备的MIB库的编写以及利用mibcompiler工具来创建MIB库控制树代码。;
利用 mibcompiler 生成控制文件框架,需要生成的文件有:
以sample.mib为例
sample.ctl //控制框架文件 mibcomp –partial –o sample.ctl sample.mibmib.c //MIB树 mibcomp –mib.c –o mib.c sample.mib sample.ctlleaf.h //叶子节点OID定义 mibcomp –leaf –o leaf.h sample.mib sample.ctlsample.c //访问函数框架 mibcomp –skel –o sample.c sample.mib sample.ctl mibcomp –stub –o sample.c sample.mib sample.ctlsample.h //访问函数头文件 mibcomp –skel.h –o sample.h sample.mib sample.ctl
现在分别描述各部分的开发特点;
1.1.1 设计MIB库
MIB库是SNMP Agent 的基础,可以以从网上获取一个公共的target.mib为基础设计自己的MIB库。
例:sample.mib
-- sample.mib SAMPLE-MIB DEFINITIONS ::= BEGIN --从已有的MIB中引入一些需要的现成数据IMPORTS OBJECT-TYPE, MODULE-IDENTITY, enterprises FROM SNMPv2-SMI DisplayString FROM SNMPv2-TC;-- asbTndTeam-- FROM ASB-MIB; asbRoot MODULE-IDENTITY LAST-UPDATED "9406072245Z" --"20020322" ORGANIZATION "ASB, Inc." CONTACT-INFO "ASB in ChenDu. Created by Yangyutong email: yangyt@sbell.com.cn phone: "DESCRIPTION "This MIB is the root MIB for ASB, Inc. enterprise."::= { enterprises 5555 } –-定位ASB在MIB中的节点位置 asbTndTeam OBJECT IDENTIFIER ::= { asbRoot 1 } asbExtend OBJECT IDENTIFIER ::= { asbRoot 2 } -------------------------- dwdmProduction OBJECT IDENTIFIER ::= { asbTndTeam 1 }-- ochPort OBJECT IDENTIFIER ::= { dwdmProduction 1 }-- omsPort OBJECT IDENTIFIER ::= { dwdmProduction 2 }----ochPort叶子节点定义(简单变量)iID OBJECT-TYPESYNTAX DisplayStringMAX-ACCESS read-onlySTATUS currentDESCRIPTION "ochPort iId."::= { ochPort 1 } iOperStatus OBJECT-TYPESYNTAX INTEGER {no(0),yes(1)}MAX-ACCESS read-writeSTATUS currentDESCRIPTION " iOperStatus."::= { ochPort 2 } ---- omsPort configurable parameters--iNeId OBJECT-TYPESYNTAX INTEGERMAX-ACCESS read-writeSTATUS currentDESCRIPTION " iNeId."::= { omsPort 1 } --定义表omsCfgTable OBJECT-TYPESYNTAX SEQUENCE OF OmsCfgEntryMAX-ACCESS not-accessibleSTATUS currentDESCRIPTION "Table."::= { omsPort 2 } --表类型申明omsCfgEntry OBJECT-TYPESYNTAX OmsCfgEntryMAX-ACCESS not-accessibleSTATUS currentDESCRIPTION "An interface entry."INDEX { omsCfgIndex }::= { omsCfgTable 1 } --新的数据类型申明PhyAddr ::=INTEGER{ one(1), two(2), three(3)} OmsCfgEntry ::= SEQUENCE { omsCfgIndexINTEGER, omsPortTypeINTEGER, mPhyAddrPhyAddr } omsCfgIndex OBJECT-TYPESYNTAX INTEGERMAX-ACCESS read-onlySTATUS currentDESCRIPTION "Index of this entry."::= { omsCfgEntry 1 } omsPortType OBJECT-TYPESYNTAX INTEGERMAX-ACCESS read-onlySTATUS currentDESCRIPTION "Type of this entry."::= { omsCfgEntry 2 } mPhyAddr OBJECT-TYPESYNTAX PhyAddrMAX-ACCESS read-onlySTATUS currentDESCRIPTION "IpAddress of this interface."::= { omsCfgEntry 3 } END
1.1