bottrap

MIB Smithy SDK 4.0 Released

February 1st, 2010 by Michael Kirkham

MIB Smithy SDK 4.0 is released at long last! This is a major release composed of significant architecture changes, new features, and assorted bug fixes. High level changes include IPv6 support, a new license key format that supports licensing based on user name (as an alternative to host-based licensing), many new validation rules and error level adjustments, and better integration with Tcl’s own support for binary data, and platform changes.

As of 4.0, some older platform versions are no longer officially supported, but newer versions are:

Platform MIB Smithy SDK 3.4 MIB Smithy SDK 4.0+
Solaris SPARC 2.7+ 10+
Linux x86 Red Hat 7.3/compatible Fedora Core 7/compatible
Linux x86_64 none Fedora Core 7/compatible
FreeBSD x86 4.3/compatible 6.2/compatible
Windows no change no change
Mac OS X no change no change

This is not to say definitively that the SDK will not work with the older platforms, however, as it’s likely just a matter of having the appropriate dependencies installed (e.g. libstdc++). Rather, these are the platforms the releases are built on, and the older platforms have been (or will soon be) retired, so we won’t be able to guarantee support that far back anymore.

Some changes still need to be made to the web site to support Linux x86_64 and user-based licensing, and I’ll get to work on those right away. In the mean time, if you are interested in either of these, please contact support and we’ll get you squared away.

If you haven’t already, and you’re currently using an older version of the SDK, be sure to read my other post about potential compatibility issues posed by the binary data changes.

Changes in MIB Smithy SDK 4.0:

As always, your feedback is important in determining changes and fixes that will be made in coming releases. If you have questions or comments, please don’t hesitate to contact us. The following changes have been made in this release:

1359: New options for formatting OCTET STRINGs

A new -strformat option was added to [smilib format] to enhance support for formatting OCTET STRINGs (now treated as byte arrays via APIs). The default, configurable for the database, is “1x:” for colon-delimited hex format.

[smilib format] also now allows specifying a type in lieu of record name or OID, e.g.:

% smilib format “OCTET STRING” foo
66:6f:6f

1658: Return indexparts for strings as byte arrays

[smilib get -indexparts] will no longer return a custom hex format for OCTET STRING and BITS index data, but will instead return raw binary (via Tcl_NewByteArrayObj) to make it easier to work with data at the script level. Use [smilib format] to format data for display, which will use return a hex format in lieu of DISPLAY-HINT.

362: Add Linux x86_64 platform support

The Linux platform with x86_64 architecture is now supported.

1836: Validation for COPS-PR-SPPI’s OBJECT-TYPE STATUS

Validation rules were added for COPS-PR-SPPI’s OBJECT-TYPE STATUS field. Previously, values that are not allowed by COPS-PR-SPPI were not reported as errors the way values disallowed by other versions were.

2160: Support multiple Host IDs in license key

Certain users in the past have needed to swap license key files depending on which host they’re using. With the new license key format, we can provide these users with a single unified key if switching to user-based licensing is not appropriate for their needs.

1707: Check for circular indexing dependencies

Validation rules were added to recursively check through INDEX, AUGMENTS, EXTENDS, PIB-INDEX, and UNIQUENESS relationships to detect loops and improper table normalization (such as A EXTENDS B, B EXTENDS A; or A AUGMENTS B, but B’s INDEX lists columns from A).

2161: Add support for username-based licensing

A new license key format has been implemented that allows for licensing based on username, rather than on Host ID. Where host-based licenses allow any user on a specific host, username-based licenses allow a specific named user on any host. Existing users who purchased prior to this feature being available can request their license to be permanently converted to a username-based license at no charge provided their support contract is current.

776: Relaxed rule for column syntax vs. row definition

It is now a warning, rather than an error, for a column’s type in the SEQUENCE definition and the column’s OBJECT-TYPE to be different, provided the SEQUENCE uses the proper base type.

699: Normalized filename properties

