首页 > 解决方案 > SNMP SMIv2 MIB:如何在 SEQUENCE 中获取用户定义的 TEXTUAL-CONVENTION 的 SEQUENCE 以干净地进行 lint?

问题描述

我正在尝试生成一个完全经过验证的 MIB 文件,但很难弄清楚如何在 SEQUENCE 块中创建用户定义的 TEXTUAL-CONVENTION 的序列。

以下是我从 smilint 收到的消息(尽管我只关心第一个错误):(https://www.ibr.cs.tu-bs.de/bin/smitools.cgi

mibs/table_test.mib:44: [2] {basetype-unknown} type `TYPEMyEnumTable' of node `myenumTable' does not resolve to a known base type
mibs/table_test.mib:18: [5] {group-unref} warning: current group `myObjectGroup' is not referenced in this module

我在 MIB Smithy 网站上读到一些 MIB 编译器不允许从其他 TEXTUAL-CONVENTION 声明派生 TEXTUAL-CONVENTION 声明,在我看来这可能是问题的根源。但是,如果这不是 smilint-clean,是否存在不涉及重建数据以更好地适应 SNMP 的 SEQUENCE-within-SEQUENCE 范式的替代机制?

我可以看到,如果我将所有数据都呈现为 SEQUENCE 类型的 SEQUENCE 会更合适,但是我试图包装 SNMP 的固件并不总是给我那种奢侈,所以我希望找到一个简单干净的替代方案,避免重组我的设备数据。:-(

这是我一直用作测试平台的独立最小 MIB 文件:

TEST-MIB DEFINITIONS ::= BEGIN

IMPORTS
    OBJECT-TYPE, MODULE-IDENTITY, enterprises   FROM SNMPv2-SMI
    TEXTUAL-CONVENTION                          FROM SNMPv2-TC
    OBJECT-GROUP                                FROM SNMPv2-CONF
;

testBase MODULE-IDENTITY
    LAST-UPDATED    "202106070000Z"
    ORGANIZATION    "www.me.com"
    CONTACT-INFO    "me@me.com"    
    DESCRIPTION     "Test MIB"
    REVISION        "202106070000Z"
    DESCRIPTION     "First draft"   
    ::= {  enterprises 65535 }

myObjectGroup OBJECT-GROUP
    OBJECTS         {   myenumSingle, myenumTable   }
    STATUS          current
    DESCRIPTION     "Object conformance group"
    ::= { testBase 1 }
    
TYPEMyEnum ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION     "My enum (type)"
    SYNTAX          INTEGER { myenumThis(65), myenumThat(68), myenumTheOther(69) }

TYPEMyEnumTable ::= SEQUENCE OF TYPEMyEnum

-- Note: the following version also doesn't work
-- TYPEMyEnumTable ::= TEXTUAL-CONVENTION
--  STATUS          current
--  DESCRIPTION     "My enum table (type)"
--  SYNTAX          SEQUENCE OF INTEGER { myenumThis(65), myenumThat(68), myenumTheOther(69) }

-- Note: the following version also doesn't work
-- TYPEMyEnumTable ::= TEXTUAL-CONVENTION
--  STATUS          current
--  DESCRIPTION     "My enum table (type)"
--  SYNTAX          SEQUENCE OF Integer32 { myenumThis(65), myenumThat(68), myenumTheOther(69) }

TestSEQ ::= SEQUENCE {
    myenumSingle            TYPEMyEnum,
    myenumTable             TYPEMyEnumTable
}

myenumSingle OBJECT-TYPE
    SYNTAX          TYPEMyEnum
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION     "My enum (single instance)"
    ::= { testBase 2 }

myenumTable OBJECT-TYPE
    SYNTAX          TYPEMyEnumTable
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION     "My enum (table of instances)"
    ::= { testBase 3 }

END

标签: snmpmib

解决方案


推荐阅读