#include "estoraged.hpp" #include #include #include #include #include #include static void usage(std::string_view name) { std::cerr << "Usage: " << name << "eStorageD service on the BMC\n\n" " -b The phyical encrypted device\n" " If omitted, default is /dev/mmcblk0.\n" " -c The LUKS container name to be created\n" " If omitted, default is luks-"; } int main(int argc, char** argv) { std::string physicalBlockDev = "/dev/mmcblk0"; std::string containerBlockDev; int opt; while ((opt = getopt(argc, argv, "b:c:")) != -1) { switch (opt) { case 'b': physicalBlockDev = optarg; break; case 'c': containerBlockDev = optarg; break; default: usage(argv[0]); exit(EXIT_FAILURE); } } /* Get the filename of the device (without "/dev/"). */ auto deviceName = std::filesystem::path(physicalBlockDev).filename().string(); /* If containerName arg wasn't provided, create one based on deviceName. */ if (containerBlockDev.empty()) { containerBlockDev = "luks-" + deviceName; } /* DBus path location to place the object. */ std::string path = "/xyz/openbmc_project/storage/" + deviceName; /* * Create a new bus and affix an object manager for the subtree path we * intend to place objects at. */ auto b = sdbusplus::bus::new_default(); sdbusplus::server::manager_t m{b, path.c_str()}; /* Reserve the dbus service name. */ std::string busName = "xyz.openbmc_project.eStoraged." + deviceName; b.request_name(busName.c_str()); /* Create an eStoraged object. */ estoraged::eStoraged esObject{b, path.c_str(), physicalBlockDev, containerBlockDev}; std::string msg = "OpenBMC.1.0.ServiceStarted"; lg2::info("Storage management service is running", "REDFISH_MESSAGE_ID", msg); while (true) { b.wait(); b.process_discard(); } return 1; }