The -filename property for SMI databases and file records is now normalized automatically when set to make its value invariant if the current directory is changed in the Tcl shell (or script) after assignment.

1849: Message clarifications

Many warning and error messages from the parser and validator were reworded (some slightly, some more) for clarification.

1850: Auto-correct swapped subrange endpoints and doublets

When validating size/range specs, swapped and duplicate endpoints in subranges are now automatically corrected after reporting the error. e.g., (3..2|5..5) becomes (2..3|5).

304: Add IPv6 Support

Communicating with SNMP agents over IPv6 is now supported. (Note: nmtrapd protocol doesn’t currently have a way to indicate an IPv6 source address for traps that aren’t received directly by the SDK, but there’s a plan in place to address this limitation.)

1840: Clarify SMI version in error/warning messages

Improved module SMI version detection for application of version-specific rules when imports are missing and changed most validation-stage messages to include the proper version string. (For example, COPS-PR-SPPI inherits most of its rules from SMIv2. Most of these messages previously mentioned SMIv2 even for PIB modules, but will now say COPS-PR-SPPI.)

1837: Disallow non-attributes in COPS-PR-SPPI’s OBJECT-GROUP

A validation rule was added to generate an error if an OBJECT-TYPE listed in a COPS-PR-SPPI OBJECT-GROUP is not an attribute OBJECT-TYPE.

1895: Setting SMI database options at creation time

The [smilib new] command, when used to create a new SMI database, can now accept options for setting the database properties the same way [snmplib new] can. Previously this required a separate [smilib set] call to set database properties, except when creating records in the database.

1115: Allow named ports, in addition to numeric

TCP ports for sending or receiving SNMP messages can now be specified by service name, rather than just numeric (e.g. “snmp” for port 161, if such a named entry is present in /etc/services).

2185: INDEX/related lookup enhancements

Added -extendsdecl, -pibindexdecl, -uniquedecl options to smilib get/set commands for OBJECT-TYPEs to function like -indexdecl and -augmentsdecl in returning the value directly defined in the record, while the old -extends and -pibindex options will return the value from the associated row.

The -index, -pibindex, -pibreferences, etc. options now trace AUGMENTS and EXTENDS to find the values inherited from augmented tables, rather than only looking one node up/down to find the row.

Also added -row and -table properties to return the record for the row or table OBJECT-TYPE associated with the specified OBJECT-TYPE (which could itself be a row, table, or column).

1153: XMLSMI: relax parsing of unrecognized elements

The XML parser now only generates a warning and treats as a successful parse (rather than an error and failed parse) when encountering tags that aren’t recognized. This should allow new tags to be added down the road, but still allow the file to load into versions back to 4.0.

2184: Correct multiple INDEX/AUGMENTS/etc. at parse time

The SMI parser previously recovered from having too many or out-of-order INDEX, AUGMENTS, etc. clauses by preserving them all and erroring at validation time, despite only having one legal value, which complicated validation and usage. Instead of preserving them all, the parser now reports the extras as an error only at parse time and discards them, but still supports (and reports) recovery from ordering issues.

1234: Provide socket errors as strings rather than numbers

In a few cases, socket-related errors were provided just as an error number. They should all now give a more meaningful error message. Some of the existing messages have been further clarified.

1871: Add checks for STATUS consistency

Validation rules were added for checking consistency between related records and dependencies. An error or warning may be issued depending on the type of relation and difference (for example, it’s an error for a row and table to be different, but a warning for a “current” OBJECT-TYPE to use a “deprecated” TEXTUAL-CONVENTION).

1830: VARIATIONs with DEFVAL and ACCESS not-implemented, accessible-for-notify

A validation rule was added to issue a warning for a VARIATION having both a DEFVAL and ACCESS ‘not-implemented’ or ‘accessible-for-notify’ (the DEFVAL is superfluous).

1702: Check for scalar objects with MAX-ACCESS not-accessible

A validation rule was added to produce an error for a scalar SMIv2 OBJECT-TYPE having MAX-ACCESS ‘not-accessible’. If the object’s value is only available via notification, it should have MAX-ACCESS ‘accessible-for-notify’.

