blob: 842f09889546ee5d60c48b44ea55e3d3a5da0f9a [file] [log] [blame]
Tom Josephc35524e2016-08-29 08:17:59 -05001#include "main.hpp"
2#include <assert.h>
3#include <dlfcn.h>
4#include <dirent.h>
5#include <unistd.h>
6
7#include <iostream>
8#include <tuple>
9
10#include <systemd/sd-bus.h>
11#include <systemd/sd-daemon.h>
12#include <systemd/sd-event.h>
13
14#include <host-ipmid/ipmid-api.h>
15#include "comm_module.hpp"
16#include "command_table.hpp"
17#include "message.hpp"
18#include "message_handler.hpp"
Tom485038e2016-12-02 13:44:45 +053019#include "provider_registration.hpp"
Tom Josephc35524e2016-08-29 08:17:59 -050020#include "socket_channel.hpp"
Tom Joseph89481cf2017-04-03 02:11:34 +053021#include "sol_module.hpp"
Tom Josephc35524e2016-08-29 08:17:59 -050022
23// Tuple of Global Singletons
24session::Manager manager;
25command::Table table;
Tom Joseph52f53d72017-03-14 15:20:19 +053026eventloop::EventLoop loop;
27sol::Manager solManager;
28
29std::tuple<session::Manager&, command::Table&, eventloop::EventLoop&,
30 sol::Manager&> singletonPool(manager, table, loop, solManager);
Tom Josephc35524e2016-08-29 08:17:59 -050031
32sd_bus* bus = nullptr;
Marri Devender Rao3ecf0a12017-07-13 08:07:22 -050033
Tom069f01e2016-12-02 14:11:37 +053034FILE* ipmidbus = nullptr;
35unsigned short g_sel_reserve = 0xFFFF;
36sd_bus_slot* ipmid_slot = nullptr;
Tom Josephc35524e2016-08-29 08:17:59 -050037
38/*
39 * @brief Required by apphandler IPMI Provider Library
40 */
41sd_bus* ipmid_get_sd_bus_connection()
42{
43 return bus;
44}
45
46/*
Tom069f01e2016-12-02 14:11:37 +053047 * @brief Required by apphandler IPMI Provider Library
48 */
49unsigned short get_sel_reserve_id()
50{
51 return g_sel_reserve;
52}
53
Tom Josephc35524e2016-08-29 08:17:59 -050054int main(int i_argc, char* i_argv[])
55{
Tom069f01e2016-12-02 14:11:37 +053056 /*
57 * Required by apphandler IPMI Provider Library for logging.
58 */
59 ipmidbus = fopen("/dev/null", "w");
60
Tom Josephc35524e2016-08-29 08:17:59 -050061 // Connect to system bus
62 auto rc = sd_bus_open_system(&bus);
63 if (rc < 0)
64 {
65 std::cerr << "Failed to connect to system bus:" << strerror(-rc) <<"\n";
66 goto finish;
67 }
68
Tom485038e2016-12-02 13:44:45 +053069 // Register all the IPMI provider libraries applicable for net-ipmid
70 provider::registerCallbackHandlers(NET_IPMID_LIB_PATH);
71
Tom Josephc35524e2016-08-29 08:17:59 -050072 // Register the phosphor-net-ipmid session setup commands
73 command::sessionSetupCommands();
74
Tom Joseph89481cf2017-04-03 02:11:34 +053075 // Register the phosphor-net-ipmid SOL commands
76 sol::command::registerCommands();
77
Tom Josephc35524e2016-08-29 08:17:59 -050078 // Start Event Loop
Tom Josephf9e45862017-04-03 02:12:59 +053079 return std::get<eventloop::EventLoop&>(singletonPool).startEventLoop();
Tom Josephc35524e2016-08-29 08:17:59 -050080
81finish:
82 sd_bus_unref(bus);
83
84 return 0;
85}