You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
BER / ASN.1 / SNMPv2c message and PDU encode/decode live under wire/.
4
UDP transport and request dispatcher
done
Timeout, retry, community matching, and request-id matching.
5
Optional compiled-JSON bundle loading
done
Single module JSON or bundle directory; sidecars optional.
6
Offline translation and live enrichment
done
Symbolic input resolution and display rendering stay optional.
7
Thin CLI
done
Package wrapper for smoke tests and simple operator workflows.
8
CI, release automation, and docs baseline
done
Lint, typecheck, tests, coverage, release workflow, and package docs.
v0.4.0 — shipped 2026-05-28
#
Item
Status
Notes
1
Session architecture refactor
done
Extracted shared UdpClient + Dispatcher + Lock + MibBundle into session.py. Added security/model.py (SecurityModel protocol) + security/community.py (CommunityModel for v2c). dispatcher.py takes security= instead of community=. V2cManager / V2cNotifier are subclasses of new SnmpManager / SnmpNotifier bases; V2cNotificationListener is an alias — no public API breakage.
2
SNMPv3 USM client stack
done
Shipped noAuthNoPriv + authNoPriv (HMAC-MD5/SHA-1/SHA-256) + authPriv (AES-128-CFB) for manager operations and SNMPv3 informs. DES-CBC intentionally deferred — broken cipher, not present in cryptography>=41. Engine discovery via optional async prepare(dispatcher) hook on UsmModel; session.py awaits it on open. Discovery uses a dedicated dispatcher.send_raw_and_receive(data) -> bytes path that never surfaces to the normal request flow — REPORT never reaches send_pdu() or response_from_pdu(). wrap_pdu/unwrap_message stay synchronous. security/usm.py never imports cryptography at module level; auth/priv methods call _require_cryptography() which raises ImportError with install instructions if the package is absent. UsmModel is imported unconditionally in __init__.py — it always works; only calling auth/priv methods without [v3] fails. CI installs .[dev,v3]. A dedicated test blocks cryptography via patch.dict(sys.modules, {'cryptography': None}) and reimports usm to catch top-level import regressions even with [v3] installed. V3Manager mirrors V2cManager. V3Notifier supports send_inform() only — send_trap() raises ProtocolError because SNMPv3 traps require the sender's own authoritative engine state (RFC 3412 §7.1.9), which is not available after discovery against the receiver. v3 listener out of scope for this release. Requires cryptography>=40 (optional extra [v3]).
v0.4.1 — shipped 2026-06-01
#
Item
Status
Notes
1
Sender-authoritative SNMPv3 trap support
done
UsmLocalEngine is public and V3Notifier.send_trap() now works when explicit local authoritative engine state is provided. Trap-capable notifiers no longer depend on a peer discovery roundtrip during open().
2
Shared CLI v2c/v3 security option model
done
tsnmp now accepts explicit --snmp-version {2c,3} selection, validates mixed v2c/v3 flag sets early, supports env-backed secrets, and surfaces missing [v3] extras as ordinary CLI errors.
3
CLI SNMPv3 manager commands
done
get, getnext, getbulk, walk, and bulkwalk route through V3Manager when --snmp-version 3 is selected.
4
CLI SNMPv3 notification send
done
inform and trap route through V3Notifier for --snmp-version 3; traps require explicit --local-engine-id, --local-engine-boots, and --local-engine-time. listen and decode-notification remain SNMPv2c-only.
5
CLI/docs/test/release parity
done
Docs, tests, and release smoke guidance now reflect the shipped Python and CLI SNMPv3 surface consistently.
v0.4.2 — ready for release
#
Item
Status
Notes
1
SNMPv3 notification listener
done
V3NotificationListener now supports one configured USM user, inbound auth/decrypt, discovery REPORT handling for V3Notifier.send_inform(), and automatic v3 inform acknowledgement. The existing SnmpNotificationListener / V2cNotificationListener surface remains v2c-compatible.
2
Offline SNMPv3 notification decode
done
decode_notification(..., user=...) now performs strict v3 decode, and tsnmp decode-notification --snmp-version 3 accepts explicit user/auth/priv inputs for offline USM notification analysis.
3
Notification event model expansion for v3
done
NotificationEvent now carries additive v3 metadata (username, security_level, context engine/name, authoritative engine state) while keeping current v2c text/JSON output stable.
Near-term hardening
#
Item
Status
Notes
1
Forward-compatibility with future tsmi IR version fields
planned
Accept explicit schema/version metadata once upstream lands it without making sidecars mandatory.
2
Better optional rendering fidelity from bundle metadata
planned
Improve display names and values when metadata is available without moving compiler logic into tsnmp.
3
Broader live-agent compatibility coverage
planned
Expand UDP integration coverage around walk behavior and device quirks.
Explicitly deferred
#
Item
Status
Notes
1
Raw MIB file or raw MIB directory ingestion
deferred
Keep the runtime/compiler split clear; use compiled JSON only.
2
Direct runtime dependency on trishul-smi
deferred
tsnmp consumes artifacts, not the compiler package.
3
Public generic JSON normalization layer for non-tsmi schemas
deferred
Only add with an explicit adapter contract and real cross-schema use cases.
4
pysnmp API compatibility layer
deferred
Avoid carrying legacy surface area in v0.1.
5
Sync wrapper
deferred
Async-first package API remains the primary runtime surface.
6
SNMPv1 manager support
deferred
Not required for the initial modern runtime baseline.
7
Broader SNMPv3 server-side/runtime work beyond v0.4.2
deferred
v0.4.2 covers the inbound listener and offline decode path. Larger server-side SNMPv3 work such as responder/agent behavior, multi-user listeners, and deeper state-management infrastructure remains follow-on.
8
set
deferred
Write operations need separate safety and API design.
9
Daemon/service packaging for long-running listeners
deferred
Library-level listener and responder APIs exist on main branch; daemonization is still out of scope.
10
Full agent framework or writable responder support
deferred
v0.2.0 only targets a narrow read-only simulator/responder.
11
Native codec experiment
deferred
Pure codec microbenchmarks improved, but end-to-end manager and responder paths did not justify the extra Rust build, packaging, and dual-implementation maintenance cost. Revisit only if a broader native hot-path effort is planned.
12
DES-CBC privacy (USM)
deferred
DES is a broken cipher (56-bit key). Not present in cryptography>=41; the PrivProtocol.DES enum value is retained for wire-level identification but _encrypt_des/_decrypt_des raise ProtocolError. Revisit only if required for a legacy-device integration with no alternative.