1835: OBJECT-TYPEs not in OBJECT-GROUPs in SMIv2, COPS-PR-SPPI

It is now an error, rather than a warning, for OBJECT-TYPEs and NOTIFICATION-TYPEs to not be a member of any OBJECT-GROUP or NOTIFICATION-GROUP when they otherwise must be.

1834: Auto-correct missing ‘Z’ suffix in ExtUTCTime values

The validator now automatically corrects a missing ‘Z’ suffix in LAST-UPDATED and REVISION timestamps after reporting the issue.

1831: Use of type names (rather than objects) as INDEXes

It is now an error, rather than a warning, for SMIv2 and COPS-PR-SPPI OBJECT-TYPE to use INDEX values pointing to type names rather than object names. For RFC-1212, it’s now a forward-compatibility warning.

1742: Additional validation for read-create

A validation rule was added to disallow any column from having access “read-write” if any column in the same table has access “read-create”, per RFC 2578 section 7.3.

1833: Restrictions on MANDATORY-GROUPS and GROUPs

It’s now an error for MODULE-COMPLIANCE’s MANDATORY-GROUPS or GROUP clauses to reference anything other than an OBJECT-GROUP or NOTIFICATION-GROUP. Previously they allowed any OID value, like AGENT-CAPABILITIES’ INCLUDES allows specifying SMIv1 branches, but the text of RFC 2576 that allows this (in section 2.3) applies only to AGENT-CAPABILITIES.

1841: Disallow empty binary/hex strings as enum values

Hex/binary strings as enumeration values are not explicitly legal (or illegal) in SMI, but the SDK supports them (with warning) just in case. However, it makes no sense for something that should be an integer to have no bits, so a validation rule was added to produce a warning specifically for empty hex/binary enumerations and integral DEFVALs.

1842: Do not error for ASN.1 types in plain ASN.1 modules

Towards support for plain ASN.1 modules, error levels for validation rules regarding the use of ASN.1 types not supported by SMI or COPS-PR-SPPI were changed. If the module is clearly intended to be a MIB or PIB module, an error is produced. If nothing is imported from SMI or COPS-PR-SPPI base modules, it’s assumed to be plain ASN.1 and no error or warning about the type is produced.

1838: Improved parser recovery for enumerated types

Enumerated types are now parseable with empty braces or no braces/enumerations, including BITS (where the legal syntax requires at least one bit to be defined and braced). This is mainly to allow incomplete MIB definitions to be saved and still reloaded in the MIB Smithy editor.

1660: Misleading error when SDK falls back to direct trap port binding

The failure messages from attempts to bind to port 162 before connecting to nmtrapd via Tcl_OpenCommandChannel were left in the interpreter result despite connection succeeding a TCL_OK result being returned. The message could mislead users (at least in the interactive shell) into thinking the [snmplib bind] command failed when it didn’t.

375: Return OCTET STRINGs as binary

SNMP session APIs no longer automatically encode/decode binary OCTET STRING data to/from hex format, but instead return and accept Tcl’s native binary format and conventions (e.g., byte array objects, [binary] command, and “\x” to specify hex-encoded data in scripts).

This change is intended to simplify scripted use of and prevent APIs from interpreting values as hex encoded when they are intended to be taken as literal.
It affects variable bindings, session properties (such as community strings and passwords), and callback parameters alike.

Use the [smilib format] command to format values for display to a user. You can specify “OCTET STRING” to format values that aren’t associated with a varbind, such as the SNMPv3 Engine ID passed to request callbacks.

1718: ExtUTCTime validation wrong after 2038

ExtUTCTime validation (e.g. LAST-UPDATED and REVISION timestamps) is now Y2K38 compliant, no longer based on Unix epoch.

2209: Wrong keywords for usm privKeyChange -privproto option

The [snmplib usm privKeyChange] command’s -privproto option was expecting auth protocol keywords rather than priv protocol keywords. Consequently, one could not override the privacy protocol for the session without error.

