Changelog

Generated from the commit history at release time. The narrative history through 5.x is published with the documentation.

6.0.0 (2026-09-29)

⚠ BREAKING CHANGES

  • secmod: passwordToKeySHA() returns a different key for the same passphrase and engine ID. Callers who stored keys derived from it must re-derive them. The keys it returned before could not be used against any other implementation.

  • smi: pysnmp-pysmi is no longer installed with pysnmplib. Code that relied on pysnmp pulling pysmi in – importing pysmi directly, or calling addMibCompiler() – must install pysnmplib[compile] or depend on pysnmp-pysmi explicitly. addMibCompiler() already raised SmiError when pysmi was missing, so what changed is who reaches that path, not what they see on it.

  • smi: PYSNMP-USM-MIB’s pass-phrase columns report not-accessible where the 2017 rendering left them at MibTableColumn’s read-only default: pysnmpUsmSecretUserName, pysnmpUsmSecretAuthKey, pysnmpUsmSecretPrivKey, pysnmpUsmKeyAuthLocalized, pysnmpUsmKeyPrivLocalized, pysnmpUsmKeyAuth and pysnmpUsmKeyPriv. Every one is not-accessible in the module’s own MAX-ACCESS clause, so a manager could read stored authentication and privacy pass-phrases that the MIB never offered. pysnmp’s internal writes are unaffected: they go through the instrumentation controller with no access-control function, which is where max-access is enforced.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

  • smi: SNMP-TARGET-MIB::snmpTargetAddrName and snmpTargetParamsName report not-accessible where the 2017 copy said read-only. RFC 3413 declares both IMPLIED INDEX columns and RFC 2578 section 7.3 requires it; nothing becomes unobtainable, since an index column’s value travels in the OID suffix of every row.

  • smi: SnmpTagValue and SnmpTagList reject an ASCII CR in a tag. RFC 3413 section 4.1.1 defines the delimiters as space, tab, CR and LF; the 2017 copy listed tab twice and omitted CR, so “a\rb” was accepted as a single tag value. Nothing else about the validation changes.

  • smi: SNMP-FRAMEWORK-MIB::snmpEngineTime has syntax Integer32 rather than a class named SnmpEngineTime. RFC 3411 declares it SYNTAX INTEGER (0..2147483647) and defines no such textual convention – the module’s only TCs are SnmpEngineID, SnmpSecurityModel, SnmpMessageProcessingModel, SnmpSecurityLevel and SnmpAdminString.

Fixes an InetAddress index crash along the way: cloneAsName now clones from the octets rather than an ascii decode of them, so an InetAddress carrying raw address bytes no longer fails its DISPLAY-HINT with “Display format eval failure”.

  • entity: seven INDEX columns of SNMP-VIEW-BASED-ACM-MIB report not-accessible where the 2017 copy said read-only, per RFC 2578 section 7.3: vacmAccessContextPrefix, vacmAccessSecurityLevel, vacmAccessSecurityModel, vacmSecurityModel, vacmSecurityName, vacmViewTreeFamilySubtree and vacmViewTreeFamilyViewName. Nothing becomes unobtainable – an index column’s value travels in the OID suffix of every row it appears in. The fabricated vacmContextStatus column is gone; nothing outside this repository could have addressed it by name, since it was never in the MIB.

  • smi: INDEX columns report not-accessible where the 2017 base layer reported read-only, which RFC 2578 section 7.3 requires; sixteen columns across six modules, SNMPv2-MIB::sysORIndex among them. Nothing becomes unobtainable – an index column’s value travels in the OID suffix of every row it appears in, so a manager reading the column can read it out of the row identifier instead. RFC1213-MIB::TtcpInSegs (a misspelling of tcpInSegs), RFC1158-MIB::snmpInBadTypes and RFC1158-MIB::snmpOutReadOnlys are gone, none of them declared by any published ASN.1. SNMPv2-MIB::snmpBasicCompliance is now deprecated and snmpObsoleteGroup obsolete, per RFC 3418, and RFC1213-MIB::atNetAddress has syntax IpAddress rather than NetworkAddress, the single arm RFC 1155 defines that CHOICE to have.

  • deps: pysnmp-pyasn1 must now be >=2.0.0,<3.0.0.

  • The asyncore and asynsock carriers, the hlapi/asyncore package and the pyasn1.compat.octets shim usage have been removed, the minimum supported Python version is now 3.10, and pycryptodomex is an optional dependency that must be installed explicitly for SNMPv3 privacy. See docs/source/docs/breaking-changes.rst for the full list.

  • remove all asyncore/asynsock carrier and hlapi shim modules, example scripts, and documentation references.

