136529022SAndrew Geissler #include "config.h"
2e426b589SAndrew Geissler 
336529022SAndrew Geissler #include "host_state_manager.hpp"
436529022SAndrew Geissler 
579b45003SAllen.Wang #include <getopt.h>
679b45003SAllen.Wang 
7e426b589SAndrew Geissler #include <sdbusplus/bus.hpp>
8e426b589SAndrew Geissler 
9e426b589SAndrew Geissler #include <cstdlib>
10e426b589SAndrew Geissler #include <exception>
11*6ed41eabSPatrick Williams #include <filesystem>
12e426b589SAndrew Geissler #include <iostream>
13e426b589SAndrew Geissler 
1479b45003SAllen.Wang int main(int argc, char** argv)
1536529022SAndrew Geissler {
1679b45003SAllen.Wang     size_t hostId = 0;
1779b45003SAllen.Wang 
1879b45003SAllen.Wang     int arg;
1979b45003SAllen.Wang     int optIndex = 0;
2079b45003SAllen.Wang 
2179b45003SAllen.Wang     static struct option longOpts[] = {{"host", required_argument, 0, 'h'},
2279b45003SAllen.Wang                                        {0, 0, 0, 0}};
2379b45003SAllen.Wang 
2479b45003SAllen.Wang     while ((arg = getopt_long(argc, argv, "h:", longOpts, &optIndex)) != -1)
2579b45003SAllen.Wang     {
2679b45003SAllen.Wang         switch (arg)
2779b45003SAllen.Wang         {
2879b45003SAllen.Wang             case 'h':
2979b45003SAllen.Wang                 hostId = std::stoul(optarg);
3079b45003SAllen.Wang                 break;
3179b45003SAllen.Wang             default:
3279b45003SAllen.Wang                 break;
3379b45003SAllen.Wang         }
3479b45003SAllen.Wang     }
3579b45003SAllen.Wang 
36*6ed41eabSPatrick Williams     namespace fs = std::filesystem;
373f475242SDhruvaraj Subhashchandran 
3836529022SAndrew Geissler     auto bus = sdbusplus::bus::new_default();
3936529022SAndrew Geissler 
4079b45003SAllen.Wang     auto hostBusName = std::string{HOST_BUSNAME} + std::to_string(hostId);
4179b45003SAllen.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 
4679b45003SAllen.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 
5179b45003SAllen.Wang     // For backwards compatibility, request a busname without host id if
5279b45003SAllen.Wang     // input id is 0.
5379b45003SAllen.Wang     if (hostId == 0)
5479b45003SAllen.Wang     {
55a90a31a9SAndrew Geissler         bus.request_name(HOST_BUSNAME);
5679b45003SAllen.Wang     }
5779b45003SAllen.Wang 
5879b45003SAllen.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