Marshaling SNMP DateAndTime via pass_persist

Alistair Bayley <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <CAKYODbhjKEAvm9BUCrbhM7dqoPj-wf3pBVOkuO99VA-ZBH-FbA@mail.gmail.com>
Hello,

I'm trying to write an extension module for snmpd, and decided to use
the pass_persist mechanism. I can get it to successfully return values
as long as they are numbers or strings (e.g. integer, string,
Counter32, DisplayString), but I cannot figure out how to return a
DateAndTime (from RFC 2579: http://tools.ietf.org/html/rfc2579 ).

The RFC indicates that DateAndTime is an octet-string of length 8 or
11. However, the pass_persist mechanism is text based - in that we
write the return value to stdout followed by a newline - so I cannot
see how it can reliably return the raw octet-string i.e. how can it
distinguish between a byte with a value 10 and the newline char? I was
hoping that I could output the DateAndTime as text in the display-hint
format (e.g. "yyyy-mm-dd,hh:mi:ss.d+00:00") but this doesn't work; the
output from smnpget is nonsense.

I have also tried writing the raw bytes to stdout, but this doesn't
seem to work either (snmpd seems to send a blank line to halt the
pass_persist script).

I'm currently testing under net-smnp 5.4.2.1, and my script is a
python 2.6 script. I will be deploying under net-snmp 5.2.3 and python
2.4.

This is the output from snmptranslate, to show you the MIB I'm using
for snmpget:

snmptranslate -m +KORDIA-FMS-WATCHDOG -IR -Tp enterprises.kordia
No log handling enabled - turning on stderr logging
Cannot find module (NET-SNMP-VACM-MIB): At line 2 in (none)
+--kordia(38086)
   +--fms(1)
      |
      +--fmsVendors(1)
      |  |
      |  +--fmsHp(1)
      |  |
      |  +--fmsMotorola(2)
      |
      +--fmsWatchdog(2)
         +-- -R-- EnumVal   fmsWatchdogStatus(1)
         |        Values: ok(0), unreachable(1)
         +-- -R-- Counter   fmsWatchdogFailedDriverCount(2)
         +-- -R-- Counter   fmsWatchdogLateDriverCount(3)
         |
         +--fmsWatchdogDriverStatusTable(4)
            |
            +--fmsWatchdogDriverStatusEntry(1)
               |  Index: fmsWatchdogDriverIndex
               |
               +-- -R-- INTEGER   fmsWatchdogDriverIndex(1)
               +-- -R-- String    fmsWatchdogDriverName(2)
               |        Textual Convention: DisplayString
               |        Size: 0..255
               +-- -R-- EnumVal   fmsWatchdogDriverStatus(3)
               |        Textual Convention: FmsWatchdogDriverStatus
               |        Values: ok(0), late(1), failed(2)
               +-- -R-- Counter   fmsWatchdogDriverDuration(4)
               +-- -R-- String    fmsWatchdogDriverTimestamp(5)
                        Textual Convention: DateAndTime
                        Size: 8 | 11

(I could include the MIB itself but this seems just as informative and
a lot smaller.)

How should I marshal DateAndTime values? Is there some other type I
can use instead? I see the TimeStamp type in RFC 2579, but this is the
sysUpTime value at the event time; I'd rather have an absoluate (UTC)
date and time, or some equivalent.

Alistair

------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better 
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.