MME2 changes - Propped commits from openmme/paging branch. Added scripts
for code gen

Change-Id: Ie55032217232214ac8544ca76ea34335205329e4
diff --git a/src/cmn/tipcSocket.cpp b/src/cmn/tipcSocket.cpp
new file mode 100644
index 0000000..044dcd2
--- /dev/null
+++ b/src/cmn/tipcSocket.cpp
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2019, Infosys Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "../../include/cmn/tipcSocket.h"
+#include "../../include/cmn/tipcTypes.h"
+#include "../../include/common/log.h"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <linux/tipc.h>
+
+#define TIPC_SERVICE_ADDR       2
+
+namespace cmn {
+namespace ipc {
+
+TipcSocket::TipcSocket():IpcChannel(IpcChannelType::tipc_c)
+{
+	initialize();
+}
+
+TipcSocket::~TipcSocket()
+{
+	if (ipcHdl_m.u32 > 0)
+		close(ipcHdl_m.u32);
+}
+
+void TipcSocket::initialize()
+{
+	ipcHdl_m.u32 = socket(AF_TIPC, SOCK_RDM, 0);
+    if (ipcHdl_m.u32 <= 0)
+        log_msg(LOG_ERROR, "Failed to create TIPC socket. error: %s", strerror(errno));
+
+    return;
+}
+
+bool TipcSocket::bindTipcSocket(IpcAddress myAddress)
+{
+	if (ipcHdl_m.u32 <= 0)
+	{
+		log_msg(LOG_ERROR, "Invalid socket fd");
+		return false;
+	}
+
+    struct sockaddr_tipc server;
+
+    server.family = AF_TIPC;
+    server.addrtype = TIPC_SERVICE_ADDR;
+    server.scope = TIPC_CLUSTER_SCOPE;
+    server.addr.name.name.type = tipcServiceAddressType_c;
+    server.addr.name.name.instance = myAddress.u32;
+
+    bool rc = true;
+
+    if (0 != bind(ipcHdl_m.u32, (sockaddr*)&server, sizeof(server)))
+    {
+    	log_msg(LOG_ERROR, "Failed to bind TIPC socket. error: %s", strerror(errno));
+        rc = false;
+    }
+    return rc;
+}
+
+void TipcSocket::sendMsgTo(void * buffer, uint32_t len, IpcAddress destAddress)
+{
+    struct sockaddr_tipc dest;
+    dest.family = AF_TIPC;
+    dest.addrtype = TIPC_SERVICE_ADDR;
+    dest.scope = TIPC_CLUSTER_SCOPE;
+    dest.addr.name.domain = 0;
+    dest.addr.name.name.type = tipcServiceAddressType_c;
+    dest.addr.name.name.instance = destAddress.u32;
+
+
+   if (0 > sendto(ipcHdl_m.u32, buffer, len, 0, (sockaddr*)&dest, sizeof(dest)))
+   {
+	   log_msg(LOG_ERROR, "Failed to send message via TIPC socket. error: %s", strerror(errno));
+   }
+   else
+   {
+	   log_msg(LOG_INFO, "Message sent successfully");
+   }
+}
+
+
+uint32_t TipcSocket::recvMsgFrom(void * buffer, uint32_t len, IpcAddress& srcAddr)
+{
+    uint32_t bytesRead = 0;
+
+    struct sockaddr_tipc client;
+    socklen_t alen = sizeof(client);
+
+    if ((bytesRead = recvfrom(ipcHdl_m.u32, buffer, len, 0,
+			    (struct sockaddr *)&client, &alen)) > 0) 
+    {
+    	srcAddr.u32 = client.addr.name.name.instance;
+    }
+
+    return bytesRead;
+}
+
+} /* namespace ipc */
+} /* namespace cmn */