Hi all,

I am trying to convert certain kind of OID values (Hex-String) into
meaningful ones in syslog. It's Dell BMC generated PET traps, I
decoded a sample SNMP payload like this:

306d                             SEQUENCE len=109
0201 00                              version-1(0)
0406 70 75 62 6c 69 63               community: public
a460                                 TrapPDU(context constructed 4)
0609 2b 06 01 04 01 98 6f 01 01          enterprise: .1.3.6.1.4.1.3183.1.1 [1]
4004 ac 17 fc 6b                         agent-addr: 172.23.252.107
0201 06                                  generic   : enterprise-specific(6)
0203 05 6f 00                            specific  : 356096 [2]
4304 1f 02 b3 22                         timestamp : 520270626 [3]
303f                                     SEQUENCE len=63
303d                                         SEQUENCE len=61
060a 2b 06 01 04 01 98 6f 01 01 01               OID  : .1.3.6.1.4.1.3183.1.1.1
042f 44 45 ... c1                              VALUE: the 47-octet value[4]

[1] OID is a list of subidentifiers: 1*40+3 = 43 = 00101011;  3183 =
11000 1101111 = (1)0011000 (0)1101111
[2] 356096 = 101 01101111 00000000 = 00000101 01101111 00000000
[3] 520270626 = 11111 00000010 10110011 00100010 = 00011111 00000010
10110011 00100010
[4]  The only entry in the variable-bindings list is a 47-octet value,
in offset hex text:
0040   44 45 4c 4c 50 00 10 59 80 43 b2 c0 4f 33 33 58  DELLP..Y.C..O33X
0050   00 42 19 ee ab 64 ff ff 20 20 00 41 73 18 00 80  .B...d..  .As...
0060   01 ff 00 00 00 00 00 19 00 00 02 a2 01 00 c1     ...............
Actually it is an IPMI SEL like entry, something like "Oct-16-2011
02:01:11  General Chassis Intrusion Asserted".

I have verified two ways to plug into snmptrapd to get meaningful
representation of the SEL-like entry, by adding to snmptrapd.conf:

1) traphandle OID|default PROGRAM [ARGS ...]
  The external PROGRAM will be called by command_handler(always
trap-specific?) once a trap is received and authorized against execute
permission.  command_handler() calls convert_v1pdu_to_v2() to get a v2
PDU, then uses handler->format or EXECUTE_FORMAT(#define
EXECUTE_FORMAT  "%B\n%b\n%V\n%v\n") to get a textual representation to
feed to stdin of PROGRAM.  There is a sample script, traptoemail,
shipped with net-snmp. It is incapable to deal with the sample PET
trap, because the Hex-String value contains line-breaks. A little
tweak is required to join the multi-line value into one, then a helper
program can be called to convert the Hex-String value to meaningful
representation.

2) perl do "/usr/local/share/snmp/mytrapd.pl";
  It is an example from NetSNMP::TrapReceiver as well, it calls
NetSNMP::TrapReceiver::register("all", \&my_receiver) to install a
trap-specific(if some OID is specified) handler or global one (this
case "all", into netsnmp_post_global_traphandlers). The my_receiver
subroutine got a hash containing similar but structured contents
compared to those lines fed to stdin of PROGRAM. The helper program
could also be invoked to get a meaningful string.

Well, I'd like to put the trap into syslog to be filtered. -Lsd works,
but simply failed to figure out any place to hook a translation. Looks
like syslog logging is hooked before above ways, into
netsnmp_pre_global_traphandlers; it requires log permission instead of
execute permission. Actually it is print_handler() that handles both
cases that logging to syslog and that logging to file. It honors
handler->format as well, and in addition "format print xxx" could be
used to specify custom format(print_format1 or print_format2) in
snmptrapd.conf. Unfortunately, I have no idea how to assign
handler->format as well, and what's worse, the format specification
does not recognize the SEL Hex-String at all.

In all of three ways mentioned above, handlers might be injected
before normally registered handlers and even return
NETSNMPTRAPD_HANDLER_BREAK to bypass them. I guess this could be the
place to do customization for value of certain OID. However, I don't
know how to do such injection. Any idea?


Thanks,
Kaiwang

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to