| 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; |
| } |
| } |