Redfish Managers Collection and Resources

This document describes the Redfish routes related to the Managers collection, focusing on the /redfish/v1/Managers/bmc instance, primarily handled by redfish/routes/managers.cc.

Route Registration

The route registration behavior depends on the central configuration:

  • GET and PATCH routes (/redfish/v1/Managers/bmc/ and the FanMode.Change actions) are only registered if the thermal control submodule is enabled: sensor_collector_module.thermal_control_sub_module.enabled = true in the central config.
  • Recovery routes (Google.Wipe and Google.InstallConfiguration actions) are unconditionally registered.

This logic is defined in redfish/routes/all_routes.cc.

BMC Manager Resource

  • URL: /redfish/v1/Managers/bmc
  • Handler: managers.cc::HandleGetManagersBmc
  • Method: GET
  • Description: Provides detailed information about the BMC itself.

Redfish Output Example

The following JSON snippet demonstrates a sample Redfish representation of the BMC Manager resource (with specific platform identifiers redacted) as exposed over HTTP GET requests:

{
  "@odata.id": "/redfish/v1/Managers/bmc",
  "@odata.type": "#Manager.v1_16_0.Manager",
  "Actions": {
    "#Manager.FanMode.Change": {
      "@Redfish.ActionInfo": "/redfish/v1/Managers/bmc/FanMode.Change.ActionInfo",
      "target": "/redfish/v1/Managers/bmc/Actions/Manager.FanMode.Change"
    },
    "#Manager.Reset": {
      "@Redfish.ActionInfo": "/redfish/v1/Managers/bmc/ResetActionInfo",
      "target": "/redfish/v1/Managers/bmc/Actions/Manager.Reset"
    },
    "#Manager.ResetToDefaults": {
      "ResetType@Redfish.AllowableValues": [
        "ResetAll"
      ],
      "target": "/redfish/v1/Managers/bmc/Actions/Manager.ResetToDefaults"
    },
    "Oem": {
      "#Google.InstallConfiguration": {
        "@Redfish.ActionInfo": "/redfish/v1/Managers/bmc/Oem/Google/InstallConfigurationActionInfo",
        "target": "/redfish/v1/Managers/bmc/Actions/Oem/Google.InstallConfiguration"
      },
      "#Google.Wipe": {
        "@Redfish.ActionInfo": "/redfish/v1/Managers/bmc/Oem/Google/WipeActionInfo",
        "target": "/redfish/v1/Managers/bmc/Actions/Oem/Google.Wipe"
      }
    }
  },
  "Certificates": {
    "@odata.id": "/redfish/v1/Managers/bmc/Certificates"
  },
  "DateTime": "2026-05-10T08:58:49+00:00",
  "DateTimeLocalOffset": "+00:00",
  "DedicatedNetworkPorts": {
    "@odata.id": "/redfish/v1/Managers/bmc/DedicatedNetworkPorts"
  },
  "Description": "Baseboard Management Controller",
  "EthernetInterfaces": {
    "@odata.id": "/redfish/v1/Managers/bmc/EthernetInterfaces"
  },
  "FirmwareVersion": "gbmc-release-25.27.206.0",
  "GraphicalConsole": {
    "ConnectTypesSupported": [
      "KVMIP"
    ],
    "MaxConcurrentSessions": 4,
    "ServiceEnabled": true
  },
  "Id": "bmc",
  "LastResetTime": "2026-05-07T06:47:07+00:00",
  "Links": {
    "ActiveSoftwareImage": {
      "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/8827a812"
    },
    "ManagerForChassis": [
      {
        "@odata.id": "/redfish/v1/Chassis/Chassis_0"
      }
    ],
    "ManagerForChassis@odata.count": 1,
    "ManagerForServers": [
      {
        "@odata.id": "/redfish/v1/Systems/system1"
      }
    ],
    "ManagerForServers@odata.count": 1,
    "ManagerInChassis": {
      "@odata.id": "/redfish/v1/Chassis/Chassis_1"
    },
    "SoftwareImages": [
      {
        "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/8827a812"
      }
    ],
    "SoftwareImages@odata.count": 1
  },
  "Location": {
    "PartLocation": {
      "LocationType": "Embedded",
      "ServiceLabel": "BMC"
    },
    "PartLocationContext": "SCM/DOWNLINK"
  },
  "LogServices": {
    "@odata.id": "/redfish/v1/Managers/bmc/LogServices"
  },
  "ManagerDiagnosticData": {
    "@odata.id": "/redfish/v1/Managers/bmc/ManagerDiagnosticData"
  },
  "ManagerType": "BMC",
  "Model": "OpenBmc",
  "Name": "OpenBmc Manager",
  "NetworkProtocol": {
    "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol"
  },
  "Oem": {
    "@odata.id": "/redfish/v1/Managers/bmc#/Oem",
    "@odata.type": "#OemManager.Oem",
    "Google": {
      "BootTime": {
        "@odata.id": "/redfish/v1/Managers/bmc/Oem/Google/BootTime"
      },
      "PsiMetrics": {
        "@odata.id": "/redfish/v1/Managers/bmc/Oem/Google/PsiMetrics"
      }
    },
    "OpenBmc": {
      "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc",
      "@odata.type": "#OemManager.OpenBmc",
      "Certificates": {
        "@odata.id": "/redfish/v1/Managers/bmc/Truststore/Certificates"
      },
      "Fan": {
        "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan",
        "@odata.type": "#OemManager.Fan",
        "FanControllers": {
          "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanControllers",
          "@odata.type": "#OemManager.FanControllers",
          "FAN01": {
            "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanControllers/FAN01",
            "@odata.type": "#OemManager.FanController",
            "DCoefficient": 0.0,
            "FFGainCoefficient": 1.0,
            "FFOffCoefficient": 0.0,
            "ICoefficient": 0.0,
            "ILimitMax": 0.0,
            "ILimitMin": 0.0,
            "Inputs": [
              "fantach_fan0_front_TACH",
              "fantach_fan1_front_TACH"
            ],
            "OutLimitMax": 100.0,
            "OutLimitMin": 30.0,
            "PCoefficient": 0.0,
            "SlewNeg": 0.0,
            "SlewPos": 0.0,
            "Zones": [
              {
                "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanZones/Zone_1"
              }
            ]
          }
        },
        "FanZones": {
          "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanZones",
          "@odata.type": "#OemManager.FanZones",
          "Zone_1": {
            "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanZones/Zone_1",
            "@odata.type": "#OemManager.FanZone",
            "FailSafe": "Active",
            "FanNames": [
              "fanpwm_fan0_PWM",
              "fanpwm_fan1_PWM"
            ],
            "Id": 1,
            "SensorNames": [
              "fantach_fan0_front_TACH",
              "fantach_fan1_front_TACH"
            ]
          }
        },
        "PidControllers": {
          "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/PidControllers",
          "@odata.type": "#OemManager.PidControllers",
          "HPM0_IBC_T": {
            "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/PidControllers/HPM0_IBC_T",
            "@odata.type": "#OemManager.PidController",
            "DCoefficient": 0.0,
            "FFGainCoefficient": 0.0,
            "FFOffCoefficient": 0.0,
            "ICoefficient": -0.1,
            "ILimitMax": 100.0,
            "ILimitMin": 30.0,
            "Inputs": [
              "temperature_IBC_T"
            ],
            "OutLimitMax": 0.0,
            "OutLimitMin": 0.0,
            "PCoefficient": -3.0,
            "SetPoint": 95.0,
            "SlewNeg": 0.0,
            "SlewPos": 0.0
          }
        },
        "Profile@Redfish.AllowableValues": [
          "Zone_1"
        ]
      }
    }
  },
  "PowerState": "On",
  "SerialConsole": {
    "ConnectTypesSupported": [
      "IPMI",
      "SSH"
    ],
    "MaxConcurrentSessions": 15,
    "ServiceEnabled": true
  },
  "Status": {
    "Health": "OK",
    "State": "Enabled"
  }
}