Deleted:

  • pysnmp/carrier/asyncore/ (entire directory)

  • pysnmp/carrier/asynsock/ (entire directory)

  • pysnmp/hlapi/asyncore/ (entire directory)

  • examples/v1arch/asyncore/ (10 files)

  • examples/v3arch/asyncore/ (51 files)

  • docs/source/examples/v1arch/asyncore/ (7 .rst files)

Updated:

  • runtests.sh: remove asyncore example paths, point to asyncio examples

  • docs/source/examples/contents.rst: remove asyncore toctree entries

  • docs/source/docs/api-reference.rst: remove Legacy asyncore section

  • docs/source/docs/pysnmp-hlapi-tutorial.rst: remove broken :doc: ref

  • docs/source/faq/pass-custom-mib-to-manager.rst: remove broken refs

  • .github/copilot/copilot-instructions.md: remove all asyncore guidance, update to asyncio-only architecture description

  • pylint-baseline.json: remove 17 asyncore entries

Users should migrate to pysnmp.carrier.asyncio and pysnmp.hlapi.asyncio.

  • Phase 1: remove deprecated asyncore/asynsock shims, examples, and references (35d318f)

Features

  • 6.0 API removals and Python 3.10 baseline (0c20b50), closes #93 #95 #96 #98 #99 #101 #102 #103

  • add device reporting and MIB instance tools (8c3938e)

  • carrier: add SNMP over TCP, RFC 3430 (6162a63), closes #273

  • carrier: report a transport failure the sender can no longer see (9308d0f)

  • entity: create VACM context rows without a column RFC 3415 omits (e9563a6), closes #198 #205

  • entity: give SnmpEngine dispatcher lifecycle and context managers (4c484d9), closes #277 #275

  • entity: make v1/v2c a runtime policy rather than a packaging split (9ab8727), closes #108 #111

  • hlapi: add subtree-bounded walk_cmd and bulk_walk_cmd (0f9f994), closes #277 #256

  • hlapi: make the high-level API snake_case, deprecating camelCase (42d0726), closes #277

  • implement Phases 1-3 of TODO.txt plan (f688858)

  • implement RFC 3413 §6 notification filtering (0820030)

  • lazy cipher backend and weak-crypto configuration warnings (91f7a30), closes #40

  • proto: read an Opaque-wrapped float as a number (651f3f8), closes #286

  • secmod: add Diffie-Hellman USM key management (RFC 2786) (72929be), closes PKCS#3 #280

  • smi: add setReference/getReference to conformance macro classes (78d40af), closes #133

  • smi: delete the 2017 base layer so pysmi’s modules are the ones that load (59e68ba), closes #205 #198 #205

  • smi: delete the last five hand-edited base modules (98967d2), closes pysnmp/pysmi#231 #232 pysnmp/pysmi#236 #198

  • smi: export NetworkAddress from SNMPv2-SMI (652a1ce)

  • smi: let MIB instrumentation controllers be coroutines (927e63d), closes #287

  • smi: make pysnmp-pysmi an optional dependency (0d148fb), closes 197/#198 #196

  • smi: own MIB runtime behavior and render pysnmp’s MIBs from ASN.1 (7579867), closes pysnmp/pysmi#236

  • smi: publish and version the MIB module loader contract (e044df2), closes #197

  • smi: read a schema 2 corpus, and answer where a module came from (aa25837)

  • smi: read PYSNMP_MIB_SOURCES for where the ASN.1 is (d5481be), closes #144

  • smi: report which source a module came from, and what it shadowed (85a7062)

  • smi: resolve a module by best match, not by which source answers first (f380447), closes #198

  • smi: resolve an unknown OID by loading the module a corpus names (41d1521), closes #144

  • smi: resolve MIBs from a corpus, when asked to (f90f956), closes pysnmp/pysnmp#199 pysnmp/pysnmp#144 pysnmp/pysnmp#145 pysnmp/pysnmp#196

  • smi: search several MIB corpora as one, ordered by precedence (20f1ef3)

  • smi: separate name-resolution from value-casting failures (1aaf828), closes #252

  • smi: take MIB instrumentation to (varBind, **context) (666d7a7), closes #287 #279

