5.4.7 Update RMR library to 4.4.4
[ric-plt/e2.git] / RIC-E2-TERMINATION / sctpThread.cpp
index 36f5e34..d3e00df 100644 (file)
@@ -68,12 +68,12 @@ double age() {
     return seconds_t(std::chrono::high_resolution_clock::now() - start_time).count();
 }
 
-double approx_CPU_MHz(unsigned sleeptime) {
+double approx_CPU_MHz(unsigned sleepTime) {
     using namespace std::chrono_literals;
     uint32_t aux = 0;
     uint64_t cycles_start = rdtscp(aux);
     double time_start = age();
-    std::this_thread::sleep_for(sleeptime * 1ms);
+    std::this_thread::sleep_for(sleepTime * 1ms);
     uint64_t elapsed_cycles = rdtscp(aux) - cycles_start;
     double elapsed_time = age() - time_start;
     return elapsed_cycles / elapsed_time;
@@ -91,11 +91,11 @@ int buildListeningPort(sctp_params_t &sctpParams) {
         return -1;
     }
 
-    struct sockaddr_in6 servaddr {};
-    servaddr.sin6_family = AF_INET6;
-    servaddr.sin6_addr   = in6addr_any;
-    servaddr.sin6_port = htons(sctpParams.sctpPort);
-    if (bind(sctpParams.listenFD, (SA *)&servaddr, sizeof(servaddr)) < 0 ) {
+    struct sockaddr_in6 serverAddress {};
+    serverAddress.sin6_family = AF_INET6;
+    serverAddress.sin6_addr   = in6addr_any;
+    serverAddress.sin6_port = htons(sctpParams.sctpPort);
+    if (bind(sctpParams.listenFD, (SA *)&serverAddress, sizeof(serverAddress)) < 0 ) {
         mdclog_write(MDCLOG_ERR, "Error binding port %d. %s", sctpParams.sctpPort, strerror(errno));
         return -1;
     }
@@ -104,12 +104,12 @@ int buildListeningPort(sctp_params_t &sctpParams) {
         return -1;
     }
     if (mdclog_level_get() >= MDCLOG_DEBUG) {
-        struct sockaddr_in6 cliaddr {};
-        socklen_t len = sizeof(cliaddr);
-        getsockname(sctpParams.listenFD, (SA *)&cliaddr, &len);
+        struct sockaddr_in6 clientAddress {};
+        socklen_t len = sizeof(clientAddress);
+        getsockname(sctpParams.listenFD, (SA *)&clientAddress, &len);
         char buff[1024] {};
-        inet_ntop(AF_INET6, &cliaddr.sin6_addr, buff, sizeof(buff));
-        mdclog_write(MDCLOG_DEBUG, "My address: %s, port %d\n", buff, htons(cliaddr.sin6_port));
+        inet_ntop(AF_INET6, &clientAddress.sin6_addr, buff, sizeof(buff));
+        mdclog_write(MDCLOG_DEBUG, "My address: %s, port %d\n", buff, htons(clientAddress.sin6_port));
     }
 
     if (listen(sctpParams.listenFD, SOMAXCONN) < 0) {
@@ -152,7 +152,7 @@ int buildConfiguration(sctp_params_t &sctpParams) {
     }
     int rmrPort = conf.getIntValue("nano");
     if (rmrPort == -1) {
-        mdclog_write(MDCLOG_ERR, "illigal RMR port ");
+        mdclog_write(MDCLOG_ERR, "illegal RMR port ");
         return -1;
     }
     sctpParams.rmrPort = (uint16_t)rmrPort;
@@ -160,7 +160,7 @@ int buildConfiguration(sctp_params_t &sctpParams) {
 
     auto tmpStr = conf.getStringValue("loglevel");
     if (tmpStr.length() == 0) {
-        mdclog_write(MDCLOG_ERR, "illigal loglevel. Set loglevel to MDCLOG_INFO");
+        mdclog_write(MDCLOG_ERR, "illegal loglevel. Set loglevel to MDCLOG_INFO");
         tmpStr = "info";
     }
     transform(tmpStr.begin(), tmpStr.end(), tmpStr.begin(), ::tolower);
@@ -174,14 +174,14 @@ int buildConfiguration(sctp_params_t &sctpParams) {
     } else if ((tmpStr.compare("error")) == 0) {
         sctpParams.logLevel = MDCLOG_ERR;
     } else {
-        mdclog_write(MDCLOG_ERR, "illigal loglevel = %s. Set loglevel to MDCLOG_INFO", tmpStr.c_str());
+        mdclog_write(MDCLOG_ERR, "illegal loglevel = %s. Set loglevel to MDCLOG_INFO", tmpStr.c_str());
         sctpParams.logLevel = MDCLOG_INFO;
     }
     mdclog_level_set(sctpParams.logLevel);
 
     tmpStr = conf.getStringValue("volume");
     if (tmpStr.length() == 0) {
-        mdclog_write(MDCLOG_ERR, "illigal volume.");
+        mdclog_write(MDCLOG_ERR, "illegal volume.");
         return -1;
     }
 
@@ -198,37 +198,37 @@ int buildConfiguration(sctp_params_t &sctpParams) {
 
     sctpParams.myIP = conf.getStringValue("local-ip");
     if (sctpParams.myIP.length() == 0) {
-        mdclog_write(MDCLOG_ERR, "illigal local-ip.");
+        mdclog_write(MDCLOG_ERR, "illegal local-ip.");
         return -1;
     }
 
     int sctpPort = conf.getIntValue("sctp-port");
     if (sctpPort == -1) {
-        mdclog_write(MDCLOG_ERR, "illigal SCTP port ");
+        mdclog_write(MDCLOG_ERR, "illegal SCTP port ");
         return -1;
     }
     sctpParams.sctpPort = (uint16_t)sctpPort;
 
     sctpParams.fqdn = conf.getStringValue("external-fqdn");
     if (sctpParams.fqdn.length() == 0) {
-        mdclog_write(MDCLOG_ERR, "illigal external-fqdn");
+        mdclog_write(MDCLOG_ERR, "illegal external-fqdn");
         return -1;
     }
 
     std::string pod = conf.getStringValue("pod_name");
     if (pod.length() == 0) {
-        mdclog_write(MDCLOG_ERR, "illigal pod_name in config file");
+        mdclog_write(MDCLOG_ERR, "illegal pod_name in config file");
         return -1;
     }
     auto *podName = getenv(pod.c_str());
     if (podName == nullptr) {
-        mdclog_write(MDCLOG_ERR, "illigal pod_name or environment varible not exists : %s", pod.c_str());
+        mdclog_write(MDCLOG_ERR, "illegal pod_name or environment variable not exists : %s", pod.c_str());
         return -1;
 
     } else {
         sctpParams.podName.assign(podName);
         if (sctpParams.podName.length() == 0) {
-            mdclog_write(MDCLOG_ERR, "illigal pod_name");
+            mdclog_write(MDCLOG_ERR, "illegal pod_name");
             return -1;
         }
     }
@@ -280,7 +280,7 @@ int buildConfiguration(sctp_params_t &sctpParams) {
             //keywords::format = "[%TimeStamp%]: %Message%" // use each tmpStr with time stamp
     );
 
-    // Setup a destination folder for collecting rotated (closed) files --since the same volumn can use rename()
+    // Setup a destination folder for collecting rotated (closed) files --since the same volume can use rename()
     boostLogger->locked_backend()->set_file_collector(sinks::file::make_collector(
             keywords::target = sctpParams.volume
     ));
@@ -303,11 +303,11 @@ void startPrometheus(sctp_params_t &sctpParams) {
             .Labels({{"POD_NAME", sctpParams.podName}})
             .Register(*sctpParams.prometheusRegistry);
 
-    string promethusPath = sctpParams.prometheusPort + "," + "[::]:" + sctpParams.prometheusPort;
+    string prometheusPath = sctpParams.prometheusPort + "," + "[::]:" + sctpParams.prometheusPort;
     if (mdclog_level_get() >= MDCLOG_DEBUG) {
-        mdclog_write(MDCLOG_DEBUG, "Start Prometheus Pull mode on %s", promethusPath.c_str());
+        mdclog_write(MDCLOG_DEBUG, "Start Prometheus Pull mode on %s", prometheusPath.c_str());
     }
-    sctpParams.prometheusExposer = new Exposer(promethusPath, 1);
+    sctpParams.prometheusExposer = new Exposer(prometheusPath, 1);
     sctpParams.prometheusExposer->RegisterCollectable(sctpParams.prometheusRegistry);
 }
 
@@ -355,7 +355,7 @@ int main(const int argc, char **argv) {
     //auto registry = std::make_shared<Registry>();
     sctpParams.prometheusRegistry = std::make_shared<Registry>();
 
-    //sctpParams.promtheusFamily = new Family<Counter>("E2T", "E2T message counter", {{"E", sctpParams.podName}});
+    //sctpParams.prometheusFamily = new Family<Counter>("E2T", "E2T message counter", {{"E", sctpParams.podName}});
 
     startPrometheus(sctpParams);
 
@@ -391,7 +391,7 @@ int main(const int argc, char **argv) {
     std::vector<std::thread> threads(num_cpus);
 //    std::vector<std::thread> threads;
 
-    num_cpus = 1;
+    num_cpus = 3;
     for (unsigned int i = 0; i < num_cpus; i++) {
         threads[i] = std::thread(listener, &sctpParams);
 
@@ -425,7 +425,7 @@ void handleTermInit(sctp_params_t &sctpParams) {
         auto xappMessages = num_of_XAPP_messages.load(std::memory_order_acquire);
         if (xappMessages > 0) {
             if (mdclog_level_get() >=  MDCLOG_INFO) {
-                mdclog_write(MDCLOG_INFO, "Got a message from some appliction, stop sending E2_TERM_INIT");
+                mdclog_write(MDCLOG_INFO, "Got a message from some application, stop sending E2_TERM_INIT");
             }
             return;
         }
@@ -454,7 +454,7 @@ void sendTermInit(sctp_params_t &sctpParams) {
         } else if (msg->state == 0) {
             rmr_free_msg(msg);
             if (mdclog_level_get() >=  MDCLOG_INFO) {
-                mdclog_write(MDCLOG_INFO, "E2_TERM_INIT succsesfuly sent ");
+                mdclog_write(MDCLOG_INFO, "E2_TERM_INIT successfully sent ");
             }
             return;
         } else {
@@ -500,9 +500,6 @@ int buildInotify(sctp_params_t &sctpParams) {
     sctpParams.inotifyFD = inotify_init1(IN_NONBLOCK);
     if (sctpParams.inotifyFD == -1) {
         mdclog_write(MDCLOG_ERR, "Failed to init inotify (inotify_init1) %s", strerror(errno));
-        close(sctpParams.rmrListenFd);
-        rmr_close(sctpParams.rmrCtx);
-        close(sctpParams.epoll_fd);
         return -1;
     }
 
@@ -580,7 +577,7 @@ void listener(sctp_params_t *params) {
 
     ReportingMessages_t message {};
 
-//    for (int i = 0; i < MAX_RMR_BUFF_ARRY; i++) {
+//    for (int i = 0; i < MAX_RMR_BUFF_ARRAY; i++) {
 //        rmrMessageBuffer.rcvBufferedMessages[i] = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE);
 //        rmrMessageBuffer.sendBufferedMessages[i] = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE);
 //    }
@@ -631,6 +628,10 @@ void listener(sctp_params_t *params) {
 
                     in_len = sizeof(in_addr);
                     auto *peerInfo = (ConnectedCU_t *)calloc(1, sizeof(ConnectedCU_t));
+                    if(peerInfo == nullptr){
+                        mdclog_write(MDCLOG_ERR, "calloc failed");
+                        break;
+                    }
                     peerInfo->sctpParams = params;
                     peerInfo->fileDescriptor = accept(params->listenFD, &in_addr, &in_len);
                     if (peerInfo->fileDescriptor == -1) {
@@ -674,7 +675,7 @@ void listener(sctp_params_t *params) {
                 //num_of_XAPP_messages.fetch_add(1, std::memory_order_release);
                 num_of_messages.fetch_add(1, std::memory_order_release);
                 if (mdclog_level_get() >= MDCLOG_DEBUG) {
-                    mdclog_write(MDCLOG_DEBUG, "new message from RMR");
+                    mdclog_write(MDCLOG_DEBUG, "new RMR message");
                 }
                 if (receiveXappMessages(params->sctpMap,
                                         rmrMessageBuffer,
@@ -780,7 +781,7 @@ void handleConfigChange(sctp_params_t *sctpParams) {
 
                 auto tmpStr = conf.getStringValue("loglevel");
                 if (tmpStr.length() == 0) {
-                    mdclog_write(MDCLOG_ERR, "illigal loglevel. Set loglevel to MDCLOG_INFO");
+                    mdclog_write(MDCLOG_ERR, "illegal loglevel. Set loglevel to MDCLOG_INFO");
                     tmpStr = "info";
                 }
                 transform(tmpStr.begin(), tmpStr.end(), tmpStr.begin(), ::tolower);
@@ -798,7 +799,7 @@ void handleConfigChange(sctp_params_t *sctpParams) {
                     mdclog_write(MDCLOG_INFO, "Log level set to MDCLOG_ERR");
                     sctpParams->logLevel = MDCLOG_ERR;
                 } else {
-                    mdclog_write(MDCLOG_ERR, "illigal loglevel = %s. Set loglevel to MDCLOG_INFO", tmpStr.c_str());
+                    mdclog_write(MDCLOG_ERR, "illegal loglevel = %s. Set loglevel to MDCLOG_INFO", tmpStr.c_str());
                     sctpParams->logLevel = MDCLOG_INFO;
                 }
                 mdclog_level_set(sctpParams->logLevel);
@@ -806,7 +807,7 @@ void handleConfigChange(sctp_params_t *sctpParams) {
 
                 tmpStr = conf.getStringValue("trace");
                 if (tmpStr.length() == 0) {
-                    mdclog_write(MDCLOG_ERR, "illigal trace. Set trace to stop");
+                    mdclog_write(MDCLOG_ERR, "illegal trace. Set trace to stop");
                     tmpStr = "stop";
                 }
 
@@ -975,13 +976,13 @@ void cleanHashEntry(ConnectedCU_t *val, Sctp_Map_t *m) {
 
 /**
  *
- * @param fd file discriptor
+ * @param fd file descriptor
  * @param data the asn data to send
  * @param len  length of the data
  * @param enodbName the enodbName as in the map for printing purpose
  * @param m map host information
  * @param mtype message number
- * @return 0 success, anegative number on fail
+ * @return 0 success, a negative number on fail
  */
 int sendSctpMsg(ConnectedCU_t *peerInfo, ReportingMessages_t &message, Sctp_Map_t *m) {
     auto loglevel = mdclog_level_get();
@@ -1072,7 +1073,7 @@ int receiveDataFromSctp(struct epoll_event *events,
     message.peerInfo = (ConnectedCU_t *)events->data.ptr;
 
     struct timespec start{0, 0};
-    struct timespec decodestart{0, 0};
+    struct timespec decodeStart{0, 0};
     struct timespec end{0, 0};
 
     E2AP_PDU_t *pdu = nullptr;
@@ -1121,7 +1122,7 @@ int receiveDataFromSctp(struct epoll_event *events,
         }
 
         if (loglevel >= MDCLOG_DEBUG) {
-            char printBuffer[4096]{};
+            char printBuffer[RECEIVE_SCTP_BUFFER_SIZE]{};
             char *tmp = printBuffer;
             for (size_t i = 0; i < (size_t)message.message.asnLength; ++i) {
                 snprintf(tmp, 3, "%02x", message.message.asndata[i]);
@@ -1133,7 +1134,7 @@ int receiveDataFromSctp(struct epoll_event *events,
                          message.peerInfo->enodbName, end.tv_sec - start.tv_sec, end.tv_nsec - start.tv_nsec);
             mdclog_write(MDCLOG_DEBUG, "PDU buffer length = %ld, data =  : %s", message.message.asnLength,
                          printBuffer);
-            clock_gettime(CLOCK_MONOTONIC, &decodestart);
+            clock_gettime(CLOCK_MONOTONIC, &decodeStart);
         }
 
         auto rval = asn_decode(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, (void **) &pdu,
@@ -1147,13 +1148,13 @@ int receiveDataFromSctp(struct epoll_event *events,
         if (loglevel >= MDCLOG_DEBUG) {
             clock_gettime(CLOCK_MONOTONIC, &end);
             mdclog_write(MDCLOG_DEBUG, "After Encoding E2AP PDU for : %s, Read time is : %ld seconds, %ld nanoseconds",
-                         message.peerInfo->enodbName, end.tv_sec - decodestart.tv_sec, end.tv_nsec - decodestart.tv_nsec);
+                         message.peerInfo->enodbName, end.tv_sec - decodeStart.tv_sec, end.tv_nsec - decodeStart.tv_nsec);
             char *printBuffer;
             size_t size;
             FILE *stream = open_memstream(&printBuffer, &size);
             asn_fprint(stream, &asn_DEF_E2AP_PDU, pdu);
             mdclog_write(MDCLOG_DEBUG, "Encoding E2AP PDU past : %s", printBuffer);
-            clock_gettime(CLOCK_MONOTONIC, &decodestart);
+            clock_gettime(CLOCK_MONOTONIC, &decodeStart);
         }
 
         switch (pdu->present) {
@@ -1162,7 +1163,7 @@ int receiveDataFromSctp(struct epoll_event *events,
                 break;
             }
             case E2AP_PDU_PR_successfulOutcome: { //successful outcome
-                asnSuccsesfulMsg(pdu, sctpMap, message,  rmrMessageBuffer);
+                asnSuccessfulMsg(pdu, sctpMap, message, rmrMessageBuffer);
                 break;
             }
             case E2AP_PDU_PR_unsuccessfulOutcome: { //Unsuccessful Outcome
@@ -1177,7 +1178,7 @@ int receiveDataFromSctp(struct epoll_event *events,
             clock_gettime(CLOCK_MONOTONIC, &end);
             mdclog_write(MDCLOG_DEBUG,
                          "After processing message and sent to rmr for : %s, Read time is : %ld seconds, %ld nanoseconds",
-                         message.peerInfo->enodbName, end.tv_sec - decodestart.tv_sec, end.tv_nsec - decodestart.tv_nsec);
+                         message.peerInfo->enodbName, end.tv_sec - decodeStart.tv_sec, end.tv_nsec - decodeStart.tv_nsec);
         }
         numOfMessages++;
         if (pdu != nullptr) {
@@ -1217,7 +1218,7 @@ int receiveDataFromSctp(struct epoll_event *events,
     return 0;
 }
 
-static void buildAndsendSetupRequest(ReportingMessages_t &message,
+static void buildAndSendSetupRequest(ReportingMessages_t &message,
                                      RmrMessagesBuffer_t &rmrMessageBuffer,
                                      E2AP_PDU_t *pdu/*,
                                      string const &messageName,
@@ -1415,7 +1416,7 @@ int collectServiceUpdate_RequestData(E2AP_PDU_t *pdu,
 #endif
 
 
-void buildPrometheuslist(ConnectedCU_t *peerInfo, Family<Counter> *prometheusFamily) {
+void buildPrometheusList(ConnectedCU_t *peerInfo, Family<Counter> *prometheusFamily) {
     peerInfo->counters[IN_INITI][MSG_COUNTER][(ProcedureCode_id_E2setup)] = &prometheusFamily->Add({{peerInfo->enodbName, "IN"}, {"SetupRequest", "Messages"}});
     peerInfo->counters[IN_INITI][BYTES_COUNTER][(ProcedureCode_id_E2setup)] = &prometheusFamily->Add({{peerInfo->enodbName, "IN"}, {"SetupRequest", "Bytes"}});
 
@@ -1506,7 +1507,7 @@ int collectSetupRequestData(E2AP_PDU_t *pdu,
             if (ie->value.present == E2setupRequestIEs__value_PR_GlobalE2node_ID) {
                 if (buildRanName(message.peerInfo->enodbName, ie) < 0) {
                     mdclog_write(MDCLOG_ERR, "Bad param in E2setupRequestIEs GlobalE2node_ID.\n");
-                    // no mesage will be sent
+                    // no message will be sent
                     return -1;
                 }
 
@@ -1596,14 +1597,14 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu,
                 break;
             }
 
-            buildPrometheuslist(message.peerInfo, message.peerInfo->sctpParams->prometheusFamily);
+            buildPrometheusList(message.peerInfo, message.peerInfo->sctpParams->prometheusFamily);
 
             string messageName("E2setupRequest");
             string ieName("E2setupRequestIEs");
             message.message.messageType = RIC_E2_SETUP_REQ;
             message.peerInfo->counters[IN_INITI][MSG_COUNTER][ProcedureCode_id_E2setup]->Increment();
             message.peerInfo->counters[IN_INITI][BYTES_COUNTER][ProcedureCode_id_E2setup]->Increment((double)message.message.asnLength);
-            buildAndsendSetupRequest(message, rmrMessageBuffer, pdu);
+            buildAndSendSetupRequest(message, rmrMessageBuffer, pdu);
             break;
         }
         case ProcedureCode_id_RICserviceUpdate: {
@@ -1625,7 +1626,7 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu,
             message.peerInfo->counters[IN_INITI][MSG_COUNTER][ProcedureCode_id_RICserviceUpdate]->Increment();
             message.peerInfo->counters[IN_INITI][BYTES_COUNTER][ProcedureCode_id_RICserviceUpdate]->Increment((double)message.message.asnLength);
 
-            buildAndsendSetupRequest(message, rmrMessageBuffer, pdu);
+            buildAndSendSetupRequest(message, rmrMessageBuffer, pdu);
             break;
         }
         case ProcedureCode_id_ErrorIndication: {
@@ -1693,7 +1694,7 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu,
                         sendRmrMessage(rmrMessageBuffer, message);
                         messageSent = true;
                     } else {
-                        mdclog_write(MDCLOG_ERR, "RIC request id missing illigal request");
+                        mdclog_write(MDCLOG_ERR, "RIC request id missing illegal request");
                     }
                 }
                 if (messageSent) {
@@ -1719,7 +1720,7 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu,
  * @param message
  * @param rmrMessageBuffer
  */
-void asnSuccsesfulMsg(E2AP_PDU_t *pdu,
+void asnSuccessfulMsg(E2AP_PDU_t *pdu,
                       Sctp_Map_t *sctpMap,
                       ReportingMessages_t &message,
                       RmrMessagesBuffer_t &rmrMessageBuffer) {
@@ -1776,7 +1777,7 @@ void asnSuccsesfulMsg(E2AP_PDU_t *pdu,
                         sendRmrMessage(rmrMessageBuffer, message);
                         messageSent = true;
                     } else {
-                        mdclog_write(MDCLOG_ERR, "RIC request id missing illigal request");
+                        mdclog_write(MDCLOG_ERR, "RIC request id missing illegal request");
                     }
                 }
                 if (messageSent) {
@@ -1864,7 +1865,7 @@ void asnUnSuccsesfulMsg(E2AP_PDU_t *pdu,
                         sendRmrMessage(rmrMessageBuffer, message);
                         messageSent = true;
                     } else {
-                        mdclog_write(MDCLOG_ERR, "RIC request id missing illigal request");
+                        mdclog_write(MDCLOG_ERR, "RIC request id missing illegal request");
                     }
                 }
                 if (messageSent) {
@@ -1991,6 +1992,9 @@ int PER_FromXML(ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuf
     }
     auto rval = asn_decode(nullptr, ATS_BASIC_XER, &asn_DEF_E2AP_PDU, (void **) &pdu,
                            rmrMessageBuffer.rcvMessage->payload, rmrMessageBuffer.rcvMessage->len);
+    if (mdclog_level_get() >= MDCLOG_DEBUG) {
+        mdclog_write(MDCLOG_DEBUG, "%s After  decoding the XML to PDU", __func__ );
+    }
     if (rval.code != RC_OK) {
         mdclog_write(MDCLOG_ERR, "Error %d Decoding (unpack) setup response  from E2MGR : %s",
                      rval.code,
@@ -2001,6 +2005,9 @@ int PER_FromXML(ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuf
     int buff_size = RECEIVE_XAPP_BUFFER_SIZE;
     auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2AP_PDU, pdu,
                                    rmrMessageBuffer.rcvMessage->payload, buff_size);
+    if (mdclog_level_get() >= MDCLOG_DEBUG) {
+        mdclog_write(MDCLOG_DEBUG, "%s After encoding PDU to PER", __func__ );
+    }
     if (er.encoded == -1) {
         mdclog_write(MDCLOG_ERR, "encoding of %s failed, %s", asn_DEF_E2AP_PDU.name, strerror(errno));
         return -1;
@@ -2026,18 +2033,19 @@ int PER_FromXML(ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuf
 int receiveXappMessages(Sctp_Map_t *sctpMap,
                         RmrMessagesBuffer_t &rmrMessageBuffer,
                         struct timespec &ts) {
+    int loglevel = mdclog_level_get();
     if (rmrMessageBuffer.rcvMessage == nullptr) {
         //we have error
         mdclog_write(MDCLOG_ERR, "RMR Allocation message, %s", strerror(errno));
         return -1;
     }
 
-    if (mdclog_level_get() >= MDCLOG_DEBUG) {
-        mdclog_write(MDCLOG_DEBUG, "Call to rmr_rcv_msg");
-    }
+//    if (loglevel >= MDCLOG_DEBUG) {
+//        mdclog_write(MDCLOG_DEBUG, "Call to rmr_rcv_msg");
+//    }
     rmrMessageBuffer.rcvMessage = rmr_rcv_msg(rmrMessageBuffer.rmrCtx, rmrMessageBuffer.rcvMessage);
     if (rmrMessageBuffer.rcvMessage == nullptr) {
-        mdclog_write(MDCLOG_ERR, "RMR Receving message with null pointer, Realloc rmr mesage buffer");
+        mdclog_write(MDCLOG_ERR, "RMR Receiving message with null pointer, Reallocated rmr message buffer");
         rmrMessageBuffer.rcvMessage = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE);
         return -2;
     }
@@ -2049,7 +2057,7 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
     // get message payload
     //auto msgData = msg->payload;
     if (rmrMessageBuffer.rcvMessage->state != 0) {
-        mdclog_write(MDCLOG_ERR, "RMR Receving message with stat = %d", rmrMessageBuffer.rcvMessage->state);
+        mdclog_write(MDCLOG_ERR, "RMR Receiving message with stat = %d", rmrMessageBuffer.rcvMessage->state);
         return -1;
     }
     rmr_get_meid(rmrMessageBuffer.rcvMessage, (unsigned char *)message.message.enodbName);
@@ -2073,6 +2081,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
     }
     switch (rmrMessageBuffer.rcvMessage->mtype) {
         case RIC_E2_SETUP_RESP : {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_E2_SETUP_RESP");
+            }
             if (PER_FromXML(message, rmrMessageBuffer) != 0) {
                 break;
             }
@@ -2085,6 +2096,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_E2_SETUP_FAILURE : {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_E2_SETUP_FAILURE");
+            }
             if (PER_FromXML(message, rmrMessageBuffer) != 0) {
                 break;
             }
@@ -2097,6 +2111,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_ERROR_INDICATION: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_ERROR_INDICATION");
+            }
             message.peerInfo->counters[OUT_INITI][MSG_COUNTER][ProcedureCode_id_ErrorIndication]->Increment();
             message.peerInfo->counters[OUT_INITI][BYTES_COUNTER][ProcedureCode_id_ErrorIndication]->Increment(rmrMessageBuffer.rcvMessage->len);
             if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) {
@@ -2106,6 +2123,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_SUB_REQ: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_SUB_REQ");
+            }
             message.peerInfo->counters[OUT_INITI][MSG_COUNTER][ProcedureCode_id_RICsubscription]->Increment();
             message.peerInfo->counters[OUT_INITI][BYTES_COUNTER][ProcedureCode_id_RICsubscription]->Increment(rmrMessageBuffer.rcvMessage->len);
             if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) {
@@ -2115,6 +2135,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_SUB_DEL_REQ: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_SUB_DEL_REQ");
+            }
             message.peerInfo->counters[OUT_INITI][MSG_COUNTER][ProcedureCode_id_RICsubscriptionDelete]->Increment();
             message.peerInfo->counters[OUT_INITI][BYTES_COUNTER][ProcedureCode_id_RICsubscriptionDelete]->Increment(rmrMessageBuffer.rcvMessage->len);
             if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) {
@@ -2124,6 +2147,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_CONTROL_REQ: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_CONTROL_REQ");
+            }
             message.peerInfo->counters[OUT_INITI][MSG_COUNTER][ProcedureCode_id_RICcontrol]->Increment();
             message.peerInfo->counters[OUT_INITI][BYTES_COUNTER][ProcedureCode_id_RICcontrol]->Increment(rmrMessageBuffer.rcvMessage->len);
             if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) {
@@ -2133,6 +2159,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_SERVICE_QUERY: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_SERVICE_QUERY");
+            }
             if (PER_FromXML(message, rmrMessageBuffer) != 0) {
                 break;
             }
@@ -2145,11 +2174,18 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_SERVICE_UPDATE_ACK: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_SERVICE_UPDATE_ACK");
+            }
             if (PER_FromXML(message, rmrMessageBuffer) != 0) {
+                mdclog_write(MDCLOG_ERR, "error in PER_FromXML");
                 break;
             }
             message.peerInfo->counters[OUT_SUCC][MSG_COUNTER][ProcedureCode_id_RICserviceUpdate]->Increment();
-            message.peerInfo->counters[OUT_SUCC][BYTES_COUNTER][ProcedureCode_id_RICserviceQuery]->Increment(rmrMessageBuffer.rcvMessage->len);
+            message.peerInfo->counters[OUT_SUCC][BYTES_COUNTER][ProcedureCode_id_RICserviceUpdate]->Increment(rmrMessageBuffer.rcvMessage->len);
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "Before sending to CU");
+            }
             if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) {
                 mdclog_write(MDCLOG_ERR, "Failed to send RIC_SERVICE_UPDATE_ACK");
                 return -6;
@@ -2157,11 +2193,14 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_SERVICE_UPDATE_FAILURE: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_SERVICE_UPDATE_FAILURE");
+            }
             if (PER_FromXML(message, rmrMessageBuffer) != 0) {
                 break;
             }
             message.peerInfo->counters[OUT_UN_SUCC][MSG_COUNTER][ProcedureCode_id_RICserviceUpdate]->Increment();
-            message.peerInfo->counters[OUT_UN_SUCC][BYTES_COUNTER][ProcedureCode_id_RICserviceQuery]->Increment(rmrMessageBuffer.rcvMessage->len);
+            message.peerInfo->counters[OUT_UN_SUCC][BYTES_COUNTER][ProcedureCode_id_RICserviceUpdate]->Increment(rmrMessageBuffer.rcvMessage->len);
             if (sendDirectionalSctpMsg(rmrMessageBuffer, message, 0, sctpMap) != 0) {
                 mdclog_write(MDCLOG_ERR, "Failed to send RIC_SERVICE_UPDATE_FAILURE");
                 return -6;
@@ -2169,6 +2208,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_E2_RESET_REQ: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_E2_RESET_REQ");
+            }
             if (PER_FromXML(message, rmrMessageBuffer) != 0) {
                 break;
             }
@@ -2181,6 +2223,9 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             break;
         }
         case RIC_E2_RESET_RESP: {
+            if (loglevel >= MDCLOG_DEBUG) {
+                mdclog_write(MDCLOG_DEBUG, "RIC_E2_RESET_RESP");
+            }
             if (PER_FromXML(message, rmrMessageBuffer) != 0) {
                 break;
             }
@@ -2244,13 +2289,14 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             } else if (rmrMessageBuffer.sendMessage->state != 0)  {
                 mdclog_write(MDCLOG_ERR, "Failed to send E2_TERM_KEEP_ALIVE_RESP, on RMR state = %d ( %s)",
                              rmrMessageBuffer.sendMessage->state, translateRmrErrorMessages(rmrMessageBuffer.sendMessage->state).c_str());
-            } else if (mdclog_level_get() >= MDCLOG_DEBUG) {
+            } else if (loglevel >= MDCLOG_DEBUG) {
                 mdclog_write(MDCLOG_DEBUG, "Got Keep Alive Request send : %s", rmrMessageBuffer.ka_message);
             }
 
             break;
         }
         case RIC_HEALTH_CHECK_REQ: {
+            static int counter = 0;
             // send message back
             rmr_bytes2payload(rmrMessageBuffer.rcvMessage,
                               (unsigned char *)"OK",
@@ -2268,15 +2314,15 @@ int receiveXappMessages(Sctp_Map_t *sctpMap,
             } else if (rmrMessageBuffer.rcvMessage->state != 0)  {
                 mdclog_write(MDCLOG_ERR, "Failed to send RIC_HEALTH_CHECK_RESP, on RMR state = %d ( %s)",
                              rmrMessageBuffer.rcvMessage->state, translateRmrErrorMessages(rmrMessageBuffer.rcvMessage->state).c_str());
-            } else if (mdclog_level_get() >= MDCLOG_DEBUG) {
-                mdclog_write(MDCLOG_DEBUG, "Got RIC_HEALTH_CHECK_REQ Request send : OK");
+            } else if (loglevel >= MDCLOG_DEBUG && ++counter % 100 == 0) {
+                mdclog_write(MDCLOG_DEBUG, "Got %d RIC_HEALTH_CHECK_REQ Request send : OK", counter);
             }
 
             break;
         }
 
         default:
-            mdclog_write(MDCLOG_WARN, "Message Type : %d is not seported", rmrMessageBuffer.rcvMessage->mtype);
+            mdclog_write(MDCLOG_WARN, "Message Type : %d is not supported", rmrMessageBuffer.rcvMessage->mtype);
             message.message.asndata = rmrMessageBuffer.rcvMessage->payload;
             message.message.asnLength = rmrMessageBuffer.rcvMessage->len;
             message.message.time.tv_nsec = ts.tv_nsec;
@@ -2306,6 +2352,9 @@ int sendDirectionalSctpMsg(RmrMessagesBuffer_t &messageBuffer,
                            ReportingMessages_t &message,
                            int failedMsgId,
                            Sctp_Map_t *sctpMap) {
+    if (mdclog_level_get() >= MDCLOG_DEBUG) {
+        mdclog_write(MDCLOG_DEBUG, "send message: %d to %s address", message.message.messageType, message.message.enodbName);
+    }
 
     getRequestMetaData(message, messageBuffer);
     if (mdclog_level_get() >= MDCLOG_INFO) {
@@ -2357,7 +2406,7 @@ int addToEpoll(int epoll_fd,
     event.events = events;
     if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, peerInfo->fileDescriptor, &event) < 0) {
         if (mdclog_level_get() >= MDCLOG_DEBUG) {
-            mdclog_write(MDCLOG_DEBUG, "epoll_ctl EPOLL_CTL_ADD (may chack not to quit here), %s, %s %d",
+            mdclog_write(MDCLOG_DEBUG, "epoll_ctl EPOLL_CTL_ADD (may check not to quit here), %s, %s %d",
                          strerror(errno), __func__, __LINE__);
         }
         close(peerInfo->fileDescriptor);
@@ -2376,7 +2425,7 @@ int addToEpoll(int epoll_fd,
         } else {
             peerInfo->enodbName[0] = 0;
         }
-        mdclog_write(MDCLOG_ERR, "epoll_ctl EPOLL_CTL_ADD (may chack not to quit here)");
+        mdclog_write(MDCLOG_ERR, "epoll_ctl EPOLL_CTL_ADD (may check not to quit here)");
         return -1;
     }
     return 0;
@@ -2404,7 +2453,7 @@ int modifyToEpoll(int epoll_fd,
     event.events = events;
     if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, peerInfo->fileDescriptor, &event) < 0) {
         if (mdclog_level_get() >= MDCLOG_DEBUG) {
-            mdclog_write(MDCLOG_DEBUG, "epoll_ctl EPOLL_CTL_MOD (may chack not to quit here), %s, %s %d",
+            mdclog_write(MDCLOG_DEBUG, "epoll_ctl EPOLL_CTL_MOD (may check not to quit here), %s, %s %d",
                          strerror(errno), __func__, __LINE__);
         }
         close(peerInfo->fileDescriptor);
@@ -2419,7 +2468,7 @@ int modifyToEpoll(int epoll_fd,
             free(tmp);
         }
         sctpMap->erase(key);
-        mdclog_write(MDCLOG_ERR, "epoll_ctl EPOLL_CTL_ADD (may chack not to quit here)");
+        mdclog_write(MDCLOG_ERR, "epoll_ctl EPOLL_CTL_ADD (may check not to quit here)");
         return -1;
     }
     return 0;
@@ -2516,7 +2565,7 @@ string translateRmrErrorMessages(int state) {
             str = "RMR_OK - state is good";
             break;
         case RMR_ERR_BADARG:
-            str = "RMR_ERR_BADARG - argument passd to function was unusable";
+            str = "RMR_ERR_BADARG - argument passed to function was unusable";
             break;
         case RMR_ERR_NOENDPT:
             str = "RMR_ERR_NOENDPT - send//call could not find an endpoint based on msg type";