Properties

The GET response retrieves and populates the following properties:

PropertyTypeDescription
NameStringHardcoded to "OpenBmc Manager".
DescriptionStringHardcoded to `"Baseboard Management
: : : Controller"`. :
PowerStateStringHardcoded to "On".
ManagerTypeStringHardcoded to "BMC".
ModelStringHardcoded to "OpenBmc".
UUIDStringFetched from the Store's BMC UUID.
FirmwareVersionStringFetched from the Store's BMC firmware
: : : version. :
DateTimeStringCurrent BMC time formatted in UTC RFC3339.
DateTimeLocalOffsetStringHardcoded to "+00:00".
LastResetTimeStringThe timestamp when the BMC was last reset,
: : : in UTC RFC3339. :
StatusObject{"Health": "OK", "State": "Enabled"}.

Links

The Links section contains references to related resources:

  • ManagerForChassis: A list containing the chassis that this BMC manages (derived from ManagerInfo.manager_for_chassis in FRU data).
  • ManagerForServers: A list of systems managed by this BMC (derived from ManagerInfo.manager_for_servers in FRU data).
  • ManagerInChassis: The chassis in which this BMC is physically located (derived from ManagerInfo.manager_in_chassis in FRU data).
  • ActiveSoftwareImage & SoftwareImages: Links to the firmware inventory. > [!NOTE] > These links are only populated if the install module is disabled (install_module.enabled = false in central config). If the install module is enabled, software management is owned by the update service and task service.

