【问题标题】:C# SNMP agent - representing complex types in MIBC# SNMP 代理 - 表示 MIB 中的复杂类型
【发布时间】:2015-05-09 14:19:05
【问题描述】:

我正在用 C# 编写我的第一个 SNMP 代理,我想通过 SNMP GET 请求公开一些系统事件信息。

在 C# 方面,所有系统事件都由一个简单的类表示:

public class MySystemEvent  
{  
    public int Id { get;set; }
    public string Message { get; set; }
    public DateTime Occurred { get; set; }
}

我想将这些特定事件(由事件 ID 确定)中的每一个公开为 MIB 中的单独节点,但我不完全确定如何创建与上述类对应的自定义 ASN.1 复杂类型。我知道我可以使用 SEQUENCE 来表示这些,但不确定我是否正确使用它们。

到目前为止我做了什么:

enterprise OBJECT IDENTIFIER       ::= { private 1 }
penNode OBJECT IDENTIFIER          ::= { enterprise <PEN> }
customSystemNode OBJECT IDENTIFIER ::= { penNode 1 }
events OBJECT IDENTIFIER           ::= { customSystemNode 1 }

Event ::= SEQUENCE {
    id Integer32,
    message DisplayString,
    occurred DateAndTime
}

firstSpecificEvent OBJECT-TYPE
    SYNTAX Event
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "First specific event."
    INDEX { eventId }
    ::= { events 1 }

eventId OBJECT-TYPE
    SYNTAX Integer32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Event Id."
    ::= { firstSpecificEvent 1 }

eventMessage OBJECT-TYPE
    SYNTAX DisplayString
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Event message."
    ::= { firstSpecificEvent 2 }

eventOccurred OBJECT-TYPE
    SYNTAX DateAndTime
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Event occurred."
    ::= { firstSpecificEvent 3 }

上面的 MIB 定义了如下树:

  • 私人
    • 企业
    • penNode
      • 自定义系统节点
      • 活动
        • 第一个特定事件
          • 事件ID
          • 事件消息
          • 事件发生

我要向“事件”节点添加多个具有相同结构的其他事件,例如在我想要的 firstSpecificEvent 之后:

  • 秒特定事件
    • 事件ID
    • 事件消息
    • 事件发生

如何在不为每个特定事件添加单独的 eventId、eventMessage 和 eventOccurred OBECT-TYPE 定义的情况下做到这一点? 是否可以定义一个允许以下操作的 CustomEventComplexType?

firstSpecificEvent OBJECT-TYPE
    SYNTAX CustomEventComplexType
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "First specific event."
    ::= { events 1 }

secondSpecificEvent OBJECT-TYPE
    SYNTAX CustomEventComplexType
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Second specific event."
    ::= { events 2 }

thirdSpecificEvent OBJECT-TYPE
    SYNTAX CustomEventComplexType
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Third specific event."
    ::= { events 3 }

etc.

【问题讨论】:

  • 你应该建一个表。
  • @LexLi 谢谢!这就是我最终做的事情,但很高兴知道这是正确的方法。我会尽快用更新的解决方案添加问题的答案。

标签: c# snmp asn.1 mib


【解决方案1】:

我最终按照@LexLi 建议的方式解决了这个问题,创建了一个事件表。这样,对于行条目的定义,OBJECT-TYPE 定义只需要一次。

enterprise OBJECT IDENTIFIER       ::= { private 1 }
penNode OBJECT IDENTIFIER          ::= { enterprise <PEN> }
customSystemNode OBJECT IDENTIFIER ::= { penNode 1 }

Event ::= SEQUENCE {
    id Integer32,
    message DisplayString,
    occurred DateAndTime
}

eventTable OBJECT-TYPE
    SYNTAX SEQUENCE OF Event
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Table containing event information."
    ::= { customSystemNode 1 }

eventTableRowEntry OBJECT-TYPE
    SYNTAX Event
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "A row entry in the event table."
    INDEX { eventId }
    ::= { eventTable 1 }

eventId OBJECT-TYPE
    SYNTAX Integer32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Event id."
    ::= { eventTableRowEntry 1 }

eventMessage OBJECT-TYPE
    SYNTAX DisplayString
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Event message."
    ::= { eventTableRowEntry 2 }

eventOccurred OBJECT-TYPE
    SYNTAX DateAndTime
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "Event occurred timestamp."
    ::= { eventTableRowEntry 3 }

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多