mib-rs
SNMP MIB parser and resolver for Rust.
Note
This library is not currently stable. While pre-v1.0, breaking changes may occur in minor releases with no attempt to maintain backward compatibility.
Features
- Full SMI support: Parses both SMIv1 (RFC 1155/1212) and SMIv2 (RFC 2578/2579/2580)
- Multi-phase resolver: Registration, imports, types, OIDs, and semantics
- OID tree: Numeric and symbolic OID resolution, subtree walking, instance lookups
- Type chains: Full type inheritance with effective base type, display hints, enums, ranges
- Display-hint formatting: RFC 2579 value formatting, numeric scaling, and octet-string rendering
- Table support: Rows, columns, indexes (including augmented/implied)
- Diagnostics: Configurable strictness levels with collected diagnostics instead of fail-fast
- Parallel loading: File I/O parallelized with rayon, sequential single-threaded resolution
- Synthetic base modules: SNMPv2-SMI, SNMPv2-TC, SNMPv2-CONF, RFC1155-SMI, and others built in
- System path discovery: Auto-detects net-snmp and libsmi MIB directories
- Layered API: Handle-based query API, low-level arena access, and public compiler pipeline
Installation
Or add to your Cargo.toml:
[]
= "0.5"
Quick Start
Load and query a MIB module
use ;
let source = memory;
let mib = new
.source
.modules
.load
.expect;
let obj = mib.object.expect;
assert_eq!;
let ty = obj.ty.expect;
assert_eq!;
Load from system MIB directories
use Loader;
let mib = new
.system_paths
.modules
.load
.expect;
let node = mib.resolve_node.expect;
println!;
Resolve OIDs
use Loader;
let mib = new
.system_paths
.modules
.load
.expect;
// Symbolic to numeric
let oid = mib.resolve_oid.expect;
println!; // 1.3.6.1.2.1.2.2.1.2
// Instance OIDs
let instance = mib.resolve_oid.expect;
println!; // 1.3.6.1.2.1.2.2.1.2.7
// Reverse lookup
let node = mib.lookup_oid;
println!; // ifDescr
CLI Tool
The optional mib-rs binary provides commands for working with MIBs:
Global options
When no -p paths are given, system MIB directories (net-snmp, libsmi) are used automatically.
Commands
# Load and validate modules (omit names to load all available)
# Look up an OID or name
# Show a subtree
# Search for nodes by pattern (case-insensitive, * and ? wildcards)
# Output format: MODULE::NAME OID KIND
# notification, group, compliance, capability,
# module-identity, object-identity
# List available modules
# Show MIB search paths (custom and auto-discovered system paths)
# Lint with strict diagnostics
# Export as JSON (diagnostics go to stderr)
Feature Flags
| Feature | Default | Description |
|---|---|---|
serde |
yes | Serde support and JSON export |
cli |
yes | CLI binary (mib-rs) |
To use the library without defaults:
[]
= { = "0.5", = false }
Minimum Supported Rust Version
This crate requires Rust 1.88 or later. The MSRV may be increased in minor releases.
License
Licensed under the MIT license.
Contributing
Contributions are welcome. Please see CONTRIBUTING.md for guidelines.