OEM Extensions

  • OpenBmc: Contains links to thermal control controllers and zones:
    • Certificates: Points to /redfish/v1/Managers/bmc/Truststore/Certificates.
    • Fan:
      • FanControllers: Dynamically lists all Fan PID Controllers.
      • FanZones: Dynamically lists all Thermal Zones.
      • PidControllers: Dynamically lists all PID Controllers.
      • StepwiseControllers: Stepwise controllers.
      • Profile@Redfish.AllowableValues: Allowable values for the active thermal profile, listing the zone names (e.g., Zone_0, Zone_1).
  • Google:
    • BootTime: Points to /redfish/v1/Managers/bmc/Oem/Google/BootTime.
    • PsiMetrics: Points to /redfish/v1/Managers/bmc/Oem/Google/PsiMetrics.

Location

Provides the physical location of the BMC derived from the topology config:

  • PartLocation/ServiceLabel: The service label extracted from StableId.
  • PartLocation/LocationType: Hardcoded to "Embedded".
  • PartLocationContext: The location context string from StableId.

Console Capabilities

  • SerialConsole: Supported connections. ServiceEnabled is true, MaxConcurrentSessions is 15, and ConnectTypesSupported are ["IPMI", "SSH"].
  • GraphicalConsole: Supported connections. ServiceEnabled is true, MaxConcurrentSessions is 4, and ConnectTypesSupported are ["KVMIP"].

PATCH Behavior

  • URL: /redfish/v1/Managers/bmc
  • Handler: managers.cc::HandlePatchManagersBmc
  • Method: PATCH
  • Description: Updates the coefficients of PID and Fan PID controllers dynamically in the Store.

The request body should specify coefficients under the OEM OpenBmc Fan section:

{
  "Oem": {
    "OpenBmc": {
      "Fan": {
        "FanControllers": {
          "<controller_id>": {
            "PCoefficient": 1.5,
            "ICoefficient": 0.1,
            "DCoefficient": 0.05,
            "FFOffCoefficient": 10.0,
            "FFGainCoefficient": 0.5
          }
        },
        "PidControllers": {
          "<controller_id>": {
            "PCoefficient": 2.0,
            "ICoefficient": 0.2,
            "DCoefficient": 0.1,
            "FFOffCoefficient": 5.0,
            "FFGainCoefficient": 0.2,
            "SetPoint": 45.0
          }
        }
      }
    }
  }
}

Validation and Timeout

  • All coefficients are optional double values.
  • Strict Property Check: If the PATCH body contains any property for a controller that is not recognized (e.g. any typo or unsupported attribute remaining after parsing), the handler rejects the request with 400 Bad Request.
  • Store Timeout: The controller coefficient updates are sent to the Store with a strict 3-second timeout. If the update does not complete in time, the request returns an error.
  • Returns 204 NoContent on successful application.

