nv-redfish
nv-redfish is a modular Rust client stack for Redfish BMC management.
The project combines generated Redfish schema types with a small transport
abstraction and optional ergonomic wrappers for common Redfish services. The
main crate is intentionally feature-gated: enable the service and OEM support
your client needs, or use std-redfish for a broad standard Redfish build.
Crates
-
nv-redfish-core- Transport-agnostic primitives and traits used by generated code.
- Includes
Bmc,EntityTypeRef,NavProperty<T>,Action<T, R>,ODataId,ODataETag,ModificationResponse, and Redfish session-create response metadata. - Provides common Redfish/OData value types such as date/time, duration, UUID, decimal, task, action, and navigation-property helpers.
- Does not include an HTTP implementation.
-
nv-redfish-bmc-http- HTTP implementation of
nv_redfish_core::Bmc. - Provides
HttpBmc<C>,BmcCredentials, ETag/cache handling, and theHttpClienttrait. - The built-in reqwest client is behind the
reqwestfeature, enabled by default for this crate. - Supports custom default headers and session-token credential updates, so
callers can use either basic credentials or a Redfish
X-Auth-Token.
- HTTP implementation of
-
nv-redfish- High-level Redfish API over generated schema types.
- Exposes
ServiceRootand feature-gated wrappers for services such as accounts, chassis, systems, sessions, events, telemetry, and updates. - Re-exports
nv-redfish-bmc-httpasnv_redfish::bmc_httpwhen thebmc-httpfeature is enabled. - Generates only the schemas required by enabled features during build.
- Uses feature-gated patch helpers for vendor quirks and schema deviations observed in real BMCs.
-
nv-redfish-bmc-mock- Test BMC implementation used by integration tests and examples.
- Provides expectation helpers for GET, PATCH, POST/create, DELETE, actions, SSE, and Redfish session creation.
-
nv-redfish-csdl-compiler- CSDL/OData XML compiler and Rust code generator.
- Used by
nv-redfishat build time to compile selected standard and OEM Redfish schemas. - Reads Redfish, Swordfish, and OEM CSDL/EDMX documents into a schema index, resolves inheritance and references, compiles a reduced intermediate model, optimizes it, and emits Rust.
- Compilation is rooted at service singletons such as
Service, plus feature-defined include patterns fromredfish/features.toml. - Navigation targets can be limited with wildcard entity-type patterns so generated code contains only the reachable schema surface needed by the selected features.
- Generates read, update, create, excerpt, action, enum, and typedef shapes
consumed by
nv-redfish. - CLI entry points:
Compile: compile standard CSDL from a root singleton into a Rust file.CompileOem: compile OEM CSDL as root schemas while resolving references from standard CSDL files.
Feature Flags
nv-redfish has no default features.
Common feature groups:
bmc-http: re-exportnv-redfish-bmc-httpfromnv_redfish::bmc_http.std-redfish: enable a broad standard Redfish surface.- Service features:
accounts,assembly,bios,boot-options,chassis,computer-systems,ethernet-interfaces,event-service,host-interfaces,log-services,managers,memory,network-adapters,network-device-functions,pcie-devices,power,power-supplies,processors,secure-boot,sensors,session-service,storages,telemetry-service,thermal,update-service. - OEM features:
oem-ami,oem-dell,oem-hpe,oem-lenovo,oem-supermicro,oem-nvidia,oem-liteon. - OEM product features:
oem-nvidia-bluefield,oem-nvidia-baseboard,oem-dell-attributes.
For smaller binaries and faster builds, enable only the service and OEM features your client needs.
Minimal Example
Cargo.toml:
[]
= { = "0.1", = ["bmc-http"] }
= { = "1", = ["macros", "rt-multi-thread"] }
= "2.5"
Rust:
use Client;
use ;
use ServiceRoot;
use Arc;
use Url;
async
See examples/readme-minimal for this example as a workspace target.
See examples/session-token for Redfish SessionService authentication using
X-Auth-Token.
How It Fits Together
- Enable features on
nv-redfish. redfish/build.rsinvokesnv-redfish-csdl-compiler.- The compiler reads
redfish/features.tomlplus selected CSDL XML schemas and generates the schema module compiled intonv-redfish. - High-level wrappers use the generated types and the transport-agnostic
Bmctrait. - Applications provide a BMC implementation, commonly
HttpBmc<Client>fromnv-redfish-bmc-http.
Goals
- Keep the transport layer independent from the Redfish schema layer.
- Compile only the schema surface needed by enabled features.
- Support standard Redfish and selected OEM extensions.
- Keep vendor compatibility fixes isolated behind feature-gated patch helpers.
License
See workspace Cargo.toml.
This project includes Redfish schema files from DMTF's Redfish-Publications repository, licensed under the BSD-3-Clause license.
This project includes Swordfish schema files from SNIA's Swordfish-Publications repository, licensed under the BSD-3-Clause license.
Contributing
Please see CONTRIBUTING.md for details.