From: aa7133@att.com Date: Thu, 12 Dec 2019 07:14:29 +0000 (+0200) Subject: version 3.0.4 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=5a72453a0b8dd6c8192ba5142a61e3933709d3e5;p=ric-plt%2Fe2.git version 3.0.4 fix the length bug add testing (not yet produce the exe) Change-Id: Ie1da1d34e6cedb14d148dddf5a45df40f4b01d7a Signed-off-by: aa7133@att.com --- diff --git a/.gitignore b/.gitignore index 8a5cc82..2bf45f0 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ cmake-build-release/ cmake_install.cmake e2.cbp e2 +T1 setUpTest subscriptionTest CMakeLists.txt diff --git a/RIC-E2-TERMINATION/TEST/T1/E2Builder.h b/RIC-E2-TERMINATION/TEST/T1/E2Builder.h index ea284a3..63eeb6d 100644 --- a/RIC-E2-TERMINATION/TEST/T1/E2Builder.h +++ b/RIC-E2-TERMINATION/TEST/T1/E2Builder.h @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -41,7 +42,11 @@ #include "asn1cFiles/ProtocolIE-Field.h" +#include "asn1cFiles/FDD-Info.h" +#include "asn1cFiles/TDD-Info.h" + #include "asn1cFiles/constr_TYPE.h" +#include "asn1cFiles/asn_constant.h" using namespace std; @@ -61,6 +66,40 @@ static void checkAndPrint(asn_TYPE_descriptor_t *typeDescriptor, void *data, cha } } +BIT_STRING_t *createBIT_STRING(int size, int unusedBits, uint8_t *data) { + printEntry("BIT_STRING_t", __func__) + auto *bitString = (BIT_STRING_t *)calloc(1, sizeof(BIT_STRING_t)); + ASN_STRUCT_RESET(asn_DEF_BIT_STRING, bitString); + bitString->size = size; + bitString->bits_unused = unusedBits; + bitString->buf = (uint8_t *)calloc(1, size); + // set bits to zero + data[bitString->size - 1] = ((unsigned)(data[bitString->size - 1] >> + (unsigned)bitString->bits_unused) << (unsigned)bitString->bits_unused); + memcpy(bitString->buf, data, size); + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + checkAndPrint(&asn_DEF_BIT_STRING, bitString, (char *)"BIT_STRING_t", __func__); + } + + return bitString; +} + + +OCTET_STRING_t *createOCTET_STRING(const unsigned char *data, int size) { + printEntry("OCTET_STRING_t", __func__) + auto *octs = (PLMN_Identity_t *)calloc(1, sizeof(PLMN_Identity_t)); + ASN_STRUCT_RESET(asn_DEF_OCTET_STRING, octs); + octs->size = size; + octs->buf = (uint8_t *)calloc(1, size); + memcpy(octs->buf, data, size); + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + checkAndPrint(&asn_DEF_OCTET_STRING, octs, (char *)"OCTET_STRING_t", __func__); + } + return octs; +} + PLMN_Identity_t *createPLMN_ID(const unsigned char *data) { printEntry("PLMN_Identity_t", __func__) @@ -73,7 +112,6 @@ PLMN_Identity_t *createPLMN_ID(const unsigned char *data) { if (mdclog_level_get() >= MDCLOG_DEBUG) { checkAndPrint(&asn_DEF_PLMN_Identity, plmnId, (char *)"PLMN_Identity_t", __func__); } - return plmnId; } @@ -155,6 +193,159 @@ GlobalENB_ID_t *createGlobalENB_ID(PLMN_Identity_t *plmnIdentity, ENB_ID_t *enbI return genbId; } + +ECGI_t *CreateECGI(PLMN_Identity_t *plmnIdentity, BIT_STRING_t * eUtran) { + printEntry("ECGI_t", __func__) + auto *ecgi = (ECGI_t *)calloc(1, sizeof(ECGI_t)); + ASN_STRUCT_RESET(asn_DEF_ECGI, ecgi); + + memcpy(&ecgi->pLMN_Identity, plmnIdentity, sizeof(PLMN_Identity_t)); + memcpy(&ecgi->eUTRANcellIdentifier, eUtran, sizeof(BIT_STRING_t)); + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + checkAndPrint(&asn_DEF_ECGI, ecgi, (char *)"ECGI_t", __func__); + } + return ecgi; +} + +// +//FDD-Info ::= SEQUENCE { +// uL-EARFCN EARFCN, +// dL-EARFCN EARFCN, +// uL-Transmission-Bandwidth Transmission-Bandwidth, +// dL-Transmission-Bandwidth Transmission-Bandwidth, +// iE-Extensions ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL, +// ... +//} +// +//FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +// { ID id-UL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| +// { ID id-DL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| +// { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| +// { ID id-OffsetOfNbiotChannelNumberToUL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| +// { ID id-NRS-NSSS-PowerOffset CRITICALITY ignore EXTENSION NRS-NSSS-PowerOffset PRESENCE optional}| +// { ID id-NSSS-NumOccasionDifferentPrecoder CRITICALITY ignore EXTENSION NSSS-NumOccasionDifferentPrecoder PRESENCE optional}, +// ... +//} + +static FDD_Info_t *create_fdd(long dL_EARFCN, + long uL_EARFCN, + e_Transmission_Bandwidth ultb, + e_Transmission_Bandwidth dltb) { + printEntry("FDD_Info_t", __func__) + auto *fdd = (FDD_Info_t *)calloc(1, sizeof(FDD_Info_t)); + ASN_STRUCT_RESET(asn_DEF_FDD_Info, fdd); + + //EARFCN ::= INTEGER (0..maxEARFCN) + + if (dL_EARFCN >= 0 && dL_EARFCN <= maxEARFCN) { + fdd->dL_EARFCN = dL_EARFCN; + } else { + fdd->dL_EARFCN = maxEARFCN; + } + if (uL_EARFCN >= 0 && uL_EARFCN <= maxEARFCN) { + fdd->uL_EARFCN = uL_EARFCN; + } else { + fdd->uL_EARFCN = maxEARFCN; + } + + fdd->uL_Transmission_Bandwidth = ultb; + fdd->dL_Transmission_Bandwidth = dltb; + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + checkAndPrint(&asn_DEF_FDD_Info, fdd, (char *)"FDD_Info_t", __func__); + } + + return fdd; +} + +SpecialSubframe_Info_t *createSpecialSubframe_Info(e_CyclicPrefixDL eCyclicPrefixDl, + e_CyclicPrefixUL eCyclicPrefixUl, + e_SpecialSubframePatterns eSpecialSubframePatterns) { + printEntry("SpecialSubframe_Info_t", __func__) + auto *ssf = (SpecialSubframe_Info_t *)calloc(1, sizeof(SpecialSubframe_Info_t)); + ASN_STRUCT_RESET(asn_DEF_SpecialSubframe_Info, ssf); + + ssf->cyclicPrefixDL = eCyclicPrefixDl; + ssf->cyclicPrefixUL = eCyclicPrefixUl; + ssf->specialSubframePatterns = eSpecialSubframePatterns; + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + checkAndPrint(&asn_DEF_SpecialSubframe_Info, ssf, (char *)"SpecialSubframe_Info_t", __func__); + } + return ssf; +} + +//TDD-Info ::= SEQUENCE { +// eARFCN EARFCN, +// transmission-Bandwidth Transmission-Bandwidth, +// subframeAssignment SubframeAssignment, +// specialSubframe-Info SpecialSubframe-Info, +// iE-Extensions ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL, +// ... +//} +// +//TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +// { ID id-AdditionalSpecialSubframe-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframe-Info PRESENCE optional}| +// { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| +// { ID id-AdditionalSpecialSubframeExtension-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframeExtension-Info PRESENCE optional}| +// { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| +// { ID id-NBIoT-UL-DL-AlignmentOffset CRITICALITY reject EXTENSION NBIoT-UL-DL-AlignmentOffset PRESENCE optional}, +// ... +//} + +static TDD_Info_t *create_Tdd(long eARFCN, + e_Transmission_Bandwidth tb, + e_SubframeAssignment sfA, + SpecialSubframe_Info_t *ssfi) { + printEntry("TDD_Info_t", __func__) + auto *tdd = (TDD_Info_t *)calloc(1, sizeof(FDD_Info_t)); + ASN_STRUCT_RESET(asn_DEF_TDD_Info, tdd); + + if (eARFCN >= 0 && eARFCN <= maxEARFCN) { + tdd->eARFCN = eARFCN; + } else { + tdd->eARFCN = maxEARFCN; + } + tdd->transmission_Bandwidth = tb; + tdd->subframeAssignment = sfA; + memcpy(&tdd->specialSubframe_Info, ssfi, sizeof(SpecialSubframe_Info_t)); + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + checkAndPrint(&asn_DEF_TDD_Info, tdd, (char *)"TDD_Info_t", __func__); + } + return tdd; +} + +static EUTRA_Mode_Info_t *createEUTRA_Mode_Info_FDD(FDD_Info_t *fdd) { + printEntry("EUTRA_Mode_Info_t", __func__) + auto *eutraModeInfo = (EUTRA_Mode_Info_t *)calloc(1, sizeof(EUTRA_Mode_Info_t)); + ASN_STRUCT_RESET(asn_DEF_EUTRA_Mode_Info, eutraModeInfo); + + eutraModeInfo->present = EUTRA_Mode_Info_PR_fDD; + eutraModeInfo->choice.fDD = fdd; + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + checkAndPrint(&asn_DEF_EUTRA_Mode_Info, eutraModeInfo, (char *)"EUTRA_Mode_Info_t", __func__); + } + return eutraModeInfo; + +} + +static EUTRA_Mode_Info_t *createEUTRA_Mode_Info_TDD(TDD_Info_t *tdd) { + printEntry("EUTRA_Mode_Info_t", __func__) + auto *eutraModeInfo = (EUTRA_Mode_Info_t *)calloc(1, sizeof(EUTRA_Mode_Info_t)); + ASN_STRUCT_RESET(asn_DEF_EUTRA_Mode_Info, eutraModeInfo); + + eutraModeInfo->present = EUTRA_Mode_Info_PR_tDD; + eutraModeInfo->choice.tDD = tdd; + + if (mdclog_level_get() >= MDCLOG_DEBUG) { + checkAndPrint(&asn_DEF_EUTRA_Mode_Info, eutraModeInfo, (char *)"EUTRA_Mode_Info_t", __func__); + } + return eutraModeInfo; + +} //ServedCell-Information ::= SEQUENCE { // pCI PCI, // cellId ECGI, @@ -179,12 +370,24 @@ GlobalENB_ID_t *createGlobalENB_ID(PLMN_Identity_t *plmnIdentity, ENB_ID_t *enbI // ... //} -ServedCell_Information_t *createervedCellIno(long pci) { +ServedCell_Information_t *createServedCellInfo(long pci, + ECGI_t *cellId, + TAC_t *tac, + vector &broadcastPLMNs, + EUTRA_Mode_Info_t *eutranModeInfo) { printEntry("ServedCell_Information_t", __func__) auto servedCellinfo = (ServedCell_Information_t *)calloc(1, sizeof(ServedCell_Information_t)); + ASN_STRUCT_RESET(asn_DEF_ServedCell_Information, servedCellinfo); servedCellinfo->pCI = pci; -// servedCellinfo->cellId = + memcpy(&servedCellinfo->cellId, cellId, sizeof(ECGI_t)); + memcpy(&servedCellinfo->tAC, tac, sizeof(TAC_t)); + + for (auto v : broadcastPLMNs) { + ASN_SEQUENCE_ADD(&servedCellinfo->broadcastPLMNs.list, &v); + } + + memcpy(&servedCellinfo->eUTRA_Mode_Info, eutranModeInfo, sizeof(EUTRA_Mode_Info_t)); if (mdclog_level_get() >= MDCLOG_DEBUG) { checkAndPrint(&asn_DEF_ServedCell_Information, servedCellinfo, (char *)"ServedCell_Information_t", __func__); diff --git a/RIC-E2-TERMINATION/sctpThread.cpp b/RIC-E2-TERMINATION/sctpThread.cpp index b5da1b7..ea48672 100644 --- a/RIC-E2-TERMINATION/sctpThread.cpp +++ b/RIC-E2-TERMINATION/sctpThread.cpp @@ -203,6 +203,12 @@ int main(const int argc, char **argv) { mdclog_write(MDCLOG_INFO, "running parameters"); } mdclog_mdc_clean(); + sctpParams.ka_message_length = snprintf(sctpParams.ka_message, 4096, "{\"address\": \"%s:%d\"," + "\"fqdn\": \"%s\"}", + (const char *)sctpParams.myIP.c_str(), + sctpParams.rmrPort, + sctpParams.fqdn.c_str()); + // Files written to the current working directory boostLogger = logging::add_file_log( @@ -278,11 +284,6 @@ int main(const int argc, char **argv) { } void handleTermInit(sctp_params_t &sctpParams) { - sctpParams.ka_message_length = snprintf(sctpParams.ka_message, 4096, "{\"address\": \"%s:%d\"," - "\"fqdn\": \"%s\"}", - (const char *)sctpParams.myIP.c_str(), - sctpParams.rmrPort, - sctpParams.fqdn.c_str()); sendTermInit(sctpParams); //send to e2 manager init of e2 term //E2_TERM_INIT @@ -440,10 +441,15 @@ void listener(sctp_params_t *params) { rmrMessageBuffer.rcvMessage = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE); rmrMessageBuffer.sendMessage = rmr_alloc_msg(rmrMessageBuffer.rmrCtx, RECEIVE_XAPP_BUFFER_SIZE); + memcpy(rmrMessageBuffer.ka_message, params->ka_message, params->ka_message_length); rmrMessageBuffer.ka_message_len = params->ka_message_length; rmrMessageBuffer.ka_message[rmrMessageBuffer.ka_message_len] = 0; + if (mdclog_level_get() >= MDCLOG_DEBUG) { + mdclog_write(MDCLOG_DEBUG, "keep alive message is : %s", rmrMessageBuffer.ka_message); + } + ReportingMessages_t message {}; for (int i = 0; i < MAX_RMR_BUFF_ARRY; i++) {