X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2FX2AP%2Fsgnb_addition_response.cc;fp=src%2FX2AP%2Fsgnb_addition_response.cc;h=e1c6c5cad24ce55a5a5166b672c4085789341e12;hb=dc68642f5676cdd49f3ef92f983b319e21f16afa;hp=d64f620b499aa513757a12f47329d117959db2db;hpb=0054ece5d9d4bcb28ecda2f0f36584f6a64fc869;p=ric-app%2Fadmin.git diff --git a/src/X2AP/sgnb_addition_response.cc b/src/X2AP/sgnb_addition_response.cc index d64f620..e1c6c5c 100644 --- a/src/X2AP/sgnb_addition_response.cc +++ b/src/X2AP/sgnb_addition_response.cc @@ -28,60 +28,50 @@ sgnb_addition_response::sgnb_addition_response(void ) { x2ap_pdu_obj = 0; - x2ap_pdu_obj = (X2AP_PDU_t * )calloc(1, sizeof(X2AP_PDU_t)); + x2ap_pdu_obj = (X2N_X2AP_PDU_t * )calloc(1, sizeof(X2N_X2AP_PDU_t)); assert(x2ap_pdu_obj != 0); successMsg = 0; - successMsg = (X2SuccessfulOutcome_t * )calloc(1, sizeof(X2SuccessfulOutcome_t)); + successMsg = (X2N_SuccessfulOutcome_t * )calloc(1, sizeof(X2N_SuccessfulOutcome_t)); assert(successMsg != 0); unsuccessMsg = 0; - unsuccessMsg = (X2UnsuccessfulOutcome_t * )calloc(1, sizeof(X2UnsuccessfulOutcome_t)); + unsuccessMsg = (X2N_UnsuccessfulOutcome_t * )calloc(1, sizeof(X2N_UnsuccessfulOutcome_t)); assert(unsuccessMsg != 0); IE_array = 0; - IE_array = (SgNBAdditionRequestAcknowledge_IEs_t *)calloc(NUM_SGNB_ADDITION_RESPONSE_ACKNOWLEDGE_IES, sizeof(SgNBAdditionRequestAcknowledge_IEs_t)); + IE_array = (X2N_SgNBAdditionRequestAcknowledge_IEs_t *)calloc(NUM_SGNB_ADDITION_RESPONSE_ACKNOWLEDGE_IES, sizeof(X2N_SgNBAdditionRequestAcknowledge_IEs_t)); assert(IE_array != 0); IE_reject_array = 0; - IE_reject_array = (SgNBAdditionRequestReject_IEs_t *)calloc(NUM_SGNB_ADDITION_RESPONSE_FAILURE_IES, sizeof(SgNBAdditionRequestReject_IEs_t)); + IE_reject_array = (X2N_SgNBAdditionRequestReject_IEs_t *)calloc(NUM_SGNB_ADDITION_RESPONSE_FAILURE_IES, sizeof(X2N_SgNBAdditionRequestReject_IEs_t)); assert(IE_reject_array != 0); erab_admit_array = 0; - erab_admit_array = (E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t * ) calloc(INITIAL_SIZE, sizeof(E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t)); + erab_admit_array = (X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t * ) calloc(INITIAL_SIZE, sizeof(X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t)); assert(erab_admit_array != 0); erab_admit_array_size = INITIAL_SIZE; erab_sgnb_present_array = 0; - erab_sgnb_present_array = (E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t *) calloc(INITIAL_SIZE, sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t)); + erab_sgnb_present_array = (X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t *) calloc(INITIAL_SIZE, sizeof(X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t)); assert(erab_sgnb_present_array != 0); erab_sgnb_present_array_size = INITIAL_SIZE; erab_sgnb_notpresent_array = 0; - erab_sgnb_notpresent_array = (E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t *) calloc(INITIAL_SIZE, sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t)); + erab_sgnb_notpresent_array = (X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t *) calloc(INITIAL_SIZE, sizeof(X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t)); assert(erab_sgnb_notpresent_array != 0); - erab_sgnb_notpresent_array_size = INITIAL_SIZE; - - SgNBAdditionRequestAcknowledge_t * sgnb_ack = &(successMsg->value.choice.SgNBAdditionRequestAcknowledge); - for(int i = 0; i < NUM_SGNB_ADDITION_RESPONSE_ACKNOWLEDGE_IES; i++){ - ASN_SEQUENCE_ADD(&(sgnb_ack->protocolIEs), &(IE_array[i])); - } + erab_sgnb_notpresent_array_size = INITIAL_SIZE; - - SgNBAdditionRequestReject_t * sgnb_reject = &(unsuccessMsg->value.choice.SgNBAdditionRequestReject); - for(int i = 0; i < NUM_SGNB_ADDITION_RESPONSE_FAILURE_IES; i++){ - ASN_SEQUENCE_ADD(&(sgnb_reject->protocolIEs), &(IE_reject_array[i])); - } } sgnb_addition_response::~sgnb_addition_response(void){ - mdclog_write(MDCLOG_INFO, "Freeing X2AP SgNB Addition Response object memory"); + mdclog_write(MDCLOG_DEBUG, "Freeing X2AP SgNB Addition Response object memory"); - E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_t * erabs_toadd_list = &(IE_array[3].value.choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); + X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_t * erabs_toadd_list = &(IE_array[3].value.choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); for(int i = 0; i < erabs_toadd_list->list.size; i++){ erabs_toadd_list->list.array[i] = 0; } @@ -96,7 +86,7 @@ sgnb_addition_response::~sgnb_addition_response(void){ free(erab_sgnb_notpresent_array); free(erab_admit_array); - SgNBAdditionRequestAcknowledge_t *sgnb_ack = &(successMsg->value.choice.SgNBAdditionRequestAcknowledge); + X2N_SgNBAdditionRequestAcknowledge_t *sgnb_ack = &(successMsg->value.choice.SgNBAdditionRequestAcknowledge); for(int i = 0; i < sgnb_ack->protocolIEs.list.size; i++){ sgnb_ack->protocolIEs.list.array[i] = 0; } @@ -107,7 +97,7 @@ sgnb_addition_response::~sgnb_addition_response(void){ sgnb_ack->protocolIEs.list.size = 0; } - SgNBAdditionRequestReject_t *sgnb_reject = &(unsuccessMsg->value.choice.SgNBAdditionRequestReject); + X2N_SgNBAdditionRequestReject_t *sgnb_reject = &(unsuccessMsg->value.choice.SgNBAdditionRequestReject); for(int i = 0; i < sgnb_reject->protocolIEs.list.size; i++){ sgnb_reject->protocolIEs.list.array[i] = 0; } @@ -125,14 +115,14 @@ sgnb_addition_response::~sgnb_addition_response(void){ free(unsuccessMsg); x2ap_pdu_obj->choice.initiatingMessage = NULL; - x2ap_pdu_obj->present = X2AP_PDU_PR_NOTHING; + x2ap_pdu_obj->present = X2N_X2AP_PDU_PR_NOTHING; - ASN_STRUCT_FREE(asn_DEF_X2AP_PDU, x2ap_pdu_obj); + ASN_STRUCT_FREE(asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj); - mdclog_write(MDCLOG_INFO, "Freed X2AP SgNB Addition Response object memory"); + mdclog_write(MDCLOG_DEBUG, "Freed X2AP X2_SgNB Addition Response object memory"); } -bool sgnb_addition_response::set_fields(X2UnsuccessfulOutcome_t * unsuccessMsg, sgnb_addition_helper &sgnb_data){ +bool sgnb_addition_response::set_fields(X2N_UnsuccessfulOutcome_t * unsuccessMsg, sgnb_addition_helper &sgnb_data){ unsigned ie_index = 0; @@ -140,61 +130,68 @@ bool sgnb_addition_response::set_fields(X2UnsuccessfulOutcome_t * unsuccessMsg, error_string = "Invalid reference for X2AP Sgnb Addition Reject message in set_fields"; return false; } - SgNBAdditionRequestReject_IEs_t *ies_sgnb_add_reject; + X2N_SgNBAdditionRequestReject_t * sgnb_reject = &(unsuccessMsg->value.choice.SgNBAdditionRequestReject); + X2N_SgNBAdditionRequestReject_IEs_t *ies_sgnb_add_reject; + sgnb_reject->protocolIEs.list.count = 0; + ie_index = 0; ies_sgnb_add_reject= &IE_reject_array[ie_index]; - ies_sgnb_add_reject->criticality = Criticality_reject; - ies_sgnb_add_reject->id = ProtocolIE_ID_id_MeNB_UE_X2AP_ID; - ies_sgnb_add_reject->value.present = SgNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID; + ies_sgnb_add_reject->criticality = X2N_Criticality_reject; + ies_sgnb_add_reject->id = X2N_ProtocolIE_ID_id_MeNB_UE_X2AP_ID; + ies_sgnb_add_reject->value.present = X2N_SgNBAdditionRequestReject_IEs__value_PR_UE_X2AP_ID; ies_sgnb_add_reject->value.choice.UE_X2AP_ID = sgnb_data.menb_ue_x2ap_id; - + ASN_SEQUENCE_ADD(&(sgnb_reject->protocolIEs), &(IE_reject_array[ie_index])); + ie_index = 1; ies_sgnb_add_reject= &IE_reject_array[ie_index]; - ies_sgnb_add_reject->criticality = Criticality_reject; - ies_sgnb_add_reject->id = ProtocolIE_ID_id_SgNB_UE_X2AP_ID; - ies_sgnb_add_reject->value.present = SgNBAdditionRequestReject_IEs__value_PR_SgNB_UE_X2AP_ID; + ies_sgnb_add_reject->criticality = X2N_Criticality_reject; + ies_sgnb_add_reject->id = X2N_ProtocolIE_ID_id_SgNB_UE_X2AP_ID; + ies_sgnb_add_reject->value.present = X2N_SgNBAdditionRequestReject_IEs__value_PR_SgNB_UE_X2AP_ID; ies_sgnb_add_reject->value.choice.SgNB_UE_X2AP_ID = sgnb_data.sgnb_ue_x2ap_id; + ASN_SEQUENCE_ADD(&(sgnb_reject->protocolIEs), &(IE_reject_array[ie_index])); - + ie_index = 2; ies_sgnb_add_reject= &IE_reject_array[ie_index]; - ies_sgnb_add_reject->criticality = Criticality_reject; - ies_sgnb_add_reject->id = ProtocolIE_ID_id_Cause; - ies_sgnb_add_reject->value.present = SgNBAdditionRequestReject_IEs__value_PR_Cause; - Cause_t *caus = &ies_sgnb_add_reject->value.choice.Cause; + ies_sgnb_add_reject->criticality = X2N_Criticality_reject; + ies_sgnb_add_reject->id = X2N_ProtocolIE_ID_id_Cause; + ies_sgnb_add_reject->value.present = X2N_SgNBAdditionRequestReject_IEs__value_PR_Cause; + X2N_Cause_t *caus = &ies_sgnb_add_reject->value.choice.Cause; switch(sgnb_data.cause) { - case Cause_PR_misc: //Misc - caus->present = Cause_PR_misc; + case X2N_Cause_PR_misc: //Misc + caus->present = X2N_Cause_PR_misc; caus->choice.misc = sgnb_data.cause_desc; break; - case Cause_PR_radioNetwork: //radio network - caus->present = Cause_PR_radioNetwork; + case X2N_Cause_PR_radioNetwork: //radio network + caus->present = X2N_Cause_PR_radioNetwork; caus->choice.radioNetwork = sgnb_data.cause_desc; break; - case Cause_PR_protocol : //protocol - caus->present = Cause_PR_protocol; + case X2N_Cause_PR_protocol : //protocol + caus->present = X2N_Cause_PR_protocol; caus->choice.protocol = sgnb_data.cause_desc; break; - case Cause_PR_transport: //transport - caus->present = Cause_PR_transport; + case X2N_Cause_PR_transport: //transport + caus->present = X2N_Cause_PR_transport; caus->choice.transport = sgnb_data.cause_desc; break; default: - caus->present = Cause_PR_NOTHING; + caus->present = X2N_Cause_PR_NOTHING; break; } + ASN_SEQUENCE_ADD(&(sgnb_reject->protocolIEs), &(IE_reject_array[ie_index])); + return true; } -bool sgnb_addition_response::set_fields(X2SuccessfulOutcome_t * successMsg, sgnb_addition_helper &sgnb_data){ +bool sgnb_addition_response::set_fields(X2N_SuccessfulOutcome_t * successMsg, sgnb_addition_helper &sgnb_data){ unsigned ie_index = 0; @@ -203,172 +200,181 @@ bool sgnb_addition_response::set_fields(X2SuccessfulOutcome_t * successMsg, sgnb return false; } - SgNBAdditionRequestAcknowledge_IEs_t *ies_sgnb_add_ack; + X2N_SgNBAdditionRequestAcknowledge_t * sgnb_ack = &(successMsg->value.choice.SgNBAdditionRequestAcknowledge); + sgnb_ack->protocolIEs.list.count = 0; + + X2N_SgNBAdditionRequestAcknowledge_IEs_t *ies_sgnb_add_ack; ie_index = 0; ies_sgnb_add_ack= &IE_array[ie_index]; - ies_sgnb_add_ack->criticality = Criticality_reject; - ies_sgnb_add_ack->id = ProtocolIE_ID_id_MeNB_UE_X2AP_ID; - ies_sgnb_add_ack->value.present = SgNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID; + ies_sgnb_add_ack->criticality = X2N_Criticality_reject; + ies_sgnb_add_ack->id = X2N_ProtocolIE_ID_id_MeNB_UE_X2AP_ID; + ies_sgnb_add_ack->value.present = X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID; ies_sgnb_add_ack->value.choice.UE_X2AP_ID = sgnb_data.menb_ue_x2ap_id; + ASN_SEQUENCE_ADD(&(sgnb_ack->protocolIEs), &(IE_array[ie_index])); ie_index = 1; ies_sgnb_add_ack= &IE_array[ie_index]; - ies_sgnb_add_ack->criticality = Criticality_reject; - ies_sgnb_add_ack->id = ProtocolIE_ID_id_SgNB_UE_X2AP_ID; - ies_sgnb_add_ack->value.present = SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID; + ies_sgnb_add_ack->criticality = X2N_Criticality_reject; + ies_sgnb_add_ack->id = X2N_ProtocolIE_ID_id_SgNB_UE_X2AP_ID; + ies_sgnb_add_ack->value.present = X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID; ies_sgnb_add_ack->value.choice.SgNB_UE_X2AP_ID = sgnb_data.sgnb_ue_x2ap_id; - + ASN_SEQUENCE_ADD(&(sgnb_ack->protocolIEs), &(IE_array[ie_index])); + ie_index = 2; ies_sgnb_add_ack= &IE_array[ie_index]; - ies_sgnb_add_ack->criticality = Criticality_reject; - ies_sgnb_add_ack->id = ProtocolIE_ID_id_SgNBtoMeNBContainer; - ies_sgnb_add_ack->value.present = SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer; - SgNBtoMeNBContainer_t *container = &ies_sgnb_add_ack->value.choice.SgNBtoMeNBContainer; + ies_sgnb_add_ack->criticality = X2N_Criticality_reject; + ies_sgnb_add_ack->id = X2N_ProtocolIE_ID_id_SgNBtoMeNBContainer; + ies_sgnb_add_ack->value.present = X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer; + X2N_SgNBtoMeNBContainer_t *container = &ies_sgnb_add_ack->value.choice.SgNBtoMeNBContainer; container->buf = sgnb_data.menb_sgnb_container; container->size = sgnb_data.menb_sgnb_container_size; - + ASN_SEQUENCE_ADD(&(sgnb_ack->protocolIEs), &(IE_array[ie_index])); + ie_index = 3; ies_sgnb_add_ack = &IE_array[ie_index]; - ies_sgnb_add_ack->criticality = Criticality_reject; - ies_sgnb_add_ack->id = ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList; - ies_sgnb_add_ack->value.present = SgNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList; - E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_t * erabs_toadd_list = &(ies_sgnb_add_ack->value.choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); - + ies_sgnb_add_ack->criticality = X2N_Criticality_reject; + ies_sgnb_add_ack->id = X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList; int lcount = sgnb_data.erab_list.size(); - //std::cout <<"Adding " << lcount << " erabs in response" << std::endl; + if(lcount > 0){ + ies_sgnb_add_ack->value.present = X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList; + X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_t * erabs_toadd_list = &(ies_sgnb_add_ack->value.choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); + - //resize empty array in constructor - if (lcount >= erab_admit_array_size){ - erab_admit_array_size = 2*lcount; - - E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t * new_ref = 0; - new_ref = (E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t *)realloc(erab_admit_array, erab_admit_array_size * sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_t)); - assert(new_ref != 0); - erab_admit_array = new_ref; - - erab_sgnb_present_array_size = 2 * lcount; - E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t * new_present = 0; - new_present = (E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t *)realloc(erab_sgnb_present_array, erab_sgnb_present_array_size * sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t )); - assert(new_present != 0); - erab_sgnb_present_array = new_present; - - erab_sgnb_notpresent_array_size = 2 * lcount; - E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t * new_notpresent = 0; - new_notpresent = (E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t *)realloc(erab_sgnb_notpresent_array, erab_sgnb_notpresent_array_size * sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t )); - assert(new_notpresent != 0); - erab_sgnb_notpresent_array = new_notpresent; - } + //std::cout <<"Adding " << lcount << " erabs in response" << std::endl; + + //resize empty array in constructor + if (lcount >= erab_admit_array_size){ + erab_admit_array_size = 2*lcount; + free(erab_admit_array); + erab_admit_array = (X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t * ) calloc(erab_admit_array_size, sizeof(X2N_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t)); + assert(erab_admit_array != 0); + + erab_sgnb_present_array_size = 2 * lcount; + free(erab_sgnb_present_array); + erab_sgnb_present_array = (X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t *) calloc(erab_sgnb_present_array_size, sizeof(X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent_t)); + assert(erab_sgnb_present_array != 0); + + erab_sgnb_notpresent_array_size = 2 * lcount; + free(erab_sgnb_notpresent_array); + erab_sgnb_notpresent_array = (X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t *) calloc(erab_sgnb_notpresent_array_size, sizeof(X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent_t)); + assert(erab_sgnb_notpresent_array != 0); + } - std::vector * ref_erab_input = &(sgnb_data.erab_list); - erabs_toadd_list->list.count = 0; + std::vector * ref_erab_input = &(sgnb_data.erab_list); + erabs_toadd_list->list.count = 0; - int sgnb_present_index = 0; - int sgnb_notpresent_index = 0; + int sgnb_present_index = 0; + int sgnb_notpresent_index = 0; - for(unsigned int i = 0; i < lcount; i++){ + for(unsigned int i = 0; i < lcount; i++){ - erab_admit_array[i].id = ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item ; - erab_admit_array[i].criticality = Criticality_ignore; - erab_admit_array[i].value.present = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item; + erab_admit_array[i].id = X2N_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item ; + erab_admit_array[i].criticality = X2N_Criticality_ignore; + erab_admit_array[i].value.present = X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item; - E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_t * erab_item = &(erab_admit_array[i].value.choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item); + X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_t * erab_item = &(erab_admit_array[i].value.choice.E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item); - erab_item->e_RAB_ID = (*ref_erab_input)[i].erab_id; - erab_item->en_DC_ResourceConfiguration.pDCPatSgNB = (*ref_erab_input)[i].pdcp_at_sgnb; - erab_item->en_DC_ResourceConfiguration.mCGresources = (*ref_erab_input)[i].mcg_resources; - erab_item->en_DC_ResourceConfiguration.sCGresources = (*ref_erab_input)[i].scg_resources; + erab_item->e_RAB_ID = (*ref_erab_input)[i].erab_id; + erab_item->en_DC_ResourceConfiguration.pDCPatSgNB = (*ref_erab_input)[i].pdcp_at_sgnb; + erab_item->en_DC_ResourceConfiguration.mCGresources = (*ref_erab_input)[i].mcg_resources; + erab_item->en_DC_ResourceConfiguration.sCGresources = (*ref_erab_input)[i].scg_resources; - erab_item->resource_configuration.present = (E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR)(*ref_erab_input)[i].sgnb_pdcp_present; - if( erab_item->resource_configuration.present == E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPpresent){ + erab_item->resource_configuration.present = (X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR)(*ref_erab_input)[i].sgnb_pdcp_present; + if( erab_item->resource_configuration.present == X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPpresent){ - erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.transportLayerAddress.buf = (*ref_erab_input)[i].sgnb_item.transport_layer_addr; - erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.transportLayerAddress.size = (*ref_erab_input)[i].sgnb_item.transport_layer_addr_size; - erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.transportLayerAddress.bits_unused = (*ref_erab_input)[i].sgnb_item.transport_layer_addr_unused; - - erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.gTP_TEID.buf = (*ref_erab_input)[i].sgnb_item.gtp_tei; - erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.gTP_TEID.size = (*ref_erab_input)[i].sgnb_item.gtp_tei_size; - - /* Force all optional parameters that are not set to NULL */ - erab_sgnb_present_array[sgnb_present_index].sgNB_UL_GTP_TEIDatPDCP = NULL; + erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.transportLayerAddress.buf = (*ref_erab_input)[i].sgnb_item.transport_layer_addr; + erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.transportLayerAddress.size = (*ref_erab_input)[i].sgnb_item.transport_layer_addr_size; + erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.transportLayerAddress.bits_unused = (*ref_erab_input)[i].sgnb_item.transport_layer_addr_unused; + + erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.gTP_TEID.buf = (*ref_erab_input)[i].sgnb_item.gtp_tei; + erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.gTP_TEID.size = (*ref_erab_input)[i].sgnb_item.gtp_tei_size; + + /* Force all optional parameters that are not set to NULL */ + erab_sgnb_present_array[sgnb_present_index].sgNB_UL_GTP_TEIDatPDCP = NULL; + + /* validate constraints ..*/ + int ret_constr; + ret_constr = asn_check_constraints(&asn_DEF_X2N_GTP_TEI, &erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.gTP_TEID, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "Error in constraints for GTP TEID.. Reason = " + error_string; + return false; + } + + ret_constr = asn_check_constraints(&asn_DEF_X2N_GTPtunnelEndpoint, &erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "Error in constraints for GTP tunnel endpoint .. Reason = " + error_string; + return false; + } + + ret_constr = asn_check_constraints(&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, &erab_sgnb_present_array[sgnb_present_index], errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "Error in constraints for E_RABS_ToBeAdded_SgNBAddReq_SgNBPDCPpresent.. Reason = " + error_string; + return false; + } + + erab_item->resource_configuration.choice.sgNBPDCPpresent = &erab_sgnb_present_array[sgnb_present_index]; + sgnb_present_index ++; - /* validate constraints ..*/ - int ret_constr; - ret_constr = asn_check_constraints(&asn_DEF_GTP_TEI, &erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint.gTP_TEID, errbuf, &errbuf_len); - if(ret_constr){ - error_string.assign(&errbuf[0], errbuf_len); - error_string = "Error in constraints for GTP TEID.. Reason = " + error_string; - return false; } + else if (erab_item->resource_configuration.present == X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPnotpresent){ - ret_constr = asn_check_constraints(&asn_DEF_GTPtunnelEndpoint, &erab_sgnb_present_array[sgnb_present_index].s1_DL_GTPtunnelEndpoint, errbuf, &errbuf_len); - if(ret_constr){ - error_string.assign(&errbuf[0], errbuf_len); - error_string = "Error in constraints for GTP tunnel endpoint .. Reason = " + error_string; - return false; - } - - ret_constr = asn_check_constraints(&asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent, &erab_sgnb_present_array[sgnb_present_index], errbuf, &errbuf_len); - if(ret_constr){ - error_string.assign(&errbuf[0], errbuf_len); - error_string = "Error in constraints for E_RABS_ToBeAdded_SgNBAddReq_SgNBPDCPpresent.. Reason = " + error_string; - return false; - } + erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.transportLayerAddress.buf = (*ref_erab_input)[i].sgnb_item.transport_layer_addr; + erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.transportLayerAddress.size = (*ref_erab_input)[i].sgnb_item.transport_layer_addr_size; + erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.transportLayerAddress.bits_unused = (*ref_erab_input)[i].sgnb_item.transport_layer_addr_unused; - erab_item->resource_configuration.choice.sgNBPDCPpresent = &erab_sgnb_present_array[sgnb_present_index]; - sgnb_present_index ++; + erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.gTP_TEID.buf = (unsigned char *)(*ref_erab_input)[i].sgnb_item.gtp_tei; + erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.gTP_TEID.size = (*ref_erab_input)[i].sgnb_item.gtp_tei_size; - } - else if (erab_item->resource_configuration.present == E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPnotpresent){ + erab_sgnb_notpresent_array[sgnb_notpresent_index].secondary_sgNB_DL_GTP_TEIDatSCG = NULL; - erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.transportLayerAddress.buf = (*ref_erab_input)[i].sgnb_item.transport_layer_addr; - erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.transportLayerAddress.size = (*ref_erab_input)[i].sgnb_item.transport_layer_addr_size; - erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.transportLayerAddress.bits_unused = (*ref_erab_input)[i].sgnb_item.transport_layer_addr_unused; + /* validate constraints ..*/ + int ret_constr; + ret_constr = asn_check_constraints(&asn_DEF_X2N_GTPtunnelEndpoint, &erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG, errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "Error in constraints for GTP tunnel endpoint .. Reason = " + error_string; + return false; + } - erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.gTP_TEID.buf = (unsigned char *)(*ref_erab_input)[i].sgnb_item.gtp_tei; - erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG.gTP_TEID.size = (*ref_erab_input)[i].sgnb_item.gtp_tei_size; - erab_sgnb_notpresent_array[sgnb_notpresent_index].secondary_sgNB_DL_GTP_TEIDatSCG = NULL; + ret_constr = asn_check_constraints(&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, &erab_sgnb_notpresent_array[sgnb_notpresent_index], errbuf, &errbuf_len); + if(ret_constr){ + error_string.assign(&errbuf[0], errbuf_len); + error_string = "Error in constraints for E_RABS_ToBeAdded_SgNBAddReq_SgNBPDCPnotpresent.. Reason = " + error_string; + return false; + } - /* validate constraints ..*/ - int ret_constr; - ret_constr = asn_check_constraints(&asn_DEF_GTPtunnelEndpoint, &erab_sgnb_notpresent_array[sgnb_notpresent_index].sgNB_DL_GTP_TEIDatSCG, errbuf, &errbuf_len); - if(ret_constr){ - error_string.assign(&errbuf[0], errbuf_len); - error_string = "Error in constraints for GTP tunnel endpoint .. Reason = " + error_string; - return false; + erab_item->resource_configuration.choice.sgNBPDCPnotpresent = &erab_sgnb_notpresent_array[sgnb_notpresent_index]; ; + sgnb_notpresent_index ++; + } + else { + std::cerr <<"Could not find a pdcp present or not present flag. not adding erab item .." << std::endl; + continue; } - - ret_constr = asn_check_constraints(&asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent, &erab_sgnb_notpresent_array[sgnb_notpresent_index], errbuf, &errbuf_len); + // check constraint + int ret_constr = asn_check_constraints(&asn_DEF_X2N_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, &erab_admit_array[i], errbuf, &errbuf_len); if(ret_constr){ error_string.assign(&errbuf[0], errbuf_len); - error_string = "Error in constraints for E_RABS_ToBeAdded_SgNBAddReq_SgNBPDCPnotpresent.. Reason = " + error_string; + error_string = "Error in constraints for E_RABS_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs.. Reason = " + error_string; return false; } - erab_item->resource_configuration.choice.sgNBPDCPnotpresent = &erab_sgnb_notpresent_array[sgnb_notpresent_index]; ; - sgnb_notpresent_index ++; - } - else { - std::cerr <<"Could not find a pdcp present or not present flag. not adding erab item .." << std::endl; - continue; - } - - // check constraint - int ret_constr = asn_check_constraints(&asn_DEF_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs, &erab_admit_array[i], errbuf, &errbuf_len); - if(ret_constr){ - error_string.assign(&errbuf[0], errbuf_len); - error_string = "Error in constraints for E_RABS_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs.. Reason = " + error_string; - return false; + ASN_SEQUENCE_ADD(erabs_toadd_list, &erab_admit_array[i]); } - - ASN_SEQUENCE_ADD(erabs_toadd_list, &erab_admit_array[i]); } - + else{ + ies_sgnb_add_ack->value.present = X2N_SgNBAdditionRequestAcknowledge_IEs__value_PR_NOTHING; + } + + ASN_SEQUENCE_ADD(&(sgnb_ack->protocolIEs), &(IE_array[ie_index])); return true; } @@ -378,24 +384,24 @@ bool sgnb_addition_response::encode_sgnb_addition_response(unsigned char* data_b bool res; if(sgnb_response == true){ - x2ap_pdu_obj->present = X2AP_PDU_PR_successfulOutcome; + x2ap_pdu_obj->present = X2N_X2AP_PDU_PR_successfulOutcome; x2ap_pdu_obj->choice.successfulOutcome = successMsg; - successMsg->procedureCode = ProcedureCode_id_sgNBAdditionPreparation; - successMsg->criticality = Criticality_ignore; - successMsg->value.present = X2SuccessfulOutcome__value_PR_SgNBAdditionRequestAcknowledge; + successMsg->procedureCode = X2N_ProcedureCode_id_sgNBAdditionPreparation; + successMsg->criticality = X2N_Criticality_ignore; + successMsg->value.present = X2N_SuccessfulOutcome__value_PR_SgNBAdditionRequestAcknowledge; res = set_fields(successMsg, sgnb_data); } else { - x2ap_pdu_obj->present = X2AP_PDU_PR_unsuccessfulOutcome; + x2ap_pdu_obj->present = X2N_X2AP_PDU_PR_unsuccessfulOutcome; x2ap_pdu_obj->choice.unsuccessfulOutcome = unsuccessMsg; - unsuccessMsg->procedureCode = ProcedureCode_id_sgNBAdditionPreparation; - unsuccessMsg->criticality = Criticality_ignore; - unsuccessMsg->value.present = X2UnsuccessfulOutcome__value_PR_SgNBAdditionRequestReject; + unsuccessMsg->procedureCode = X2N_ProcedureCode_id_sgNBAdditionPreparation; + unsuccessMsg->criticality = X2N_Criticality_ignore; + unsuccessMsg->value.present = X2N_UnsuccessfulOutcome__value_PR_SgNBAdditionRequestReject; res = set_fields(unsuccessMsg, sgnb_data); } @@ -403,16 +409,17 @@ bool sgnb_addition_response::encode_sgnb_addition_response(unsigned char* data_b if (!res){ return false; } - int ret_constr = asn_check_constraints(&asn_DEF_X2AP_PDU, x2ap_pdu_obj, errbuf, &errbuf_len); + + int ret_constr = asn_check_constraints(&asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj, errbuf, &errbuf_len); if(ret_constr){ error_string.assign(&errbuf[0], errbuf_len); - error_string = "Error encoding X2AP Sgnb Addition Response message. Reason = " + error_string; + error_string = "Error : constraints failed for X2AP Sgnb Addition Response message. Reason = " + error_string; return false; } - //xer_fprint(stdout, &asn_DEF_X2AP_PDU, x2ap_pdu_obj); + //xer_fprint(stdout, &asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj); - asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_X2AP_PDU, x2ap_pdu_obj, data_buf, *data_size); + asn_enc_rval_t retval = asn_encode_to_buffer(0, ATS_ALIGNED_BASIC_PER, &asn_DEF_X2N_X2AP_PDU, x2ap_pdu_obj, data_buf, *data_size); if(retval.encoded == -1){ error_string.assign(strerror(errno)); return false;