LC coverage for E2 in ORAN
[ric-plt/e2.git] / RIC-E2-TERMINATION / sctpThread.h
index 543c94c..10f572b 100644 (file)
@@ -50,6 +50,7 @@
 #include <map>
 #include <sys/inotify.h>
 #include <csignal>
+#include <future>
 
 #include <rmr/rmr.h>
 #include <rmr/RIC_message_types.h>
 
 #include "cxxopts.hpp"
 //#include "config-cpp/include/config-cpp/config-cpp.h"
+#include <zlib.h>
+#include <prometheus/counter.h>
+#include <prometheus/exposer.h>
+#include <prometheus/gateway.h>
+#include <prometheus/registry.h>
 
-#ifdef __TRACING__
-#include "openTracing.h"
-#endif
+using namespace prometheus;
 
 #include "mapWrapper.h"
 
@@ -108,16 +112,18 @@ namespace expr = boost::log::expressions;
 
 #define MAXEVENTS 128
 
-#define RECEIVE_SCTP_BUFFER_SIZE (8 * 1024)
-#define RECEIVE_XAPP_BUFFER_SIZE RECEIVE_SCTP_BUFFER_SIZE 
+#define RECEIVE_SCTP_BUFFER_SIZE (256 * 1024)
+#define RECEIVE_XAPP_BUFFER_SIZE RECEIVE_SCTP_BUFFER_SIZE
 
 typedef mapWrapper Sctp_Map_t;
 
 