1832: Warning for duplicate INDEXes

It is now a warning, rather than an error, for an OBJECT-TYPE’s INDEX to list the same object multiple times. SMIv2 discourages it, but it is not forbidden.

1726: False “recursive loop” error with conformance groups

A GROUP clause in MODULE-COMPLIANCE pointing to a non-group with missing dependencies could previously generate a “OBJECT IDENTIFER value assigned…is defined as a recursive loop” error due to the way OIDs were indexed in the old architecture. In the new architecture, along with forbidding non-groups, this is no longer an issue.

1705: Using EXPORTS in SMIv2 modules should be an error

It is now an error for an SMIv2 or COPS-PR-SPPI module to use the ASN.1 module’s EXPORTS clause. Previously it was a warning because the MIB Smithy editor automatically excluded it upon saving, but since it’s forbidden it should be an error for standalone validation.

1428: [smilib new] doesn’t allow some set options

The set of record properties supported by [smilib new] and [smilib set] had gotten out of sync, so some properties of some record types could not be set at creation time. They should be back in sync now, allowing all properties to be set at record creation time.

Addendum

The following additional cases were also fixed in 4.0 but didn’t make it into the release notes (they’d been dual-committed for 4.0 and a possible 3.4.9, but there was no 3.4.9 release):

1815: Additional validation for first two subidentifiers

ASN.1 places limits on the range of the first two subidentifiers of an OID. Validation previously did not check both values in some cases, depending on the form used to define the OID. Out-of-range values should now be reported as an error regardless of form.

1782: Disallow hyphens in COPS-PR-SPPI enum/bit labels

A warning will now be produced for enumeration and bit labels containing hyphens in COPS-PR-SPPI, as with 3.4.8, which added such warnings to record names.

1779: DEFVAL identifier list not fully validated versus named bits

When using the identifier list form for DEFVAL (used for named bits), the identifiers were not properly checked against the defined bit names to see if they exist.

1802: Validation for single-valued size/range refinements

Validation for size and range refinements was failing to detect and report a value as being out of the base size or range if it was only a single value (rather than a sub-range) in the refinement.

1786: Hex/Binary enumeration order checking incorrect

When using hex or binary values for enumeration and bit values, a false error was reported regarding the order due to treating the value as a hex or binary representation of a string rather than an integer.

1809: Warning to start enums at 1 should not trigger when 1 is refined away

A warning to start enumerations at 1 will no longer be generated for a record that refines the value away (such as a TEXTUAL-CONVENTION that starts at 1, but the OBJECT-TYPE using it refining it away).

1808: Overlapping sizes/ranges should be an error

There was a bug in the rule for detecting overlapping size and range lists that prevented the overlap from being detected in some cases. These will now be reported as an error as they should be.

1810: Duplicate enum values in hex/binary not detected

Duplicate enumeration values were not previously reported as an error if one or both of the values were in hex or binary string format (which is not explicitly legal or illegal in SMI).

One Last Case Before MIB Smithy SDK 4.0

January 27th, 2010 by Michael Kirkham

I’m happy to report that I’m working on the last open case assigned for the MIB Smithy SDK 4.0 release. This last case is for a certain set of new MIB and PIB validation rules that I think should be added, although it’s in an area the standards are silent on (like so many other areas of the SMI).

The other good news is on the platform front: I acquired a replacement for the dead Solaris box and spent the last couple days getting it set up with Solaris 10 (SPARC) plus the necessary build tools and libraries, and spent some time with Linux x86_64 while I mulled over this final case. After a few minor tweaks to build rules and such, the 4.0 code is now building and passing all 2143 regression tests on all targeted platforms (including Linux x86_64, so I can now say with certainty that it will be supported going forward).

It’s a little tricky to implement and write tests for the new validation rules I have planned for in the final case, and likely rare to come across. I’m not entirely settled on the approach I’ve taken (hence the mulling), so I may punt it to the next release if it would otherwise push the release beyond Monday.

