Posted on 2009-05-01 17:14:09-07 by spindler
Bulk Get problem

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]
Direct Responses: 10588 | Write a response
Perl Weekly newsletter
A free weekly newsletter for people who are busy to read all the blogs. click here to check it out.