X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=RIC-E2-TERMINATION%2FsctpThread.h;h=26422bf4473ec6f5313d78a1eb606eff7409c74f;hb=342843e307ac2e1d915b37350424f20123c65d10;hp=419a2f64fddabca9ddb4bfce84793a0eb25c61a9;hpb=3aec07fc2d80d69667b40ff0a69817646211ea31;p=ric-plt%2Fe2.git diff --git a/RIC-E2-TERMINATION/sctpThread.h b/RIC-E2-TERMINATION/sctpThread.h index 419a2f6..26422bf 100644 --- a/RIC-E2-TERMINATION/sctpThread.h +++ b/RIC-E2-TERMINATION/sctpThread.h @@ -15,6 +15,11 @@ * limitations under the License. */ +/* + * This source code is part of the near-RT RIC (RAN Intelligent Controller) + * platform project (RICP). + */ + #ifndef X2_SCTP_THREAD_H #define X2_SCTP_THREAD_H @@ -43,6 +48,8 @@ #include #include #include +#include +#include #include #include @@ -58,17 +65,20 @@ #include #include #include - +#include #include -#include "3rdparty/asn1cFiles/E2AP-PDU.h" -#include <3rdparty/asn1cFiles/ProtocolIE-Container.h> -#include "3rdparty/asn1cFiles/InitiatingMessage.h" -#include "3rdparty/asn1cFiles/SuccessfulOutcome.h" -#include "3rdparty/asn1cFiles/UnsuccessfulOutcome.h" -#include "3rdparty/asn1cFiles/ProtocolIE-Container.h" -#include "3rdparty/asn1cFiles/ProtocolIE-Field.h" +#include "asn1cFiles/E2AP-PDU.h" +#include "asn1cFiles/ProtocolIE-Container.h" +#include "asn1cFiles/InitiatingMessage.h" +#include "asn1cFiles/SuccessfulOutcome.h" +#include "asn1cFiles/UnsuccessfulOutcome.h" +#include "asn1cFiles/ProtocolIE-Container.h" +#include "asn1cFiles/ProtocolIE-Field.h" + +#include "cxxopts.hpp" +//#include "config-cpp/include/config-cpp/config-cpp.h" #ifdef __TRACING__ #include "openTracing.h" @@ -78,6 +88,8 @@ #include "base64.h" +#include "ReadConfigFile.h" + using namespace std; namespace logging = boost::log; namespace src = boost::log::sources; @@ -109,11 +121,21 @@ typedef struct sctp_params { uint16_t rmrPort = 0; int epoll_fd = 0; int rmrListenFd = 0; + int inotifyFD = 0; + int inotifyWD = 0; void *rmrCtx = nullptr; Sctp_Map_t *sctpMap = nullptr; + char ka_message[4096] {}; + 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 volume[VOLUME_URL_SIZE]; + string myIP {}; + string fqdn {}; + string podName {}; + string configFilePath {}; + string configFileName {}; + bool trace = true; //shared_timed_mutex fence; // moved to mapWrapper } sctp_params_t; @@ -130,11 +152,13 @@ typedef struct ConnectedCU { #define MAX_RMR_BUFF_ARRY 32 typedef struct RmrMessagesBuffer { - void *rmrCtx; - rmr_mbuf_t *sendMessage; - rmr_mbuf_t *sendBufferedMessages[MAX_RMR_BUFF_ARRY]; - rmr_mbuf_t *rcvMessage; - rmr_mbuf_t *rcvBufferedMessages[MAX_RMR_BUFF_ARRY]; + char ka_message[4096] {}; + int ka_message_len = 0; + void *rmrCtx = nullptr; + rmr_mbuf_t *sendMessage= nullptr; + rmr_mbuf_t *sendBufferedMessages[MAX_RMR_BUFF_ARRY] {}; + rmr_mbuf_t *rcvMessage= nullptr; + rmr_mbuf_t *rcvBufferedMessages[MAX_RMR_BUFF_ARRY] {}; } RmrMessagesBuffer_t; typedef struct formatedMessage { @@ -148,17 +172,38 @@ typedef struct formatedMessage { typedef struct ReportingMessages { FormatedMessage_t message; - int outLen; + long outLen; unsigned char base64Data[RECEIVE_SCTP_BUFFER_SIZE * 2]; char buffer[RECEIVE_SCTP_BUFFER_SIZE * 8]; - size_t bufferLen; } ReportingMessages_t; +cxxopts::ParseResult parse(int argc, char *argv[], sctp_params_t &pSctpParams); + +int buildInotify(sctp_params_t &sctpParams); + +void handleTermInit(sctp_params_t &sctpParams); + +void handleConfigChange(sctp_params_t *sctpParams); void listener(sctp_params_t *params); +void sendTermInit(sctp_params_t &sctpParams); + int setSocketNoBlocking(int socket); +void handleEinprogressMessages(struct epoll_event &event, + ReportingMessages_t &message, + RmrMessagesBuffer_t &rmrMessageBuffer, + sctp_params_t *params, + otSpan *pSpan); + +void handlepoll_error(struct epoll_event &event, + ReportingMessages_t &message, + RmrMessagesBuffer_t &rmrMessageBuffer, + sctp_params_t *params, + otSpan *pSpan); + + void cleanHashEntry(ConnectedCU_t *peerInfo, Sctp_Map_t *m, otSpan *pSpan); int getSetupRequestMetaData(ReportingMessages_t &message, char *data, char *host, uint16_t &port, otSpan *pSpan); @@ -248,7 +293,7 @@ int receiveDataFromSctp(struct epoll_event *events, * @param pSpan * @return */ -void *getRmrContext(char *rmrAddress, otSpan *pSpan); +void getRmrContext(sctp_params_t &pSctpParams, otSpan *pSpan); /** * @@ -379,6 +424,12 @@ void buildJsonMessage(ReportingMessages_t &message); */ string translateRmrErrorMessages(int state); + +static inline uint64_t rdtscp(uint32_t &aux) { + uint64_t rax,rdx; + asm volatile ("rdtscp\n" : "=a" (rax), "=d" (rdx), "=c" (aux) : :); + return (rdx << 32) + rax; +} #ifndef RIC_SCTP_CONNECTION_FAILURE #define RIC_SCTP_CONNECTION_FAILURE 10080 #endif