diff options
-rw-r--r-- | frup.hpp | 17 | ||||
-rw-r--r-- | scripts/example.yaml | 221 | ||||
-rw-r--r-- | scripts/writefru.mako.cpp | 13 | ||||
-rw-r--r-- | writefrudata.cpp | 6 |
4 files changed, 143 insertions, 114 deletions
@@ -84,16 +84,25 @@ struct IPMIFruData }; using DbusProperty = std::string; -using DbusPropertyVec = std::vector<std::pair<DbusProperty,IPMIFruData>>; +using DbusPropertyVec = std::vector<std::pair<DbusProperty, IPMIFruData>>; using DbusInterface = std::string; -using DbusInterfaceVec = std::vector<std::pair<DbusInterface,DbusPropertyVec>>; +using DbusInterfaceVec = std::vector<std::pair<DbusInterface, DbusPropertyVec>>; using FruInstancePath = std::string; -using FruInstanceVec = std::vector<std::pair<FruInstancePath,DbusInterfaceVec>>; + +struct FruInstance +{ + uint8_t entityID; + uint8_t entityInstance; + FruInstancePath path; + DbusInterfaceVec interfaces; +}; + +using FruInstanceVec = std::vector<FruInstance>; using FruId = uint32_t; -using FruMap = std::map<FruId,FruInstanceVec>; +using FruMap = std::map<FruId, FruInstanceVec>; /* Parse an IPMI write fru data message into a dictionary containing name value pair of VPD entries.*/ int parse_fru (const void* msgbuf, sd_bus_message* vpdtbl); diff --git a/scripts/example.yaml b/scripts/example.yaml index 69d7ebd..d257d42 100644 --- a/scripts/example.yaml +++ b/scripts/example.yaml @@ -7,118 +7,133 @@ # Format of the YAML: # Fruid: # Associated Fru paths -# d-bus Interafaces +# d-bus Interfaces # d-bus Properties # IPMI Fru mapping 0: /system: - xyz.openbmc_project.Inventory.Item: - PrettyName: - IPMIFruProperty: Product Name - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Decorator.Asset: - Manufacturer: - IPMIFruProperty: Manufacturer - IPMIFruSection: Product - PartNumber: - IPMIFruProperty: Part Number - IPMIFruSection: Product - SerialNumber: - IPMIFruProperty: Serial Number - IPMIFruSection: Product - BuildDate: - IPMIFruProperty: Mfg Date - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Revision: - Version: - IPMIFruProperty: Version - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Item.System: + entityID: 200 + entityInstance: 1 + interfaces: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Decorator.Asset: + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Product + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Product + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Product + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Decorator.Revision: + Version: + IPMIFruProperty: Version + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Item.System: 1: /system/chassis/motherboard/dimm0: - xyz.openbmc_project.Inventory.Item: - PrettyName: - IPMIFruProperty: Product Name - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Decorator.Asset: - Manufacturer: - IPMIFruProperty: Manufacturer - IPMIFruSection: Product - BuildDate: - IPMIFruProperty: Mfg Date - IPMIFruSection: Product - SerialNumber: - IPMIFruProperty: Serial Number - IPMIFruSection: Product - PartNumber: - IPMIFruProperty: Part Number - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Revision: - Version: - IPMIFruProperty: Version - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Item.Dimm: + entityID: 8 + entityInstance: 1 + interfaces: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Decorator.Asset: + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Product + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Product + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Product + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Decorator.Revision: + Version: + IPMIFruProperty: Version + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Item.Dimm: 2: /system/chassis/motherboard/dimm1: - xyz.openbmc_project.Inventory.Item: - PrettyName: - IPMIFruProperty: Product Name - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Decorator.Asset: - Manufacturer: - IPMIFruProperty: Manufacturer - IPMIFruSection: Product - BuildDate: - IPMIFruProperty: Mfg Date - IPMIFruSection: Product - SerialNumber: - IPMIFruProperty: Serial Number - IPMIFruSection: Product - PartNumber: - IPMIFruProperty: Part Number - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Revision: - Version: - IPMIFruProperty: Version - IPMIFruSection: Product - xyz.openbmc_project.Inventory.Item.Dimm: + entityID: 8 + entityInstance: 2 + interfaces: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Decorator.Asset: + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Product + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Product + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Product + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Decorator.Revision: + Version: + IPMIFruProperty: Version + IPMIFruSection: Product + xyz.openbmc_project.Inventory.Item.Dimm: 3: /system/chassis/motherboard/cpu0: - xyz.openbmc_project.Inventory.Item: - PrettyName: - IPMIFruProperty: Product Name - IPMIFruSection: Board - xyz.openbmc_project.Inventory.Decorator.Asset: - BuildDate: - IPMIFruProperty: Mfg Date - IPMIFruSection: Board - SerialNumber: - IPMIFruProperty: Serial Number - IPMIFruSection: Board - PartNumber: - IPMIFruProperty: Part Number - IPMIFruSection: Board - Manufacturer: - IPMIFruProperty: Manufacturer - IPMIFruSection: Board - xyz.openbmc_project.Inventory.Item.Cpu: + entityID: 3 + entityInstance: 1 + interfaces: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Decorator.Asset: + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Board + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Board + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Board + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Item.Cpu: 4: /system/chassis/motherboard/cpu1: - xyz.openbmc_project.Inventory.Item: - PrettyName: - IPMIFruProperty: Product Name - IPMIFruSection: Board - xyz.openbmc_project.Inventory.Decorator.Asset: - BuildDate: - IPMIFruProperty: Mfg Date - IPMIFruSection: Board - SerialNumber: - IPMIFruProperty: Serial Number - IPMIFruSection: Board - PartNumber: - IPMIFruProperty: Part Number - IPMIFruSection: Board - Manufacturer: - IPMIFruProperty: Manufacturer - IPMIFruSection: Board - xyz.openbmc_project.Inventory.Item.Cpu: + entityID: 3 + entityInstance: 2 + interfaces: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Decorator.Asset: + BuildDate: + IPMIFruProperty: Mfg Date + IPMIFruSection: Board + SerialNumber: + IPMIFruProperty: Serial Number + IPMIFruSection: Board + PartNumber: + IPMIFruProperty: Part Number + IPMIFruSection: Board + Manufacturer: + IPMIFruProperty: Manufacturer + IPMIFruSection: Board + xyz.openbmc_project.Inventory.Item.Cpu: diff --git a/scripts/writefru.mako.cpp b/scripts/writefru.mako.cpp index 0a0a14f..a3de4b5 100644 --- a/scripts/writefru.mako.cpp +++ b/scripts/writefru.mako.cpp @@ -6,17 +6,22 @@ extern const FruMap frus = { % for key in fruDict.keys(): {${key},{ <% - fru = fruDict[key] + instanceList = fruDict[key] %> - % for object,interfaces in fru.items(): - {"${object}",{ + % for instancePath,instanceInfo in instanceList.items(): +<% + entityID = instanceInfo["entityID"] + entityInstance = instanceInfo["entityInstance"] + interfaces = instanceInfo["interfaces"] +%> + {${entityID}, ${entityInstance}, "${instancePath}",{ % for interface,properties in interfaces.items(): {"${interface}",{ % if properties: % for dbus_property,property_value in properties.items(): {"${dbus_property}",{ "${property_value.get("IPMIFruSection", "")}", - "${property_value.get("IPMIFruProperty", "")}", \ + "${property_value.get("IPMIFruProperty", "")}",\ <% delimiter = property_value.get("IPMIFruValueDelimiter") if not delimiter: diff --git a/writefrudata.cpp b/writefrudata.cpp index 97282ea..6e1fbec 100644 --- a/writefrudata.cpp +++ b/writefrudata.cpp @@ -353,9 +353,9 @@ int ipmi_update_inventory(fru_area_vec_t& area_vec, sd_bus* bus_sd) for (auto& instance : instanceList) { InterfaceMap interfaces; - const auto& extrasIter = extras.find(instance.first); + const auto& extrasIter = extras.find(instance.path); - for (auto& interfaceList : instance.second) + for (auto& interfaceList : instance.interfaces) { PropertyMap props;//store all the properties for (auto& properties : interfaceList.second) @@ -388,7 +388,7 @@ int ipmi_update_inventory(fru_area_vec_t& area_vec, sd_bus* bus_sd) } // Call the inventory manager - sdbusplus::message::object_path path = instance.first; + sdbusplus::message::object_path path = instance.path; // Check and update extra properties if(extras.end() != extrasIter) { |