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>
diff --git a/Makefile.am b/Makefile.am
index d1a1bd8..6843a7e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -44,7 +44,8 @@
 	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