blob: 523419b16494afe36c775800577eb8e81609992d [file]
edition = "2023";
package milotic_tlbmc;
import "memory.proto";
import "processor.proto";
import "resource.proto";
message RawFruTable {
map<string, RawFru> key_to_raw_fru = 1;
}
message FanGroup {
repeated string fan_keys = 1;
}
message FruTable {
map<string, Fru> key_to_fru = 1;
map<string, FanGroup> pwm_sensor_to_fan_group = 2;
}
// Raw FRU information. It can be a present FRU or an expected FRU.
// For a present FRU, all fields will be populated.
// For an expected but missing FRU, `key`, `transport`, `present=false`,
// `expected_barepath`, `expected_part_number`, and `expected_serial_number`
// will be populated, while `data` will be empty. For a present but unexpected
// FRU, all fields will be populated.
message RawFru {
// Key in raw fru table.
string key = 1;
// Transport information.
oneof transport {
I2CAddress i2c_info = 2;
}
// FRU data.
FruData data = 3;
// The following fields will be used for deterministic FRU scanning.
// True if any FRU is present and the eeprom is processed successfully on the
// specified bus and address. Note that the FRU may be present but not valid
// (unexpected part).
bool present = 4;
// Expected barepath of the FRU.
string expected_barepath = 5;
// Expected part number of the FRU.
string expected_part_number = 6;
// Expected serial number of the FRU.
string expected_serial_number = 7;
// True if hardware was detected (via sysfs file or direct I2C ACK) but
// content parsing failed.
bool parsing_error = 8;
}
// FRU information.
message Fru {
// FRU attributes.
Attributes attributes = 1;
// Transport information.
oneof transport {
I2CAddress i2c_info = 2;
}
// FRU data.
FruData data = 3;
}
// I2C information.
message I2CAddress {
// I2C bus number.
uint64 bus = 1;
// I2C address.
uint64 address = 2;
}
message FruI2CInfo {
string board_manufacturer = 1;
string board_product_name = 2;
string board_serial_number = 3;
string board_part_number = 4;
string product_manufacturer = 5;
string product_product_name = 6;
string product_serial_number = 7;
string product_part_number = 8;
string product_version = 9;
string product_asset_tag = 10;
string mac_address = 11;
}
// The relevant asset information for the FRU. An asset information field can
// either be derived from FRU, or from the specified string value in config.
message AssetInfo {
string manufacturer = 1;
string product_name = 2;
string serial_number = 3;
string part_number = 4;
string version = 5;
string asset_tag = 6;
}
// Fans have special properties that need to be exposed.
message FanInfo {
string name = 1;
string model = 2;
bool is_hotpluggable = 3;
string pwm_sensor_name = 4;
string tach_sensor_name = 5;
}
message ManagerInfo {
string name = 1;
string manager_in_chassis = 2;
repeated string manager_for_servers = 3;
string manager_for_chassis = 4;
}
message PowerSupplyInfo {
string input_sensor_name = 1;
}
// FRU data.
message FruData {
map<string, string> fields = 1;
FruI2CInfo fru_info = 2;
AssetInfo asset_info = 3;
// There are many different types of FRUs, so we need the relevant data for
// each type of FRU.
// These are optional and only specified if the FRU is a specific type.
oneof subtype {
FanInfo fan_info = 4;
PowerSupplyInfo power_supply_info = 5;
ManagerInfo manager_info = 6;
Processor processor_info = 7;
Memory memory_info = 8;
}
}