C#SNMP代理 - 代表MIB中的复杂类型
问题描述:
我在C#中编写我的第一个SNMP代理,我想通过SNMP GET请求公开一些系统事件信息。C#SNMP代理 - 代表MIB中的复杂类型
在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
- customSystemNode 个
- 事件
- firstSpecificEvent
- EVENTID
- 事件消息
- eventOccurred
- firstSpecificEvent
我想添加的是与“events”节点具有相同结构的多个其他事件,例如,在firstSpecificEvent之后我想有:
- secondSpecificEvent
- EVENTID
- 事件消息
- eventOccurred
我如何在不增加单独的事件ID,事件消息和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建议的方式解决了这个问题,方法是创建一个事件表。这样,对于行条目的定义,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 }
你应该建立一个表。 –
@LexLi谢谢!这就是我最终做的事情,但知道这是正确的做法真是太好了。我会尽快为更新的解决方案添加一个答案。 –