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