diff options
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | host-ipmid/ipmid-api.h | 1 | ||||
-rw-r--r-- | ipmid.cpp | 42 |
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 @@ -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; |