* 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.
- */
+*/
/*
* 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
#include <shared_mutex>
#include <iterator>
#include <map>
+#include <sys/inotify.h>
+#include <csignal>
#include <rmr/rmr.h>
#include <rmr/RIC_message_types.h>
#include <boost/log/sources/global_logger_storage.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
-
+#include <boost/filesystem.hpp>
#include <mdclog/mdclog.h>
-#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"
#include "base64.h"
+#include "ReadConfigFile.h"
+
using namespace std;
namespace logging = boost::log;
namespace src = boost::log::sources;
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;
#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 {
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);
* @param pSpan
* @return
*/
-void *getRmrContext(char *rmrAddress, otSpan *pSpan);
+void getRmrContext(sctp_params_t &pSctpParams, otSpan *pSpan);
/**
*
*/
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