diff options
author | Brad Bishop <bradleyb@us.ibm.com> | 2016-07-25 17:09:12 -0400 |
---|---|---|
committer | Brad Bishop <bradleyb@us.ibm.com> | 2016-07-27 15:23:16 -0400 |
commit | de6a37983420f5067327b46bbfbefa3601c449aa (patch) | |
tree | b175407af000182ea0c20e3251c5051379eb7e76 | |
parent | a26ed7375261ebcfffa68cf478bcb8f2204c6c92 (diff) | |
download | ipmi-fru-parser-de6a37983420f5067327b46bbfbefa3601c449aa.tar.gz ipmi-fru-parser-de6a37983420f5067327b46bbfbefa3601c449aa.zip |
Use mapper binding for busname queries
Prefer mapper queries to hardcoded busnames.
React to /org/openbmc/managers/system GetObjectById
API change.
Change-Id: I651b820622c3bff51c05365b811b41e73fde997c
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | writefrudata.C | 42 |
2 files changed, 40 insertions, 8 deletions
@@ -8,8 +8,10 @@ libstrgfnhandler.so_VERSION = 1 EXES += phosphor-read-eeprom phosphor-read-eeprom_OBJS += readeeprom.o argument.o +phosphor-read-eeprom_LDLIBS += mapper phosphor-read-eeprom_EXTRA_LIBS += writefrudata libstrgfnhandler.so_EXTRA_LIBS += writefrudata +libwritefrudata.so_LDLIBS += mapper libwritefrudata.so_NEEDED += libsystemd phosphor-read-eeprom_NEEDED += libsystemd @@ -29,7 +31,7 @@ __EXTRA_LIB_RESOLV = $(if $1,$1) define __BUILD_EXE $1 : $$($1_OBJS) | $$(LIBS) $$(HOST_LIBS) - $$(LINK.cpp) -o $$@ $$^ $(call __EXTRA_LIB_RESOLV,$(addprefix -l,$($1_EXTRA_LIBS))) -L. $(call __PKG_CONFIG,$($1_NEEDED),--libs) + $$(LINK.cpp) -o $$@ $$^ $(call __EXTRA_LIB_RESOLV,$(addprefix -l,$($1_EXTRA_LIBS))) -L. $(addprefix -l,$($1_LDLIBS)) $(call __PKG_CONFIG,$($1_NEEDED),--libs) $(eval CXXFLAGS += $(call __PKG_CONFIG,$($1_NEEDED),--cflags)) @@ -40,7 +42,7 @@ $(foreach exe,$(EXES),$(eval $(call __BUILD_EXE,$(exe)))) define __BUILD_LIB $1 : $$($1_OBJS) | $$(addsuffix .so,$$(addprefix lib,$$($1_EXTRA_LIBS))) - $$(LINK.cpp) -fPIC -shared -Wl,-soname,$$@ -o $$(addsuffix .$($1_VERSION), $$@) $$^ $(call __EXTRA_LIB_RESOLV,$(addprefix -l,$($1_EXTRA_LIBS))) -L. $(call __PKG_CONFIG,$($1_NEEDED),--libs) + $$(LINK.cpp) -fPIC -shared -Wl,-soname,$$@ -o $$(addsuffix .$($1_VERSION), $$@) $$^ $(call __EXTRA_LIB_RESOLV,$(addprefix -l,$($1_EXTRA_LIBS))) -L. $(addprefix -l,$($1_LDLIBS)) $(call __PKG_CONFIG,$($1_NEEDED),--libs) ln -sf $$(addsuffix .$($1_VERSION), $$@) $1 $(eval CXXFLAGS += $(call __PKG_CONFIG,$($1_NEEDED),--cflags)) diff --git a/writefrudata.C b/writefrudata.C index 6791148..ee94d79 100644 --- a/writefrudata.C +++ b/writefrudata.C @@ -11,11 +11,11 @@ #include <algorithm> #include <fstream> #include <sstream> +#include <mapper.h> #include "frup.h" #include "fru-area.H" // OpenBMC System Manager dbus framework -const char *sys_bus_name = "org.openbmc.managers.System"; const char *sys_object_name = "/org/openbmc/managers/System"; const char *sys_intf_name = "org.openbmc.managers.System"; @@ -171,14 +171,23 @@ int ipmi_fru::setup_sd_bus_paths(void) int rc = 0; // What we need is BOARD_1, PRODUCT_1, CHASSIS_1 etc.. - char *inv_bus_name, *inv_obj_path, *inv_intf_name; + char *inv_bus_name = NULL, *inv_obj_path, *inv_intf_name; char fru_area_name[16] = {0}; + char *sys_bus_name = NULL; sprintf(fru_area_name,"%s%d",iv_name.c_str(), iv_fruid); #ifdef __IPMI_DEBUG__ printf("Getting sd_bus for :[%s]\n",fru_area_name); #endif + rc = mapper_get_service(iv_bus_type, sys_object_name, &sys_bus_name); + if(rc < 0) + { + fprintf(stderr, "Failed to get system manager service:[%s]\n", + strerror(-rc)); + goto exit; + } + // We want to call a method "getObjectFromId" on System Bus that is // made available over OpenBmc system services. @@ -198,26 +207,35 @@ int ipmi_fru::setup_sd_bus_paths(void) } else { - // Method getObjectFromId returns 3 parameters and all are strings, namely - // bus_name , object_path and interface name for accessing that particular - // FRU over Inventory SDBUS manager. 'sss' here mentions that format. - rc = sd_bus_message_read(response, "(sss)", &inv_bus_name, &inv_obj_path, &inv_intf_name); + // Method getObjectFromId returns 2 parameters and all are strings, namely + // object_path and interface name for accessing that particular + // FRU over Inventory SDBUS manager. 'ss' here mentions that format. + rc = sd_bus_message_read(response, "(ss)", &inv_obj_path, &inv_intf_name); if(rc < 0) { fprintf(stderr, "Failed to parse response message:[%s]\n", strerror(-rc)); } else { + rc = mapper_get_service(iv_bus_type, inv_obj_path, &inv_bus_name); + if(rc < 0) + { + fprintf(stderr, "Failed to get inventory item service:[%s]\n", + strerror(-rc)); + goto exit; + } // Update the paths in the area object update_dbus_paths(inv_bus_name, inv_obj_path, inv_intf_name); } } +exit: #ifdef __IPMI_DEBUG__ printf("fru_area=[%s], inv_bus_name=[%s], inv_obj_path=[%s], inv_intf_name=[%s]\n", fru_area_name, inv_bus_name, inv_obj_path, inv_intf_name); #endif + free(sys_bus_name); sd_bus_error_free(&bus_error); sd_bus_message_unref(response); @@ -578,11 +596,20 @@ int get_defined_fru_area(sd_bus *bus_type, const uint8_t fruid, sd_bus_message *response = NULL; int rc = 0; char *areas = NULL; + char *sys_bus_name = NULL; #ifdef __IPMI_DEBUG__ printf("Getting fru areas defined in Skeleton for :[%d]\n", fruid); #endif + rc = mapper_get_service(bus_type, sys_object_name, &sys_bus_name); + if(rc < 0) + { + fprintf(stderr, "Failed to get system manager service:[%s]\n", + strerror(-rc)); + goto exit; + } + // We want to call a method "getFRUArea" on System Bus that is // made available over OpenBmc system services. rc = sd_bus_call_method(bus_type, // On the System Bus @@ -626,6 +653,9 @@ int get_defined_fru_area(sd_bus *bus_type, const uint8_t fruid, } } +exit: + + free(sys_bus_name); sd_bus_error_free(&bus_error); sd_bus_message_unref(response); |