Communication Module Implementation

Registers the commands related to the Session Setup sequence.

Change-Id: I7214087a1779d106173b05925dc6857c7223a503
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
diff --git a/comm_module.cpp b/comm_module.cpp
new file mode 100644
index 0000000..d780e21
--- /dev/null
+++ b/comm_module.cpp
@@ -0,0 +1,77 @@
+#include "comm_module.hpp"
+
+#include <algorithm>
+#include <cstring>
+#include <iomanip>
+#include <iostream>
+
+#include "command/channel_auth.hpp"
+#include "command/open_session.hpp"
+#include "command/rakp12.hpp"
+#include "command/rakp34.hpp"
+#include "command/session_cmds.hpp"
+#include "command_table.hpp"
+#include "main.hpp"
+#include "session.hpp"
+
+namespace command
+{
+
+void sessionSetupCommands()
+{
+    static const command::CmdDetails commands[] =
+    {
+        // Open Session Request/Response
+        {
+            {
+                (static_cast<uint32_t>
+                (message::PayloadType::OPEN_SESSION_REQUEST) << 16)
+            },
+            &openSession, session::Privilege::HIGHEST_MATCHING,  true
+        },
+        // RAKP1 & RAKP2 Message
+        {
+            {(static_cast<uint32_t>(message::PayloadType::RAKP1) << 16)},
+            &RAKP12, session::Privilege::HIGHEST_MATCHING, true
+        },
+        // RAKP3 & RAKP4 Message
+        {
+            {(static_cast<uint32_t>(message::PayloadType::RAKP3) << 16)},
+            &RAKP34, session::Privilege::HIGHEST_MATCHING, true
+        },
+        // Get Channel Authentication Capabilities Command
+        {
+            {
+                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+                static_cast<uint16_t>(command::NetFns::APP) | 0x38
+            },
+            &GetChannelCapabilities,
+            session::Privilege::HIGHEST_MATCHING, true
+        },
+        // Set Session Privilege Command
+        {
+            {
+                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+                static_cast<uint16_t>(command::NetFns::APP) | 0x3B
+            },
+            &setSessionPrivilegeLevel, session::Privilege::USER, false
+        },
+        // Close Session Command
+        {
+            {
+                (static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
+                static_cast<uint16_t>(command::NetFns::APP) | 0x3C
+            },
+            &closeSession, session::Privilege::CALLBACK, false
+        },
+    };
+
+    for (auto& iter : commands)
+    {
+        std::get<command::Table&>(singletonPool).registerCommand(
+            iter.command, std::make_unique<command::NetIpmidEntry>
+            (iter.command, iter.functor, iter.privilege, iter.sessionless));
+    }
+}
+
+} // namespace command