SNMP4J-SMI-PRO CHANGES
======================

[2026-08-03] Version 2.1.2 (Requires SNMP4J 3.13.1 or later)

* Fixed: Possible NPE on SmiManager when accessing index information on SmiObjectType with
  AUGMENTS clause, but unresolved imports for the table entry referenced in the INDEX clause.
  This could happen only if the MIB module was compiled in lenient mode.

[2026-07-28] Version 2.1.1 (Requires SNMP4J 3.13.0 or later)

* Fixed: Possible NPE on SmiManager when accessing index or columns information on SmiObjectType
  if the object type was compiled with lenient mode and the compiled MIB module as syntax errors
  regarding table columns and INDEX definition. Instead of the NPE thrown, now null is returned
  which complies with the SmiObjectType interface.
* Fixed: SmiManager.compile reported incorrectly the error "inconsistent table" (1800) when a table
  has a not-accessible column part of the table's SEQUENCE definition but not part of its INDEX clause.
* Added: SmiManager.compile(...) now returns the compilation result as an ordered list of
  CompilationResult instances which now contains a "ranking" for fixation order. A ranking of 0 means
  that the module was compiled successfully (i.e., no need to fix). A ranking of 1-n means that the module
  with the lowest number should be fixed first, to allow compiling dependent modules when fixed.

[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<SmiModuleImport>, int failedOffset, Set<String> 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<S> 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.

