Skip to main content

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.

Crates.io PyPI License: MIT/Apache-2.0

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 address not ip 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:

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mediacast_netcatalog-0.2.0.tar.gz (132.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mediacast_netcatalog-0.2.0-cp39-abi3-win_amd64.whl (446.4 kB view details)

Uploaded CPython 3.9+Windows x86-64

mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (514.1 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (500.5 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

mediacast_netcatalog-0.2.0-cp39-abi3-macosx_11_0_arm64.whl (483.5 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

mediacast_netcatalog-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl (492.3 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

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

Hashes for mediacast_netcatalog-0.2.0.tar.gz
Algorithm Hash digest
SHA256 580e4901677fdc1ba7e54e8ab497e279bf05bd7333fe9ac441ff4ef9822e185e
MD5 9f3e2640683fbe15db1e52755250d664
BLAKE2b-256 731db1d7af7e5a6fac28047b924462e3452aa272831abd16ff37f40065d8f4f1

See more details on using hashes here.

File details

Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for mediacast_netcatalog-0.2.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 deb66f3ee5afefca5aa18a0e111258270c0fcb2d584539c3d9d5a2ae0143c15f
MD5 d653c6fb5764a264ec2f0588995074cf
BLAKE2b-256 a4a8d455b23d07a37cd870200707cf458f622448d288106f7ba462f4a89b301a

See more details on using hashes here.

File details

Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 340df2d7d8ddd8f25eb360fb20915d84f8bc6fc9c69da855f9d762d21de0fd2d
MD5 6e32f2276abe640f4cf4841ac44c9956
BLAKE2b-256 9cc55d1c1de213d588fe751977ad59a1203ad2e53fad5bdf8b0f4e85a2ceb36c

See more details on using hashes here.

File details

Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mediacast_netcatalog-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fd21152f6b90cfe4872b2c2b9a49b552dff31cdc317cc711f5a4682e90912582
MD5 18152aec036c3238a6c07d7194786662
BLAKE2b-256 e0f55e76efcb716bd5745a30e347fbcc45945c08972e8e421d436f0f7141932e

See more details on using hashes here.

File details

Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mediacast_netcatalog-0.2.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e148d7413fc35c50311df6f6609e4a338299a80b63c0f9223bfef3c6aef3917
MD5 066e88181e79a5495e6eb85baba67650
BLAKE2b-256 cf1858c94a45c96635a134114d1661dcda1bca3b57837e2f54e7479c580dbb76

See more details on using hashes here.

File details

Details for the file mediacast_netcatalog-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mediacast_netcatalog-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 99274c18090af86050a463a2a35b13e7d6141db725d7ebe9c1b11a4da1b62a4e
MD5 39a45dab889900358c86c07161986c89
BLAKE2b-256 da9868e36694f2b22a13c27022e22605497d17836004efd15edc52608c02baa6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page