Bug Fixes

  • address VACM, proxy coercion, and MIB validation regressions (33753d3)

  • app: order notification var-binds without duplicating them (52be1da), closes #260

  • carrier: keep the IPv6 scope ID on the way to sendto() (87cdb76), closes #251

  • carrier: refuse a transport bound to a different event loop (61c8b12)

  • carrier: report the family wildcard for an unbound datagram socket (ab23e50), closes #173

  • ci: install file(1) in the DH agent build stage (0031949)

  • ci: publish docs from a branch, not a detached HEAD (9002196)

  • ci: the test group needs ruff, because a test renders MIB modules (a39dfda)

  • cmdrsp: map genErr errorIndex to 0 when idx is absent (ffb646f)

  • config: pass integer securityLevel to addVacmAccess (ff2d47a)

  • correct inet_ntop AF_INET fallback in TRANSPORT-ADDRESS-MIB (34203e4)

  • debug: make the debug switch callable whether or not debugging is on (921b720)

  • deps: bump pysnmp-pyasn1 to 1.3.0 (3f4a428), closes #140 #142

  • deps: bump pysnmp-pyasn1 to 1.3.0rc2 (e12f957), closes #140 #142

  • deps: put the pyasn1 floor back on a GA (278fc80), closes pysnmp/pysmi#236 #196

  • deps: require pysnmp-pyasn1 >=1.2.0 and pysnmp-pysmi >=2.0.1 (c6452f3)

  • deps: require pysnmp-pyasn1 >=2.0.5 (80837eb), closes #334 pysnmp/pyasn1#185 #334 #290

  • deps: require pysnmp-pyasn1 >=2.0.6 (8f07227)

  • deps: track pysmi and pyasn1 release candidates (c0a116d)

  • enable server-mode event loop for snmpsim v3 integration (353422d)

  • entity: keep an engine importable on PyPy, and split a test group (ab6ba2b)

  • hlapi: drop a failed lookup where it is picked up, not from its callback (77d285b)

  • hlapi: honour an explicit securityName in CommunityData (802f370)

  • hlapi: keep an in-flight address lookup when a caller is cancelled (9be6460), closes #311

  • hlapi: make the clock fine enough to measure the timeout asked for (764551d), closes #289

  • hlapi: re-register a v3 user whose credentials changed (b342465), closes #261

  • hlapi: stop transport target DNS from stalling the event loop (ba657c8), closes #270

  • proto: reach a request’s execution point once, however it is served (460bd81)

  • proto: reject a short v2c notification instead of raising IndexError (b18a13e), closes #266

  • proto: render NetworkAddress as an address, not a Choice dump (f862d2e), closes #271

  • proto: wrap Counter32, Counter64 and TimeTicks at their ceiling (6a184cb), closes #257

  • release: repair version replacement and prerelease version parsing (17eb88b)

  • release: use dev placeholder version so replace plugin always applies (0a75072)

  • release: use PEP 440-compatible rc prerelease identifier (36300fe)

  • resolve defects surfaced by the ruff ruleset (fe40c03)

  • resolve rebased simulator and documentation conflicts (bbc5cec)

  • secmod: derive the key before the SET and bound DH key generation (d193a7c)

  • secmod: derive the SHA-1 key from a SHA-1 hash of the passphrase (515c51b), closes #225

  • secmod: draw a fitting DH public value, and draw it off the loop (44342d7), closes #316

  • secmod: follow the snake_case rename in the new DH tests (66371ef)

  • secmod: stop padding AES-CFB128 ciphertext (595eb73), closes #262

  • smi: accept numeric input for integer TCs carrying a DISPLAY-HINT (7d98e83), closes #150

  • smi: answer noSuchInstance for an uninitialised scalar (5194fbe), closes #263

  • smi: avoid mutable default argument in NotificationType (2475bdf)

  • smi: cache compiled MIBs where the platform says, not in ~/.pysnmp (dd55d68), closes #253

  • smi: derive the engine ID from platform.node(), not os.uname() (708353a), closes #269

  • smi: do not end a walk over one row whose index will not decode (1cf042f), closes #252 #255 #255

  • smi: do not reload a module a newer source appeared for (b954c75), closes #198

  • smi: drop SNMP-USER-BASED-SM-3DES-MIB (a27bc4b)

  • smi: encode InetAddress table indices with their length prefix (e4787a8), closes #259

  • smi: give augmenting rows their index names, and guard the corpus paths (12ed810), closes pysnmp/pysnmp#199 pysnmp/pysnmp#145

  • smi: key the index cache on the instance OID it was asked about (9720093), closes #255 #252 #255

  • smi: let a compiler render the texts a corpus cannot carry (d0fffd4), closes #217

  • smi: let transport-address TCs use the TEXTUAL-CONVENTION machinery (33c91fa), closes #155

  • smi: make index iteration agree with keys() (ac4354d)

  • smi: name the archive a zip-imported MIB module came from (a9b19ba), closes #198

  • smi: pass a legacy walk its original name by position, not by name (751ba67), closes #328

  • smi: raise SmiError for a corpus path SQLite cannot open (6fe848b)

  • smi: rank a contested arc by the corpus rule, not by revision alone (0b9b813)

  • smi: read a zip archive’s directory under its 3.14 name (62237aa)

  • smi: render the MIB modules target configuration needs (323d7e0)

  • smi: report a missing MIB from loadModules() with no compiler (adc8ef6), closes #264

  • smi: report an InetAddressType that contradicts its address (57f49ce), closes #259 #268

  • smi: resolve a bare InetAddress index without an InetAddressType (89f66b6)

  • smi: resolve a type IMPORTS points at the wrong module for (d9f1050), closes pysnmp/pysnmp#145 pysnmp/pysnmp#199

  • smi: return the column default from setValue(None) (b5b3c8e), closes #258

  • smi: satisfy mypy on the corpus reader’s two optional paths (14967ff)

  • smi: serve a namespace package as a MIB source (ae8ec7e), closes #265

  • smi: skip the index cache on values pyasn1 refuses to hash (377df5a), closes #282

  • smi: stop ignoreErrors gating whether a value can be represented (bde8138), closes #252

  • tests: do not name a directory “we?ird” on a platform that forbids it (401d73e), closes #211 #211

  • tests: make the corpus suite run in CI instead of skipping itself (29df876), closes pysnmp/pysnmp#199 pysnmp/pysmi#184

  • tests: wait out held operations without asyncio.timeout (0c0d3c0)

  • tolerate undecodable OID values and hostile BER on the receive path (e32583b)

  • tools: name the libraries in the comparison table when runs disagree (512d4ca)

  • typing: declare the carrier, mpmod and secmod base attributes (37bbf9a)

  • typing: give abstract base attributes the type their subclasses use (6c28cbc)

  • typing: stop except: targets shadowing names the function still uses (8bec4fa)

  • typing: type-clean the package and enable the mypy pre-commit hook (bbe8983), closes pysnmp/pyasn1#165 #178

  • update deprecated GitHub Actions versions and Python 3.7→3.8 (9074dd9)

  • update Sphinx to >=5.0 and fix all doc build warnings (55d3b60)

  • update Sphinx to >=5.0 and fix all doc build warnings (7acc27f)

