Reputation: 101
I'm writing my first SNMP agent in C# and I want to expose some system event information through SNMP GET requests.
On the C# side, all system events are represented by a simple class:
public class MySystemEvent
{
public int Id { get;set; }
public string Message { get; set; }
public DateTime Occurred { get; set; }
}
I would like to expose each of these specific events (determined by event id) as a separate node in the MIB, but am not entirely sure how to create a custom ASN.1 complex type that would correspond to the class above. I'm aware I can use SEQUENCE to represent these, but not sure if I'm using them properly.
What I've done so far:
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 }
The above MIB defines the following tree:
What I want to add are multiple other events with the same structure to the "events" node e.g. right after the firstSpecificEvent I want to have:
How do I that without adding separate eventId, eventMessage and eventOccurred OBECT-TYPE definitions for every specific event? Is it possible to define a CustomEventComplexType which would allow the following?
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.
Upvotes: 4
Views: 783
Reputation: 101
I ended up solving this just the way @LexLi suggested, by creating a table of events. This way OBJECT-TYPE definitions are needed only once for the definition of a row entry.
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 }
Upvotes: 1