+
 #define VOLUME_URL_SIZE 256
 #define KA_MESSAGE_SIZE 2048
 
 typedef struct sctp_params {
+    int      epollTimeOut = -1;
     uint16_t rmrPort = 0;
     uint16_t sctpPort = SRC_PORT;
     int      epoll_fd = 0;
@@ -129,7 +135,7 @@ typedef struct sctp_params {
     Sctp_Map_t *sctpMap = nullptr;
     char      ka_message[KA_MESSAGE_SIZE] {};
     int       ka_message_length = 0;
-    char       rmrAddress[256] {}; // "tcp:portnumber" "tcp:5566" listen to all address on port 5566
+    char       rmrAddress[256] {}; // "tcp:port number" "tcp:5566" listen to all address on port 5566
     mdclog_severity_t logLevel = MDCLOG_INFO;
     char volume[VOLUME_URL_SIZE];
     string myIP {};
@@ -138,9 +144,25 @@ typedef struct sctp_params {
     string configFilePath {};
     string configFileName {};
     bool trace = true;
-    //shared_timed_mutex fence; // moved to mapWrapper
+    shared_ptr<prometheus::Registry> prometheusRegistry;
+    string prometheusPort {"8088"};
+    Family<Counter> *prometheusFamily;
+    Exposer *prometheusExposer = nullptr;
 } sctp_params_t;
 
+// RAN to RIC
+#define IN_INITI 0 //INITIATING
+#define IN_SUCC 1 //SUCCESSFUL
+#define IN_UN_SUCC 2 //UN-Successful
+
+// RIC To RAN
+#define OUT_INITI 3 //INITIATING
+#define OUT_SUCC 4 //SUCCESSFUL
+#define OUT_UN_SUCC 5 //UN-Successful
+
+#define MSG_COUNTER 0
+#define BYTES_COUNTER 1
+
 typedef struct ConnectedCU {
     int fileDescriptor = 0;
     char hostName[NI_MAXHOST] {};
@@ -152,17 +174,19 @@ typedef struct ConnectedCU {
     bool isConnected = false;
     bool gotSetup = false;
     sctp_params_t *sctpParams = nullptr;
+    Counter *counters[6][2][ProcedureCode_id_RICsubscriptionDelete + 1] {};
 } ConnectedCU_t ;
 
-#define MAX_RMR_BUFF_ARRY 32
+
+#define MAX_RMR_BUFF_ARRAY 32
 typedef struct RmrMessagesBuffer {
     char ka_message[KA_MESSAGE_SIZE] {};
     int  ka_message_len = 0;
     void *rmrCtx = nullptr;
     rmr_mbuf_t *sendMessage= nullptr;
-    rmr_mbuf_t *sendBufferedMessages[MAX_RMR_BUFF_ARRY] {};
+    //rmr_mbuf_t *sendBufferedMessages[MAX_RMR_BUFF_ARRAY] {};
     rmr_mbuf_t *rcvMessage= nullptr;
-    rmr_mbuf_t *rcvBufferedMessages[MAX_RMR_BUFF_ARRY] {};
+    //rmr_mbuf_t *rcvBufferedMessages[MAX_RMR_BUFF_ARRAY] {};
 } RmrMessagesBuffer_t;
 
 typedef struct formatedMessage {
@@ -209,7 +233,6 @@ void handlepoll_error(struct epoll_event &event,
 
 void cleanHashEntry(ConnectedCU_t *peerInfo, Sctp_Map_t *m);
 
-int getSetupRequestMetaData(ReportingMessages_t &message, char *data, char *host, uint16_t &port);
 
 /**
  *
@@ -221,13 +244,13 @@ void getRequestMetaData(ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMe
 /**
  *
  * @param sctpMap
- * @param messagBuffer
+ * @param messageBuffer
  * @param message
  * @param failedMesgId
  * @return
  */
 int sendMessagetoCu(Sctp_Map_t *sctpMap,
-                    RmrMessagesBuffer_t &messagBuffer,
+                    RmrMessagesBuffer_t &messageBuffer,
                     ReportingMessages_t &message,
                     int failedMesgId);
 
@@ -291,38 +314,23 @@ void getRmrContext(sctp_params_t &pSctpParams);
 
 /**
  *
- * @param epoll_fd
- * @param rmrCtx
  * @param sctpMap
- * @param messagBuffer
+ * @param rmrMessageBuffer
+ * @param ts
  * @return
  */
-int receiveXappMessages(int epoll_fd,
-                        Sctp_Map_t *sctpMap,
+int receiveXappMessages(Sctp_Map_t *sctpMap,
                         RmrMessagesBuffer_t &rmrMessageBuffer,
                         struct timespec &ts);
 
 /**
  *
- * @param rmrMessageBuffer
- * @param message
- * @param epoll_fd
- * @param sctpMap
- * @return
- */
-int connectToCUandSetUp(RmrMessagesBuffer_t &rmrMessageBuffer,
-                           ReportingMessages_t &message,
-                           int epoll_fd,
-                           Sctp_Map_t *sctpMap);
-
-/**
- *
- * @param messagBuffer
+ * @param messageBuffer
  * @param failedMsgId
  * @param sctpMap
  * @return
  */
-int sendDirectionalSctpMsg(RmrMessagesBuffer_t &messagBuffer,
+int sendDirectionalSctpMsg(RmrMessagesBuffer_t &messageBuffer,
                            ReportingMessages_t &message,
                            int failedMsgId,
                            Sctp_Map_t *sctpMap);
@@ -333,6 +341,7 @@ int sendDirectionalSctpMsg(RmrMessagesBuffer_t &messagBuffer,
  * @param rmrMessageBuffer
  */
 void asnInitiatingRequest(E2AP_PDU_t *pdu,
+                          Sctp_Map_t *sctpMap,
                           ReportingMessages_t &message,
                           RmrMessagesBuffer_t &rmrMessageBuffer);
 /**
@@ -342,9 +351,9 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu,
  * @param sctpMap
  * @param rmrMessageBuffer
  */
-void asnSuccsesfulMsg(E2AP_PDU_t *pdu,
-                      ReportingMessages_t &message,
+void asnSuccessfulMsg(E2AP_PDU_t *pdu,
                       Sctp_Map_t *sctpMap,
+                      ReportingMessages_t &message,
                       RmrMessagesBuffer_t &rmrMessageBuffer);
 /**
  *
@@ -354,8 +363,8 @@ void asnSuccsesfulMsg(E2AP_PDU_t *pdu,
  * @param rmrMessageBuffer
  */
 void asnUnSuccsesfulMsg(E2AP_PDU_t *pdu,
-                        ReportingMessages_t &message,
                         Sctp_Map_t *sctpMap,
+                        ReportingMessages_t &message,
                         RmrMessagesBuffer_t &rmrMessageBuffer);
 
 /**
@@ -402,6 +411,14 @@ void buildJsonMessage(ReportingMessages_t &message);
  */
 string translateRmrErrorMessages(int state);
 
+int buildConfiguration(sctp_params_t &sctpParams);
+void startPrometheus(sctp_params_t &sctpParams);
+static int enable_log_change_notify(const char* fileName);
+static int register_log_change_notify(const char *fileName);
+static void * monitor_loglevel_change_handler(void* arg);
+void  update_mdc_log_level_severity(char* log_level);
+static char* parse_file(char* filename);
+
 
 static inline uint64_t rdtscp(uint32_t &aux) {
     uint64_t rax,rdx;
@@ -412,4 +429,10 @@ static inline uint64_t rdtscp(uint32_t &aux) {
 #define RIC_SCTP_CONNECTION_FAILURE  10080
 #endif
 
+#ifdef UNIT_TEST
+    #define FILE_DESCRIPTOR 53424 /*Dummy value for file descriptor only when UT is defined*/
+#endif
+
+int buildListeningPort(sctp_params_t &sctpParams);
+
 #endif //X2_SCTP_THREAD_H