Networks
- PUT /network/guest-networks
Update a guest network
Update network properties. ID must be provided in request body.
- Status Codes:
200 OK – Updated network
400 Bad Request – Invalid request payload
500 Internal Server Error – Failed to update network
- POST /network/guest-networks/eligible-nics
List eligible NICs across all compute nodes
Aggregate physical and bond NICs (admin up, oper up, not enslaved) from all configured nodes — keyset paginated over BMCInfo
- Request JSON Object:
after_id (integer) – keyset pagination: ID of last item on previous page
page (integer)
page_size (integer)
- Status Codes:
200 OK – Eligible NICs per node
500 Internal Server Error – Failed to collect eligible NICs
- Response JSON Object:
count (integer) – total configured nodes
has_more (boolean)
next_id (integer)
nodes[].error (string)
nodes[].fqdn (string)
nodes[].interfaces[].admin_state (string)
nodes[].interfaces[].allmulticast (boolean)
nodes[].interfaces[].carrier (boolean)
nodes[].interfaces[].code (string) – machine reason code (constants.Code*)
nodes[].interfaces[].current_speed (integer)
nodes[].interfaces[].flags[] (string)
nodes[].interfaces[].hardware.bus_info (string) – PCI/USB bus address (e.g., “0000:01:00.0”)
nodes[].interfaces[].hardware.device_type (string) – “physical”, “virtual”, “bridge”, “vlan”, etc.
nodes[].interfaces[].hardware.driver (string) – Kernel driver name (e.g., “e1000e”, “ixgbe”)
nodes[].interfaces[].hardware.driver_version (string) – Driver version
nodes[].interfaces[].hardware.firmware_version (string) – Firmware version
nodes[].interfaces[].hardware.is_sriov_pf (boolean) – true if SR-IOV physical function
nodes[].interfaces[].hardware.is_sriov_vf (boolean) – true if SR-IOV virtual function
nodes[].interfaces[].hardware.mac_vendor (string) – Human-readable vendor name derived from PCI vendor ID
nodes[].interfaces[].hardware.modalias (string) – Device modalias string
nodes[].interfaces[].hardware.pci_device (string) – PCI device ID
nodes[].interfaces[].hardware.pci_subsystem (string) – PCI subsystem ID
nodes[].interfaces[].hardware.pci_vendor (string) – PCI vendor ID (e.g., “8086” for Intel)
nodes[].interfaces[].ip_addresses[] (string)
nodes[].interfaces[].last_state_change_secs (integer) – State change tracking
nodes[].interfaces[].mac_address (string)
nodes[].interfaces[].master (string)
nodes[].interfaces[].max_speed (integer)
nodes[].interfaces[].mtu (integer)
nodes[].interfaces[].name (string)
nodes[].interfaces[].offloads (object)
nodes[].interfaces[].oper_state (string)
nodes[].interfaces[].overall_state (string) – Computed display fields
nodes[].interfaces[].ownership (string) – system|user|available|quarantine — see netconstants.Bucket*
nodes[].interfaces[].promiscuous (boolean)
nodes[].interfaces[].raw_flags (integer)
nodes[].interfaces[].reason (string) – human-readable reason
nodes[].interfaces[].ring_rx_current (integer) – Ring buffer sizes (ethtool -g) — current + hardware max, so the detail page can show the live value next to the editable ring_rx/ring_tx control.
nodes[].interfaces[].ring_rx_max (integer)
nodes[].interfaces[].ring_tx_current (integer)
nodes[].interfaces[].ring_tx_max (integer)
nodes[].interfaces[].sdwan_type (string)
nodes[].interfaces[].status (string) – Eligibility classification (net-new). Stamped node-local by ClassifyNICs so the values survive the control-node proxy and reach the UI as-is. The owning bridge is carried by the existing master field — no separate owner field.
nodes[].interfaces[].throughput_rx_mbps (number) – Throughput — 1-minute rolling average computed by the interface poller
nodes[].interfaces[].throughput_tx_mbps (number)
nodes[].interfaces[].traffic_role (string) – public|guest|management|”” - CS traffic-type via agent.properties
nodes[].interfaces[].tx_queue_len (integer)
nodes[].interfaces[].type (string)
nodes[].nic_count (integer)
nodes[].node_ip (string)
page_size (integer)
- GET /network/guest-networks/jobs/last
Get latest job per network
Returns one job per unique network name — the most recent create, delete, or check
- Status Codes:
200 OK – Latest job per network
500 Internal Server Error – Database error
- Response JSON Object:
[].bridge_result.bridge_name (string)
[].bridge_result.failed (integer)
[].bridge_result.failed_nodes[].error (string)
[].bridge_result.failed_nodes[].fqdn (string)
[].bridge_result.failed_nodes[].node_ip (string)
[].bridge_result.failed_nodes[].reachable (boolean) – false = unreachable before ansible ran
[].bridge_result.nodes[] (string)
[].bridge_result.succeeded (integer)
[].bridge_result.total (integer)
[].error (string)
[].job_id (string)
[].network (string)
[].progress (integer)
[].state (string)
[].status (string)
[].total_nodes (integer)
- GET /network/guest-networks/jobs/latest
Get latest guest network job by network name
Returns the most recent create or delete job for the given network name
- Query Parameters:
network (string) – Network name
- Status Codes:
200 OK – Job status
400 Bad Request – Missing network param
404 Not Found – No job found
- Response JSON Object:
bridge_result.bridge_name (string)
bridge_result.failed (integer)
bridge_result.failed_nodes[].error (string)
bridge_result.failed_nodes[].fqdn (string)
bridge_result.failed_nodes[].node_ip (string)
bridge_result.failed_nodes[].reachable (boolean) – false = unreachable before ansible ran
bridge_result.nodes[] (string)
bridge_result.succeeded (integer)
bridge_result.total (integer)
error (string)
job_id (string)
network (string)
progress (integer)
state (string)
status (string)
total_nodes (integer)
- POST /network/guest-networks/list
List guest networks
Get a list of guest networks with optional filters
- Status Codes:
200 OK – List of networks
400 Bad Request – Invalid request payload
500 Internal Server Error – Failed to list networks
- POST /network/guest-networks/{id}/restart
Restart a guest network
Restart a guest network by ID provided in request body
- Status Codes:
201 Created – Success response
400 Bad Request – Invalid request payload
500 Internal Server Error – Internal server error
- GET /network/mtu
Get cluster MTU (declared vs actual)
Declared per-role MTU against the live value on every node, bridge and tunnel, with every divergence listed
- Status Codes:
200 OK – Cluster MTU view
500 Internal Server Error – Failed to collect cluster MTU
503 Service Unavailable – Database not available
- Response JSON Object:
awaiting[].actual (integer)
awaiting[].declared (integer)
awaiting[].detail (string)
awaiting[].device (string)
awaiting[].kind (string)
awaiting[].node (string)
awaiting[].role (string)
awaiting[].state (string)
declared.management (integer)
declared.public (integer)
declared.storage (integer)
declared.underlay (integer) – Underlay is REPORTED, not declared here: it is the fabric’s and is edited on the fabric page. It is carried because every refusal is measured against it (“storage_mtu=8234 exceeds vxlan_mtu=1500”), and a ceiling a user cannot see makes those refusals unexplainable.
divergences[].actual (integer)
divergences[].declared (integer)
divergences[].detail (string)
divergences[].device (string)
divergences[].kind (string)
divergences[].node (string)
divergences[].role (string)
divergences[].state (string)
nodes[].devices[].actual (integer)
nodes[].devices[].declared (integer) – 0 = nothing declared
nodes[].devices[].divergent (boolean)
nodes[].devices[].kind (string)
nodes[].devices[].name (string)
nodes[].devices[].role (string)
nodes[].error (string)
nodes[].fqdn (string)
nodes[].node_ip (string)
nodes[].node_role (string)
nodes[].status (string)
nodes[].zone (string) – Zone the node belongs to, for filtering only. The declaration itself is fleet-wide: a node being onboarded has no zone yet, so nothing can be applied per zone without the configure flow learning one first.
rollout_status (string)
status (string)
unreachable_nodes (integer)
- PUT /network/mtu
Declare the cluster’s per-role MTU
Set the management, storage and public bridge MTU and roll the change out. Works with or without a fabric configuration.
- Query Parameters:
acknowledge_unverifiable (boolean) – Proceed when a role has no probe target
- Request JSON Object:
management (integer)
public (integer)
storage (integer)
- Status Codes:
202 Accepted – Rollout started
400 Bad Request – Invalid request or MTU
403 Forbidden – No identity on the request
409 Conflict – A rollout is already in flight
- POST /network/mtu/l2probe
Send or count raw MTU probe frames on this node
One side of a layer 2 MTU test. Listen blocks for its window and returns a count; send emits a burst to the peer’s MAC. Used when ICMP is filtered.
- Request JSON Object:
count (integer)
device (string) – (required)
mode (string) – (required)
mtu (integer) – MTU is the payload size under test, so the frame on the wire is this plus the 14-byte Ethernet header. (required)
peer (string) – Peer is the send side’s target IP. Its MAC is resolved on the node, from the neighbour table the ping probe has already populated, unless PeerMAC is supplied.
peer_mac (string)
token (integer) – Token marks one run’s frames so a listener never counts a stale burst from an earlier attempt on the same wire.
window_ms (integer)
- Status Codes:
200 OK – Frames sent or counted
400 Bad Request – Invalid request
500 Internal Server Error – Probe failed
- Response JSON Object:
detail (string)
device (string)
mode (string)
mtu (integer)
peer_mac (string)
received (integer)
sent (integer)
- POST /network/mtu/node-apply
Apply a rollout MTU to a role bridge on this node
Persist, arm a self-revert watchdog, set live, probe, then commit or restore. Driven by the cluster MTU rollout.
- Request JSON Object:
advisory_targets[] (string)
bridge (string) – (required)
dry_run (boolean) – DryRun proves the value and reverts unconditionally, persisting nothing.
mtu (integer) – (required)
phase (string) – Phase splits the sequence so a cluster-wide run holds every node at the new value while each probes; a probe needs both ends raised. “” keeps the single-call behaviour (raise, probe, then revert or commit) for manual callers.
probe_target (string)
self_revert_secs (integer) – SelfRevertSecs is the watchdog window. 0 uses the node default.
- Status Codes:
200 OK – Applied (check probe_ok)
400 Bad Request – Invalid request
409 Conflict – Bridge not present on this node
500 Internal Server Error – Apply failed
- Response JSON Object:
advisory_failures[] (string)
applied (boolean)
bridge (string)
detail (string)
devices[] (string)
limit_mtu (integer)
mtu (integer)
peer_mac (string) – PeerMAC is the probe target’s link-layer address, carried back only when the verdict was inconclusive, so the raw-frame fallback can build a frame without resolving it a second time.
persisted (boolean)
probe_ok (boolean)
probe_verdict (string) – ProbeVerdict is the three-state outcome behind ProbeOK: “pass”, “fail” or “inconclusive”. ProbeOK alone cannot separate a path that failed from one that could not be tested, and only the first is a reason to refuse a rollout. Empty on a result from a node predating this field.
probed (boolean)
reverted (boolean)
- POST /network/stats
Get network statistics
Returns guest networks grouped by type and public IPs grouped by state
- Status Codes:
200 OK – Network statistics
500 Internal Server Error – Failed to collect network statistics
- Response JSON Object:
dashboard.allocation.percentage (number)
dashboard.allocation.total (integer)
dashboard.allocation.used (integer)
dashboard.bandwidth.estimated_usage (boolean)
dashboard.bandwidth.percentage (number)
dashboard.bandwidth.received_bytes (integer)
dashboard.bandwidth.sent_bytes (integer) – VR-tracked traffic counters aggregated across all guest networks (Network.Sentbytes / Receivedbytes)
dashboard.bandwidth.source (string)
dashboard.bandwidth.total_bytes (integer)
dashboard.bandwidth.total_gbps (number)
dashboard.bandwidth.total_mbps (integer)
dashboard.bandwidth.used_gbps (number)
dashboard.bandwidth.used_mbps (integer)
dashboard.implemented.percentage (number)
dashboard.implemented.total (integer)
dashboard.implemented.used (integer)
dashboard.ip_usage.percentage (number)
dashboard.ip_usage.total (integer)
dashboard.ip_usage.used (integer)
dashboard.setup.percentage (number)
dashboard.setup.total (integer)
dashboard.setup.used (integer)
guest_networks_by_type.segments[].label (string)
guest_networks_by_type.segments[].value (integer)
guest_networks_by_type.title (string)
guest_networks_by_type.total (integer)
public_ips_by_state.segments[].label (string)
public_ips_by_state.segments[].value (integer)
public_ips_by_state.title (string)
public_ips_by_state.total (integer)