From eb80dc1196968a4d34ece42dd1c2e1d31923dec8 Mon Sep 17 00:00:00 2001 From: Tuan Nguyen Date: Sun, 19 May 2024 12:32:49 +0000 Subject: [PATCH] SIM-117: E2-interface fails trying to connect ricplt/e2 termintor Move to use Ubuntu 22 image, improve log message Change-Id: I3c3887d5e198acbca276fbf25723271dcc6a1c31 Signed-off-by: Tuan Nguyen --- e2sim/Dockerfile_kpm | 18 ++-- .../e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp | 12 +-- e2sim/src/DEF/e2sim_defs.h | 2 - e2sim/src/base/e2sim.cpp | 13 +-- e2sim/src/encoding/encode_e2apv1.cpp | 117 ++++++++------------- e2sim/src/messagerouting/e2ap_message_handler.cpp | 5 +- 6 files changed, 66 insertions(+), 101 deletions(-) diff --git a/e2sim/Dockerfile_kpm b/e2sim/Dockerfile_kpm index a5ddfa7..63a77b0 100755 --- a/e2sim/Dockerfile_kpm +++ b/e2sim/Dockerfile_kpm @@ -32,10 +32,10 @@ # the builder has: git, wget, cmake, gcc/g++, make, python2/3. v7 dropped nng support # ARG CONTAINER_PULL_REGISTRY=nexus3.o-ran-sc.org:10001 -FROM ${CONTAINER_PULL_REGISTRY}/o-ran-sc/bldr-ubuntu18-c-go:1.9.0 as buildenv +FROM ${CONTAINER_PULL_REGISTRY}/o-ran-sc/bldr-ubuntu22-c-go:1.0.0 as buildenv # spaces to save things in the build image to copy to final image -RUN mkdir -p /playpen/assets /playpen/src /playpen/bin /playpen/asn1c +RUN mkdir -p /playpen/assets /playpen/src /playpen/bin /playpen/asn1c /playpen/e2sim ARG SRC=. WORKDIR /playpen @@ -65,10 +65,16 @@ RUN apt-get update \ nmap \ && apt-get clean -COPY e2sm_examples/kpm_e2sm/e2sim_1.0.0_amd64.deb /playpen -COPY e2sm_examples/kpm_e2sm/e2sim-dev_1.0.0_amd64.deb /playpen +COPY asn1c/ /playpen/e2sim/asn1c +COPY e2sm_examples/ /playpen/e2sim/e2sm_examples +COPY src/ /playpen/e2sim/src +COPY CMakeLists.txt /playpen/e2sim -RUN dpkg -i e2sim_1.0.0_amd64.deb e2sim-dev_1.0.0_amd64.deb +RUN mkdir /playpen/e2sim/build && cd /playpen/e2sim/build && cmake .. && make package && cmake .. -DDEV_PKG=1 && make package + +RUN dpkg -i /playpen/e2sim/build/e2sim_1.0.0_amd64.deb /playpen/e2sim/build/e2sim-dev_1.0.0_amd64.deb + +RUN rm -rf /playpen/e2sim RUN mkdir /usr/local/include/nlohmann RUN git clone https://github.com/azadkuh/nlohmann_json_release.git @@ -85,4 +91,4 @@ RUN wc -l /playpen/src/reports.json make install #CMD sleep 100000000000 -#CMD kpm_sim 10.111.138.172 36422 +#CMD kpm_sim 10.111.138.172 32222 diff --git a/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp index c34c370..676c5a1 100755 --- a/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp +++ b/e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp @@ -28,12 +28,12 @@ using namespace std; const char* performance_measurements[] = { - "DRB.RlcSduTransmittedVolumeDL_Filter", - "DRB.RlcSduTransmittedVolumeUL_Filter", - "DRB.PerDataVolumeDLDist.Bin ", - "DRB.PerDataVolumeULDist.Bin", - "DRB.RlcPacketDropRateDLDist", - "DRB.PacketLossRateULDist", + "DRB.RlcSduTransmittedVolumeDL_Filter", + "DRB.RlcSduTransmittedVolumeUL_Filter", + "DRB.PerDataVolumeDLDist.Bin", + "DRB.PerDataVolumeULDist.Bin", + "DRB.RlcPacketDropRateDLDist", + "DRB.PacketLossRateULDist", "L1M.DL-SS-RSRP.SSB", "L1M.DL-SS-SINR.SSB", "L1M.UL-SRS-RSRP" diff --git a/e2sim/src/DEF/e2sim_defs.h b/e2sim/src/DEF/e2sim_defs.h index f10cebf..d2407a8 100755 --- a/e2sim/src/DEF/e2sim_defs.h +++ b/e2sim/src/DEF/e2sim_defs.h @@ -74,6 +74,4 @@ typedef struct { options_t read_input_options(int argc, char *argv[]); -#define min(a, b) ((a) < (b)) ? (a) : (b) - #endif diff --git a/e2sim/src/base/e2sim.cpp b/e2sim/src/base/e2sim.cpp index 45927e5..83535b3 100755 --- a/e2sim/src/base/e2sim.cpp +++ b/e2sim/src/base/e2sim.cpp @@ -40,13 +40,13 @@ std::unordered_map E2Sim::getRegistered_ran_functions() { } void E2Sim::register_subscription_callback(long func_id, SubscriptionCallback cb) { - fprintf(stderr,"%%%%about to register callback for subscription for func_id %d\n", func_id); + LOG_I("About to register callback for subscription for func_id %d", func_id); subscription_callbacks[func_id] = cb; } SubscriptionCallback E2Sim::get_subscription_callback(long func_id) { - fprintf(stderr, "%%%%we are getting the subscription callback for func id %d\n", func_id); + LOG_I("We are getting the subscription callback for func id %d", func_id); SubscriptionCallback cb; try { @@ -62,14 +62,10 @@ void E2Sim::register_e2sm(long func_id, OCTET_STRING_t *ostr) { //Error conditions: //If we already have an entry for func_id - - printf("%%%%about to register e2sm func desc for %d\n", func_id); - + LOG_I("About to register e2sm func desc for %d", func_id); ran_functions_registered[func_id] = ostr; - } - void E2Sim::encode_and_send_sctp_data(E2AP_PDU_t* pdu) { uint8_t *buf; @@ -78,8 +74,7 @@ void E2Sim::encode_and_send_sctp_data(E2AP_PDU_t* pdu) data.len = e2ap_asn1c_encode_pdu(pdu, &buf); memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); if (buf) free(buf); - - sctp_send_data(client_fd, data); + sctp_send_data(client_fd, data); } diff --git a/e2sim/src/encoding/encode_e2apv1.cpp b/e2sim/src/encoding/encode_e2apv1.cpp index 85d8cbf..85dae2a 100755 --- a/e2sim/src/encoding/encode_e2apv1.cpp +++ b/e2sim/src/encoding/encode_e2apv1.cpp @@ -71,8 +71,7 @@ long encoding::get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu) { RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; - fprintf(stderr, "count%d\n", count); - fprintf(stderr, "size%d\n", size); + LOG_I("Number of IEs in original request: %d, size: %d", count, size); RICsubscriptionRequest_IEs__value_PR pres; @@ -82,17 +81,15 @@ long encoding::get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu) { RICsubscriptionRequest_IEs_t *next_ie = ies[i]; pres = next_ie->value.present; - fprintf(stderr, "next present value %d\n", pres); - fprintf(stderr, "value of pres ranfuncid is %d\n", RICsubscriptionRequest_IEs__value_PR_RANfunctionID); + LOG_D("Next present value: %d, pres RAN func id: %d", pres, RICsubscriptionRequest_IEs__value_PR_RANfunctionID); if (pres == RICsubscriptionRequest_IEs__value_PR_RANfunctionID) { - fprintf(stderr, "equal pres to ranfuncid\n"); + LOG_E("equal pres to ranfuncid"); func_id = next_ie->value.choice.RANfunctionID; } - } - fprintf(stderr, "After loop, func_id is %d\n", func_id); + LOG_I("After loop, func_id is %d", func_id); return func_id; @@ -100,7 +97,7 @@ long encoding::get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu) { void encoding::generate_e2apv1_service_update(E2AP_PDU_t *e2ap_pdu, std::vector all_funcs) { char* ran_function_op_type = getenv("RAN_FUNCTION_OP_TYPE"); - LOG_D("Ran funciton : %s", ran_function_op_type); + LOG_D("Ran function : %s", ran_function_op_type); ProtocolIE_ID_t prID; if (ran_function_op_type != NULL) { @@ -668,7 +665,7 @@ void encoding::generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, respfuncid->id = ProtocolIE_ID_id_RANfunctionID; respfuncid->criticality = 0; respfuncid->value.present = RICsubscriptionResponse_IEs__value_PR_RANfunctionID; - respfuncid->value.choice.RANfunctionID = (long)0; + respfuncid->value.choice.RANfunctionID = (long)147; RICsubscriptionResponse_IEs_t *ricactionadmitted = @@ -756,14 +753,9 @@ void encoding::generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, size_t errlen = 0; asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); - printf("error length %d\n", errlen); - printf("error buf %s\n", error_buf); - - printf("now printing xer of subscription response\n"); - xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); - printf("done printing xer of subscription response\n"); - + LOG_I("Subscription response"); + xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); } void encoding::generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PDU *sub_req_pdu) { @@ -781,8 +773,7 @@ void encoding::generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PD RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array; - fprintf(stderr, "count%d\n", count); - fprintf(stderr, "size%d\n", size); + LOG_I("Number of IEs in original request: %d, size: %d", count, size); RICsubscriptionRequest_IEs__value_PR pres; @@ -796,61 +787,49 @@ void encoding::generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PD RICsubscriptionRequest_IEs_t *next_ie = ies[i]; pres = next_ie->value.present; - fprintf(stderr, "next present value %d\n", pres); + LOG_D("Next present value %d", pres); switch(pres) { case RICsubscriptionRequest_IEs__value_PR_RICrequestID: { - RICrequestID_t reqId = next_ie->value.choice.RICrequestID; - long requestorId = reqId.ricRequestorID; - long instanceId = reqId.ricInstanceID; - fprintf(stderr, "requestorId %d\n", requestorId); - fprintf(stderr, "instanceId %d\n", instanceId); - responseRequestorId = requestorId; - responseInstanceId = instanceId; - - break; + RICrequestID_t reqId = next_ie->value.choice.RICrequestID; + long requestorId = reqId.ricRequestorID; + long instanceId = reqId.ricInstanceID; + + LOG_I("RequestorId %d, InstanceId: %d", requestorId, instanceId); + + responseRequestorId = requestorId; + responseInstanceId = instanceId; + break; } case RICsubscriptionRequest_IEs__value_PR_RANfunctionID: break; case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails: { - RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; - RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; - RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; - - int actionCount = actionList.list.count; - fprintf(stderr, "action count%d\n", actionCount); - - auto **item_array = actionList.list.array; - - for (int i=0; i < actionCount; i++) { - //RICaction_ToBeSetup_Item_t - auto *next_item = item_array[i]; - RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; - fprintf(stderr, "Next Action ID %ld\n", actionId); - responseActionId = actionId; - actionIds.push_back(responseActionId); - } - - break; + RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails; + RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition; + RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List; + + int actionCount = actionList.list.count; + LOG_I("Action count%d", actionCount); + + auto **item_array = actionList.list.array; + + for (int i=0; i < actionCount; i++) { + //RICaction_ToBeSetup_Item_t + auto *next_item = item_array[i]; + RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID; + LOG_D("Next Action ID %ld", actionId); + responseActionId = actionId; + actionIds.push_back(responseActionId); + } + + break; } } } - fprintf(stderr, "After Processing Subscription Request\n"); - - fprintf(stderr, "requestorId %d\n", responseRequestorId); - fprintf(stderr, "instanceId %d\n", responseInstanceId); - - - for (int i=0; i < actionIds.size(); i++) { - fprintf(stderr, "Action ID %d %ld\n", i, actionIds.at(i)); - - } - - RICsubscriptionResponse_IEs_t *respricreqid = (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); @@ -861,7 +840,6 @@ void encoding::generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PD respricreqid->value.choice.RICrequestID.ricInstanceID = responseInstanceId; - RICsubscriptionResponse_IEs_t *ricactionadmitted = (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t)); ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted; @@ -873,8 +851,6 @@ void encoding::generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PD ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist; for (int i=0; i < actionIds.size(); i++) { - fprintf(stderr, "in for loop i = %d\n", i); - long aid = actionIds.at(i); RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t)); @@ -887,7 +863,6 @@ void encoding::generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PD } - RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t)); ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid); @@ -911,11 +886,6 @@ void encoding::generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PD size_t errlen = 0; asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); - printf("error length %d\n", errlen); - printf("error buf %s\n", error_buf); - - - } void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu, @@ -929,7 +899,7 @@ void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_p uint8_t *ind_message_buf, int message_length) { - printf("Initializing E2AP request\n"); + LOG_I("Initializing E2AP request"); RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t)); @@ -1044,11 +1014,6 @@ void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_p int ret = asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen); if(ret) { - fprintf(stderr, "Constraint validation of E2AP PDU message failed: %s\n", error_buf); + LOG_I("Constraint validation of E2AP PDU message failed: %s\n", error_buf); } - - //xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu); - -} - - +} \ No newline at end of file diff --git a/e2sim/src/messagerouting/e2ap_message_handler.cpp b/e2sim/src/messagerouting/e2ap_message_handler.cpp index c08d55c..ef21c13 100755 --- a/e2sim/src/messagerouting/e2ap_message_handler.cpp +++ b/e2sim/src/messagerouting/e2ap_message_handler.cpp @@ -22,7 +22,7 @@ //#include //#include - +#include #include #include "encode_e2apv1.hpp" @@ -39,10 +39,11 @@ void e2ap_handle_sctp_data(int& socket_fd, sctp_buffer_t& data, bool xmlenc, E2S switch (rval.code) { case RC_WMORE: case RC_FAIL: - default: LOG_E("Failed to decode E2AP data from SCTP connection"); ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); exit(1); + default: + break; } int procedureCode = e2ap_asn1c_get_procedureCode(pdu); -- 2.16.6