SNMP4J-SMI-PRO CHANGES ====================== [2026-06-29] Version 2.1.0 (Requires SNMP4J 3.12.2 or later) * Added: SmiManager.compile(..., maxThreads) to compile MIB modules concurrently. This can speed up the compilation of MIB files by a factor up to the number of threads specified by maxThreads. * Added: New strictness mode SmiCompiler.Strictness.lenientIfStandardFails. In this mode every MIB module is first compiled with full standard checks; if a module fails for reasons other than unresolvable imports (error number 1100), it is automatically recompiled in lenient mode. SmiManager.compile(..) honors the new mode for both dry-run and store target modes. * Added: New interface com.snmp4j.smi.SmiModuleImport with getModuleName() and getImportedModuleNames() describing a (sorted) MIB module together with the names of the modules it imports. * Added: SmiModule.getCompilerStrictness() returns the Strictness (standard or lenient) with which a module was compiled. The value is now persisted with the module in the MIB repository and is therefore available again after the module has been read back from a repository. * Added: SmiManager.loadAllModules() and SmiManager.getLoadedSmiModules() return all repository modules resp. all currently loaded modules as SmiModule instances; getLoadedModuleNames() and getExplicitlyLoadedModuleNames() return the corresponding module names. * Changed: CompilationMonitor.compilationProgress(..) has an additional SmiCompiler.Strictness parameter that reports the strictness actually used to compile the module (relevant for lenientIfStandardFails). This is a source-incompatible change for existing CompilationMonitor implementations. * Added: CompilationMonitor.sorted(List, int failedOffset, Set missingModules) default callback. It is invoked after dependency sorting with the sorted modules and their imports, the offset of the first module that could not be fully sorted (0 if all modules could be sorted), and the set of missing (unresolvable) module names. * Improved: ModuleInfoSorter now returns the missing modules correctly, keeps modules whose dependencies could only be partially resolved in dependency order instead of dropping them, and sorts the modules in O(V log V + E) time. * Fixed: The IMPORTS of PIB modules (PIB-DEFINITIONS) were not recognized, so SmiManager and ModuleInfoSorter could not resolve PIB module dependencies. PIB imports are now detected. * Fixed: A valid PIB EXTENDS clause that references a base PRC no longer raises a false "reference is not a table" error (error number 1600), in particular during lenient compilation. * Removed: Unused code. * Added: New command line example MibManager (examples/MibManager.java with compile-mib-manager.sh and mib-manager.sh) to create, update, check, and query a MIB repository from the command line. [2026-06-24] Version 2.0.0 (Requires SNMP4J 3.12.2 or later) * Removed: Dependency on the JGL (Generic Collection Library). Java standard collection types are used throughout in place of JGL collection classes. This reduces the size of the library and improves the performance of SmiManager.findSmiObject(OID) by ~30%. * Added: New package com.snmp4j.smi.ber with SnmpMessageTree, BERNode, and BERNodeError for parsing raw SNMP messages into a navigable BER decode tree. Supports SNMPv1, SNMPv2c, and SNMPv3 including AUTH_PRIV ScopedPDU decryption via DirectUserTarget credentials. The tree can be rendered as an indented text tree (SnmpMessageTree.formatAsText()) or as a JSON object tree (SnmpMessageTree.formatAsJson()). BERNodeError nodes record parse deviations with position, offending bytes, and expected tags. A Draft 2020-12 JSON Schema for the BER node JSON format is provided as a classpath resource (com.snmp4j.smi.ber/BERNodeJsonSchema.json). * Added: SmiObjectJsonConverter and SmiObjectJsonMatcher in new package com.snmp4j.smi.util.json for converting MIB object instance data to JSON and matching JSON values against MIB object types. A Draft 2020-12 JSON Schema (SmiObjectJsonSchema.json) describes the supported JSON representation. * Added: SmiSyntaxElement.getComment() to retrieve the comment associated with an SMI syntax element. * Improved: PolymorphicColumnType now supports polymorphic formatting of column values based on the actual type of the variable binding. The default ploymorphic formatters are: SNMP-TARGET-MIB|NOTIFICATION-LOG-MIB:TAddress, AGENTX-MIB:AgentXTAddress, IP-MIB:InetAddressType, TCP-MIB:InetAddressType, UDP-MIB:InetAddressType, IP-FORWARD-MIB:InetAddressType. * Improved: SmiManager.loadModules() now properly closes all I/O resources after loading, preventing resource leaks when module files are deleted or inaccessible during load operations. * Changed: Default DISPLAY-HINT is no longer OctetStringDefaultFormat.ASCII, instead it is set to OctetStringDefaultFormat.MIB. [2025-05-17] Version 1.12.3 (Requires SNMP4J 3.9.4 or later) * Fixed: NullPointerException in SMI parser when compiling MIB modules with syntax errors that prevent specific localizing Token positions for VARIATION constructs (very rare). * Fixed: UTC date and time comment generated with Java 24 for MIB export (PDF, HTML, etc.) or later contains non-ASCII character. [2025-05-16] Version 1.12.2 (Requires SNMP4J 3.9.4 or later) * Updated: SNMP4J dependency to 3.9.4. * Improved: SmiManager.setIndexClauseCachingEnabled now allows disabling INDEX clause reference caching which is now enabled by default to speed up INDEX OID conversions to Variables. [2025-04-06] Version 1.12.1 (Requires SNMP4J 3.9.1 or later) * Updated: SNMP4J dependency to 3.9.1 * Fixed: The overwriteExistingObjects parameter had been ignored (used as if it was set to true) for maxThreads >= 1 of SmiManager.loadModules(String[] moduleNames, int maxThreads, boolean overwriteExistingObjects) * Fixed: Thread resource leak in SmiManager.loadModules if exception occurred during module loading (i.e., if module file was deleted during load operation). [2025-02-04] Version 1.12.0 (Requires SNMP4J 3.9.0 or later) * Added: SmiManager.useCompression(boolean) to activate storing of compiled MIB modules with GZIP compressed files. This speeds up MIB module loading and safes disk space. By default, this option is now activated. * Added: SmiManager.loadModules(String[] moduleNames, int maxThreads, boolean overwriteExistingObjects) to load MIB modules concurrently with many optimizations for fast MIB module loading. * Added: SmiManager.resetModules() to unload any loaded modules completely. * Improved: Several factors have optimized MIB loading speed. * Updated: Dependencies, for example, SNMP4J 3.9.0 is required to use the new SmiManager.loadModules method. [2023-10-09] Version 1.11.0 (Requires SNMP4J 3.7.7 or later) * Refactored: Renamed internal package com.agentpp.snmp to com.agentpp.snmpvalue to fix a code signing issue. [2023-08-07] Version 1.10.0 (Requires SNMP4J 3.7.7 or later) * Fixed: SmiManager will prefer newer modules according to the LAST-UPDATED clause of the MODULE-INFO statement if for the same MIB module name there are several MIB files in the compilation list/path. OverwriteIfNewer now will prefer SMIv2 modules as newer over SMIv1 modules (without LAST-UPDATED clause) and SMIv1 modules will always be overwritten by newly compiled MIB modules. * Updated: The directory "mibrepository" now contains a completely updated set of compiled RFC MIB modules. If you have modified (i.e., added compiled MIB modules to a previous copy of this directory), then you will need to redo this operation(s) with the new directory, because MIB module IDs of the compiled modules might otherwise not be unique. * Updated: Dependency to SNMP4J 3.7.7. [2023-03-20] Version 1.9.17 (Requires SNMP4J 3.7.7 or later) * Updated: Dependency to SNMP4J 3.7.7. [2023-01-16] Version 1.9.16 (Requires SNMP4J 3.7.4 or later) * Updated: Dependency to SNMP4J 3.7.4. * Improved: Full release compatibility with Java 8 (e.g. when using this API with SNMP4J 2.8.14) [2022-05-16] Version 1.9.15 (Requires SNMP4J 3.7.0 or later) * Updated: Dependency to SNMP4J 3.7.0. * Updated: SnmpWalk example. [2021-11-20] Version 1.9.14 (Requires SNMP4J 3.6.1 or later) * Added: SmiManager.findSmiObjectType to find an OBJECT-TYPE definition for a specified instance OID like "ifAdminStatus.65000". * Fixed: Possible NPE when creating SmiManager with empty repository directory. * Improved: JavaDoc. * Updated SNMP4J dependency to 3.6.1 (or later). [2020-11-30] Version 1.9.13 (Requires SNMP4J 3.4.4 or later) * Updated SNMP4J dependency to 3.4.4. [2020-10-12] Version 1.9.12 (Requires SNMP4J 3.4.3 or later) * Updated SNMP4J dependency to 3.4.3. [2020-06-28] Version 1.9.11 (Requires SNMP4J 3.4.2 or later) * Updated SNMP4J dependency to 3.4.2. [2020-01-10] Version 1.9.10 (Requires SNMP4J 3.1.0 or later) * Fixed [SFJ-215]: NullPointerException is thrown by SmiManager$SmiNotificationTypeImpl.getObjectNames() if NOTIFICATION-TYPE (or TRAP-TYPE) has no objects. [2019-05-14] Version 1.9.9 (Requires SNMP4J 3.1.0 or later) * Fixed [SFJ-203]: SNMP4J-SMI-PRO does not correctly load MIB modules with compliance modules correctly when the MIB module was saved with SNMP4J-SMI-PRO 1.9.6 or earlier and if the Java runtime differs (version and/or platform). In the failing case, exception and conditional group clauses are 'null' or empty and do not provided the saved content. * Improved: Small performance improvements to SMI output. [2019-04-20] Version 1.9.8 (Requires SNMP4J 3.1.0 or later) * Bumped SNMP4J dependency to 3.0.1. * Changed: Compiled for Java 9. * Improved: JavaDoc [2018-09-24] Version 1.9.7 (Requires SNMP4J 3.0.1 or later) * Updated SNMP4J dependency to 3.0.1. [2018-01-22] Version 1.9.6 (Requires SNMP4J 2.5.11 or later) * Internal refactoring. [2018-01-19] Version 1.9.5 (Requires SNMP4J 2.5.11 or later) * Fixed [SFJ-163]: SmiManager.findSmiObject(String moduleName, SmiObjectFilter filter) does not use specified moduleName. * Added: SmiManager.SmiModule.getObjectIdentifiers(OIDOrder) returns all object identifiers of a loaded MIB module. * Added: OIDComparator class to compare OIDs in depth-first-or breadth-first-order. * Improved: SmiModule extends SmiObject interface. [2017-12-11] Version 1.9.4 (Requires SNMP4J 2.5.8 or later) * Added: SmiModule.getSmiModuleDefinition() returns the complete SMIv1/v2 specification text as a string. [2017-10-20] Version 1.9.3 (Requires SNMP4J 2.5.8 or later) * Improved: Simplified Maven dependencies. [2017-09-14] Version 1.9.2 (Requires SNMP4J 2.5.8 or later) * Fixed: Changed classifier of JAR with dependencies from 'jar-with-dep' to the standard classifier 'jar-with-dependencies'. [2017-08-12] Version 1.9.1 (Requires SNMP4J 2.5.6 or later) * Fixed [SFJ-144]: MIB compiler does not check if an object is accessible in NOTIFICATION-TYPE's OBJECTS clause. * Fixed [SFJ-146]: SNMP4J-SMI allows empty BITS construct in SYNTAX clauses although this is not allowed by RFC 2578. [2017-04-12] Version 1.9.0 (Requires SNMP4J 2.5.6 or later) * Added [SFJ-142]: Unloading MIB module including its dependencies otherwise unused with SmiManager.unloadModuleWithDependencies(..). * Added: SmiManager.getExplicitlyLoadedModules() to return a list of modules that have been loaded directly (and not indicrectly by resolving import dependencies. * Updated: SNMP4J to 2.5.6. [2016-05-07] Version 1.8.0 (Requires SNMP4J 2.5.0 or later) * Changed: Replaced SmiMaxAccess by MaxAccess from SNMP4J 2.5.0. * Added: SubIndexInfo dependency from SNMP4J 2.5.0. * Added: SmiErrorInfo interface to allow more flexible error reporting. * Added: Support for NameAndNumber OID format. * Added: Error checking for negative ranges for unsigned numeric values. * Fixed: Possible in rare cases: NPE when checking sequence constructs in the SMI parser (strict checking only). * Fixed: Possible in rare cases: NPE when checking import constructs in the SMI parser (strict checking only). [2015-07-07] Version 1.7.0 (Requires SNMP4J 2.3.3 or later) * Fixed [SFJ-111]: For trap and notification types the VARIABLES and OBJECTS clauses cannot be evaluated. A new interface SmiNotificationType has been added for that. * Added: SmiManager.findSmiObject by module and object name with (optionally) including imported MIB modules of the specified module in the search. * Added: Interfaces and implementations in SmiManager to access attributes of MODULE-COMPLIANCE and AGENT-CAPABILITIES statements. [2015-03-12] Version 1.6.0 (Requires SNMP4J 2.3.3 or later) * Fixed [SFJ-102]: BITS syntax cannot be used in SMIv1 as textual convention. * Added [SFJ-101]: SmiManager.findSmiObject by OID and provide filename of the MIB module an object belongs too. [2014-10-18] Version 1.5.2 (Requires SNMP4J 2.3.0 or later) * Fixed: Index object parsing from String of IpAddress values. * Added: Added SNMP-TLS-TM-MIB to mib repository. * Added: SmiManager.getIndexStringFromVariables(..) method. * Fixed: SmiObject.getParent did not return correct object type. * Fixed: SmiManager.getIndexVariables did not take the entry object (instead a column object). * Fixed: SmiTextualConvention.getDisplayHint returned display hint text enclosed in double quotes. * Improved: System.lineSeparator dependency (Java 6 SE is now supported too). [2014-08-05] Version 1.5.1 (Requires SNMP4J 2.3.0 or later) * Fixed: File handle leak when using the SmiManager.compile(File[]...) method. * Fixed: NPE in PIB module parsing. * Added: SmiCompiler.dryModeWithoutErrorLimit to get all errors of a MIB module regardless of any globally set limit. * Fixed: Duplicate module names in SmiManager.listModules if repository listener were not added/removed properly. [2014-07-26] Version 1.5.0 (Requires SNMP4J 2.3.0 or later) * Fixed: False error messages about missing imports or unresolved syntaxes could have been generated by the MIB compiler if a MIB file had several errors affecting the MIB structure. * Improved: Error location of DEFVAL and other unresolved references. * Added: Full SPPI PIB module checking now available with additional error messages 6001-6007. [2014-06-30] Version 1.4.2 (Requires SNMP4J 2.3.0 or later) * Fixed: If a MIB module had exactly one syntax error, an empty error list could have been returned to the caller of SmiManager.compile(..). [2014-06-23] Version 1.4.1 (Requires SNMP4J 2.3.0 or later) * Improved: Lenient mode parsing of SMIv2 MIB modules without mandatory MODULE-IDENTITY construct. [2014-06-19] Version 1.4.0 (Requires SNMP4J 2.3.0 or later) * Fixed: Lexical errors are reported with line, column and position (not only in line and column in message). * Added: End position and end row & column of an SmiError. * Fixed: Lenient compiler mode accepted too much errors in MIB files resulting in compiled MIB modules with missing MIB information (e.g., empty SYNTAX), causing NullPointerExceptions if accessed unchecked. * Added: Short error message support which does not include error number and location. * Improved: ZIP-File support for CompilationResult. * Added: New interface SmiCompiler and extended control about the compilation process and overwriting of MIB modules in the MIB repository. * Added: SmiObjectFilter.java and SmiManager.findSmiObject by filter method. [2014-05-18] Version 1.3.2 (Requires SNMP4J 2.3.0 or later) * Improved: Moved SmiSyntaxElementImpl and SmiSyntaxImpl outside SmiManager in order to be able to use SmiSyntax within JSF front end-code. * Fixed: Possible NPE in getMinValueLength and getMaxValueLength. * Added: SmiSyntaxType.java and resolved syntax support to seamlessly get syntax information from textual convention or SMIv1 type definitions. * Added: Method SmiObjectType.createNewVariable to create a new variable value for an object type. * Added: SmiObjectType.getDefaultValue and SmiObjectType.getDefaultVariable. [2014-03-27] Version 1.3.1 (Requires SNMP4J 2.2.5 or later) * Added: SmiObjectType.getMaxValueLength() and SmiObjectType.getMinValueLength() to determine the minimum and maximum length of a formatted value. * Fixed [SFJ-91]: Fixed SmiObjectType.getSmiSyntax() implementation returned wrong BER syntax identifier values. [2014-03-17] Version 1.3.0 (Requires SNMP4J 2.2.5 or later) * Added: Easy multi-language support for SmiError messages through ResourceBundles. See the sample ResourceBundle SampleSmiErrorResourceBundle.java in the examples directory of the * Added: SmiManager.setIncludeUnknownErrorsCause method to be able to forward exceptions in a custom RepositoryDriver to the caller of the compile methods as "unknown" SmiErrors. [2014-03-03] Version 1.2.4 (Requires SNMP4J 2.2.5) * Fixed: Race condition in SmiManager when accessing many different MIB modules concurrently from multiple threads. [2014-02-18] Version 1.2.3 (Requires SNMP4J 2.2.5) * Fixed: Regression in SmiManager.listModules which did not return a value if called on a SmiManager without a RepositoryDriver. * Improved: SmiObject.getChildren now returns a list of SmiObjects or its subclasses. This allows API users to wrap the SmiObject class in their own subclasses. [2014-02-14] Version 1.2.2 (Requires SNMP4J 2.2.5) * Fixed: NullPointerException when calling SmiManger.listModules with the MemRepositoryDriver. * Improved: The compile method now uses the lenient SMI compiler mode to determine module dependencies which improves sorting for MIB modules with syntax errors. [2014-02-11] Version 1.2.1 (Requires SNMP4J 2.2.5) * Initial SNMP4J-SMI-PRO release with four new (additional) SmiManager.find* methods which provide direct access to any SMIv1/v2 information (except compliance modules and agent-capabilities statements). The SNMP4J-SMI-PRO license is a site license in contrast to the user license SNMP4J-SMI. CHANGES since SNMP4J-SMI 1.1.2: * Fixed: NullPointerException in SmiManager.compile with some special syntax errors, for example if a lowercase name exceeds 64 characters. * Improved: Lenient parser mode now also accepts inconsistent syntax (i.e. between table entry and column definition) and the underscore ("_") character in lowercase names.