Skip to content

Commit

Permalink
Allow to proceed devices with duplicated engineID (#38)
Browse files Browse the repository at this point in the history
* Allow to proceed devices with duplicated engineID

Fixes ZEN-21001.
  • Loading branch information
vsaliieva authored Aug 7, 2024
1 parent 71f45c8 commit 359bafc
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions pynetsnmp/netsnmp.py
Original file line number Diff line number Diff line change
Expand Up @@ -717,14 +717,32 @@ class Session(object):

cb = None

def __init__(self, cmdLineArgs=(), **kw):
def __init__(self, cmdLineArgs=(), freeEtimelist=True, **kw):
self.cmdLineArgs = cmdLineArgs
self.freeEtimelist = freeEtimelist
self.kw = kw
self.sess = None
self.args = None
self._data = None # ref to _CallbackData object
self._log = _getLogger("session")

def _snmp_send(self, session, pdu):
"""Allows execution of free_etimelist() after each snmp_send() call.
Executes lib.free_etimelist() after each lib.snmp_send() call if the
`freeEtimelist` attribute is set, or re-calls lib.snmp_send() otherwise.
This frees all the memory used by entries in the etimelist inside t he
net-snmp library, allowing the processing of devices with duplicated engineID.
Note: This feature is not supported by RFC.
"""

try:
return lib.snmp_send(session, pdu)
finally:
if self.freeEtimelist:
lib.free_etimelist()

def open(self):
sess = netsnmp_session()
self.args = initialize_session(sess, self.cmdLineArgs, self.kw)
Expand Down Expand Up @@ -857,7 +875,7 @@ def sendTrap(self, trapoid, varbinds=None):
n = strToOid(n)
lib.snmp_add_var(pdu, n, len(n), t, v)

lib.snmp_send(self.sess, pdu)
self._snmp_send(self.sess, pdu)

def close(self):
if self.sess is not None:
Expand Down Expand Up @@ -921,7 +939,7 @@ def get(self, oids):
for oid in oids:
oid = mkoid(oid)
lib.snmp_add_null_var(req, oid, len(oid))
send_status = lib.snmp_send(self.sess, req)
send_status = self._snmp_send(self.sess, req)
self._handle_send_status(req, send_status, "get")
return req.contents.reqid

Expand All @@ -933,15 +951,15 @@ def getbulk(self, nonrepeaters, maxrepetitions, oids):
for oid in oids:
oid = mkoid(oid)
lib.snmp_add_null_var(req, oid, len(oid))
send_status = lib.snmp_send(self.sess, req)
send_status = self._snmp_send(self.sess, req)
self._handle_send_status(req, send_status, "get")
return req.contents.reqid

def walk(self, root):
req = self._create_request(SNMP_MSG_GETNEXT)
oid = mkoid(root)
lib.snmp_add_null_var(req, oid, len(oid))
send_status = lib.snmp_send(self.sess, req)
send_status = self._snmp_send(self.sess, req)
self._log.debug("walk: send_status=%s", send_status)
self._handle_send_status(req, send_status, "walk")
return req.contents.reqid
Expand Down

0 comments on commit 359bafc

Please sign in to comment.