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