SIM-117: E2-interface fails trying to connect ricplt/e2 termintor
[sim/e2-interface.git] / e2sim / src / encoding / encode_e2apv1.cpp
index fa39dd5..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)
   {
@@ -371,10 +368,70 @@ ASN_SEQUENCE_ADD(&e2configIE->value.choice.RANfunctions_List.list, e2configAddit
 
 }
 
-void encoding::generate_e2apv2_config_update(E2AP_PDU_t *e2ap_pdu){
+void encoding::generate_e2apv2_reset_request(E2AP_PDU *e2ap_pdu) {
+  E2AP_PDU_PR pr = E2AP_PDU_PR_initiatingMessage;
+  e2ap_pdu->present = pr;
+
+  e2ap_pdu->choice.initiatingMessage = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
+  e2ap_pdu->choice.initiatingMessage->procedureCode = ProcedureCode_id_Reset;
+  e2ap_pdu->choice.initiatingMessage->criticality = Criticality_reject;
+
+  e2ap_pdu->choice.initiatingMessage->value.present = InitiatingMessage__value_PR_ResetRequest;
+
+  auto *rrIEs1 = (ResetRequestIEs_t *)calloc(1, sizeof(ResetRequestIEs_t));
+  rrIEs1->id = ProtocolIE_ID_id_Cause;
+  rrIEs1->criticality = Criticality_ignore;
+
+  rrIEs1->value.present = ResetRequestIEs__value_PR_Cause;
+  rrIEs1->value.choice.Cause.present = Cause_PR_e2Node;
+  rrIEs1->value.choice.Cause.choice.ricRequest = CauseE2node_e2node_component_unknown;
+
+  auto *rrIEs2 = (ResetRequestIEs_t *)calloc(1, sizeof(ResetRequestIEs_t));
+  rrIEs2->id = ProtocolIE_ID_id_TransactionID;
+  rrIEs2->criticality = Criticality_ignore;
+  
+  rrIEs2->value.present = ResetRequestIEs__value_PR_TransactionID;
+  rrIEs2->value.choice.TransactionID = 1;
+
+  ASN_SEQUENCE_ADD(&e2ap_pdu->choice.initiatingMessage->value.choice.ResetRequest.protocolIEs.list, rrIEs2);
+  ASN_SEQUENCE_ADD(&e2ap_pdu->choice.initiatingMessage->value.choice.ResetRequest.protocolIEs.list, rrIEs1);
+}
+
+void encoding::generate_e2apv2_reset_response(E2AP_PDU *e2ap_pdu) {
+  e2ap_pdu->present = E2AP_PDU_PR_successfulOutcome;
+  e2ap_pdu->choice.successfulOutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome));
+
+  e2ap_pdu->choice.successfulOutcome->procedureCode = ProcedureCode_id_Reset;
+  e2ap_pdu->choice.successfulOutcome->criticality = Criticality_ignore;
+
+  e2ap_pdu->choice.successfulOutcome->value.present = SuccessfulOutcome__value_PR_ResetResponse;
+
+  // auto *rrIEs1 = (ResetResponseIEs_t *)calloc(1, sizeof(ResetResponseIEs_t));
+  // rrIEs1->id = ProtocolIE_ID_id_CriticalityDiagnostics;
+  // rrIEs1->criticality = Criticality_ignore;
+
+  // rrIEs1->value.present = ResetResponseIEs__value_PR_CriticalityDiagnostics;
+  // rrIEs1->value.choice.CriticalityDiagnostics.procedureCode = &ProcedureCode_id_Reset;
+  // rrIEs1->value.choice.CriticalityDiagnostics.choice.ricRequest = CauseE2node_e2node_component_unknown;
+
+  auto *rrIEs2 = (ResetRequestIEs_t *)calloc(1, sizeof(ResetRequestIEs_t));
+  rrIEs2->id = ProtocolIE_ID_id_TransactionID;
+  rrIEs2->criticality = Criticality_ignore;
   
+  rrIEs2->value.present = ResetRequestIEs__value_PR_TransactionID;
+  rrIEs2->value.choice.TransactionID = 1;
+
+  ASN_SEQUENCE_ADD(&e2ap_pdu->choice.successfulOutcome->value.choice.ResetResponse.protocolIEs.list, rrIEs2);
+}
 