A Sneek Peek at MIB Smithy SDK 4.0

January 12th, 2010 by Michael Kirkham

As I mentioned earlier, version 4.0 of MIB Smithy SDK is extremely close to release, now with only 9 cases left open (of which 3 are implemented but just need more QA testing, and one is nearly finished). I thought I’d whet your appetite with a summary of what’s coming, but I also wanted to give fair warning regarding a couple points of compatibility so there are no surprises.

Compatibility issues are one of the main reasons for bumping the major version to 4.0, since Tcl’s “package require” version matching mechanisms make it easy to ensure your scripts pull in a version of a package that is compatible. If you use “package require SmithySDK 3.0” then Tcl will load the latest 3.x version found, but won’t load 4.x, so if there’s any migration you need to do in your scripts then you can change the required version as the migration is done.

The two potential compatibility issues are changes to [officially] supported platforms and in the handling of binary data passed to and returned by the APIs. I’ll get those out of the way first, as they are important, and then tell you about the new enhancements that will also be in the release.

Supported Platform Changes

The minimum version requirements for the Linux, FreeBSD, and Solaris platforms will be changing to something a bit more recent. Current releases are built against Fedora Core 5, FreeBSD 4.3, and Solaris 2.7, which are ancient and long past end of life. I’ve held off requiring newer versions for the next major version because I don’t like to break compatibility in a minor or patch level release. Plus the Solaris development machine, gifted to the company many years ago already many years used, died a couple months ago. That’s why there are no Solaris demos at the moment: I’m still shopping for a replacement; the demo builds expired and can’t be rebuilt at the moment.

We’re currently building 4.0 against FreeBSD 6.2 and Fedora Core 7 (kernel 2.6.23.x), and chances are we are looking at Solaris 10+ (as that’s likely what’s available), so these are likely to be the minimum officially supported versions: as it is, FreeBSD 6.2 and FC7 are both somewhat old. The software will likely run just fine on earlier versions, we just won’t be able to guarantee it since the FC5 and FreeBSD 4.3 VMs, only still around for SDK 3.x builds, will be retired soon after the 4.x release.

There are two upsides here, however, in that (1) I suspect it’s us who’ll be catching up a bit to our user’s platforms, not vise versa; and (2) the last of those 9 cases to be worked on for 4.0 is I’ll be looking at (not promising yet) Linux x86_64 support. I have a VM set up for it already, but I know need to upgrade at least one third-party library before our software will build on it, then I’ll see how it fares against the more than 2000 automated regression test scripts we have for the SDK now (probably 1500 or more written to test the architecture changes in 4.0).

API Changes for Binary Data

The way binary data (OCTET STRING, etc.) is handled is changing. Once upon a time, Tcl didn’t initially have support (or at least good support) for working with binary data at the Tcl level, but it’s now had this for many years (initially with Tcl 8.0, but there were bugs). To work around the limitation, I chose to use a hex format like "0x01:ab" that each of the APIs would accept or return (for example, in request variable bindings or a session’s community string). The SDK would check if a given value had this format and convert it to the equivalent octets, or check if a value to be returned contained anything other than 7-bit printable ASCII and convert it to hex. While this makes such values readable for interactive use, it’s cumbersome for scripts that want to make use of actual binary data. It’s also problematic for using strings that just look like they’re in that format but aren’t intended to be if the APIs go and reinterpret them when you don’t want them to.

And, ever since Tcl’s binary support became stable, I’ve wanted to drop this eventually. Tcl has its own way of specifying binary data in hex ("\x01\xab"), or other formats like unicode, so the SDK having its own hex format is superfluous. But I’ve similarly held off switching to binary for a long time so that it could be done with a major version bump according to package versioning rules. So, instead of using its own hex format, as of 4.0 the APIs will now accept (and return) binary data directly (as Tcl_ByteArrayObjs at Tcl’s C layer). This change affects values in variable bindings, session configuration options (e.g. community strings), values parsed from instance identifiers, etc.

