diff options
author | Ratan Gupta <ratagupt@in.ibm.com> | 2018-02-04 23:24:44 +0530 |
---|---|---|
committer | Ratan Gupta <ratagupt@in.ibm.com> | 2018-02-04 23:29:19 +0530 |
commit | c19c054c01b7a42c24cdf38a270b33f56290abf3 (patch) | |
tree | facd1c74c94462dac182ba1552a17c5ac13c741c | |
parent | 9606ba3efe9d61458ad2ede6f0639856d580ef7e (diff) | |
download | ipmi-fru-parser-c19c054c01b7a42c24cdf38a270b33f56290abf3.tar.gz ipmi-fru-parser-c19c054c01b7a42c24cdf38a270b33f56290abf3.zip |
Inventory:- Make changes in the mako and the C++ structure
This change lies in the Write Fru Data command processing.
As fru yaml would be having extra properties like
entityID,entityInstance,So changes were needed to make the change
in the corresponding c++ structure.
Change-Id: If23bb12563cdef34438746e2d6a8be7f54b7486d
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
-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) { |