+void encoding::generate_e2apv2_config_update(E2AP_PDU_t *e2ap_pdu){
+ // txid
+ auto *e2txidIE = (E2nodeConfigurationUpdate_IEs_t *)calloc(1, sizeof(E2nodeConfigurationUpdate_IEs_t));
+ e2txidIE->id = ProtocolIE_ID_id_TransactionID;
+ e2txidIE-> criticality = Criticality_reject;
+ e2txidIE->value.present = E2nodeConfigurationUpdate_IEs__value_PR_TransactionID;
+ e2txidIE->value.choice.TransactionID = 1;
+  
 /// config update id for addtion list  
 auto *e2configIE = (E2nodeConfigurationUpdate_IEs_t *)calloc(1, sizeof(E2nodeConfigurationUpdate_IEs_t));
 e2configIE->id = ProtocolIE_ID_id_E2nodeComponentConfigAddition;
@@ -414,16 +471,13 @@ memcpy(resPart.buf, (uint8_t *)"respart", 7);
 resPart.size = 7;
 e2configAdditionItem->value.choice.E2nodeComponentConfigAddition_Item.e2nodeComponentConfiguration.e2nodeComponentResponsePart = resPart;
 
-
-
-
-
 ASN_SEQUENCE_ADD(&e2configIE->value.choice.E2nodeComponentConfigAddition_List, e2configAdditionItem);
 
   InitiatingMessage *inititingMsg = (InitiatingMessage *) calloc(1, sizeof(InitiatingMessage));
-  inititingMsg->procedureCode = InitiatingMessage__value_PR_E2nodeConfigurationUpdate;
+  inititingMsg->procedureCode = ProcedureCode_id_E2nodeConfigurationUpdate;
   inititingMsg->criticality = Criticality_reject;
   inititingMsg->value.present = InitiatingMessage__value_PR_E2nodeConfigurationUpdate;
+  ASN_SEQUENCE_ADD(&inititingMsg->value.choice.E2nodeConfigurationUpdate.protocolIEs.list, e2txidIE);
   ASN_SEQUENCE_ADD(&inititingMsg->value.choice.E2nodeConfigurationUpdate.protocolIEs.list, e2configIE);
   e2ap_pdu->present = E2AP_PDU_PR_initiatingMessage;
   e2ap_pdu->choice.initiatingMessage = inititingMsg;
@@ -611,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 =
@@ -699,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) {
@@ -724,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;
 
@@ -739,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));
   
@@ -804,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;
@@ -816,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));
@@ -830,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);
@@ -854,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,
@@ -872,7 +899,8 @@ void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_p
                                                                uint8_t *ind_message_buf,
                                                                int message_length) {
   
-  fprintf(stderr, "ind1\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));
   RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
@@ -891,8 +919,6 @@ void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_p
   ricind_ies->value.choice.RICrequestID.ricRequestorID = requestorId;
   ricind_ies->value.choice.RICrequestID.ricInstanceID = instanceId;
 
-  fprintf(stderr, "ind2\n");
-
   pres3 = RICindication_IEs__value_PR_RANfunctionID;
   ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID;
   ricind_ies2->criticality = 0;
@@ -920,8 +946,6 @@ void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_p
   ricind_ies5->value.present = pres3;
   ricind_ies5->value.choice.RICindicationType = 0;
 
-  fprintf(stderr, "ind3\n");
-
   ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,header_length);
 
   pres3 = RICindication_IEs__value_PR_RICindicationHeader;
@@ -934,30 +958,19 @@ void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_p
   ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192);
 
 
-  
-
   pres3 = RICindication_IEs__value_PR_RICindicationMessage;
   ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage;
-  fprintf(stderr, "after encoding message 1\n");
 
   ricind_ies7->criticality = 0;
   ricind_ies7->value.present = pres3;
 
-  fprintf(stderr, "after encoding message 2\n");
-
-  fprintf(stderr, "after encoding message 3\n");      
   ricind_ies7->value.choice.RICindicationMessage.size = message_length;
 
-  fprintf(stderr, "after encoding message 4\n");
   memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, ind_message_buf, message_length);
 
-  fprintf(stderr, "after encoding message 5\n");
-
   uint8_t *cpid_buf = (uint8_t *)"cpid";
   OCTET_STRING_t cpid_str;
 
-  printf("5.1\n");
-
   int cpid_buf_len = strlen((char*)cpid_buf);
   pres3 = RICindication_IEs__value_PR_RICcallProcessID;
   ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID;
@@ -970,39 +983,16 @@ void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_p
 
   memcpy(ricind_ies8->value.choice.RICcallProcessID.buf, cpid_buf, cpid_buf_len);
 
-  printf("5.2\n");
-
   RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t));
 
-  
-  int ret;
-
-  ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies);
-  
-  ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2);
-
-  printf("5.3\n");
-
-  ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3);
-
-  printf("5.35\n");
-  
-  ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4);
-
-  printf("5.36\n");
-  
-  ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5);
-
-  printf("5.4\n");
-  
-  ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6);
-
-  printf("5.5\n");
-
-  ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7);  
-  
-  ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8);    
-
+  ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies);
+  ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2);
+  ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3);
+  ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4);
+  ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5);
+  ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6);
+  ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7);  
+  ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8);    
 
   InitiatingMessage__value_PR pres4;
   pres4 = InitiatingMessage__value_PR_RICindication;
@@ -1021,12 +1011,9 @@ void encoding::generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_p
   char error_buf[300] = {0, };
   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);
-
-  xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu);  
-
-}
-
+  int ret = asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
 
+  if(ret) {
+    LOG_I("Constraint validation of E2AP PDU message failed: %s\n", error_buf);
+  }
+}
\ No newline at end of file