SNMP Agent SNMP - Representing Complex Types in MIB

I am writing my first SNMP agent in C # and I want to provide information on system events via 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 (identified by the event ID) as a separate node in the MIB, but I'm not really sure how to create a custom ASN.1 type that would match the class above. I know I can use SEQUENCE to represent them, but not sure if I am using them correctly.

What I have 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:

  • private
    • enterprises
    • penNode
      • customSystemNode
      • events
        • firstSpecificEvent
          • EVENTID
          • EventMessage
          • eventOccurred

I want to add several other events with the same structure to the "events" node for example. right after firstSpecificEvent, I want to have:

  • secondSpecificEvent
    • EVENTID
    • EventMessage
    • eventOccurred

How can I do this without adding separate eventId, eventMessage and eventOccured OBECT-TYPE definitions for each specific event? Is it possible to define a CustomEventComplexType that will 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.

      

+3


source to share


1 answer


I ended up solving it exactly as @LexLi suggested by creating an event table. Thus, OBJECT-TYPE definitions are needed only once to define a row record.



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 }

      

+1


source







All Articles