My hope is that switching to binary will have little or no impact on your scripts. Any value you get out of an API call (e.g. get request) and feed back into an API call (e.g. set request) should continue to work, since both sides of the conversion will go away. In general, you should also already be using the [smilib format] command to format SNMP values according to DISPLAY-HINTs when you want to display or print them. If you do, you shouldn’t see much impact there. Strings containing only 7-bit printable ASCII characters should be unaffected because they were not previously converted, and are indistinguishable from byte arrays already. Any impact will largely be confined to values currently hard coded in hex (which are fairly simple to convert to Tcl’s own syntax) or issuing requests in Tcl’s interactive mode (which may print gibberish for binary data).

The [smilib format] command has new capabilities to help as well. Where you now have to specify an OBJECT-TYPE or TEXTUAL-CONVENTION to format a value against, in 4.0 you can specify base types such as "OCTET STRING" to use a default format. For "OCTET STRING", that default format is the same as before, but without the 0x prefix (so, "01:ab" instead of "0x01:ab"). You can use this to, for example, get a guaranteed-printable version of, say, an SNMPv3 User Name (which is typically, but not necessarily, plain text).

Summary of Enhancements

Full release notes will be available with the release, but here’s a quick run down of the new goodies in MIB Smithy SDK 4.0, which will also find their way into MIB Smithy and MIB Views with their next feature releases:

  • IPv6 support
  • Improved raw binary data support (explained above)
  • A new license key format to simplify managing multiple license keys (includes the serial number in plain text, for example)
  • A new licensing option (user based, rather than host based)
  • Many new MIB and PIB validation rules
  • Many clarifications to messages or error levels from existing MIB and PIB validation rules
  • More issues in your MIB and PIB modules are automatically corrected for you
  • Improved socket error reporting
  • Additional properties for working with table definitions smilib

Best of all (for me) is the new architecture will be easier to maintain and extend, and once 4.0 is out I’ll be free to focus all my energy back into new features rather than maintaining two code branches or getting the new architecture to a stable release. With all the QA automation that’s been done for 4.0, it took a long time, but it should be the the most stable dot-zero release of any piece of software I’ve done.

Getting Very Close to MIB Smithy SDK 4.0 Release

January 8th, 2010 by Michael Kirkham

It’s been a very, very long time coming, due to the scope of architecture changes and QA testing required (along with numerous distractions along the way, including the pain of maintaining to very diverging branches of code), but I’m so close to finally releasing MIB Smithy SDK 4.0. I had told a few people that I was trying hard to get it out by the end of 2009, which obviously has passed. But there’s a bit more I’m trying to squeeze into the release (to make it more worthy of a major version number) and tiny bit more QA test automation to do for one of the feature changes.

As I write this, I have 16 open feature and 7 open bug cases in FogBugz currently targeted for 4.0, which is down from and 31 features and 13 bugs a week ago, to give you an idea how close it is and how much progress is being made.

My focus for these last cases is primarily clarifying some existing MIB/PIB validation messages, adding more validation routines where gaps in coverage were uncovered during the big QA test automation push (which involved hard core analysis of old vs. new code and revisiting the standards documents), and closing nearly all of the known bugs in the SDK. The latter is particularly important to me in getting to where I can make it policy aim for each release to be “known bug free”.

At this point there are only 10 total remaining bug cases, and the three not targeted for 4.0 are so minor or obscure as to not matter for now: one of them, for example, is about comments just before macros not being preserved by the parser because we skip over (but don’t preserve) the macros themselves. Well, macros are only defined in the SMI base modules, which don’t change, so it’s a stretch to call it a bug and there’s no reason hold 4.0 any longer for it.

With the 4.0 release so close I can almost taste it, I feel a bit more comfortable talking about it, and you may have noticed I’ve also been sprucing up the Muonics web site a fair bit in preparation. I’ll be back later today or tomorrow with a little preview of MIB Smithy SDK 4.0.

PS: I set up a new twitter account for another way to follow the goings on at Muonics. If I set things up correctly, this post should show up as the first tweet automatically.

