summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am4
-rw-r--r--host-ipmid/ipmid-api.h1
-rw-r--r--ipmid.cpp42
3 files changed, 32 insertions, 15 deletions
diff --git a/Makefile.am b/Makefile.am
index 1df5216..4daadcd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,8 +10,8 @@ BUILT_SOURCES = ipmiwhitelist.cpp sensor-gen.cpp
CLEANFILES = $(BUILT_SOURCES)
#TODO - Make this path a configure option (bitbake parameter)
-ipmid_CPPFLAGS = -DHOST_IPMI_LIB_PATH=\"/usr/lib/host-ipmid/\"
-ipmid_LDFLAGS = $(SYSTEMD_LIBS) $(libmapper_LIBS) $(LIBADD_DLOPEN) -export-dynamic
+ipmid_CPPFLAGS = -DHOST_IPMI_LIB_PATH=\"/usr/lib/host-ipmid/\" $(PHOSPHOR_LOGGING_CFLAGS)
+ipmid_LDFLAGS = $(SYSTEMD_LIBS) $(libmapper_LIBS) $(LIBADD_DLOPEN) $(PHOSPHOR_LOGGING_LIBS) -export-dynamic
# TODO: Rather than use -export-dynamic, we should use -export-symbol to have a
# selective list of symbols.
diff --git a/host-ipmid/ipmid-api.h b/host-ipmid/ipmid-api.h
index 67a1000..cc3be36 100644
--- a/host-ipmid/ipmid-api.h
+++ b/host-ipmid/ipmid-api.h
@@ -122,6 +122,7 @@ enum ipmi_return_codes
};
sd_bus *ipmid_get_sd_bus_connection(void);
+sd_event *ipmid_get_sd_event_connection(void);
sd_bus_slot *ipmid_get_sd_bus_slot(void);
#ifdef __cplusplus
diff --git a/ipmid.cpp b/ipmid.cpp
index 0c9db6f..1d5c8cf 100644
--- a/ipmid.cpp
+++ b/ipmid.cpp
@@ -8,6 +8,7 @@
#include <string.h>
#include <stdlib.h>
#include <map>
+#include <phosphor-logging/log.hpp>
#include "ipmid.hpp"
#include <sys/time.h>
#include <errno.h>
@@ -18,8 +19,11 @@
#include <iterator>
#include <ipmiwhitelist.hpp>
+using namespace phosphor::logging;
+
sd_bus *bus = NULL;
sd_bus_slot *ipmid_slot = NULL;
+sd_event *events = nullptr;
// Initialise restricted mode to true
bool restricted_mode = true;
@@ -471,6 +475,10 @@ sd_bus *ipmid_get_sd_bus_connection(void) {
return bus;
}
+sd_event *ipmid_get_sd_event_connection(void) {
+ return events;
+}
+
sd_bus_slot *ipmid_get_sd_bus_slot(void) {
return ipmid_slot;
}
@@ -516,6 +524,16 @@ int main(int argc, char *argv[])
goto finish;
}
+ /* Get an sd event handler */
+ r = sd_event_default(&events);
+ if (r < 0)
+ {
+ log<level::ERR>("Failure to create sd_event handler",
+ entry("ERROR=%s", strerror(-r)));
+ goto finish;
+ }
+
+
// Register all the handlers that provider implementation to IPMI commands.
ipmi_register_callback_handlers(HOST_IPMI_LIB_PATH);
@@ -533,28 +551,26 @@ int main(int argc, char *argv[])
goto finish;
}
- // Initialise restricted mode
+ // Attach the bus to sd_event to service user requests
+ sd_bus_attach_event(bus, events, SD_EVENT_PRIORITY_NORMAL);
+
+ // Initialize restricted mode
cache_restricted_mode();
for (;;) {
/* Process requests */
- r = sd_bus_process(bus, NULL);
- if (r < 0) {
- fprintf(stderr, "Failed to process bus: %s\n", strerror(-r));
- goto finish;
- }
- if (r > 0) {
- continue;
- }
-
- r = sd_bus_wait(bus, (uint64_t) - 1);
- if (r < 0) {
- fprintf(stderr, "Failed to wait on bus: %s\n", strerror(-r));
+ r = sd_event_run(events, (uint64_t)-1);
+ if (r < 0)
+ {
+ log<level::ERR>("Failure in processing request",
+ entry("ERROR=%s", strerror(-r)));
goto finish;
}
}
finish:
+ sd_event_unref(events);
+ sd_bus_detach_event(bus);
sd_bus_slot_unref(ipmid_slot);
sd_bus_unref(bus);
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
OpenPOWER on IntegriCloud