NET-SNMP version: 5.5.pre2 (and 5.4.2.1 i think)
I'm using the NET-SNMP python bindings to perform a walk on the OID
'1.3.6.1.2.1.25.3.3.1.2'.
I'm in a multi-thread environment. The thread doing the walk is not the
main thread.
It's one of several thread of a thread-pool object.
All works fine, but *SOMETIMES* (not very often) the walk returns a strange
result. The input parameter VarList contains a set of "malformed" Varbind
objects. Some fields are None!
You can see the same output in two different tentatives (OUTPUT 1 and
OUTPUT 2):
I don't know if it's a problem of my multi-threading environment or not.
I have problems in reproducing the bug.
Thank you.
SOURCE CODE
-----------
def __my_snmpwalk(*args, **kargs):
""" Just a modified version of netsnmp.snmpget """
sess = netsnmp.Session(**kargs)
if not sess.sess_ptr:
raise SnmpWrapperInvalidHost("Unable to open snmp session with:
%s" % kargs['DestHost'])
if isinstance(args[0], netsnmp.client.VarList):
var_list = args[0]
else:
var_list = netsnmp.VarList()
for arg in args:
if isinstance(arg, netsnmp.client.Varbind):
var_list.append(arg)
else:
var_list.append(netsnmp.Varbind(arg))
res = sess.walk(var_list)
return res
def varstr(vl):
""" strings a VarList object """
s = ''
sep=''
for v in vl:
s += sep + str( (v.tag, str(v.iid), v.val) )
sep = ','
return s
def __do_walk(oid, host, port, community, timeout, retries,**options):
res = None
options['DestHost'] = host
options['RemotePort'] = port
options['Community'] = community
options['Timeout'] = int(timeout * SNMP_ONE_SECOND)
options['Retries'] = retries
if not options.has_key('Version'):
options['Version'] = SNMP_DEFAULT_VERSION
options['UseNumeric'] = 1 # don not translate oids in return values!
# netsnmp wants fully qualified, dotted-decimal, numeric OID
if oid[0].isdigit():
oid2 = '.' + oid
else:
oid2 = oid
varlist = netsnmp.VarList( netsnmp.Varbind(oid2) )
values = __my_snmpwalk(varlist, **options)
print "_do_walk() = ("
print "%s [len=%s]" % (varstr(varlist), len(varlist))
print ","
print "%s [len=%s]" % (values, len(values))
print ")"
return (varlist, values)
--------
OUTPUT 1
--------
_do_walk() = (
(None, 'None', '1') [len=1]
,
('1',) [len=1]
)
--------
OUTPUT 2
--------
_do_walk() = (
('.1.3.6.1.2.1.25.3.3.1.2', '768', '1') [len=1]
,
('1',) [len=1]
)
SNMPWALK COMMAND TEST
---------------------
This is what i get with the command line program:
$ snmpwalk -On -v 1 -c public $HOST 1.3.6.1.2.1.25.3.3.1.2
.1.3.6.1.2.1.25.3.3.1.2.768 = INTEGER: 1
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables
unlimited royalty-free distribution of the report engine
for externally facing server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
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