Performance Improvements

  • import the MIB compiler when it is used, not when rfc1902 is imported (102833b), closes #140

  • secmod: find a fitting DH public value by walking, not redrawing (718ffba), closes #324 #324

  • smi: bisect once in nextKey instead of scanning the keys twice (4d63ba7), closes #267

Miscellaneous Chores

  • deps: bump pysnmp-pyasn1 to 2.0.0 and pysnmp-pysmi to 2.1.0 (bd3a7e1)

6.0.0-rc.18 (2026-09-24)

Bug Fixes

  • deps: cap pysnmp-pyasn1 below 1.2.0 so 5.x installs again (05ec299)

6.0.0-rc.17 (2026-09-21)

Features

  • smi: let MIB instrumentation controllers be coroutines (927e63d), closes #287

  • smi: take MIB instrumentation to (varBind, **context) (666d7a7), closes #287 #279

Bug Fixes

  • deps: require pysnmp-pyasn1 >=2.0.5 (80837eb), closes #334 pysnmp/pyasn1#185 #334 #290

  • deps: require pysnmp-pyasn1 >=2.0.6 (8f07227)

  • proto: reach a request’s execution point once, however it is served (460bd81)

  • smi: pass a legacy walk its original name by position, not by name (751ba67), closes #328

  • tests: wait out held operations without asyncio.timeout (0c0d3c0)

  • tools: name the libraries in the comparison table when runs disagree (512d4ca)

