MME2 changes - Propped commits from openmme/paging branch. Added scripts
for code gen
Change-Id: Ie55032217232214ac8544ca76ea34335205329e4
diff --git a/src/mme-app/interfaces/mmeIpcInterface.cpp b/src/mme-app/interfaces/mmeIpcInterface.cpp
new file mode 100644
index 0000000..15950f7
--- /dev/null
+++ b/src/mme-app/interfaces/mmeIpcInterface.cpp
@@ -0,0 +1,153 @@
+/*
+ * 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 <interfaces/mmeIpcInterface.h>
+#include <blockingCircularFifo.h>
+#include <ipcTypes.h>
+#include <tipcSocket.h>
+#include <tipcTypes.h>
+#include <msgBuffer.h>
+#include <mme_app.h>
+#include <msgHandlers/gtpMsgHandler.h>
+#include <msgHandlers/s1MsgHandler.h>
+#include <msgHandlers/s6MsgHandler.h>
+
+extern "C" {
+ #include "log.h"
+}
+
+using namespace cmn::ipc;
+using namespace cmn::utils;
+
+extern BlockingCircularFifo<MsgBuffer, fifoQSize_c> mmeIpcEgressFifo_g;
+
+MmeIpcInterface::MmeIpcInterface():sender_mp(), reader_mp()
+{
+
+}
+
+MmeIpcInterface::~MmeIpcInterface()
+{
+ teardown();
+}
+
+bool MmeIpcInterface::setup()
+{
+
+ // INIT socket for receiving ipc message
+ TipcSocket* receiver_sock = new TipcSocket();
+
+ IpcAddress myAddress;
+ myAddress.u32 = mmeAppInstanceNum_c;
+
+ if (receiver_sock->bindTipcSocket(myAddress) == false)
+ {
+ log_msg(LOG_ERROR, "MmeIpcInterface Setup Failed!!!\n");
+
+ delete receiver_sock;
+
+ return false;
+ }
+
+ // INIT socket for sending ipc message
+ TipcSocket* sender_sock = new TipcSocket();
+
+ sender_mp = sender_sock;
+ reader_mp = receiver_sock;
+
+ return true;
+}
+
+void MmeIpcInterface::teardown()
+{
+ if (sender_mp != NULL)
+ delete sender_mp;
+
+ if (reader_mp != NULL)
+ delete reader_mp;
+}
+
+cmn::ipc::IpcChannel* MmeIpcInterface::sender()
+{
+ if (sender_mp != NULL)
+ return sender_mp;
+ else
+ return NULL;
+}
+
+cmn::ipc::IpcChannel* MmeIpcInterface::reader()
+{
+ if (reader_mp != NULL)
+ return reader_mp;
+ else
+ return NULL;
+}
+
+void MmeIpcInterface::handleIpcMsg(MsgBuffer* msgBuf)
+{
+ uint32_t srcAddr, destAddr;
+
+ msgBuf->readUint32(destAddr);
+ msgBuf->readUint32(srcAddr);
+
+ log_msg(LOG_INFO, "IPC Message from src %u to dest %u\n", srcAddr, destAddr);
+
+ switch (srcAddr)
+
+ {
+ case TipcInstanceTypes::s1apAppInstanceNum_c:
+ S1MsgHandler::Instance()->handleS1Message_v(msgBuf);
+ break;
+ case TipcInstanceTypes::s11AppInstanceNum_c:
+ GtpMsgHandler::Instance()->handleGtpMessage_v(msgBuf);
+ break;
+ case TipcInstanceTypes::s6AppInstanceNum_c:
+ S6MsgHandler::Instance()->handleS6Message_v(msgBuf);
+ break;
+ default:
+ log_msg(LOG_INFO, "IPC Message from unsupported instance\n");
+ }
+}
+
+bool MmeIpcInterface::dispatchIpcMsg(char* buf, uint32_t len, cmn::ipc::IpcAddress& destAddr)
+{
+ cmn::ipc::IpcMsgHeader msgHeader;
+ msgHeader.srcAddr.u32 = TipcInstanceTypes::mmeAppInstanceNum_c;
+ msgHeader.destAddr.u32 = destAddr.u32;
+
+ MsgBuffer *msgBuf = new MsgBuffer(len + sizeof(cmn::ipc::IpcMsgHeader));
+ msgBuf->writeUint32(msgHeader.destAddr.u32);
+ msgBuf->writeUint32(msgHeader.srcAddr.u32);
+ msgBuf->writeBytes((uint8_t*)buf, len);
+
+ log_msg(LOG_INFO, "Dispatch IPC msg\n");
+
+ return mmeIpcEgressFifo_g.push(msgBuf);
+}
+
+bool MmeIpcInterface::dispatchIpcMsg(cmn::utils::MsgBuffer* msgBuf, cmn::ipc::IpcAddress& destAddr)
+{
+ cmn::ipc::IpcMsgHeader msgHeader;
+ msgHeader.srcAddr.u32 = TipcInstanceTypes::mmeAppInstanceNum_c;
+ msgHeader.destAddr.u32 = destAddr.u32;
+
+ msgBuf->rewind();
+ msgBuf->writeUint32(msgHeader.destAddr.u32, false);
+ msgBuf->writeUint32(msgHeader.srcAddr.u32, false);
+
+ return mmeIpcEgressFifo_g.push(msgBuf);
+}
+