summaryrefslogtreecommitdiffstats
path: root/transporthandler.cpp
diff options
context:
space:
mode:
authorSergey Solomin <sergey.solomin@us.ibm.com>2016-08-23 09:07:28 -0500
committerSergey Solomin <sergey.solomin@us.ibm.com>2016-08-25 13:37:57 -0500
commiteb9b814403895d6435e04f02a9ff6c2b1b02cf54 (patch)
tree4a1713845844f874799a1b188db209adeaa3e085 /transporthandler.cpp
parentbc40c178bb0b345ed1edf553b94369330003af34 (diff)
downloadphosphor-host-ipmid-eb9b814403895d6435e04f02a9ff6c2b1b02cf54.tar.gz
phosphor-host-ipmid-eb9b814403895d6435e04f02a9ff6c2b1b02cf54.zip
Hard-coded service name replaced with call to ObjectMapper
In the openbmc code, the dbus service name is hardcoded. The ObjectMapper provides a way to find out the service name by issuing a GetObject method call to the ObjectMapper. That functionality is implemented in mapper.c The output of the call to the mapper is a service name. Resolves openbmc/openbmc#319. Change-Id: I724a31ede6bdf3ae4b361e730857b1f2696a8966 Signed-off-by: Sergey Solomin <sergey.solomin@us.ibm.com>
Diffstat (limited to 'transporthandler.cpp')
-rw-r--r--transporthandler.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/transporthandler.cpp b/transporthandler.cpp
index 3b4cf07..5bb5355 100644
--- a/transporthandler.cpp
+++ b/transporthandler.cpp
@@ -12,10 +12,10 @@
#ifdef SYSTEMD_NETWORKD_DBUS
#include <systemd/sd-bus.h>
+#include <mapper.h>
#endif
// OpenBMC System Manager dbus framework
-const char *app = "org.openbmc.NetworkManager";
const char *obj = "/org/openbmc/NetworkManager/Interface";
const char *ifc = "org.openbmc.NetworkManager";
@@ -53,7 +53,13 @@ ipmi_ret_t getNetworkData(uint8_t lan_param, uint8_t * data)
char* gateway = NULL;
int r = 0;
ipmi_ret_t rc = IPMI_CC_OK;
+ char *app = NULL;
+ r = mapper_get_service(bus, obj, &app);
+ if (r < 0) {
+ fprintf(stderr, "Failed to get bus name, return value: %s.\n", strerror(-r));
+ goto cleanup;
+ }
r = sd_bus_call_method(bus, app, obj, ifc, "GetAddress4", &error,
&reply, "s", nwinterface);
if(r < 0)
@@ -118,6 +124,7 @@ ipmi_ret_t getNetworkData(uint8_t lan_param, uint8_t * data)
cleanup:
sd_bus_error_free(&error);
reply = sd_bus_message_unref(reply);
+ free(app);
return rc;
}
@@ -149,6 +156,7 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
sd_bus_message *reply = NULL;
sd_bus_error error = SD_BUS_ERROR_NULL;
int r = 0;
+ char *app = NULL;
printf("IPMI SET_LAN\n");
@@ -175,6 +183,11 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
reqptr->data[4],
reqptr->data[5]);
+ r = mapper_get_service(bus, obj, &app);
+ if (r < 0) {
+ fprintf(stderr, "Failed to get bus name, return value: %s.\n", strerror(-r));
+ goto finish;
+ }
r = sd_bus_call_method(bus, app, obj, ifc, "SetHwAddress", &error,
&reply, "ss", nwinterface, mac);
if(r < 0)
@@ -239,8 +252,10 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
rc = IPMI_CC_PARM_NOT_SUPPORTED;
}
+finish:
sd_bus_error_free(&error);
reply = sd_bus_message_unref(reply);
+ free(app);
return rc;
}
@@ -264,6 +279,7 @@ ipmi_ret_t ipmi_transport_get_lan(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
int r = 0;
const uint8_t current_revision = 0x11; // Current rev per IPMI Spec 2.0
int i = 0;
+ char *app = NULL;
printf("IPMI GET_LAN\n");
@@ -321,6 +337,11 @@ ipmi_ret_t ipmi_transport_get_lan(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
uint8_t buf[7];
char *eaddr1 = NULL;
+ r = mapper_get_service(bus, obj, &app);
+ if (r < 0) {
+ fprintf(stderr, "Failed to get bus name, return value: %s.\n", strerror(-r));
+ goto cleanup;
+ }
r = sd_bus_call_method(bus, app, obj, ifc, "GetHwAddress", &error,
&reply, "s", nwinterface);
if(r < 0)
@@ -376,6 +397,7 @@ ipmi_ret_t ipmi_transport_get_lan(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
cleanup:
sd_bus_error_free(&error);
reply = sd_bus_message_unref(reply);
+ free(app);
return rc;
}
OpenPOWER on IntegriCloud