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

Change-Id: Ie55032217232214ac8544ca76ea34335205329e4
diff --git a/src/common/ipc_api.c b/src/common/ipc_api.c
new file mode 100644
index 0000000..f682c18
--- /dev/null
+++ b/src/common/ipc_api.c
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2003-2018, Great Software Laboratory Pvt. Ltd.
+ * Copyright (c) 2017 Intel Corporation
+ * 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 <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <linux/tipc.h>
+#include <stdint.h>
+#include "log.h"
+#include "ipc_api.h"
+#include "err_codes.h"
+
+#include <sys/socket.h>
+#include <string.h>
+
+#define TIPC_SERVICE_ADDR       2
+
+int
+create_ipc_channel(char *name)
+{
+	if (mkfifo (name, IPC_MODE) == -1) {
+		log_msg(LOG_ERROR, "Error in create_ipc_channel %s\n", name);
+		perror("Error:");
+		return -1;
+	}
+
+	return 0;
+}
+
+int
+open_ipc_channel(char *name, enum ipc_access_mode access_mode)
+{
+	int mode = O_RDONLY;
+	int fd;
+
+	if (access_mode == IPC_WRITE)
+		mode = O_WRONLY;
+
+	if ((fd = open(name, mode)) == -1) {
+		log_msg(LOG_ERROR, "Error in create_ipc_channel %s\n",name);
+		perror("Error:");
+		return -E_FAIL;
+	}
+
+	return fd;
+}
+
+int
+create_open_ipc_channel(char *name, enum ipc_access_mode access_mode)
+{
+	if (create_ipc_channel(name) != 0)
+		return -1;
+
+	return open_ipc_channel(name, access_mode);
+}
+
+int
+read_ipc_channel(ipc_handle fd, char *buffer, size_t size)
+{
+	int len = read(fd, buffer, size);
+	switch (len) {
+	case -1:
+            // case -1 means pipe is empty and errono
+            // set EAGAIN
+		if (errno == EAGAIN) {
+		log_msg(LOG_ERROR, "pipe empty \n");
+                usleep(5);
+                return -1;
+            }
+            else { perror("read");
+                exit(4);
+            }
+
+        // case 0 means all bytes are read and EOF(end of conv.)
+        case 0:
+            log_msg(LOG_ERROR, "End of conversation\n");
+
+            // read link
+            //close(p[0]);
+
+            exit(0);
+        default:
+            // text read
+            // by default return no. of bytes
+            // which read call read at that time
+            return len;
+        }
+}
+
+int
+write_ipc_channel(ipc_handle fd, char *buffer, size_t size)
+{
+	return write(fd, buffer, size);
+}
+
+int
+close_ipc_channel(ipc_handle fd)
+{
+	if (close(fd) == -1)
+		return -1;
+
+	return 0;
+}
+
+int
+create_tipc_socket()
+{
+    int sockFd = socket(AF_TIPC, SOCK_RDM, 0);
+
+    if (sockFd <= 0)
+    {
+        log_msg(LOG_INFO, "Failed to create tipc socket error: %s", strerror(errno));
+    }
+
+    return sockFd;
+}
+
+int
+bind_tipc_socket(int sockFd, uint32_t instanceNum)
+{
+    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 = instanceNum;
+
+    int rc = 1;
+    if (0 != bind(sockFd, (void *)&server, sizeof(server)))
+    {
+        log_msg(LOG_ERROR, "Server: failed to bind port name %s\n", strerror(errno));
+        rc = -1;
+    }
+    else
+    {
+	log_msg(LOG_INFO, "Server: Success %s %d\n", strerror(errno), rc);
+    }
+    return rc;
+}
+
+int
+send_tipc_message(int sd, uint32_t destAddr, void * buf, int len)
+{
+    struct sockaddr_tipc server;
+    server.family = AF_TIPC;
+    server.addrtype = TIPC_SERVICE_ADDR;
+    server.scope = TIPC_CLUSTER_SCOPE;
+    server.addr.name.domain = 0;
+    server.addr.name.name.type = tipcServiceAddressType_c;
+    server.addr.name.name.instance = destAddr;
+
+    int rc = 0;
+    if (0 > sendto(sd, buf, len, 0, (void*)&server, sizeof(server)))
+    {
+    	log_msg(LOG_ERROR, "FAILED TO SENT TIPC MESSAGE %s\n", strerror(errno));
+    } else {
+    	rc = 1;
+    	log_msg(LOG_INFO, "TIPC Message sent successfully to %d\n", destAddr);
+    }
+
+    return rc;
+}
+
+int
+read_tipc_msg(int sockFd, void * buf, int len)
+{
+    int bytesRead = 0;
+
+    if ((bytesRead = recv(sockFd, buf, len, 0)) <= 0)
+    {
+    	log_msg(LOG_ERROR, "FAILED TO READ TIPC MESSAGE %s\n", strerror(errno));
+    }
+    return bytesRead;
+}
+
+void
+close_tipc_socket(int sockFd)
+{
+	close(sockFd);
+}
+
+
+