blob: eb88e029cbddf6b460b653b438460eb8b87eeb13 [file]
edition = "2023";
package milotic_tlbmc;
// Controls the FRU collector module.
message FruCollectorModule {
bool enabled = 1 [default = false];
// If true, allow FRUs not mapping to a config. This is useful for testing.
// This should not be enabled in production: if a FRU does not map to a
// config, very likely the machine has unsupported hardware config. Making
// tlbmc own the chassis of the machine may cause incorrect links.
bool allow_dangling_frus = 2 [default = false];
// If true, own individual cable in tlBMC.
bool own_cables_in_redfish = 3 [default = true];
// If true, enable deterministic BMC feature for TLBMC.
bool enable_deterministic_bmc = 4 [default = false];
// If true, own assemblies in tlBMC. This is default false because most of
// the current platforms do not have corresponding assembly topology defined
// for tlBMC to own.
bool own_assemblies_in_redfish = 5 [default = false];
// If true, own individual chassis in tlBMC. This is default true.
// Platforms allows dangling FRUs and enables `enable_collection_append_mode`
// for sensors can set this to false.
bool own_chassis_in_redfish = 6 [default = true];
// If true, do not derive topology based on associations.
// Today this is not fully implemented. Set this to true together with
// `own_chassis_in_redfish=false` to avoid wrong links in Redfish.
bool no_associations_based_topology = 7 [default = false];
// If true, own chassis collection in tlBMC. This is default true because
// this is the default behavior of tlBMC.
bool own_chassis_collection_in_redfish = 8 [default = true];
// If true, the deterministic FRU scanner will check serial number and part
// number matching to determine the presence status of a FRU. If false, the
// deterministic FRU scanner will mark FRUs as present as long as a valid
// eeprom is parsed on the designated bus.
bool strict_part_info_check = 9 [default = false];
// PLEASE DO NOT USE UNLESS YOU REQUIRE THIS FOR DEVPATH GENERATION
// In old platforms, there is a hack that exposes Systems in the Chassis URL.
// This goes against the Refdish spec. This should only be used for legacy
// platforms.
bool expose_systems_child_links_in_chassis = 10 [default = false];
// If true, own cable collection in tlBMC.
bool own_cable_collection_in_redfish = 11 [default = false];
// If true, expose default system link "system" in Redfish chassis and system
// urls when no system ID is configured.
bool expose_default_system_link = 12 [default = true];
}
// Performs Thermal control using sensors in tlBMC.
// This is a submodule of the sensor collector module.
// SensorCollectorModule must be enabled for this module to be enabled.
message ThermalControlSubmodule {
// Enabling this module will have tlBMC own the following URLs:
// 1. /redfish/v1/Chassis/<str>/ThermalSubsystem and its Fans
// 2. /redfish/v1/Chassis/<str>/PowerSubsystem and its PowerSupplies
// 3. /redfish/v1/Managers/<str>
// 4. /redfish/v1/Managers/bmc/Actions/Manager.FanMode.Change POST
// 5. /redfish/v1/Managers/bmc/FanMode.Change.ActionInfo
// 6. /redfish/v1/Chassis/<str>/Sensors PATCH (Get is already enabled by the
// sensor collector module)
// It will delete links to the following URL from Redfish:
// - /redfish/v1/Chassis/<str>/Thermal
bool enabled = 1 [default = false];
}
// Controls the options for redfish sensor collection append mode.
// This is a submodule of the sensor collector module.
// SensorCollectorModule must be enabled for this module to be enabled.
message SensorCollectionAppendSubmodule {
// If true, tlbmc will append to the sensor collection returned by gBMCWeb.
// Otherwise, gbmcweb will own the sensor collection.
bool enabled = 1 [default = false];
// If true, each sensor will be appended to the sensor collection based on EM
// config. Otherwise, the entire collection will be appended.
bool per_sensor_append_mode = 2 [default = false];
}
// Controls the sensor collector module.
// Note, sensor collector module needs FRU collector module to be enabled.
message SensorCollectorModule {
bool enabled = 1 [default = false];
// If true, allow sensor creation failures to not end tlBMC store creation.
// This is useful for testing. This should not be enabled in production: if
// sensor creation fails, very likely the machine has real hardware issues.
bool allow_sensor_creation_failure = 2 [default = false];
// Please see the ThermalControlSubmodule message for details.
ThermalControlSubmodule thermal_control_sub_module = 3;
reserved 4; // Deprecated, use sensor_collection_append_sub_module instead.
// If true, sensor collector will create a new task to check threshold for
// sensors periodically, then publish SEL events if the threshold is crossed.
bool enable_threshold_monitoring = 5 [default = false];
// See the SensorCollectionAppendSubmodule message for details.
SensorCollectionAppendSubmodule sensor_collection_append_sub_module = 6;
// If true, tlbmc will own the sensor collection in redfish.
// Otherwise, gbmcweb will own the sensor collection if no config is
// specified.
bool own_sensor_collection_in_redfish = 7 [default = false];
// Targeted workaround for platforms where one physical device (e.g. an IBC
// PSU) must be configured under every board it could belong to because the
// board cannot be identified at config time. Only the config that matches
// the real hardware initializes successfully; when this flag is true, a
// sensor that failed creation is dropped at startup if a successfully
// created sensor with the same sensor key exists, so key-based lookups
// deterministically resolve to the working sensor. Sensors with unique
// keys are never dropped, regardless of status.
bool drop_failed_duplicate_sensors = 8 [default = false];
}
// Controls the softwate metrics collector module.
message MetricCollectorModule {
bool enabled = 1 [default = true];
// Controls the true hitless metrics collector module.
bool collect_true_hitless_metrics = 2 [default = true];
// Controls the PSI metrics collector module.
bool enable_psi_metrics = 3 [default = false];
// Controls the BIOS Key metrics collector module.
bool enable_bios_key_metrics = 4 [default = false];
}
// Controls the install module.
// If enabled, tlbmc will own UpdateService and TaskService.
// tlBMC will also expose a Redfihs multipart update API for firmware bundle
// update.
message InstallModule {
bool enabled = 1 [default = false];
}
// Controls the Random Early Detection (RED) for the rate limiter. RED
// drops requests randomly when bucket fullness is between red_min_threshold
// and red_max_threshold.
message RedfishRateLimiterRed {
bool enabled = 1 [default = false];
// The minimum bucket fullness threshold for RED. Below this level, no
// requests are dropped by RED.
double min_threshold = 2 [default = 50.0];
// The maximum bucket fullness threshold for RED. Above this level, all
// incoming requests are dropped with max_drop_prob.
double max_threshold = 3 [default = 150.0];
// The maximum drop probability when bucket level is between min and max
// thresholds. The actual drop probability scales linearly with bucket level
// in this range.
double max_drop_prob = 4 [default = 0.1];
}
// Controls the redfish rate limiter module.
message RedfishRateLimiterModule {
// Controls whether the rate limiter feature is available on the platform.
// If false, the rate limiter routes are not registered and the feature is
// effectively disabled at startup.
bool enabled = 1 [default = false];
// Controls whether the rate limiter is actively enforcing limits at runtime.
// This field is exposed via the Redfish API as 'Active'.
bool active = 6 [default = false];
// The rate at which the bucket leaks, in requests per second. This
// determines the average sustained rate of requests that can be processed.
double leak_rate_per_sec = 2 [default = 100.0];
// The capacity of the bucket, representing the maximum burst of requests
// that can be handled.
double bucket_capacity = 3 [default = 200.0];
// If red is enabled, tlbmc will use RED to drop requests randomly when bucket
// fullness is between red_min_threshold and red_max_threshold.
RedfishRateLimiterRed red = 4;
// A list of URIs that should bypass the rate limiter.
repeated string bypass_uri = 5;
}
// Controls the TrustBundleInstallModule. When enabled, tlbmc will own the
// CertificateService. And the recovery authorization policy will be changed to
// only allow access to CertificateService.
message TrustBundleInstallModule {
bool enabled = 1 [default = false];
}
enum PowerControlType {
POWER_CONTROL_TYPE_UNSPECIFIED = 0;
// Power control based on GPIO signals.
POWER_CONTROL_TYPE_GPIO = 1;
// Power control based on host state file.
POWER_CONTROL_TYPE_FILE_BASED = 2;
}
message PowerControlSubmodule {
bool enabled = 1 [default = false];
PowerControlType power_control_type = 2 [default = POWER_CONTROL_TYPE_GPIO];
}
// Controls the GPIO collector module.
message GpioCollectorModule {
bool enabled = 1 [default = false];
PowerControlSubmodule power_control_sub_module = 2;
}
// Controls the Power Fault Log collector module.
message PowerFaultLogCollectorModule {
bool enabled = 1 [default = false];
}
// Controls the SEL collector module.
message SelCollectorModule {
bool enabled = 1 [default = false];
}
// Controls the PCIe collector module.
// Note, PCIe collector module needs GPIO collector module to be
// enabled.
message PcieCollectorModule {
// If true, tlbmc will enable this module and take actions as per the other
// fields in this message. If false, tlbmc will not take any actions even if
// other fields are enabled.
bool enabled = 1 [default = false];
// If true, tlbmc will append to the PCIe slot collection returned by gBMCWeb.
// Otherwise, gbmcweb will own the PCIe slot collection.
bool enable_collection_append_mode = 2 [default = false];
}
// Controls the TPU debug module.
message TpuDebugModule {
bool enabled = 1 [default = false];
}
// Controls the LED collector module.
message LedCollectorModule {
bool enabled = 1 [default = false];
}
// A proto message to hold all configurations of the modules in tlbmc.
message TlbmcConfig {
string platform_name = 8;
FruCollectorModule fru_collector_module = 1;
SensorCollectorModule sensor_collector_module = 2;
InstallModule install_module = 3;
MetricCollectorModule metric_collector_module = 4;
RedfishRateLimiterModule redfish_rate_limiter_module = 5;
TrustBundleInstallModule trust_bundle_install_module = 6;
GpioCollectorModule gpio_collector_module = 7;
PowerFaultLogCollectorModule power_fault_log_collector_module = 9;
SelCollectorModule sel_collector_module = 10;
PcieCollectorModule pcie_collector_module = 11;
LedCollectorModule led_collector_module = 14;
// If true, this platform uses the TLBMC Lite configuration as a base.
bool use_tlbmc_lite_config = 12;
TpuDebugModule tpu_debug_module = 13;
}
message TlbmcConfigBundle {
TlbmcConfig general_config = 1;
// If a platform is specified in the map, the corresponding config will be
// used.
// Otherwise, the general config will be used.
// The key is the platform name, and the value is the config for the platform.
map<string, TlbmcConfig> platform_to_config = 2;
// The configuration for TLBMC Lite platforms.
TlbmcConfig tlbmc_lite_config = 3;
}