6.0.0-rc.16 (2026-09-20)

Features

  • carrier: add SNMP over TCP, RFC 3430 (6162a63), closes #273

  • carrier: report a transport failure the sender can no longer see (9308d0f)

  • entity: give SnmpEngine dispatcher lifecycle and context managers (4c484d9), closes #277 #275

  • hlapi: add subtree-bounded walk_cmd and bulk_walk_cmd (0f9f994), closes #277 #256

  • hlapi: make the high-level API snake_case, deprecating camelCase (42d0726), closes #277

  • proto: read an Opaque-wrapped float as a number (651f3f8), closes #286

  • secmod: add Diffie-Hellman USM key management (RFC 2786) (72929be), closes PKCS#3 #280

  • smi: export NetworkAddress from SNMPv2-SMI (652a1ce)

  • smi: separate name-resolution from value-casting failures (1aaf828), closes #252

Bug Fixes

  • app: order notification var-binds without duplicating them (52be1da), closes #260

  • carrier: keep the IPv6 scope ID on the way to sendto() (87cdb76), closes #251

  • carrier: refuse a transport bound to a different event loop (61c8b12)

  • ci: install file(1) in the DH agent build stage (0031949)

  • ci: the test group needs ruff, because a test renders MIB modules (a39dfda)

  • entity: keep an engine importable on PyPy, and split a test group (ab6ba2b)

  • hlapi: drop a failed lookup where it is picked up, not from its callback (77d285b)

  • hlapi: keep an in-flight address lookup when a caller is cancelled (9be6460), closes #311

  • hlapi: make the clock fine enough to measure the timeout asked for (764551d), closes #289

  • hlapi: re-register a v3 user whose credentials changed (b342465), closes #261

  • hlapi: stop transport target DNS from stalling the event loop (ba657c8), closes #270

  • proto: reject a short v2c notification instead of raising IndexError (b18a13e), closes #266

  • proto: render NetworkAddress as an address, not a Choice dump (f862d2e), closes #271

  • proto: wrap Counter32, Counter64 and TimeTicks at their ceiling (6a184cb), closes #257

  • secmod: derive the key before the SET and bound DH key generation (d193a7c)

  • secmod: draw a fitting DH public value, and draw it off the loop (44342d7), closes #316

  • secmod: follow the snake_case rename in the new DH tests (66371ef)

  • secmod: stop padding AES-CFB128 ciphertext (595eb73), closes #262

  • smi: answer noSuchInstance for an uninitialised scalar (5194fbe), closes #263

  • smi: cache compiled MIBs where the platform says, not in ~/.pysnmp (dd55d68), closes #253

  • smi: derive the engine ID from platform.node(), not os.uname() (708353a), closes #269

  • smi: do not end a walk over one row whose index will not decode (1cf042f), closes #252 #255 #255

  • smi: encode InetAddress table indices with their length prefix (e4787a8), closes #259

  • smi: key the index cache on the instance OID it was asked about (9720093), closes #255 #252 #255

  • smi: report a missing MIB from loadModules() with no compiler (adc8ef6), closes #264

  • smi: report an InetAddressType that contradicts its address (57f49ce), closes #259 #268

  • smi: resolve a bare InetAddress index without an InetAddressType (89f66b6)

  • smi: return the column default from setValue(None) (b5b3c8e), closes #258

  • smi: serve a namespace package as a MIB source (ae8ec7e), closes #265

  • smi: skip the index cache on values pyasn1 refuses to hash (377df5a), closes #282

  • smi: stop ignoreErrors gating whether a value can be represented (bde8138), closes #252

