Thu Feb 5 18:35:38 MSK 2004 Changes to version 3.4.1 ------------------------ - The examples/* tools reworked to act more like examples while full-blown SNMP tools (along with their CLI and friends) moved to a stand-alone package which is pysnmp-apps available from PySNMP homepage. - Components caching implemented at almost all asn1.base.Asn1Object deviratives what aims at significant performance improvement. What is related to this change is that various structured ASN.1 objects might not now return newly created inner components as well as not copying (but borrowing) passed objects on assignment. - The pysnmp.mapping.udp.bulkrole module dropped as it looks somewhat redundant to asynrole functionality. - Alpha API to pysnmp.proto objects is now the API of choice. Besides other improvements, this package introduces a protocol version-neutral API. Previous Generic API (pysnmp.proto.api.generic) remains for compatibility. - Code cleaned up to better comply with coding standards. Particularily, some symbols changed their case, though, aliases set for compatibility. - The suggested way to process SNMP responses at role.Agent has been changed to perform complete response processing at the callback function (cbFun). That's why the sendAndReceive() method of role.Agent class now accepts cbCtx parameter. Thu Oct 30 18:43:44 MSK 2003 Changes to version 3.3.6 ------------------------ - Another bugfix to broken errorIndex/VarBindList handling at examples/*.py tools - Syntax error fixed at cli/ucd/rfc1157.py - Bugfix to asn1.ObjectIdentifier labeling code - Bugfix to VarBindList initialization at compat.pysnmp2x - Bugfix to extra data at the tail of structured types BER octetstream handling Wed Aug 27 22:45:44 MSD 2003 Changes to version 3.3.5 ------------------------ - The examples/snmp*walk.py tools fixed not to query first OID in range by GetRequest unless explicitly specified by command line. - The -C option implemented at examples/snmp*walk.py tools - Bugfix to empty/malformed VarBindList reference by ErrorIndex on ErrorStatus reported at examples/* tools. - Syntax errors fixed at pysnmp/mapping/udp/asynrole.py and pysnmp/proto/cli/ucd/rfc1905.py - The manager class at pysnmp/mapping/udp/role.py fixed not to connect() to default destination as this prevents underlying socket from receiving UDP from non-default source (some agents appear to respond from a strange IP/port). Note: this change raises the risk of agent IP/port spoofing! - New another flavor of API to protocol objects (pysnmp.proto.api.alpha) implemented as a superset of pysnmp.proto.api.generic API, which remains fully functional. - Bugfix to v*.SetRequest.Community initialization at pysnmp.proto - Bugfix to ObjectIdentifier class wrapper at pysnmp.compat.pysnmpxx - rfc1902 BITS construct implemented (as an ApplicationSyntax component whilst SMI defines it as one of possible Syntax values. Why it's defined so and what's the right implementation is still unclear to me). - Obsolete rfc1442 BIT STRING type implemented to handle outdated SNMP entities. - Make pysnmp.mapping.udp.role.manager attempting to resolve and cache default agent IP on instantiation for better peformance. Thu Jun 07 19:23:33 MSD 2003 Changes to version 3.3.4 ------------------------ - Raw values access interface of asn1.base.SimpleAsn1Object reworked for better performance - initialValue of asn1.base.SimpleAsn1Object class objects may now be defined as method - Bugfix to asn1.base.SimpleAsn1Object value assignment -- copy mutable values rather then store a reference to the passed one - The tree-making facility of asn1.univ.ObjectIdentifier class reworked for better performance and clearer protocol - Bugfix initial value assignment of proto.rfc1157.RequestId & proto.rfc1905.RequestId classes to get much less repetitive values - The getTerminal() method implemented to all base ASN1 data types (simple & structed) for a more constent API - Bugfix to examples/* var-bind pretty printing (IpAddress wouldn't print). - UCD command line interface mixins now support the rest of SNMP data types (Gauge, Counter32 etc.) Thu Mar 20 18:43:55 MSD 2003 Changes to version 3.3.3 ------------------------ - The constraints methods set of asn1.base.Asn1Object converted to a set of flags accompanied by a single constraints checking method for better efficiency. - The asn1.base.ChoiceTypeAsn1Object.get() method converted to getTerminal() to handle possible structured Choice elements (may cause incompatibilities!). - ber.base.decodeTag() function substitutes functionally similar code scattered over a few BER decoders. - asn1.univ.ObjectIdentifier.str2num()/num2str() methods code optimized for better performance. - Bugfix to handle_error() methods of udp.asynrole.manager/agent. - Bugfix to examples/snmpwalk.py v2c.EndOfMibView handling in response. - examples/ converted to use `env' for interpreter invocation. - Many minor optimization changes. Wed Mar 19 18:01:05 MSD 2003 Changes to version 3.3.2 ------------------------ - Bugfix to examples/asyncmgr.py to make the tool simultaneous request safe - Bugfix to setup.py -- some sub-packages were not installed - The request-specific match() method of proto.v1 and proto.v2c split on request and PDU-specific parts - Half-baked SNMP v.3 files appeared in 3.3.1 by mistake (rfc2571.py, rfc2572.py) excluded Tue Jan 14 19:41:21 MSD 2003 Changes to version 3.3.1 ------------------------ - role.manager() now uses a user-specified callback function to verify received SNMP messages (this mostly addresses the out-of-order SNMP messages problem). - examples/* tools updated to utilize role.manager()'s message verification callback function - Net-SNMP-style command-line interface implemented (as a sub-package pysnmp.proto.cli) - High-level API to SNMP message objects implemented (as a sub-package pysnmp.proto.api) - The examples/asyncmgr.py tool now supports all available SNMP message types - pysnmp.asn1.ber sub-package re-written to act as an optional mix-in to base ASN.1 objects (and moved under pysnmp.asn1.encoding package) - quite a few small fixes Thu Nov 14 18:09:53 MSD 2002 Changes to version 3.2.2 ------------------------ - Bugfix to default value for 'dst' address parameter in mapping/udp/role.py, mapping/udp/asynrole.py and mapping/udp/bulkrole.py. - asyncode compatibility bugfix to asynrole.manager.handle_error() and asynrole.agent.handle_error() parameters list. Affected the mapping/udp/asynrole.py and examples/asyncmgr.py scripts. - Bugfix to transport-level exceptions handling code in examples/snmpbulk.py and mapping/udp/bulkrole.py. - Bugfix to reportTypeFlag handling at examples/snmpbulk.py. - Command line parameters support implemented to the examples/asyncmgr.py script. Thu Oct 31 08:32:49 MSD 2002 Changes to version 3.2.1 ------------------------ - asn1.base.ChoiceTypeAsn1Object.get() method added for recursively fetching enclosed scalar terminals whenever possible. - examples/*.py scripts updated to make use of the above feature (by means of -R command line swich). Tue Oct 15 23:53:32 MSD 2002 Changes to version 3.1.3 ------------------------ - A few bugs fixed in example/snmptrap.py and example/snmpset.py Sat Oct 12 10:43:46 MSD 2002 Changes to version 3.1.2 ------------------------ - Incorrect params to role.agent() constructor in examples/snmptrapd.py fixed - The __all__ list memebers in rfc1155.py and rfc1902.py updated Fri Oct 11 18:34:31 MSD 2002 Changes to version 3.1.1 ------------------------ - A bug in setup.py (that prevents package installation) has been fixed. - Syntax typo in asynrole.py has been fixed. Mon Oct 7 08:29:58 MSD 2002 Changes to version 3.1.0 ------------------------ - The snmpy compatibility sub-package added. - __hash__() methods implelented for Asn1Object-based objects. - Many stupid typos fixed thoughout the code. Tue Oct 1 08:02:43 MSD 2002 Changes to version 3.0.0 ------------------------ - Major re-write of the whole package aimed at a more accurate, standards compliant and extensible ASN.1 and SNMP protocol objects implementation. Backward compatibility with earlier PySMMP versions is preserved by means of compatibility sub-packages. Wed Dec 18 20:39:00 MSD 2002 Changes to version 2.0.8 ------------------------ - Convert examples/snmptable.py into examples/snmpwalk.py as the functionality of the former seems to closer mimic Net-SNMP's snmpwalk behavior. - The examples/snmpwalk.py fixed to include requested OID in the search range. Thu Nov 28 18:58:45 MSD 200 Changes to version 2.0.7 ------------------------ - Bugfix to asn1.py, incorrect ASN.1 tag used for UNSIGNED32 type. - Bugfix to v1.py & v2c.py modules, GAUGE32 was missing from the list of allowed value-bind types. Fri Sep 20 08:35:43 MSD 2002 Changes to version 2.0.6 ------------------------ - Bugfix: in bulkrole.py, ignore transport errors by catching error.Error based exceptions. - Use repr() when reporting garbaged octet stream on decoder input. Tue Jul 16 12:19:35 MSD 2002 Changes to version 2.0.5 ------------------------ - Bugfix: use long ints in integers decoders of asn1.py to prevent a wrapover on left shift what sometimes decodes to negative in unsigned data types decoders. - Verify against negative initializers to unsigned data types. - Split up BER decoders of asn1.INTEGER and asn1.UNSIGNED32 classes, derive asn1.COUNTER64 class from asn1.UNSIGNED32 for clarity. Tue Jun 25 8:34:39 MSD 2002 Changes to version 2.0.4 ------------------------ - Bugfix: the 'UPTIME' BER tag removed from asn1.BERHEADER.TAGS dictionary as it seems to duplicate the 'TIMETICKS' flag what accidentally causes pysnmp.asn1.TypeError exception. - The FLAGS dictionaries in various classes split up to CLASS and FORMAT ones to better follow BER specification. - The asn1.TAGGEDSEQUENCE class renamed to asn1.SEQUENCE as the latter seems not to be defined and used in SNMP context. Fri Jun 21 08:54:43 MSD 2002 Changes to version 2.0.3 ------------------------ - Bugfix: role.agent class constructor must be passed a list type parameter. Fri Jun 7 10:35:30 MSK 2002 Changes to version 2.0.2 ------------------------ - Bugfix: non-existent exception class error.PySNMPError replaced with error.Generic in asynchronous code. - Bugfix: check that exc_type is not None in asyncmgr.py telnet_server.request_done_fun() to see if an exception occurred. Mon May 20 18:55:09 MSK 2002 Changes to version 2.0.1 ------------------------ - The whole package has been completely redesigned and rewritten in a more object-oriented fashion. Major changes from user's point of view include: * SNMP v.2c support added; * SNMP agent (server) support added to SNMP transport code; * API level compatibility with previous PySNMP versions is not preserved at the moment (work on the compatibility layer is in progress). Changes to version 1.6.5 ------------------------ - Distutils support added by drt@un.bewaff.net. Tue Sep 25 18:34:56 MSK 2001 Changes to version 1.6.4 ------------------------ - The snmpagent.py script previously contributed by Cayce Ullman updated by Ivan Begtin to run with the latest versions of PySNMP. - Oddly handled exceptions fixed to msession.multisession() class. Thanks to Chris Green for pointing out. - Inconsistent default return value fixed in multisession.retrieve() method. This bug may lead to IndexError on timed out SNMP request. Thanks to Chris Green for a patch. Fri Jun 22 08:55:39 MSK 2001 Changes to version 1.6.3 ------------------------ - Bug fixed in examples/async_snmpget.py: this example script misses async_session() class structure change introduced in version 1.6.1. Thanks to Chris Green for a patch. - Also, a minor improvement has been made to examples/async_snmpget.py script -- now this script handles cases when remote SNMP agent returns SNMP error in reply. Sat Jun 16 11:06:34 MSK 2001 Changes to version 1.6.2 ------------------------ - Missing "opaque" ASN.1 data type support committed to BER engine. Thanks to Carl Bray for providing a patch for it. Sat May 5 10:02:40 MSK 2001 Changes to version 1.6.1 ------------------------ - SNMP traps support has finally been completed. Example agent and manager along with some documentation included. Thanks to Ted Crossman for initial traps handling code. - The ber.decode_ipaddress() method renamed to ber.decode_ipaddr() to look as a counterpart to ber.encode_ipaddr(). Compatibility stub ber.encode_ipaddress() remained. - __doc__ strings improved throughout the code. - BER engine code slightly optimized for a little bit better performance. Thu Mar 22 08:37:02 MSK 2001 Changes to version 1.5.5 ------------------------ - In objid.objid(), the str variable name replaced with txt to avoid interferention with str() builtin function. Thanks to Kal Lin for pointing it out. - Bug fixed in ber.encode_an_integer() and ber.decode_integer() methods. They used to handle negative integers in a wrong way. Thanks to Tim Kwiatkowski who has fixed this problem by rewriting corresponding code from the scratch. Fri Mar 9 19:02:56 MSK 2001 Changes to version 1.5.4 ------------------------ - Package documentation added (still not quite complete). - The implementation of ber.encode_oid() method replaced with a more consistent one, as suggested by Jarkko Torppa. This also removes a limitation on the size of sub-Object IDs to be encoded. - Bug fixed in pysnmp.asynsnmp module -- import of pysnmp components was incorrect. - Bug fixed in multisession.retrieve() -- trick SNMP failures to empty responses. - The multisession.initialize() method added to facilitate class instances reuse. - In async_session.send_request(), the 'type' argument moved to the last position of the argument list and assigned the default value ('GETREQUEST'). Unfortunately, this change may cause API incompatibility with the previous versions of PySNMP. - The async_session.open() method introduced as a result of splitting apart the async_session.__init__() method. This is done to let user of async_session class modify class instance private variables (port, iface) before they take effect. This change may also cause API incompatibility. - In async_session.__init__(), verify the callback_fun argument to make sure it's callable. - In message.__init__(), the 'version' argument moved to the very end of argument list, as it is never need to be modified. This change may cause API incompatibility. - In message.message() class, the 'decode_pdu' method renamed into 'decode_snmp_pdu' for a more consistent view. This change might not affect API compatibility. - In error.py, the 'BERError' class renamed into 'BEREngineError' while 'EngineError' one renamed into 'SNMPEngineError'. This change may cause API incompatibility. - In examples/*.py, the repr() builtin replaced with str() one as it looks more appropriate for printing. - In message.message() class, default values for 'type', 'encoded_oids' and 'encoded_vals' arguments in method encode_request() removed. - In message.message() class, default value for 'response' arguments in method decode_response() removed. - Receive buffers of SNMP engines enlarged up to maximum UDP datagram size (65536 bytes) to accomodate possible huge Object IDs' values in replies. - In multisession.retrieve(), delete the list of SNMP sessions on finish to save memory. - More explanation messages added to exception class instantiations. Tue Mar 6 18:06:56 MSK 2001 Changes to version 1.5.3 ------------------------ - Example code in README fixed. Thanks to Jeff Wong and Charles Kong for it pointing out. Fri Feb 23 12:28:59 MSK 2001 Changes to version 1.5.2 ------------------------ - The ber.encode_length() & ber.decode_length() methods modified to allocate up to three extra bytes for storing the length of BER encoded data item or raise an exception if data item is too large (>16MB). Sun Jan 21 13:56:41 MSK 2001 Changes to version 1.5.1 ------------------------ - The pysnmp module converted into pysnmp package. This change might cause an incompatibility with previous PySNMP versions, as it affects the way how user refers to pysnmp components. - All the PySNMP components converted to use class-based exceptions. - Comments to files converted to module __doc__ attribute. - The arguments to all objid.objid() methods as well as caller_fun argument to asynsnmp.async_session() class constructor becomes mandatory. - Fixed a bug caused an infinit loop in msession.dispatch(), thanks to Case Van Horsen for tracking it down. - The repr() function is used in examples/ scripts in place of % for a more consistent result types coercion. - The documentation has been taked out of the distribution for a re-work to get it reflecting 1.5.x changes. Thu Jan 11 11:42:13 MSK 2001 Changes to version 1.4.2 ------------------------ - Argument verification for the most of ber.ber() methods removed, as it looks exessive (user must follow API specs). - A bug is fixed in ber.decode_uptime(), thanks to Case Van Horsen for pointing it out. - The pysnmp.multisession() class has been re-written. The new version is based on Case Van Horsen's code. Most importantly, a bug which may cause some agents' responses get lost is fixed. Also, the new code makes more efficient use of sockets. From the pysnmp.multisession() API perspective, the multisession.encoded_pairs attribute has been removed from class definition, as it seems to be of no use. The multisession.retrieve() method should be used instead. Sat Dec 30 21:25:56 MSK 2000 Changes to version 1.4.1 ------------------------ It's a major rewrite meant to remove known oddities. Unfortunately, the API had to be changed a bit. The changes follow: - The SNMP errors reported by remote SNMP process are now indicated with the single exception (pysnmp.SNMP_ERROR) while the details are supplied along with the exception associated value (see docs). - Class constructor of pysnmp.session() class now accepts only a few arguments (agent, community). The rest of arguments (such as UDP port number, SNMP version etc.) are now available as the attributes of pysnmp.session() class instances (see docs). - Instances of pysnmp.session() class now have the 'iface' attribute which carries the address of local interface SNMP engine is to bind() to (see docs). - The pysnmp.bad_parameters exception has been replaced with pysnmp.bad_argument one as they seem to have very similar semantics. - Class constructor of pysnmp.multisession() class does not accept any arguments. SNMP engine parameters are now avaliable as class instances attributes (see the comment on pysnmp.session() class constructor above). - The asynsnmp.async_session() class now subclasses the pysnmp.session() class for the purpose of inheriting the API of pysnmp.session() class. Consequently, the asynsnmp.async_session() class constructor now accepts only a few [major] parameters. The minor ones should be referred as class instance attributes (see docs). - In async_session.handle_read(), when calling caller specified callback function, pass caller a reference to ourselves along with a reference to caller specific data. N.B. This leads to callback function's arguments list change what may cause incompatibility problem to the user of asyncsnmp() class! - The pysnmp.packet() class renamed to pysnmp.message() as it better represents its functionality. This also may cause some incompatibilities, though, I do not expect great many people explicitly refer to it from their applications. - Some comments in the code turned to objects' doc strings. - The examples/ stuff has been re-written for a more consistent view; - Module documentation added. Thu Nov 16 08:49:14 MSK 2000 Changes to version 1.3.14 ------------------------- - The license of the PySNMP package changed for a [more relaxed] BSD License; Fri Nov 3 19:20:02 MSK 2000 Changes to version 1.3.13 ------------------------- - Fixed wrong (non-tuple type) argument passed to socket.connect() method in session.open(); Mon Sep 11 11:47:12 MSD 2000 Changes to version 1.3.12 ------------------------- - bug fixed in IP address encapsulation method (ber.encode_ipaddr()). Thanks to Jarkko Torppa for pointing it out! Fri Sep 8 11:51:34 MSD 2000 Changes to version 1.3.11 ------------------------- - the obsolete standard Python module 'rand' replaced with 'whrandom' in pysnmp.py for better portability. The random numbers generator is used for SNMP RequestID initialization. This change also enlarges the range of possible RequestID values from 0 to 0x7fffffff. - contribution/ directory introduced and Cayce Ullman's PySNMP based SNMP agent put there as an example of possible PySNMP use; Mon Sep 4 15:04:05 MSD 2000 Changes to version 1.3.10 ------------------------- - catch all possible SNMP related exceptions in async_session.handle_read() and convert them into (None, None) result as they would arrive out of context at that point (this is subject for further re-work); - a syntax error fixed in ber.encode_ipaddr() thanks to Stefan Sami-Soueiha who pointed this out; Fri Aug 4 09:50:37 MSD 2000 Changes to version 1.3.9 ------------------------ - initialize SNMP Request-Id to a random value (by means of rand.rand()) in pysnmp.packet class constructor. This makes sense when user doesn't re-use pysnmp object for subsequent SNMP queries but re-creates new pysnmp object for every request; - convert possible pysnnp exceptions when decoding SNMP reply in async_session.handle_read() into (None, None) result as a pysnmp exception at that point would arrive out of context; - do not destroy pysnmp.session object in async_session.handle_read() method as pysnmp.session object may be re-used; Tue May 30 18:32:23 MSD 2000 Changes to version 1.3.8 ------------------------ - a bunch of changes to pysnmp.multisession class suggested by Case Van Horsen. These changes make objects of multisession class handling socket exceptions rather than passing them up to mother application; - socket variable at pysnmp.py: replaced with sock as Case Van Horsen reported that it interferes with the socket module; Mon Mar 20 18:48:54 MSK 2000 Changes to version 1.3.7 ------------------------ - pysnmp.objid class moved to a dedicated module objid.py; - ber.ber now superclasses objid.objid class; - pysnmp.session.__init__() doesn't create an instance of pysnmp.objid() class (THIS MAY CAUSE BACKWARD INCOMPATIBILITY, please, let me know if you think I should maintain backward compatibility at this point of code); - ber.decode_value() now attempts to decode an Object-Id type argument as suggested by Case Van Horsen; - examples/*.py changed to utilize ber.decode_value() method against Object-ID's; - tabs converted to spaces through all the *.py files; - a few cosmetic changes applied to code; Tue Jan 25 00:22:18 MSK 2000 Changes to version 1.3.6 ------------------------ - the README example corrected, thanks to Carl Bray ; Wed Jan 19 14:43:31 MSK 2000 Changes to version 1.3.5 ------------------------ - the asynchronous SNMP manager class previously founded in examples/async_snmpget.py moved to a separate module asynsnmp.py; - examples/async_snmpget.py now imports asynchronous SNMP manager class from asynsnmp.py module; Mon Jan 17 15:50:04 MSK 2000 Changes to version 1.3.4 ------------------------ - session.open() now returns the socket object it created; - added a session.get_socket() method which returns socket object previously created with session.open() method; - examples/async_snmpget.py added; Thu Nov 25 16:42:59 MSK 1999 Changes to version 1.3.3 ------------------------ - added a method which figures out if one OBJID is a prefix of another OBJID (this is used in table retrieval; - example/snmptable.py added; Sat Nov 13 23:43:08 MSK 1999 Changes to version 1.3.2 ------------------------ - community argument of examples/* tools is now obligatory; - multisession example of snmpget tool converted to snmpbulk tool; Wed Nov 10 18:06:34 MSK 1999 Changes to version 1.3.1 ------------------------ - a couple of bugfixes for BER [en,de]coders reported by Steve Cochran commited to the distribution; Thu Oct 28 17:40:09 MSD 1999 Changes to version 1.3 ---------------------- - example/snmpset.py added; Sun Oct 17 17:42:31 MSD 1999 Changes to version 1.2 ---------------------- - examples/* tools now support command line arguments; - order of the arguments of session.__init__() and multisession.submit_request() changed to better use defaults; - order of the arguments of session.decode_response() changed, response type may now be ommited; Sat Oct 16 19:19:00 MSD 1999 Changes to version 1.1 ---------------------- - more checks against inconsistent arguments passed to various methods added; - SMTP request type can now be passed to the packet constructing methods; - more comments added to the code; - a Object ID's convertion class (pysnmp.objid) added; - examples/* updated (snmpwalk.py added); - a few significant bugs fixed;