Actions

FanMode.Change

  • Action Target: /redfish/v1/Managers/bmc/Actions/Manager.FanMode.Change (POST)
  • ActionInfo: /redfish/v1/Managers/bmc/FanMode.Change.ActionInfo (GET)
  • Description: Allows switching the fan control mode between automated thermal control and manual override.
  • Parameters:
    • FanMode (String, Required): Must be either "Manual" or "Auto".

Updating to "Manual" allows external manual control over the fan controllers, while "Auto" enables the built-in thermal control algorithms. The mode is set in the Store using SetManualMode().

Google.Wipe

  • Action Target: /redfish/v1/Managers/bmc/Actions/Oem/Google.Wipe (POST)
  • ActionInfo: /redfish/v1/Managers/bmc/Oem/Google/WipeActionInfo (GET)
  • Description: Initiates sanitization and wipe operations on various BMC and Host subsystems.
  • Parameters:
    • WipeHostHss (Boolean, Required): Wipe Host Secret Seed.
    • WipeBmcNssAndWipeDioriteNss (Boolean, Required): Wipe BMC and Diorite cryptographic keys.
    • WipeBmcRwfs (Boolean, Required): Wipe BMC Read-Write filesystem.

Wipe Logic Details

  1. WipeHostHss:
    • Looks for the configuration file at /usr/share/binaryblob/config.json. If missing, the operation is skipped with an error (Host HSS is not managed by this BMC).
    • Parses the configuration and extracts sysFilePath, offsetBytes, and maxSizeBytes for each entry.
    • Opens the device/EEPROM file at sysFilePath and writes 0xff bytes starting at offsetBytes for maxSizeBytes to clear host secret seeds.
  2. WipeBmcNssAndWipeDioriteNss:
    • Deletes the key file /var/google/bmc_nss from the filesystem.
    • Looks for key config at /usr/share/bmc-crypto/key.json. If missing, returns an error.
    • Opens the target sysFilePath (EEPROM), reads 8 bytes at offset to determine the key size (interpreting it as Little Endian).
    • Validates that the key size is under 64KB.
    • Overwrites the key size metadata and the key bytes with 0xff (writing a total of key_size + 8 bytes of 0xff at the offset).
  3. WipeBmcRwfs:
    • Writes an empty trigger file at /var/google/do-rwfs-purge.
    • The BMC init scripts detect this file on the next reboot and format/clear the RWFS partition.

The response returns a list of results inside /@Message.ExtendedInfo, describing the outcome for each requested operation.

Google.InstallConfiguration

  • Action Target: /redfish/v1/Managers/bmc/Actions/Oem/Google.InstallConfiguration (POST)
  • ActionInfo: /redfish/v1/Managers/bmc/Oem/Google/InstallConfigurationActionInfo (GET)
  • Description: Installs offline query configuration data onto the BMC.
  • Parameters:
    • Type (String, Required): Must be "Uhmm". (Values "Dag" and "Network" are defined but not yet implemented).
    • Base64EncodedBinary (String, Required): Base64-encoded string of a serialized uhmm::OfflineData protobuf message.

Logic Details

  1. Decodes the Base64 input string Base64EncodedBinary.
  2. Parses the decoded bytes into a uhmm::OfflineData protocol buffer. If parsing fails, returns 400 Bad Request.
  3. Converts the parsed protobuf message to a human-readable text format representation.
  4. Writes the text serialization to the file: /var/google/uhmm/data.txtpb on the BMC.
  5. Returns 204 NoContent on success.

Protobuf Configuration Schemas

The following protobuf definitions are relevant to the Managers resource:

  • central_config.proto: Configures module enablement (specifically SensorCollectorModule.ThermalControlSubmodule).

  • topology_config.proto: Outlines the system topology used to locate the BMC resource.

  • stable_id.proto: Populates location context and service labels.

  • offline_data.proto: Defines the schema for the Base64 payload in the InstallConfiguration action.


Code References

The implementation of these endpoints can be referenced in the following files:

  • redfish/routes/managers.cc: Main handler logic.

  • redfish/routes/all_routes.cc: Route registration.