Performance Improvements

  • secmod: find a fitting DH public value by walking, not redrawing (718ffba), closes #324 #324

  • smi: bisect once in nextKey instead of scanning the keys twice (4d63ba7), closes #267

6.0.0-rc.15 (2026-09-18)

Bug Fixes

  • smi: render the MIB modules target configuration needs (323d7e0)

6.0.0-rc.14 (2026-09-17)

6.0.0-rc.13 (2026-09-16)

6.0.0-rc.12 (2026-09-14)

Features

  • smi: read a schema 2 corpus, and answer where a module came from (aa25837)

6.0.0-rc.11 (2026-09-11)

⚠ BREAKING CHANGES

  • secmod: passwordToKeySHA() returns a different key for the same passphrase and engine ID. Callers who stored keys derived from it must re-derive them. The keys it returned before could not be used against any other implementation.

  • smi: pysnmp-pysmi is no longer installed with pysnmplib. Code that relied on pysnmp pulling pysmi in – importing pysmi directly, or calling addMibCompiler() – must install pysnmplib[compile] or depend on pysnmp-pysmi explicitly. addMibCompiler() already raised SmiError when pysmi was missing, so what changed is who reaches that path, not what they see on it.

  • smi: PYSNMP-USM-MIB’s pass-phrase columns report not-accessible where the 2017 rendering left them at MibTableColumn’s read-only default: pysnmpUsmSecretUserName, pysnmpUsmSecretAuthKey, pysnmpUsmSecretPrivKey, pysnmpUsmKeyAuthLocalized, pysnmpUsmKeyPrivLocalized, pysnmpUsmKeyAuth and pysnmpUsmKeyPriv. Every one is not-accessible in the module’s own MAX-ACCESS clause, so a manager could read stored authentication and privacy pass-phrases that the MIB never offered. pysnmp’s internal writes are unaffected: they go through the instrumentation controller with no access-control function, which is where max-access is enforced.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

  • smi: SNMP-TARGET-MIB::snmpTargetAddrName and snmpTargetParamsName report not-accessible where the 2017 copy said read-only. RFC 3413 declares both IMPLIED INDEX columns and RFC 2578 section 7.3 requires it; nothing becomes unobtainable, since an index column’s value travels in the OID suffix of every row.

  • smi: SnmpTagValue and SnmpTagList reject an ASCII CR in a tag. RFC 3413 section 4.1.1 defines the delimiters as space, tab, CR and LF; the 2017 copy listed tab twice and omitted CR, so “a\rb” was accepted as a single tag value. Nothing else about the validation changes.

  • smi: SNMP-FRAMEWORK-MIB::snmpEngineTime has syntax Integer32 rather than a class named SnmpEngineTime. RFC 3411 declares it SYNTAX INTEGER (0..2147483647) and defines no such textual convention – the module’s only TCs are SnmpEngineID, SnmpSecurityModel, SnmpMessageProcessingModel, SnmpSecurityLevel and SnmpAdminString.