MIB Smithy 4.1.5, SDK 3.4.8, MIB Views 1.4.4 Releases

July 27th, 2009 by Michael Kirkham

We’re now in the final stretches of automating regression tests for our MIB parsing and validation code in preparation for releasing the 4.0 branch of the SDK, with better than 3/4 of the test automation done. After the latest round of several hundred tests and analyzing the current results, we identified some more areas for improvement in the validation code we felt were appropriate to release in the current stable branch. These include eliminating redundant messages, clarifying other messages, correcting some false errors, some error level adjustments, and some additional rules. The changes below are incorporated into the latest releases for MIB Smithy, MIB Smithy SDK, and MIB Views.

1735: INDEX and AUGMENTS forbidden with RFC1155-SMI, RFC1065-SMI

It is now an error, rather than a warning, for an OBJECT-TYPE to have an INDEX or AUGMENTS clause when imported from RFC1065-SMI or RFC1155-SMI.

1760: TEXTUAL-CONVENTIONs must not derive from other TEXTUAL-CONVENTIONs

It is now an error, rather than a warning, for SMIv2 modules to define TEXTUAL-CONVENTIONs derived from other TEXTUAL-CONVENTIONs. This is also now an error for COPS-PR-SPPI modules, which previously gave no warning.

1747: Additional validation for variant access levels

PIB-MIN-ACCESS is now checked to ensure its values are allowed by COPS-PR-SPPI. MODULE-COMPLIANCE’s PIB-MIN-ACCESS and MIN-ACCESS, and AGENT-CAPABILITIES ACCESS, are now checked to ensure their values are within bounds of the referenced object’s (or PRC’s) MAX-ACCESS or ACCESS value.

1761: Improved version-specific validation with missing IMPORTS

Previously, when a macro (such as OBJECT-TYPE) was not imported as required, certain version-specific validation checks (such as allowed STATUS values) were suppressed, giving only an error about the missing import. Now, the version may be assumed based on other imports that are present, allowing further checks to be performed.

1733: Suppress bit zero warning when no bits are defined

A redundant warning regarding starting BITS at zero when also erroring about needing at least one bit to be defined.

1738: Clarify access keywords in error messages

Validator messages should use the proper access keyword (ACCESS, MAX-ACCESS, PIB-ACCESS, MIN-ACCESS, PIB-MIN-ACCESS) depending on the record type and version (SMIv1, SMIv2, COPS-PR-SPPI) of the record. In some cases, they simply said “ACCESS”.

1701: False errors and changes to BITS DEFVAL validation

The algorithm for checking set bits in hex/binary DEFVALs versus BITS named bit values was not correct, leading to errors for valid DEFVALs. Also, an integer is no longer allowed for DEFVAL with BITS type, and undefined bits may no longer be set in the DEFVAL (previously these were warnings).

1720: Disallow hyphens in COPS-PR-SPPI identifiers

As with SMIv2 modules, which COPS-PR-SPPI derives from, a warning is now produced for identifiers with hyphens in PIB modules.

1717: Wrong range given in INSTALL-ERRORS message

INSTALL-ERRORS was being checked versus the correct allowed range of 1..65535, but the error message indicated 0..65536 was allowed.

1689: False subordinate OID warnings for conformance records

Conformance sub-records were not properly ignored when checking relative structure of the OID tree, causing false errors/warnings to be produced (nothing should be considered relative to these records as they’re purely an implementation detail, not truly separate from the conformance statement).

1682: Value Assignment values missing from error messages

Error messages regarding ASN.1 Value Assignment values not matching the type were giving an empty string for the value rather than the actual value. (Note: only ASN.1 Value Assignments of type OBJECT IDENTIFIER are allowed in MIB and PIB modules; this validation is part of plain ASN.1 support.)

1685: False warning for starting bit zero when using BITS-derived type

A warning message was produced for OBJECT-TYPEs with SYNTAX referencing a TEXTUAL-CONVENTION of type BITS indicating that bits should start at zero even when the TEXTUAL-CONVENTION itself started at bit zero.

