diff options
author | Tom Joseph <tomjoseph@in.ibm.com> | 2017-03-14 18:04:22 +0530 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2017-04-24 11:22:15 -0500 |
commit | 22c5ad34cd1be9e77f25a71c4fc88e2627117c8c (patch) | |
tree | 617dc903aaf6f96a4b44dfd5079f216d473c46e5 | |
parent | a891eb7e5778cf45c332f1bc490f3f45ad64b203 (diff) | |
download | phosphor-net-ipmid-22c5ad34cd1be9e77f25a71c4fc88e2627117c8c.tar.gz phosphor-net-ipmid-22c5ad34cd1be9e77f25a71c4fc88e2627117c8c.zip |
Implement Host Console socket Init
This API would initialise the host console socket file descriptor
Change-Id: Ied7bdc1c4fbee060ec693d8bab3c7bade6edf365
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
-rw-r--r-- | Makefile.am | 3 | ||||
-rw-r--r-- | sol/sol_manager.cpp | 44 |
2 files changed, 46 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index d1a1bd8..6843a7e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -44,7 +44,8 @@ netipmid_SOURCES = \ sd_event_loop.hpp \ sol/sol_context.hpp \ sol/sol_manager.hpp \ - sd_event_loop.cpp + sd_event_loop.cpp \ + sol/sol_manager.cpp netipmid_CPPFLAGS = -DNET_IPMID_LIB_PATH=\"/usr/lib/net-ipmid/\" netipmid_LDFLAGS = $(SYSTEMD_LIBS) $(CRYPTO_LIBS) $(libmapper_LIBS) $(PHOSPHOR_LOGGING_LIBS) $(LIBADD_DLOPEN) -export-dynamic diff --git a/sol/sol_manager.cpp b/sol/sol_manager.cpp new file mode 100644 index 0000000..d26193b --- /dev/null +++ b/sol/sol_manager.cpp @@ -0,0 +1,44 @@ +#include <sys/socket.h> +#include <sys/un.h> +#include <cmath> +#include <phosphor-logging/log.hpp> +#include "main.hpp" +#include "sol_context.hpp" +#include "sol_manager.hpp" + +namespace sol +{ + +using namespace phosphor::logging; + +void Manager::initHostConsoleFd() +{ + struct sockaddr_un addr; + int rc = 0; + int fd = 0; + + fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) + { + log<level::ERR>("Failed to open the host console socket", + entry("ERRNO=%d", errno)); + throw std::runtime_error("Failed to open the host console socket"); + } + + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + memcpy(&addr.sun_path, &CONSOLE_SOCKET_PATH, CONSOLE_SOCKET_PATH_LEN); + consoleFD = std::make_unique<CustomFD>(fd); + auto& conFD = *(consoleFD.get()); + + rc = connect(conFD(), (struct sockaddr *)&addr, sizeof(addr)); + if (rc < 0) + { + log<level::ERR>("Failed to connect to host console socket address", + entry("ERRNO=%d", errno)); + consoleFD.reset(); + throw std::runtime_error("Failed to connect to console server"); + } +} + +} // namespace sol |