Hi,

I'm developing a perl agentx subagent for net-snmp 5.4.1.
The mib that this agent is handling contains a few Counter64 (which are
not correctly handled by the perl agent, but that's not my main issue).
The first counter64 is enterprises.20267.200.1.6.0. The rest is either
gauge or counter32.

The problem is the following:

the enterprises.20267.200.1.6.0 oid is a counter64 (whose vallue size is <
32bits).
When requesting this value from snmpwalk, snmpget, snmpbulkwalk or
snmpbulkget in v2c mode, the right value is returned:

snmpbulkget -r1 -Cn1 -Cr0 -v 2c -c public 192.168.168.14
.1.3.6.1.4.1.20267.200.1.6
SNMPv2-SMI::enterprises.20267.200.1.6.0 = Counter64: 3095605758

(in this example, I patched agent.xs to be able to feed a struct counter64
to snmp_set_var_typed_value to get the real result, otherwise the high and
low part of the counter where swapped on amd64/i386).

But when I try to fetch multiple oids at the same time with the following
command (which is a mimic of what OpenNMS data collection daemon is
producing), I get no answer:

(sorry if it wraps)
snmpbulkget -r1 -Cn2 -Cr0 -v 2c -c public 192.168.168.14
.1.3.6.1.4.1.20267.200.1.6 .1.3.6.1.4.1.20267.200.1.7
Timeout: No Response from 192.168.168.14

I added debug logs to the subagent (by adding a snmp_debug_token("ALL") in
agent.xs) and the full log seems ok, so the subagent doesn't seem to be
the culprit. I can see the answer of the subagent to the master as it
should be:

dumph_send: AgentX Header
dumpx_send:  01 12 00 00
dumpv_send:    Version: 1
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 616:
dumpv_send:     Command:        18 (Response)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 619:
dumpv_send:     Flags:  00
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 622:
dumph_send:   Session ID
dumpx_send:    07 00 00 00
dumpv_send:      Integer:       7 (0x07)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 631:
dumph_send:   Transaction ID
dumpx_send:    01 00 00 00
dumpv_send:      Integer:       1 (0x01)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 640:
dumph_send:   Request ID
dumpx_send:    02 00 00 00
dumpv_send:      Integer:       2 (0x02)
trace: agentx_realloc_build_header(): mibgroup/agentx/protocol.c, 649:
dumph_send:   Dummy Length :-(
dumpx_send:    00 00 00 00
dumpv_send:      Integer:       0 (0x00)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 716:
dumph_send: AgentX Payload
dumpx_send:  00 00 00 00
dumpv_send:    Integer: 0 (0x00)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 903:
dumph_send:   Response
dumpx_send:    00 00 00 00
dumpv_send:      sysUpTime:     0
dumpx_send:  00 00
dumpv_send:    Short:   0 (0x00)
dumpx_send:  00 00
dumpv_send:    Short:   0 (0x00)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 919:
dumph_send:   Response errors
dumpx_send:    00 00 00 00
dumpv_send:      errstat:       0
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 922:
dumpv_send:       errindex:     0
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 934:
dumph_send:   Get* Variable List
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 400:
dumph_send:     VarBind
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 401:
dumph_send:       type
dumpx_send:        46 00
dumpv_send:          Short:     70 (0x46)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 447:
dumph_send:       name
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 224:
dumpv_send:         OID: enterprises.20267.200.1.6.0
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 265:
dumph_send:         OID Header
dumpx_send:          06 04 00 00
dumpv_send:            # subids:        6 (0x06)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 269:
dumpv_send:             prefix: 4 (0x04)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 271:
dumpv_send:             inclusive:      0 (0x00)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 275:
dumph_send:         OID Segments
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
dumpx_send:          2B 4F 00 00
dumpv_send:            Integer: 20267 (0x4F2B)
dumpx_send:          C8 00 00 00
dumpv_send:            Integer: 200 (0xC8)
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
dumpx_send:          06 00 00 00
dumpv_send:            Integer: 6 (0x06)
dumpx_send:          00 00 00 00
dumpv_send:            Integer: 0 (0x00)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 456:
dumph_send:       value
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 551:
dumph_send:         Build Counter64 (low, high)
dumpx_send:          E8 83 84 B8
dumpv_send:            Integer: 3095692264 (0xB88483E8)
dumpx_send:          00 00 00 00
dumpv_send:            Integer: 0 (0x00)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 400:
dumph_send:       VarBind
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 401:
dumph_send:         type
dumpx_send:          42 00
dumpv_send:            Short:   66 (0x42)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 447:
dumph_send:         name
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 224:
dumpv_send:           OID: enterprises.20267.200.1.7.0
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 265:
dumph_send:           OID Header
dumpx_send:            06 04 00 00
dumpv_send:              # subids:      6 (0x06)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 269:
dumpv_send:               prefix:       4 (0x04)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 271:
dumpv_send:               inclusive:    0 (0x00)
trace: agentx_realloc_build_oid(): mibgroup/agentx/protocol.c, 275:
dumph_send:           OID Segments
dumpx_send:            01 00 00 00
dumpv_send:              Integer:       1 (0x01)
dumpx_send:            2B 4F 00 00
dumpv_send:              Integer:       20267 (0x4F2B)
dumpx_send:            C8 00 00 00
dumpv_send:              Integer:       200 (0xC8)
dumpx_send:            01 00 00 00
dumpv_send:              Integer:       1 (0x01)
dumpx_send:            07 00 00 00
dumpv_send:              Integer:       7 (0x07)
dumpx_send:            00 00 00 00
dumpv_send:              Integer:       0 (0x00)
trace: agentx_realloc_build_varbind(): mibgroup/agentx/protocol.c, 456:
dumph_send:         value
dumpx_send:          01 00 00 00
dumpv_send:            Integer: 1 (0x01)
dumpx_send:  54 00 00 00
dumpv_send:    Integer: 84 (0x54)
trace: _agentx_realloc_build(): mibgroup/agentx/protocol.c, 1006:
agentx_build: packet built okay


But what the master receives is different (or it parses differently):

dumph_recv: AgentX Header
trace: agentx_parse_header(): mibgroup/agentx/protocol.c, 1464:
dumph_recv:   Version
dumpx_recv:    01
dumpv_recv:      Version:       1
trace: agentx_parse_header(): mibgroup/agentx/protocol.c, 1471:
dumph_recv:   Command
dumpx_recv:    12
dumpv_recv:      Command:       18 (Response)
trace: agentx_parse_header(): mibgroup/agentx/protocol.c, 1479:
dumph_recv:   Flags
dumpx_recv:    00
dumpv_recv:      Flags: 0x0
trace: agentx_parse_header(): mibgroup/agentx/protocol.c, 1486:
dumph_recv:   Reserved Byte
dumpx_recv:    00
dumpv_recv:      Reserved:      0x0
trace: agentx_parse_header(): mibgroup/agentx/protocol.c, 1492:
dumph_recv:   Session ID
dumpx_recv:    07 00 00 00
dumpv_recv:      Integer:       7 (0x07)
trace: agentx_parse_header(): mibgroup/agentx/protocol.c, 1500:
dumph_recv:   Transaction ID
dumpx_recv:    01 00 00 00
dumpv_recv:      Integer:       1 (0x01)
trace: agentx_parse_header(): mibgroup/agentx/protocol.c, 1508:
dumph_recv:   Packet ID
dumpx_recv:    02 00 00 00
dumpv_recv:      Integer:       2 (0x02)
trace: agentx_parse_header(): mibgroup/agentx/protocol.c, 1515:
dumph_recv:   Payload Length
dumpx_recv:    54 00 00 00
dumpv_recv:      Integer:       84 (0x54)
trace: agentx_parse(): mibgroup/agentx/protocol.c, 1607:
dumph_recv:   PDU
dumpx_recv:      00 00 00 00
dumpv_recv:        Integer:     0 (0x00)
dumpx_recv:      00 00
dumpv_recv:        Short:       0 (0x00)
dumpx_recv:      00 00
dumpv_recv:        Short:       0 (0x00)
trace: agentx_parse(): mibgroup/agentx/protocol.c, 1820:
dumph_recv:       VarBindList
trace: agentx_parse_varbind(): mibgroup/agentx/protocol.c, 1344:
dumph_recv:         VarBind:
trace: agentx_parse_varbind(): mibgroup/agentx/protocol.c, 1345:
dumph_recv:           Type
dumpx_recv:            46 00
dumpv_recv:              Short: 70 (0x46)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1118:
dumph_recv:           OID Header
dumpx_recv:            06 04 00 00
dumpv_recv:              # subids:      6 (0x06)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1122:
dumpv_recv:               prefix:       4 (0x04)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1125:
dumpv_recv:               inclusive:    0 (0x00)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1130:
dumph_recv:           OID Segments
  parse_oid
  sizeof(oid) = 8
dumpx_recv:            01 00 00 00
dumpv_recv:              Integer:       1 (0x01)
dumpx_recv:            2B 4F 00 00
dumpv_recv:              Integer:       20267 (0x4F2B)
dumpx_recv:            C8 00 00 00
dumpv_recv:              Integer:       200 (0xC8)
dumpx_recv:            01 00 00 00
dumpv_recv:              Integer:       1 (0x01)
dumpx_recv:            06 00 00 00
dumpv_recv:              Integer:       6 (0x06)
dumpx_recv:            00 00 00 00
dumpv_recv:              Integer:       0 (0x00)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1205:
dumpv_recv:           OID: SNMPv2-SMI::enterprises.20267.200.1.6.0
dumpx_recv:          00 00 00 00
dumpv_recv:            Integer: 0 (0x00)
dumpx_recv:          E8 83 84 B8
dumpv_recv:            Integer: 3095692264 (0xB88483E8)
trace: agentx_parse_varbind(): mibgroup/agentx/protocol.c, 1344:
dumph_recv:         VarBind:
trace: agentx_parse_varbind(): mibgroup/agentx/protocol.c, 1345:

Here it seems to have stripped a few bytes (like varbind type and such):

dumph_recv:           Type
dumpx_recv:            01 00
dumpv_recv:              Short: 1 (0x01)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1118:
dumph_recv:           OID Header
dumpx_recv:            2B 4F 00 00
dumpv_recv:              # subids:      43 (0x2B)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1122:
dumpv_recv:               prefix:       79 (0x4F)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1125:
dumpv_recv:               inclusive:    0 (0x00)
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1130:
dumph_recv:           OID Segments
  parse_oid
  sizeof(oid) = 8
trace: agentx_parse_oid(): mibgroup/agentx/protocol.c, 1165:
agentx: Incomplete Object IDtrace: _sess_process_packet(): snmp_api.c, 5173:
sess_process_packet: parse fail

Note that the issue seems to be only on amd64, I couldn't trigger it on a
net-snmp 5.4.1 running on i386.

Any idea what could be wrong?
-- 
Brice Figureau
Days of Wonder


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
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

Reply via email to