Fixes an InetAddress index crash along the way: cloneAsName now clones from the octets rather than an ascii decode of them, so an InetAddress carrying raw address bytes no longer fails its DISPLAY-HINT with “Display format eval failure”.

Features

Bug Fixes

6.0.0-rc.10 (2026-09-08)

⚠ BREAKING CHANGES

  • entity: seven INDEX columns of SNMP-VIEW-BASED-ACM-MIB report not-accessible where the 2017 copy said read-only, per RFC 2578 section 7.3: vacmAccessContextPrefix, vacmAccessSecurityLevel, vacmAccessSecurityModel, vacmSecurityModel, vacmSecurityName, vacmViewTreeFamilySubtree and vacmViewTreeFamilyViewName. Nothing becomes unobtainable – an index column’s value travels in the OID suffix of every row it appears in. The fabricated vacmContextStatus column is gone; nothing outside this repository could have addressed it by name, since it was never in the MIB.

  • smi: INDEX columns report not-accessible where the 2017 base layer reported read-only, which RFC 2578 section 7.3 requires; sixteen columns across six modules, SNMPv2-MIB::sysORIndex among them. Nothing becomes unobtainable – an index column’s value travels in the OID suffix of every row it appears in, so a manager reading the column can read it out of the row identifier instead. RFC1213-MIB::TtcpInSegs (a misspelling of tcpInSegs), RFC1158-MIB::snmpInBadTypes and RFC1158-MIB::snmpOutReadOnlys are gone, none of them declared by any published ASN.1. SNMPv2-MIB::snmpBasicCompliance is now deprecated and snmpObsoleteGroup obsolete, per RFC 3418, and RFC1213-MIB::atNetAddress has syntax IpAddress rather than NetworkAddress, the single arm RFC 1155 defines that CHOICE to have.

Features

  • entity: create VACM context rows without a column RFC 3415 omits (e9563a6), closes #198 #205

  • smi: delete the 2017 base layer so pysmi’s modules are the ones that load (59e68ba), closes #205 #198 #205

  • smi: publish and version the MIB module loader contract (e044df2), closes #197

  • smi: resolve a module by best match, not by which source answers first (f380447), closes #198

Bug Fixes

  • carrier: report the family wildcard for an unbound datagram socket (ab23e50), closes #173

  • smi: do not reload a module a newer source appeared for (b954c75), closes #198

  • smi: name the archive a zip-imported MIB module came from (a9b19ba), closes #198

  • smi: read a zip archive’s directory under its 3.14 name (62237aa)

Performance Improvements

  • import the MIB compiler when it is used, not when rfc1902 is imported (102833b), closes #140

6.0.0-rc.9 (2026-09-06)

⚠ BREAKING CHANGES

  • deps: pysnmp-pyasn1 must now be >=2.0.0,<3.0.0.

Bug Fixes

  • debug: make the debug switch callable whether or not debugging is on (921b720)

  • deps: track pysmi and pyasn1 release candidates (c0a116d)

  • smi: make index iteration agree with keys() (ac4354d)

  • typing: declare the carrier, mpmod and secmod base attributes (37bbf9a)

  • typing: give abstract base attributes the type their subclasses use (6c28cbc)

  • typing: stop except: targets shadowing names the function still uses (8bec4fa)

  • typing: type-clean the package and enable the mypy pre-commit hook (bbe8983), closes pysnmp/pyasn1#165 #178

Miscellaneous Chores

  • deps: bump pysnmp-pyasn1 to 2.0.0 and pysnmp-pysmi to 2.1.0 (bd3a7e1)

6.0.0-rc.8 (2026-09-06)

Bug Fixes

  • ci: publish docs from a branch, not a detached HEAD (9002196)

6.0.0-rc.7 (2026-09-05)

Bug Fixes

  • smi: accept numeric input for integer TCs carrying a DISPLAY-HINT (7d98e83), closes #150

  • smi: let transport-address TCs use the TEXTUAL-CONVENTION machinery (33c91fa), closes #155