|
Changes from release 3.3 to 4.0
New Features added to this release
In addition to the above major features, the following enhancements are added to this release.
High-Level API
End Of MibView error is shown while performing GETBULK request in SnmpTablePanel.
Support for plotting
of values for Counter64 in LineGraph bean has been provided. The method
setResult(BigInteger)
and setResult(int,
BigInteger)
has been added for plotting Counter64 data
type.
In SnmpTable, the startPollingTable()
method can be directly called after invoking the setTableOIDWoStart(String)
method because the ObjectIDList is internally set.
Log.java, an implementation class for Log Interface is added in utils package.
Logging of debug messages.
Logging of decoded debug messages.
The setGlobalView(boolean)
method has been added to MibTree to change the mode of the
MibTree.
Two new methods setTimeoutInMilliSec(int)
and getTimeoutInMilliSec()
has been added to SnmpServer class to set and get the timeout
values in milliseconds.
In LineGraphBean, the
method setShowErrorMessages(boolean)
has been added to enable/disable error messages in the LineGraphBean
and the method getShowErrorMessage()
has been added to get the status information of error messages.
New methods setExpandCollapseEnabled(boolean)
and isExpandCollapseEnabled()
have been added in MibTree. The setExpandCollapseEnabled(boolean)
method is used to enable/disable Expand All and Collapse All buttons.
In TrapViewer, the source field in trap details now shows the agent address if specified. TrapViewer shows the number of traps and inform requests received. Also, feature for logging traps has been provided.
In SnmpTarget of rmi
and beans package, a new method getExceptionCode()
has been added. This method returns the exception code
(NOSUCHOBJECTEXP, NOSUCHINSTANCEEXP and ENDOFMIBVIEWEXP) if present in
the varbind. In this case, the getErrorCode()
method returns zero.
In SnmpTarget of ejb
package, the method releaseResources()
has been added.
Two new methods addLineSeparator(int)
and addButton(String,
ImageIcon,String, int)
have been added to ToolBar.
Two new methods addLogClient(LoggerProperties)
and removeLogClient()
have been added to SnmpTarget and SnmpRequestServer.
The methods getModules()
and getModuleNames()
have been added to MibOperations in the RMI package.
Complete broadcast feature has been provided.
The setReceiveBufferSize() method has been added in SnmpTarget, SnmpRequestServer, and SnmpTrapReceiver classes.
Low-Level API (snmp2 package)
TimeStamp value is now be printed with debug messages.
Performance of the toString()
method of SnmpOID has been enhanced.
In case of applets, performance of SNMP query (such as walk operation) has been enhanced.
For 'interPacketDelay', "retries packet" now has a high priority than the "actual request packet" while sending.
A new TimeoutPolicy feature is added to enable adding your own timeout policy for the retry-mechanism.
The TimeStamp value is printed when the request gets timed out or when a retry is sent. also, the TimeStamp value will now be printed along with debug messages.
An additional method
called toString(int)
has been added in SnmpCounter64 class to get the number in
any radix.
The UDPProtocolOptions
class has been added to the snmp2 package for SNMP communication
through UDP.
The SASProtocolOptions
class has been added to the snmp2 package for SNMP communications
through SAS.
Database support has been provided for VACM tables.
Methods getOIDPrefix()
and setOIDPrefix(SnmpOID)
has been added to SnmpAPI to get and set the standard OID
prefix.
Methods getTransportProvider()
and setTransportProvider(String)
has been added to SnmpSession to get and set the transport
provider class name.
The method copyWithoutVarBinds()
has been added to SnmpPDU to get a copy of this PDU without
copying the variable bindings.
Methods isBroadCastEnabled()
and setBroadCastEnable(boolean)
have been added to SnmpPDU to specify whether the IP address
is a broadcast one.
The method discoverSnmpEngineID(SnmpSession)
has been added to SnmpEngineEntry to perform discovery. This
method throws exceptions and returns the discovered engineID as a byte
array.
The method discoverSnmpEngineID(SnmpSession,
int, int)
has been added to SnmpEngineEntry to perform
discovery. This method throws exceptions and returns the discovered engineID
as a byte array. In addition, timeout and retries value can be specified
as arguments.
Complete broadcast feature has been provided.
The USMUtils class is made to a single file. The other two versions namely jdk1.2_classes and cryptix_classes are removed.
The methods setReceiveBufferSize() and getReceiveBufferSize() have been added in UDPProtocolOptions class.
MIBs API
The getImports()
method in the MibModule class gives all the imported elements
and the modules.
The getImportedModules()
method has been added to MibModule.
Proper error message is given, if the table row object contains the ACCESS values other than 'not-accessible'.
The MibParser is made lenient allowing both the uppercase and lowercase for all the macro constructs except TEXTUAL-CONVENTION.
The classes ModuleIdentity
, NotificationGroup
, NotificationType
, ModuleCompliance
, ModuleComplianceModule
, ObjectGroup
, and AgentCapabilities
have been added.
Various parsing levels, such as LENIENT, NORMAL, SERIOUS, CRITICAL, and UserDefined are provided to load the MIB file.
Printing data according to DISPLAY-HINT has been provided.
The methods getMibNode(int[])
, translateToNumbers(String)
, and translateToNames(String)
of MibModule class can now accept any form of input.
In case of application, the MIB file can be of any name. It need not be same as the module name.
Bug Fixes Done
High-Level API
Firing of unnecessary event in SnmpTable, during timeouts, has been fixed.
By default when a OID of counter type is set in the SnmpPoller, it gives a delta value i.e. difference between the current and previous. However, the first value polled by the poller is the absolute value and every subsequent value is the delta value. This bug is fixed.
When an OID is dynamically set on to the SnmpPoller, the next value plotted is returned as a negative value. This bug is fixed.
ContextName was not taken while plotting graph using the graph icon from MibBrowser. This has been fixed.
There was a memory leak when addRequest() method of SnmpRequestServer class was invoked continuously. This has been fixed.
While adding a row to a table using the addRow() method of the SnmpTable, in the ObjectID list, the rowStatus column should be given as the first column. If the rowStatus column is not the first column then the row will not get added. This problem is fixed now. Now the rowStatus column can be any where in the oid list.
There was a memory leak in SnmpRequestServer class when used in applet mode. This has been fixed.
When constructors with ProtocolOptions (which are used for sending requests and receiving responses in TransportProvider mode) from SnmpTarget, SnmpTable, and SnmpRequestServer class were invoked, requests were not sent and hence no responses were received. This has been fixed.
Low-Level API
Problem with dynamic configuration of inter packet delay is fixed.
Creation of unnecessary object in SnmpAPI class, has been fixed.
When two different threads use the same SnmpSession to send requests, there was a possibility that, the responses ( for the requests sent by these Threads ) reach the undesired destination. The occurrence of this behavior is very rare. This has been fixed.
There was a problem in calling setSoTimeout() method of DatagramSocket. This was not supported in real time environment like OSE DELTA which was using PersonalJava-JDK1.1.6. This has been fixed.
There was 100% CPU usage when SnmpSession was closed in the case of TCP/IP. This bug has been fixed.
If 'retries' and 'interPacketDelay' are greater than zero, then there is possibility that a request may get "Timed out", even if the response arrives. In case of a synchronous request it will return with a null pdu, but in case of asynchronous request, it will first inform with a null pdu, followed by the actual response. This bug has been fixed.
In case of 'interPacketDelay', timeout will not be exponential. This issue is fixed.
In the SnmpAPI class, the java.sql.ResultSet instances which are created by executing the method java.sql.Statement.executeQuery will not be closed. This bug is fixed now by closing the same.
In Windows 2000, if a request is sent to an unreachable port, then a 100% CPU usage will be resulted and no further packets will be received. This problem will be seen only when the Java SecurityManager is installed. This bug is fixed.
The "genReqID" and "genMsgID" methods in SnmpAPI has been made synchronized. This will avoid the creation of two request-ids with the same value.
The wait(0) is modified into wait(100) in SnmpSession. The reason is "wait(0)" is an infinite time blocking call and will come out of this only when a notify call is made. (Note: This fix will not work in JDK 1.2).
The NullPointerException in the "removeEntry" method of USMUserEntry class is fixed.
The snmpInTraps and snmpOutTraps variables were not incremented when v2c and v3 traps were received. This bug has been fixed.
While using callback thread, sometimes it leaves out certain responses, i.e the response will be received and queued in the responseList, but it will not be dequeued and sent to the callback method. The response will be dequeued only when another request reaches the callback thread. This issue is fixed by changing the wait() to wait(100) in the SnmpCallback class.
When the API thread dies out, the requests will not be monitored for timeouts and hence the queue size will keep on increasing leading to a "OutOfMemory" error. This issue is fixed.
NullPointerException thrown in SnmpSession's monitorRequests method is fixed.
If the interPacketDelay is set ( to a value greater than zero ) and if the request is sent to an unreachable port ( from a Windows2000 machine ), then the packets will not be sent. This issue is fixed.
Continuous opening and closing of new SnmpSession will create an "OutOfMemory" error or "Too many files" error (in linux OS). This issue is fixed.
If the v3databaseFlag is set to true and no database connection is established, then, a SNMPv3 request will make the system to hang and an "OutOfMemeory" error will occur. This issue is fixed.
The init_v3_parameters() method of USMUtils class will throw an Exception when NoAuthNoPriv query was made. This issue is fixed.
If the received message contains a community name which is greater than 64K, then a "ArrayIndexOutOfBoundsException" will be thrown, and the receiver thread of AdventNet Stack will crash. This issue is fixed.
If the received message contains a community field whose "length" field contains value of the order of 2^30 ( this number should be greater than RAM ), then an "OutOfMemoryError" will occur, which will crash the application. This issue is fixed.
If the length of the community field is given as a negative number, then a "NegativeArraySizeException" is thrown, crashing the receiver thread of AdventNet SNMP API stack. This issue is fixed.
If any extra random bytes are added along with a valid SNMP message, then this message is also decoded and recognized as a valid SNMP message. Actually these type of messages should be dropped while receiving. This issue is fixed and now the SNMP messages are handled properly.
While using database for SNMPv3 requests, doing a GET request for "someHost", throws "Time Synchronization error may have occured" error. In the above process first the USM entry is added using "localhost" as the host name, where "localhost" and quot;someHost" are the same. This issue is fixed.
If the debug is enabled, then all the "auth-priv" SNMPv3 packet will be printed in the decrypted form. Actually, the packets which are received from the network should be printed in the encrypted form. This issue is fixed.
The getData method of SnmpPDU used to return the decrypted data in case of "auth-priv" packets. This method will now return the encrypted data.
In case of SNMPv3 database, the close method of SnmpAPI does not close the api thread properly. Hence this thread will not die and will be held in memory. This issue is fixed.
The genReqID and genMsgID methods of SnmpAPI has been made to access the same variable. This will make sure that no two request IDs will be same for a single JVM. Earlier the above methods was accessing two different variables. This issue is fixed now which will avoid the cross threading.
Whenever the received packets exceed a threshold level ( default value is 100 ), there was a problem while de-queing the excess packets. These packets will cummulatively increase and will lead to an "OutOfMemoryError". The objects which got leaked, include SnmpPDU, Snmp3Message (if V3), ASN1Parser, USMUserEntry (if V3), InetAddress and SnmpEngineEntry (if V3 ) . This issue has been fixed.
If the authPassword and privpassword is not specified in the call to init_v3_params method USMUtils then the corresponding USMUserEntry is not updated with these latest passwords and keys and the protocols. This behavior will be seen only when the init_v3_params method is called for the second time for the same user, with a lesser security level. This has been fixed.
MIBs API
In the OID definitions like {1 3 6 } where the first subOID is a number, the module will not get resolved. This bug has been fixed.
In the OID definitions like {iso org(3) dod(6) 1 mgmt(2) ...} where a number occur as a subID in the middle of namenumber subOID, NullPointerException is thrown. This bug has been fixed.
In the TRAP-TYPE Construct, the ENTERPRISE field containing the OID value is not allowed. This bug has been fixed.
Creation of unnecessary objects in the MibModule class has been fixed.
In database mode, importing TCs are not handled. This bug has been fixed.
When an error message is thrown while loading a mib, modifying the mib file is not possible and the streams are not closed. This bug has been fixed.
The HTTP URL is not validated in the getModuleNameDefinition method. Hence, it gave the filename instead of modulename. This bug has been fixed.
In the method encodeInstanceString() in MibOperations class, the length count is added in front of the IMPLIED index. This bug is fixed.
While loading MIB in the database mode, if the IMPORTS section in the MIB contains the imported elements which are not used, then ArrayIndexOutOfBounds Exception was thrown. This bug has been fixed.
Loading of Compiled MIB files is now made thread-safe.
While loading some of the MIBs, the nodes were found to be missing in the MibTree. This problem is fixed now.
In the setMultipleRevision() method, if the imported module is present in the multipleRevision, infinite loop occurs. This problem has been fixed.
Thread Safe problem in ACVariation class is fixed.
Improper handling of the TAddress syntax in the createVariable(String) method in the LeafSyntax class is fixed.
The null value return for the ACCESS value of the imported node has been fixed.
The NullPointerException thrown in the getIndexes(MibOperations ) method in the MibNode class is fixed.
The FileNotFoundException thrown while loading the mib file which contains multiple modules and is placed in the space separated path, is fixed.
The ArrayIndexOutOfBoundException thrown in the getMibNode(Vector) method in the MibModule class is fixed.
While setting 'false' in the setReadDesc(boolean flag) method (which restricts the loading of .cds file), the getIndexes(MibOperations mibOps) method in the MibNode class will return the empty vector instead of index nodes vector. This bug has been fixed.
The ArrayIndexOutOfBoundException was thrown in the multi-threaded application while invoking toString(SnmpOID oid) method in the MibOperations class. Now, this method has been made thread-safe.
For the OBJECT-IDENTITY macro, the reference was same as the description. This bug has been fixed.
In the OBJECT IDENTIFIER definition, if the suboid is a number, a temporary label is created using this suboid. If two nodes are defined in such a way that their second sub-oid (which is a number) is same, then the temporary label created is overwritten and only one of the node exist in the OID list. This bug has been fixed.
For the index nodes with syntax OCTET-STRING and OBJECT IDENTIFIER, the length value has to be prepended, unless it is defined IMPLIED. But if the OCTET STRING has a SIZE clause, the size can be taken as the length value and the length need not be prepended before the instance value. This condition is now handled.
When the DateAndTime value is given in the invalid format, it was throwing IncompatibleClassChangeError instead of giving proper error messages. This bug has been fixed.
If the OBJECTS clause is not present in the NOTIFICATION-TYPE macro while loading MIBs using Compiled MIBs option, the description value is displayed as empty string. This bug has been fixed.
|