X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=RIC-E2-TERMINATION%2FsctpThread.h;h=f5c4fb9a329e0eae9fdf92ed2403e0100ae00226;hb=refs%2Fchanges%2F62%2F12862%2F1;hp=6ea3748c66c2892745175782fb6e4c4531aead0c;hpb=5de023528499a2abd16c00ea18019e25c808365a;p=ric-plt%2Fe2.git diff --git a/RIC-E2-TERMINATION/sctpThread.h b/RIC-E2-TERMINATION/sctpThread.h index 6ea3748..f5c4fb9 100644 --- a/RIC-E2-TERMINATION/sctpThread.h +++ b/RIC-E2-TERMINATION/sctpThread.h @@ -41,6 +41,8 @@ #include #include #include +#include +#include #include #include #include @@ -51,6 +53,7 @@ #include #include #include +#include #include #include @@ -112,7 +115,7 @@ namespace expr = boost::log::expressions; #define MAXEVENTS 128 -#define RECEIVE_SCTP_BUFFER_SIZE (256 * 1024) +#define RECEIVE_SCTP_BUFFER_SIZE (8 * 1024) #define RECEIVE_XAPP_BUFFER_SIZE RECEIVE_SCTP_BUFFER_SIZE typedef mapWrapper Sctp_Map_t; @@ -122,6 +125,13 @@ typedef mapWrapper Sctp_Map_t; #define VOLUME_URL_SIZE 256 #define KA_MESSAGE_SIZE 2048 +enum E2T_Internal_Counters +{ + SCTP_ABORT_INITIATED_BY_E2NODE = 0, + INVALID_MESSAGE_RECEIVED = 1, + E2T_MAX_INTERNAL_COUNTER = 2, +}; + typedef struct sctp_params { int epollTimeOut = -1; uint16_t rmrPort = 0; @@ -135,8 +145,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 - mdclog_severity_t logLevel = MDCLOG_INFO; + char rmrAddress[256] {}; // "tcp:port number" "tcp:5566" listen to all address on port 5566 char volume[VOLUME_URL_SIZE]; string myIP {}; string fqdn {}; @@ -148,21 +157,25 @@ typedef struct sctp_params { string prometheusPort {"8088"}; Family *prometheusFamily; Exposer *prometheusExposer = nullptr; + Counter *e2tCounters[6][2][ProcedureCode_id_RICsubscriptionDeleteRequired + 1] {}; + Counter *e2tInternalCounters[E2T_Internal_Counters::E2T_MAX_INTERNAL_COUNTER] {}; } sctp_params_t; // RAN to RIC #define IN_INITI 0 //INITIATING -#define IN_SUCC 1 //SUCCESSFULL -#define IN_UN_SUCC 2 //UN-Successfull +#define IN_SUCC 1 //SUCCESSFUL +#define IN_UN_SUCC 2 //UN-Successful // RIC To RAN #define OUT_INITI 3 //INITIATING -#define OUT_SUCC 4 //SUCCESSFULL -#define OUT_UN_SUCC 5 //UN-Successfull +#define OUT_SUCC 4 //SUCCESSFUL +#define OUT_UN_SUCC 5 //UN-Successful #define MSG_COUNTER 0 #define BYTES_COUNTER 1 +#define INVALID_STREAM_ID -1 + typedef struct ConnectedCU { int fileDescriptor = 0; char hostName[NI_MAXHOST] {}; @@ -174,19 +187,22 @@ typedef struct ConnectedCU { bool isConnected = false; bool gotSetup = false; sctp_params_t *sctpParams = nullptr; - Counter *counters[6][2][ProcedureCode_id_RICsubscriptionDelete + 1] {}; + Counter *counters[6][2][ProcedureCode_id_RICsubscriptionDeleteRequired + 1] {}; + bool isSingleStream = false; + int singleStreamId = 0; + Counter *e2tInternalCounters[E2T_Internal_Counters::E2T_MAX_INTERNAL_COUNTER] {}; } 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 { @@ -206,6 +222,53 @@ typedef struct ReportingMessages { char buffer[RECEIVE_SCTP_BUFFER_SIZE * 8] {}; } ReportingMessages_t; +enum E2T_Procedure_States +{ + E2_SETUP_PROCEDURE_NOT_INITIATED = 0, + E2_SETUP_PROCEDURE_ONGOING = 1, + E2_SETUP_PROCEDURE_COMPLETED = 2, + RIC_SERVICE_UPDATE_PROCEDURE_ONGOING = 3, + RIC_SERVICE_UPDATE_PROCEDURE_COMPLETED = 4, + RIC_SUBS_PROCEDURE_ONGOING = 5, + RIC_SUBS_PROCEDURE_COMPLETED = 6, + RIC_INDICATION_PROCEDURE_ONGOING = 7, + RIC_INDICATION_PROCEDURE_COMPLETED = 8, + RIC_SUBS_DEL_PROCEDURE_ONGOING = 9, + RIC_SUBS_DEL_PROCEDURE_COMPLETED = 10, + CONTROL_PROCEDURE_ONGOING = 11, + CONTROL_PROCEDURE_COMPLETED = 12, + E2_NODE_CONF_UPDATE_PROCEDURE_ONGOING = 13, + E2_NODE_CONF_UPDATE_PROCEDURE_COMPLETED = 14, + RESET_PROCEDURE_ONGOING = 15, + RESET_PROCEDURE_COMPLETED = 16, +}; + +struct E2NodeConnectionHandling +{ + E2T_Procedure_States e2tProcedureOngoingStatus; + long e2SetupProcedureTransactionId; +}; + +constexpr int negativeOne = -1; +constexpr int negativeSix = -6; +constexpr int negativeSeven = -7; +constexpr int numberZero = 0; +constexpr int numberOne = 1; +constexpr int numberTwo = 2; +constexpr int numberThree = 3; +constexpr int numberFour = 4; +constexpr int numberFive = 5; +constexpr int numberTwenty = 20; + +constexpr uint8_t sendMsgMaxBitPosition = 2; +constexpr uint8_t sendMsgToE2MBitSetPosition = 0; +constexpr uint8_t sendMsgToSubMgrBitSetPosition = 1; + +constexpr uint8_t requiredIePresentMaxBitSetPosition = 3; +constexpr uint8_t transactionIdIeBitSetPosition = 0; +constexpr uint8_t ricRequestIdIeBitSetPosition = 1; +constexpr uint8_t causeIeBitSetPosition = 2; + cxxopts::ParseResult parse(int argc, char *argv[], sctp_params_t &pSctpParams); int buildInotify(sctp_params_t &sctpParams); @@ -244,13 +307,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); @@ -314,10 +377,9 @@ void getRmrContext(sctp_params_t &pSctpParams); /** * - * @param epoll_fd - * @param rmrCtx * @param sctpMap - * @param messagBuffer + * @param rmrMessageBuffer + * @param ts * @return */ int receiveXappMessages(Sctp_Map_t *sctpMap, @@ -326,12 +388,12 @@ int receiveXappMessages(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); @@ -344,7 +406,7 @@ int sendDirectionalSctpMsg(RmrMessagesBuffer_t &messagBuffer, void asnInitiatingRequest(E2AP_PDU_t *pdu, Sctp_Map_t *sctpMap, ReportingMessages_t &message, - RmrMessagesBuffer_t &rmrMessageBuffer); + RmrMessagesBuffer_t &rmrMessageBuffer,int streamId); /** * * @param pdu @@ -352,7 +414,7 @@ void asnInitiatingRequest(E2AP_PDU_t *pdu, * @param sctpMap * @param rmrMessageBuffer */ -void asnSuccsesfulMsg(E2AP_PDU_t *pdu, +void asnSuccessfulMsg(E2AP_PDU_t *pdu, Sctp_Map_t *sctpMap, ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuffer); @@ -412,6 +474,15 @@ 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); +char* getinterfaceip(); +static char* parse_file(char* filename); + static inline uint64_t rdtscp(uint32_t &aux) { uint64_t rax,rdx; @@ -422,4 +493,20 @@ 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); +void buildE2TPrometheusCounters(sctp_params_t &sctpParams); + +int fetchStreamId(ConnectedCU_t *peerInfo, ReportingMessages_t &message); +void removeE2ConnectionEntryFromMap(char* eNBName); +bool getE2tProcedureOngoingStatus(char *enbName, E2NodeConnectionHandling &e2NodeConnectionHandling); +void setE2ProcedureOngoingStatus(char *enbName, E2T_Procedure_States state); +void insertE2ProcedureOngoing(char *enbName, long &transactionID); +E2T_Procedure_States currentE2tProcedureOngoingStatus(char *enbName); +void printEntryPresentInMap(); +void handleE2SetupReq(ReportingMessages_t &message, RmrMessagesBuffer_t &rmrMessageBuffer, E2AP_PDU_t *pdu, long &transactionID, int streamId, Sctp_Map_t *sctpMap); +bitset getSendMsgBitSetValue(int procedureCode, bitset isRequiredIesPresent, char* enbName); #endif //X2_SCTP_THREAD_H