blob: ef4a3496c233a1d6b1aa237e46d7855afcb6bbd1 [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>
Tom Joseph83029cb2017-09-01 16:37:31 +053015#include "command/guid.hpp"
Tom Josephc35524e2016-08-29 08:17:59 -050016#include "comm_module.hpp"
17#include "command_table.hpp"
18#include "message.hpp"
19#include "message_handler.hpp"
Tom485038e2016-12-02 13:44:45 +053020#include "provider_registration.hpp"
Tom Josephc35524e2016-08-29 08:17:59 -050021#include "socket_channel.hpp"
Tom Joseph89481cf2017-04-03 02:11:34 +053022#include "sol_module.hpp"
Tom Josephc35524e2016-08-29 08:17:59 -050023
24// Tuple of Global Singletons
25session::Manager manager;
26command::Table table;
Tom Joseph52f53d72017-03-14 15:20:19 +053027eventloop::EventLoop loop;
28sol::Manager solManager;
29
30std::tuple<session::Manager&, command::Table&, eventloop::EventLoop&,
31 sol::Manager&> singletonPool(manager, table, loop, solManager);
Tom Josephc35524e2016-08-29 08:17:59 -050032
33sd_bus* bus = nullptr;
Marri Devender Rao3ecf0a12017-07-13 08:07:22 -050034
Tom069f01e2016-12-02 14:11:37 +053035FILE* ipmidbus = nullptr;
36unsigned short g_sel_reserve = 0xFFFF;
37sd_bus_slot* ipmid_slot = nullptr;
Tom Josephc35524e2016-08-29 08:17:59 -050038
39/*
40 * @brief Required by apphandler IPMI Provider Library
41 */
42sd_bus* ipmid_get_sd_bus_connection()
43{
44 return bus;
45}
46
47/*
Tom069f01e2016-12-02 14:11:37 +053048 * @brief Required by apphandler IPMI Provider Library
49 */
50unsigned short get_sel_reserve_id()
51{
52 return g_sel_reserve;
53}
54
Tom Josephc35524e2016-08-29 08:17:59 -050055int main(int i_argc, char* i_argv[])
56{
Tom069f01e2016-12-02 14:11:37 +053057 /*
58 * Required by apphandler IPMI Provider Library for logging.
59 */
60 ipmidbus = fopen("/dev/null", "w");
61
Tom Josephc35524e2016-08-29 08:17:59 -050062 // Connect to system bus
63 auto rc = sd_bus_open_system(&bus);
64 if (rc < 0)
65 {
66 std::cerr << "Failed to connect to system bus:" << strerror(-rc) <<"\n";
67 goto finish;
68 }
69
Tom Joseph83029cb2017-09-01 16:37:31 +053070 // Register callback to update cache for a GUID change and cache the GUID
71 command::registerGUIDChangeCallback();
72 cache::guid = command::getSystemGUID();
73
74
Tom485038e2016-12-02 13:44:45 +053075 // Register all the IPMI provider libraries applicable for net-ipmid
76 provider::registerCallbackHandlers(NET_IPMID_LIB_PATH);
77
Tom Josephc35524e2016-08-29 08:17:59 -050078 // Register the phosphor-net-ipmid session setup commands
79 command::sessionSetupCommands();
80
Tom Joseph89481cf2017-04-03 02:11:34 +053081 // Register the phosphor-net-ipmid SOL commands
82 sol::command::registerCommands();
83
Tom Josephc35524e2016-08-29 08:17:59 -050084 // Start Event Loop
Tom Josephf9e45862017-04-03 02:12:59 +053085 return std::get<eventloop::EventLoop&>(singletonPool).startEventLoop();
Tom Josephc35524e2016-08-29 08:17:59 -050086
87finish:
88 sd_bus_unref(bus);
89
90 return 0;
91}