Vendor command catalog + version matcher + protocol probe for multi-vendor network automation.
Project description
mediacast-netcatalog
Vendor command catalog + version matcher + protocol probe for multi-vendor network automation. Rust core; Python bindings via PyO3.
What this is
A YAML-backed library that maps abstract command types (e.g.
ARP_TABLE, MAC_TABLE, PORT_VLAN_ASSIGN) to concrete CLI strings,
protocol alternatives (NETCONF / RESTCONF / gNMI / vendor-specific), and
parser hints — selectable by (vendor, firmware version).
It comes seeded with research-grade catalogs for seven switch platforms:
| Vendor | Coverage | Notes |
|---|---|---|
| Cisco IOS / IOS-XE | 25/25 | 12.x / 15.x / 17.x output drift captured |
| Cisco NX-OS | 25/25 | 7+ load-bearing divergences from IOS documented |
| Aruba AOS-CX | 25/25 | Family-prefixed firmware (FL./GL./LL.) version matcher needed |
| Juniper Junos | 25/25 | Transactional configure → set → commit model |
| Arista EOS | 24/25 (CIVIC absent) | eAPI extension; mostly IOS-compatible but — see FINDINGS |
| HPE ProCurve | 24/25 (CIVIC absent) | No NETCONF/RESTCONF/gNMI ever; SNMP + proprietary REST only |
| Cisco Meraki MS | 23/25 + 2 NOT_SUPP | Cloud-managed; Dashboard API, not CLI — see FINDINGS strategic flag |
See catalog/FINDINGS.md for cross-vendor synthesis,
catalog/SCHEMA.md for the YAML format, and
catalog/COMMAND_TYPES.md for the abstract command
vocabulary.
Why
Most multi-vendor tooling hard-codes per-vendor command strings inside per-vendor handler classes, with no awareness of firmware-version drift. That works until:
- Cisco IOS-XE 12.x emits a 5-column ARP table and 17.x emits 6 — your parser silently truncates.
- NX-OS uses
ip dhcp relay addressnotip helper-address— your IOS parser ignores DHCP servers entirely on Nexus. - Aruba AOS-CX firmware strings look like
FL.10.13.1000— your SemVer comparator throws. - Arista EOS defaults STP to MSTP and L2 MTU to 9214, not PVST+/1500 — your drift detector flags every port as misconfigured.
This library is the data layer that lets a runtime pick the right
command for the right (vendor, firmware) instead of guessing. It also
ships a protocol-capability probe (CLI tool + library) that fingerprints
which programmatic interfaces a real device actually exposes.
Status
v0.2 — research data + working library. Citation-backed catalog YAML for seven vendors. Rust loader + version matcher + sync stdlib-only protocol probe, all with PyO3 Python bindings. First production consumer is Mediacast NetCaster. API may still evolve toward v1.0; pin a specific minor version.
Quick start (Rust)
[dependencies]
mediacast-netcatalog = "0.1"
use mediacast_netcatalog::{Catalog, CommandType};
fn main() -> anyhow::Result<()> {
let catalog = Catalog::load_bundled()?; // ships embedded YAML
let entry = catalog
.lookup("cisco_ios", "17.6.4", CommandType::ArpTable)?
.expect("arp table is universal on cisco_ios");
println!("CLI: {}", entry.cli);
if let Some(gnmi) = &entry.protocol_alternatives.gnmi {
println!("gNMI path: {}", gnmi.path);
}
Ok(())
}
Quick start (Python)
pip install mediacast-netcatalog
from mediacast_netcatalog import Catalog, CommandType
catalog = Catalog.load_bundled()
entry = catalog.lookup("aruba_aoscx", "FL.10.13.1000", CommandType.ARP_TABLE)
print(entry.cli)
print(entry.protocol_alternatives.rest_api) # AOS-CX has proprietary REST
The Python bindings are zero-copy where possible and re-export the same type vocabulary as the Rust crate.
Protocol probe
cargo install mediacast-netcatalog --features bin
mediacast-netcatalog probe --host 10.0.0.1 --vendor cisco_ios
Or from Python:
from mediacast_netcatalog.probe import probe_device
report = probe_device(host="10.0.0.1", vendor="cisco_ios")
print(report.netconf_available, report.gnmi_available, report.firmware)
The probe uses stdlib-only Rust (no Netmiko, no Paramiko) — it issues TCP connects + minimal protocol handshakes for NETCONF (830), gNMI (9339), RESTCONF (443/HTTPS), and the vendor's text CLI banner.
Catalog as data
If you don't want a Rust dependency, just consume the YAML directly:
git clone https://github.com/Mediacastnet/mediacast-netcatalog
cd mediacast-netcatalog/catalog
ls *.yaml
The schema is documented in catalog/SCHEMA.md. Files
are pure YAML — load them with whatever tool you prefer.
Project layout
mediacast-netcatalog/
├── catalog/ # Canonical YAML data + research docs
│ ├── cisco-ios-xe.yaml
│ ├── cisco-nxos.yaml
│ ├── aruba-aoscx.yaml
│ ├── juniper-junos.yaml
│ ├── arista-eos.yaml
│ ├── hpe-procurve.yaml
│ ├── meraki-mx-ms.yaml
│ ├── SCHEMA.md
│ ├── COMMAND_TYPES.md
│ ├── STATUS.md
│ └── FINDINGS.md
├── src/ # Rust core
│ ├── lib.rs
│ ├── catalog.rs # YAML → typed Catalog
│ ├── version.rs # Version range matcher (handles AOS-CX FL./GL.)
│ ├── command_types.rs # CommandType enum
│ ├── error.rs
│ ├── probe.rs # Protocol-capability probe
│ └── python.rs # PyO3 bindings (feature = "python")
├── examples/
│ └── basic_lookup.rs
├── tests/
│ ├── catalog_load.rs
│ └── version_matcher.rs
├── pyproject.toml # maturin build config
├── Cargo.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE-MIT
└── LICENSE-APACHE
Contributing
Contributions welcome — see CONTRIBUTING.md. High-value
contributions:
- New vendor catalogs (Extreme, FortiSwitch, MikroTik, Brocade/RUCKUS).
See
catalog/SCHEMA.md; aim for ≥80% coverage of the abstract command set with citation links. - Firmware-version drift entries for vendors already covered. If you
hit an output-format change between firmware revisions, file a PR with
a
versions:block + sample output. - Probe protocol additions — currently NETCONF/gNMI/RESTCONF/SSH-banner; IPMI, ONIE, and SONiC discovery would round it out.
Related projects
- NetCaster — venue-centric network management product (Mediacast Network Solutions). First production consumer of this crate.
- Mediacast Platform — broader Rust-first platform from the same org.
License
Dual-licensed under either of:
- Apache License, Version 2.0 (
LICENSE-APACHE) - MIT license (
LICENSE-MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual-licensed as above, without any additional terms or conditions.
Provenance
Catalog data was produced by Mediacast NetCaster's
2026-04 vendor doc-crawl effort: seven parallel research agents working
from vendor command references, YANG model repos, and community sources.
Every entry in catalog/<vendor>.yaml cites its source; entries marked
unverified: true are heuristic and want validation against real gear.
See catalog/FINDINGS.md §7 for the doc-access friction encountered and
fallback sources used.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mediacast_netcatalog-0.2.0.tar.gz.
File metadata
- Download URL: mediacast_netcatalog-0.2.0.tar.gz
- Upload date:
- Size: 132.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
580e4901677fdc1ba7e54e8ab497e279bf05bd7333fe9ac441ff4ef9822e185e
|
|
| MD5 |
9f3e2640683fbe15db1e52755250d664
|
|
| BLAKE2b-256 |
731db1d7af7e5a6fac28047b924462e3452aa272831abd16ff37f40065d8f4f1
|
File details
Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: mediacast_netcatalog-0.2.0-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 446.4 kB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
deb66f3ee5afefca5aa18a0e111258270c0fcb2d584539c3d9d5a2ae0143c15f
|
|
| MD5 |
d653c6fb5764a264ec2f0588995074cf
|
|
| BLAKE2b-256 |
a4a8d455b23d07a37cd870200707cf458f622448d288106f7ba462f4a89b301a
|
File details
Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 514.1 kB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
340df2d7d8ddd8f25eb360fb20915d84f8bc6fc9c69da855f9d762d21de0fd2d
|
|
| MD5 |
6e32f2276abe640f4cf4841ac44c9956
|
|
| BLAKE2b-256 |
9cc55d1c1de213d588fe751977ad59a1203ad2e53fad5bdf8b0f4e85a2ceb36c
|
File details
Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 500.5 kB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd21152f6b90cfe4872b2c2b9a49b552dff31cdc317cc711f5a4682e90912582
|
|
| MD5 |
18152aec036c3238a6c07d7194786662
|
|
| BLAKE2b-256 |
e0f55e76efcb716bd5745a30e347fbcc45945c08972e8e421d436f0f7141932e
|
File details
Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: mediacast_netcatalog-0.2.0-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 483.5 kB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e148d7413fc35c50311df6f6609e4a338299a80b63c0f9223bfef3c6aef3917
|
|
| MD5 |
066e88181e79a5495e6eb85baba67650
|
|
| BLAKE2b-256 |
cf1858c94a45c96635a134114d1661dcda1bca3b57837e2f54e7479c580dbb76
|
File details
Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: mediacast_netcatalog-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 492.3 kB
- Tags: CPython 3.9+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99274c18090af86050a463a2a35b13e7d6141db725d7ebe9c1b11a4da1b62a4e
|
|
| MD5 |
39a45dab889900358c86c07161986c89
|
|
| BLAKE2b-256 |
da9868e36694f2b22a13c27022e22605497d17836004efd15edc52608c02baa6
|