It appears that Net-SNMP breaks if the agent's response to getbulkrequest is not complete.
In the simple case that the number of non-repeats is 0 and the number of repeaters is 1 or greater. Net-SNMP fails if the number of OIDs returned is not a multiple of the number of OIDs requested.
RFC1905 states:
(1) If the size of the message encapsulating the Response-PDU
containing the requested number of variable bindings would be
greater than either a local constraint or the maximum message size
of the originator, then the response is generated with a lesser
number of variable bindings. This lesser number is the ordered set
of variable bindings with some of the variable bindings at the end
of the set removed, such that the size of the message encapsulating
the Response-PDU is approximately equal to but no greater than
either a local constraint or the maximum message size of the
originator. Note that the number of variable bindings removed has
no relationship to the values of N, M, or R.
However in the parsing code Net-SNMP iterates over the number of columns
while ($vb_index > 0) {
for (my $col_num = 0; $col_num <= $#{$argv->{columns}}; $col_num++) {
Example
#Get bulk request for 7 OIDs with 4 repetitions.
12:26:15.147191 IP utnet4.db.gw.utexas.edu.54296 > lbj.gw.utexas.edu.snmp: C=XXXX GetBulk(146) N=
+0 M=4 E:cisco.9.23.1.2.1.1.3 E:cisco.9.23.1.2.1.1.4 E:cisco.9.23.1.2.1.1.5 E:cisco.9.23.1.2.1.1.6
+E:cisco.9.23.1.2.1.1.7 E:cisco.9.23.1.2.1.1.8 E:cisco.9.23.1.2.1.1.9
#Response has 23 OIDs (7*3+2) the last OID is E:cisco.9.23.1.2.1.1.7.12.13
12:26:15.151168 IP lbj.gw.utexas.edu.snmp > utnet4.db.gw.utexas.edu.54296: C=XXXX GetResponse(1385
+) E:cisco.9.23.1.2.1.1.3.8.16=1 E:cisco.9.23.1.2.1.1.4.8.16=0a_10_5f_17 E:cisco.9.23.1.2.1.1.5.8.
+16="Cisco Internetwork Operating System Software ^JIOS (tm) C2950 Software (C2950-I6Q4L2-M), Versi
+on 12.1(22)EA9, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2006 by cisco Systems, Inc.^JCompiled F
+ri 01-Dec-06 18:02 by weiliu" E:cisco.9.23.1.2.1.1.6.8.16="lbj-temp-2950.utnet.utexas.edu" E:cisco
+.9.23.1.2.1.1.7.8.16="FastEthernet0/24" E:cisco.9.23.1.2.1.1.8.8.16="cisco WS-C2950C-24" E:cisco.9
+.23.1.2.1.1.9.8.16=00_00_00_28 E:cisco.9.23.1.2.1.1.3.9.22=1 E:cisco.9.23.1.2.1.1.4.9.22=ac_18_02_
+e6 E:cisco.9.23.1.2.1.1.5.9.22="Cisco IOS Software, C1240 Software (C1240-K9W8-M), Version 12.4(18
+a)JA1, RELEASE SOFTWARE (fc1)^JTechnical Support: http://www.cisco.com/techsupport^JCopyright (c)
+1986-2009 by Cisco Systems, Inc.^JCompiled Fri 23-Jan-09 20:33 by prod_rel_team" E:cisco.9.23.1.2.
+1.1.6.9.22="AP#lbj0024(LBJ_2.102).pilot.utnet.utexas" E:cisco.9.23.1.2.1.1.7.9.22="FastEthernet0"
+E:cisco.9.23.1.2.1.1.8.9.22="cisco AIR-AP1242AG-A-K9 " E:cisco.9.23.1.2.1.1.9.9.22=00_00_00_00 E
+:cisco.9.23.1.2.1.1.3.12.13=1 E:cisco.9.23.1.2.1.1.4.12.13=0a_10_5f_16 E:cisco.9.23.1.2.1.1.5.12.1
+3="Cisco IOS Software, C3560 Software (C3560-IPBASE-M), Version 12.2(25)SEE3, RELEASE SOFTWARE (fc
+2)^JCopyright (c) 1986-2007 by Cisco Systems, Inc.^JCompiled Thu 22-Feb-07 14:40 by myl" E:cisco.9
+.23.1.2.1.1.6.12.13="LBJ-Foundation-10.utnet.utexas.edu" E:cisco.9.23.1.2.1.1.7.12.13="FastEtherne
+t0/24"
#Net-SNMP parses the first 21 (7*3) just fine, but then because vb_index>0 it tries to parse anothe
+r 7 OIDs, however there are only 2 and so it failes when when it tries to parse the 24th (non exis
+tent) OID.
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.3.8.16] vb_index:[2
+3]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 8.16
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.4.8.16] vb_index:[2
+2]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 8.16
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.5.8.16] vb_index:[2
+1]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 8.16
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.6.8.16] vb_index:[2
+0]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 8.16
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.7.8.16] vb_index:[1
+9]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 8.16
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.8.8.16] vb_index:[1
+8]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 8.16
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.9.8.16] vb_index:[1
+7]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 8.16
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.3.9.22] vb_index:[1
+6]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 9.22
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.4.9.22] vb_index:[1
+5]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 9.22
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.5.9.22] vb_index:[1
+4]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 9.22
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.6.9.22] vb_index:[1
+3]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 9.22
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.7.9.22] vb_index:[1
+2]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 9.22
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.8.9.22] vb_index:[1
+1]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 9.22
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.9.9.22] vb_index:[1
+0]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 9.22
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.3.12.13] vb_index:[
+9]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 12.13
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.4.12.13] vb_index:[
+8]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 12.13
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.5.12.13] vb_index:[
+7]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 12.13
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.6.12.13] vb_index:[
+6]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 12.13
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.7.12.13] vb_index:[
+5]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 12.13
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.8.12.13] vb_index:[
+4]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 12.13
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.9.12.13] vb_index:[
+3]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 12.13
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.3.15.19] vb_index:[
+2]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 15.19
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.4.15.19] vb_index:[
+1]
debug: [2785] Net::SNMP::_get_entries_cb(): index: 15.19
debug: [2778] Net::SNMP::_get_entries_cb(): Entry [.1.3.6.1.4.1.9.9.23.1.2.1.1.3.8.16] vb_index:[0
+]
debug: [2854] Net::SNMP::_get_entries_cb(): last_entry: column mismatch [.1.3.6.1.4.1.9.9.23.1.2.1.
+1.3.8.16]
|