136529022SAndrew Geissler #include "config.h"
2e426b589SAndrew Geissler 
336529022SAndrew Geissler #include "host_state_manager.hpp"
436529022SAndrew Geissler 
5*79b45003SAllen.Wang #include <getopt.h>
6*79b45003SAllen.Wang 
7e426b589SAndrew Geissler #include <sdbusplus/bus.hpp>
8e426b589SAndrew Geissler 
9e426b589SAndrew Geissler #include <cstdlib>
10e426b589SAndrew Geissler #include <exception>
11e426b589SAndrew Geissler #include <experimental/filesystem>
12e426b589SAndrew Geissler #include <iostream>
13e426b589SAndrew Geissler 
14*79b45003SAllen.Wang int main(int argc, char** argv)
1536529022SAndrew Geissler {
16*79b45003SAllen.Wang     size_t hostId = 0;
17*79b45003SAllen.Wang 
18*79b45003SAllen.Wang     int arg;
19*79b45003SAllen.Wang     int optIndex = 0;
20*79b45003SAllen.Wang 
21*79b45003SAllen.Wang     static struct option longOpts[] = {{"host", required_argument, 0, 'h'},
22*79b45003SAllen.Wang                                        {0, 0, 0, 0}};
23*79b45003SAllen.Wang 
24*79b45003SAllen.Wang     while ((arg = getopt_long(argc, argv, "h:", longOpts, &optIndex)) != -1)
25*79b45003SAllen.Wang     {
26*79b45003SAllen.Wang         switch (arg)
27*79b45003SAllen.Wang         {
28*79b45003SAllen.Wang             case 'h':
29*79b45003SAllen.Wang                 hostId = std::stoul(optarg);
30*79b45003SAllen.Wang                 break;
31*79b45003SAllen.Wang             default:
32*79b45003SAllen.Wang                 break;
33*79b45003SAllen.Wang         }
34*79b45003SAllen.Wang     }
35*79b45003SAllen.Wang 
363f475242SDhruvaraj Subhashchandran     namespace fs = std::experimental::filesystem;
373f475242SDhruvaraj Subhashchandran 
3836529022SAndrew Geissler     auto bus = sdbusplus::bus::new_default();
3936529022SAndrew Geissler 
40*79b45003SAllen.Wang     auto hostBusName = std::string{HOST_BUSNAME} + std::to_string(hostId);
41*79b45003SAllen.Wang     auto objPathInst = std::string{HOST_OBJPATH} + std::to_string(hostId);
421cb8b707SAndrew Geissler 
4336529022SAndrew Geissler     // Add sdbusplus ObjectManager.
441cb8b707SAndrew Geissler     sdbusplus::server::manager::manager objManager(bus, objPathInst.c_str());
4536529022SAndrew Geissler 
46*79b45003SAllen.Wang     phosphor::state::manager::Host manager(bus, objPathInst.c_str(), hostId);
47a90a31a9SAndrew Geissler 
483f475242SDhruvaraj Subhashchandran     auto dir = fs::path(HOST_STATE_PERSIST_PATH).parent_path();
493f475242SDhruvaraj Subhashchandran     fs::create_directories(dir);
503f475242SDhruvaraj Subhashchandran 
51*79b45003SAllen.Wang     // For backwards compatibility, request a busname without host id if
52*79b45003SAllen.Wang     // input id is 0.
53*79b45003SAllen.Wang     if (hostId == 0)
54*79b45003SAllen.Wang     {
55a90a31a9SAndrew Geissler         bus.request_name(HOST_BUSNAME);
56*79b45003SAllen.Wang     }
57*79b45003SAllen.Wang 
58*79b45003SAllen.Wang     bus.request_name(hostBusName.c_str());
5936529022SAndrew Geissler 
6036529022SAndrew Geissler     while (true)
6136529022SAndrew Geissler     {
6236529022SAndrew Geissler         bus.process_discard();
6336529022SAndrew Geissler         bus.wait();
6436529022SAndrew Geissler     }
6536529022SAndrew Geissler     return 0;
6636529022SAndrew Geissler }
67