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
- 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
- Three API tiers: High-level handles, low-level arena-backed raw data, and compiler pipeline access
Installation
Or add to your Cargo.toml:
[]
= "0.1"
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:
# Load and validate modules
# Look up an OID or name
# Show a subtree
# Search for objects by pattern
# List available modules
# Lint with strict diagnostics
# Export as JSON
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.1", = 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.