v1/dpsagent.proto#
DPS Agent service for remote device management.
The agent connects to the DPS server via a bidirectional gRPC stream, receives device control requests, and dispatches them locally via SimpleController + Redfish plugins.
Protocol versioning: nvidia.dcpower.v1 package. Additive-only changes within v1 (new oneof fields, new RPCs). Breaking changes require v2 package.
Services#
AgentManagementService#
AgentManagementService exposes read-only agent discovery to operators.
ListAgents#
rpc ListAgents(ListAgentsRequest) returns ListAgentsResponse
ListAgents returns the current in-memory agent inventory.
DPSAgentService#
DPSAgentService is exposed by the DPS server on a separate gRPC port (mTLS). The agent opens Connect(), sends Handshake as the first AgentResponse, then loops receiving AgentRequests and sending AgentResponses.
Connect#
rpc Connect(AgentResponse) returns AgentRequest
Messages#
AgentAlerts#
AgentAlerts is the batch payload for agent-originated alert state updates.
Field |
Type |
Description |
|---|---|---|
alerts |
repeated |
none |
AgentError#
AgentError carries structured error information for device-level errors.
Field |
Type |
Description |
|---|---|---|
code |
|
Error code: “unknown_device”, “unknown_agent”, “invalid_handshake”, “queue_full” |
message |
|
none |
device |
|
Device name, if applicable. |
AgentInfo#
AgentInfo describes topology configuration and live sessions for one agent ID.
Field |
Type |
Description |
|---|---|---|
agent_id |
|
Agent identifier from topology assignments or live handshakes. |
configured |
|
Configured is true when the active topology assigns devices to the agent. |
connected |
|
Connected is true when the agent has at least one active stream. |
assigned_devices |
repeated |
Device instance IDs assigned to the agent by the active topology. |
sessions |
repeated |
Active connections for this agent ID. |
AgentRequest#
AgentRequest is the envelope for core-to-agent messages. The oneof acts as the capability router - each message type maps to a capability declared in the agent’s Handshake. The agent dispatches based on the concrete type.
Field |
Type |
Description |
|---|---|---|
traceparent |
|
W3C Trace Context parent for the message carried by this envelope. |
tracestate |
|
W3C vendor-specific trace state associated with traceparent. |
oneof msg.pong |
|
Core agent lifecycle (not capability-specific) |
oneof msg.remote_config |
|
none |
oneof msg.device_request |
|
device_control capability |
AgentResponse#
AgentResponse is the envelope for agent-to-core messages. First message must be a Handshake.
Field |
Type |
Description |
|---|---|---|
oneof msg.handshake |
|
Core agent lifecycle |
oneof msg.ping |
|
none |
oneof msg.device_response |
|
device_control capability |
oneof msg.alerts |
|
agent alert stream |
AgentSessionInfo#
AgentSessionInfo contains metadata reported by one active agent connection.
Field |
Type |
Description |
|---|---|---|
version |
|
Agent build version reported in the handshake. |
capabilities |
repeated |
Capabilities reported in the handshake. |
reported_devices |
repeated |
Device instance IDs reported in the handshake. |
Alert#
Alert is one typed alert inside an AgentAlerts payload.
Field |
Type |
Description |
|---|---|---|
oneof payload.node_compliance |
|
none |
CPUComplianceResource#
Field |
Type |
Description |
|---|---|---|
index |
|
none |
ComplianceResource#
ComplianceResource identifies the node scope that the compliance status applies to.
Field |
Type |
Description |
|---|---|---|
oneof scope.node |
|
none |
oneof scope.gpu |
|
none |
oneof scope.cpu |
|
none |
oneof scope.memory |
|
none |
GPUComplianceResource#
Field |
Type |
Description |
|---|---|---|
index |
|
none |
Handshake#
Handshake is the first message an agent sends after connecting. Core verifies cert CN matches agent_id when identity verification is enabled.
Field |
Type |
Description |
|---|---|---|
agent_id |
|
Agent identifier. Must match topology AgentId assignments. |
version |
|
Agent build version (diagnostic, not used for negotiation in v1). |
devices |
repeated |
Topology device instance IDs this agent manages (e.g. “eos0205”, “b20001”). Populated from persisted RemoteConfig received from the server. Core uses this for device request routing and mismatch detection. |
capabilities |
repeated |
Enabled capabilities, e.g., [“device_control”, “metrics”]. Diagnostic in v1; request routing is based on the concrete AgentRequest type. |
ListAgentsRequest#
ListAgentsRequest requests the current configured and connected agent inventory.
ListAgentsResponse#
ListAgentsResponse contains one record per configured or connected agent ID.
Field |
Type |
Description |
|---|---|---|
agents |
repeated |
Agents is ordered lexically by agent_id. |
MemoryComplianceResource#
Field |
Type |
Description |
|---|---|---|
index |
|
none |
NodeComplianceAlert#
NodeComplianceAlert reports whether observed node or component power is compliant with the desired DPS set point.
Field |
Type |
Description |
|---|---|---|
device |
|
none |
resource |
|
none |
compliance_status |
|
none |
desired_set_point_watts |
|
Desired DPS target in watts. |
current_reading_watts |
|
Agent-observed power reading in watts. |
observed_at |
|
Agent-observed telemetry timestamp. Unset means unavailable. |
ends_at |
|
Alert expiration time. Unset means unavailable. |
NodeComplianceResource#
Ping#
Ping is sent by the agent to keep the stream alive through ingresses.
Pong#
Pong is the server’s response to a Ping.
PushDeviceConfig#
PushDeviceConfig carries per-device-instance agent configuration.
Field |
Type |
Description |
|---|---|---|
instance_id |
|
Topology device instance ID (for example, “eos0205”). |
telemetry_id |
|
Telemetry stream identifier (for example, Zapp sensor UUID). |
device_model_json |
|
Device model JSON from topology, including Redfish endpoint and credential reference. |
RemoteConfig#
RemoteConfig is the device-management state pushed from server to agent. Sent after handshake (bootstrap) and whenever topology or device assignments change. The agent applies it atomically - it always has a consistent view of catalog + assignments + firmware validation policy.
Follows the OpAMP RemoteConfig pattern for topology and routing state: the server owns these inputs, and the agent reconciles to match.
Field |
Type |
Description |
|---|---|---|
device_catalog_data |
|
Device type definitions (YAML-encoded). Agent rebuilds its device registry from this. SHA-256 hash allows the agent to skip rebuilds when unchanged. |
device_catalog_hash |
|
none |
assigned_devices |
repeated |
Topology device instance IDs assigned to this agent. Empty means no devices assigned (e.g. fresh deploy before first topology activation). |
firmware_validation_enforce |
|
When true, firmware validation blocks topology activation and device operations. When false, validation only logs warnings. |
device_configs |
repeated |
Per-device instance configuration for this agent (telemetry and future fields). |
Scalar Value Types#
.proto Type |
Notes |
C++ Type |
Java Type |
Python Type |
|---|---|---|---|---|
double |
double |
double |
float |
|
float |
float |
float |
float |
|
int32 |
Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. |
int32 |
int |
int |
int64 |
Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. |
int64 |
long |
int/long |
uint32 |
Uses variable-length encoding. |
uint32 |
int |
int/long |
uint64 |
Uses variable-length encoding. |
uint64 |
long |
int/long |
sint32 |
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. |
int32 |
int |
int |
sint64 |
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. |
int64 |
long |
int/long |
fixed32 |
Always four bytes. More efficient than uint32 if values are often greater than 2^28. |
uint32 |
int |
int |
fixed64 |
Always eight bytes. More efficient than uint64 if values are often greater than 2^56. |
uint64 |
long |
int/long |
sfixed32 |
Always four bytes. |
int32 |
int |
int |
sfixed64 |
Always eight bytes. |
int64 |
long |
int/long |
bool |
bool |
boolean |
boolean |
|
string |
A string must always contain UTF-8 encoded or 7-bit ASCII text. |
string |
String |
str/unicode |
bytes |
May contain any arbitrary sequence of bytes. |
string |
ByteString |
str |