summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@us.ibm.com>2016-07-25 17:09:12 -0400
committerBrad Bishop <bradleyb@us.ibm.com>2016-07-27 15:23:16 -0400
commitde6a37983420f5067327b46bbfbefa3601c449aa (patch)
treeb175407af000182ea0c20e3251c5051379eb7e76
parenta26ed7375261ebcfffa68cf478bcb8f2204c6c92 (diff)
downloadipmi-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--Makefile6
-rw-r--r--writefrudata.C42
2 files changed, 40 insertions, 8 deletions
diff --git a/Makefile b/Makefile
index 937b393..23db1f5 100644
--- a/Makefile
+++ b/Makefile
@@ -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);
OpenPOWER on IntegriCloud