SIM-117: E2-interface fails trying to connect ricplt/e2 termintor 15/12915/1 master
authorTuan Nguyen <hoang.su.tk@gmail.com>
Sun, 19 May 2024 12:32:49 +0000 (12:32 +0000)
committerTuan Nguyen <hoang.su.tk@gmail.com>
Sun, 19 May 2024 12:40:21 +0000 (12:40 +0000)
Move to use Ubuntu 22 image, improve log message

Change-Id: I3c3887d5e198acbca276fbf25723271dcc6a1c31
Signed-off-by: Tuan Nguyen <hoang.su.tk@gmail.com>
e2sim/Dockerfile_kpm
e2sim/e2sm_examples/kpm_e2sm/src/kpm/encode_kpm.cpp
e2sim/src/DEF/e2sim_defs.h
e2sim/src/base/e2sim.cpp
e2sim/src/encoding/encode_e2apv1.cpp
e2sim/src/messagerouting/e2ap_message_handler.cpp

index a5ddfa7..63a77b0 100755 (executable)
 # 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
index c34c370..676c5a1 100755 (executable)
 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"
index f10cebf..d2407a8 100755 (executable)
@@ -74,6 +74,4 @@ typedef struct {
 
 options_t read_input_options(int argc, char *argv[]);
 
-#define min(a, b) ((a) < (b)) ? (a) : (b)
-
 #endif
index 45927e5..83535b3 100755 (executable)
@@ -40,13 +40,13 @@ std::unordered_map<long, OCTET_STRING_t*> 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);
 }
 
 
index 85d8cbf..85dae2a 100755 (executable)
@@ -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<encoding::ran_func_info> 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
index c08d55c..ef21c13 100755 (executable)
@@ -22,7 +22,7 @@
 \r
 //#include <iostream>\r
 //#include <vector>\r
-\r
+#include <stdexcept>\r
 #include <unistd.h>\r
 \r
 #include "encode_e2apv1.hpp"\r
@@ -39,10 +39,11 @@ void e2ap_handle_sctp_data(int& socket_fd, sctp_buffer_t& data, bool xmlenc, E2S
   switch (rval.code) {\r
     case RC_WMORE:\r
     case RC_FAIL:\r
-    default:\r
       LOG_E("Failed to decode E2AP data from SCTP connection");\r
       ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);\r
       exit(1);\r
+    default:\r
+      break;\r
   }\r
 \r
   int procedureCode = e2ap_asn1c_get_procedureCode(pdu);\r