1684: Missing error for invalid PIB-REFERENCES

An incorrect function argument was suppressing the error message for PIB-REFERENCES pointing somewhere other than a PRC (row) OBJECT-TYPE.

1759: REVISIONs not sorted properly by XML parser

MODULE-COMPLIANCE REVISIONs are normally sorted when assigned or parsed from normal SMI syntax (with parse-time warning in the latter case), and therefore not checked during validation. They were not sorted properly by the XML parser, however, leaving them out of order with no indication. They are now sorted at parse time from XML as well.

1716: Severity of Value Assignments in SMIv2/SPPI

It’s now an error, rather than a warning, to use ASN.1 Value Assignments other than of type OBJECT IDENTIFIER in SMIv2 and COPS-PR-SPPI modules. It remains a warning for SMIv1 modules, but is now suppressed entirely for modules that aren’t SMI or SPPI (just ASN.1).

1736: Redundant messages for Counter with bad ACCESS

Use of Counter, Counter32, or Counter64 syntax and ACCESS, MAX-ACCESS, or MIN-ACCESS value unknown to the SMI version now produces one error message for the unknown value, rather than a second for the value being disallowed with counter types.

1729: PIB-INDEX may use attributes of other PRCs

An error message was produced if PIB-INDEX referenced an attribute of another PRC (table) rather than an attribute of the same PRC. As this is explicitly allowed by RFC 3159 section 7.5, this check has been removed.

1731: OID in module header forbidden in SMIv2

It’s now an error, rather than a warning, to assign an OID to a module in the module in SMIv2 or COPS-PR-SPPI modules (which use MODULE-IDENTITY instead). It remains a warning in SMIv1 and is now suppresed for modules that are neither SMI or SPPI (just ASN.1).

1728: OBJECT-IDENTITY and Assignment with same OID should be a warning

It is now a warning, rather than an error, when an OBJECT-IDENTITY statement and OID Value Assignment have the same OID, as it is with an OID Value Assignment and other macros having the same OID.

1727: Missing error for INDEX with negative enumerations

An intended warning for an INDEX pointing to an object with possible negative enumerations was not being produced.

1725: Superfluous auxilliary INDEX warnings

The warning for a table using only columns from other tables for indices is no longer generated when already indicating an error because the INDEX clause is not allowed (e.g. on a scalar OBJECT-TYPE).

1711: Undefined symbols should always error if known to be undefined

Dependency check “failed” errors and “skipped” warnings are now more consistent in behavior: e.g., a check is “skipped” with a warning if cross-checking can’t be performed because a module isn’t loaded, while an error is produced if it is loaded but the symbol imported from is not defined.

1710: Mixing SMI and COPS-PR-SPPI base types/macros

It’s now an error, rather than a warning, to import both SMI and COPS-PR-SPPI base types and macros within the same module (note: importing MIB OIDs and TEXTUAL-CONVENTIONs in PIB modules is allowed, provided the underlying base type is the supported by the SPPI).

1690: Wrong format indicated in DEFVAL type/value mismatch errors

When comparing the form of DEFVAL values to an object’s SYNTAX, the wrong keyword for the form of the value was specified in some errors pertaining to hex and binary. The wording of DEFVAL type/value related messages is also now more consistent.

1686: Redundant hex/binary length errors

When validating hex and binary DEFVALs, redundant errors were produced for some types when they were both not of the required length for that type and not the right multiple of digits. There was some inconsistency in whether or not they were checked for capitalization, and the wording of hex/binary related messages was also clarified.

1683: UNIQUENESS value missing from message

A warning message regarding UNIQUENESS values was showing an empty string for the value rather than indicating the actual value warned about.

1708: SMI base modules should not require MODULE-IDENTITY

On the off chance you load SNMPv2-CONF into the SDK and validate it, despite not defining anything other than macros, it will no longer error about needing a MODULE-IDENTITY statement (as with other SMI/COPS base modules).