|
|
|
@@ -469,6 +469,7 @@ int ngap_gNB_nas_uplink(instance_t instance, ngap_uplink_nas_t *ngap_uplink_nas_
|
|
|
|
|
/* Prepare the NGAP message to encode */
|
|
|
|
|
memset(&pdu, 0, sizeof(pdu));
|
|
|
|
|
pdu.present = NGAP_NGAP_PDU_PR_initiatingMessage;
|
|
|
|
|
pdu.choice.initiatingMessage = (NGAP_InitiatingMessage_t *)calloc(1,sizeof(NGAP_InitiatingMessage_t));
|
|
|
|
|
pdu.choice.initiatingMessage->procedureCode = NGAP_ProcedureCode_id_UplinkNASTransport;
|
|
|
|
|
pdu.choice.initiatingMessage->criticality = NGAP_Criticality_ignore;
|
|
|
|
|
pdu.choice.initiatingMessage->value.present = NGAP_InitiatingMessage__value_PR_UplinkNASTransport;
|
|
|
|
@@ -503,6 +504,7 @@ int ngap_gNB_nas_uplink(instance_t instance, ngap_uplink_nas_t *ngap_uplink_nas_
|
|
|
|
|
ie->value.present = NGAP_UplinkNASTransport_IEs__value_PR_UserLocationInformation;
|
|
|
|
|
|
|
|
|
|
ie->value.choice.UserLocationInformation.present = NGAP_UserLocationInformation_PR_userLocationInformationNR;
|
|
|
|
|
ie->value.choice.UserLocationInformation.choice.userLocationInformationNR = CALLOC(1,sizeof(struct NGAP_UserLocationInformationNR));
|
|
|
|
|
userinfo_nr_p = ie->value.choice.UserLocationInformation.choice.userLocationInformationNR;
|
|
|
|
|
|
|
|
|
|
/* Set nRCellIdentity. default userLocationInformationNR */
|
|
|
|
@@ -685,6 +687,7 @@ int ngap_gNB_initial_ctxt_resp(
|
|
|
|
|
/* Prepare the NGAP message to encode */
|
|
|
|
|
memset(&pdu, 0, sizeof(pdu));
|
|
|
|
|
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
|
|
|
|
|
pdu.choice.successfulOutcome = (NGAP_SuccessfulOutcome_t *)calloc(1,sizeof(struct NGAP_SuccessfulOutcome));
|
|
|
|
|
pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_InitialContextSetup;
|
|
|
|
|
pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
|
|
|
|
|
pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_InitialContextSetupResponse;
|
|
|
|
@@ -710,67 +713,68 @@ int ngap_gNB_initial_ctxt_resp(
|
|
|
|
|
ie->criticality = NGAP_Criticality_ignore;
|
|
|
|
|
ie->value.present = NGAP_InitialContextSetupResponseIEs__value_PR_PDUSessionResourceSetupListCxtRes;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < initial_ctxt_resp_p->nb_of_pdusessions; i++) {
|
|
|
|
|
NGAP_PDUSessionResourceSetupItemCxtRes_t *item;
|
|
|
|
|
NGAP_PDUSessionResourceSetupResponseTransfer_t *pdusessionTransfer_p = NULL;
|
|
|
|
|
|
|
|
|
|
/* mandatory */
|
|
|
|
|
item = (NGAP_PDUSessionResourceSetupItemCxtRes_t *)calloc(1, sizeof(NGAP_PDUSessionResourceSetupItemCxtRes_t));
|
|
|
|
|
if (initial_ctxt_resp_p->nb_of_pdusessions){
|
|
|
|
|
for (i = 0; i < initial_ctxt_resp_p->nb_of_pdusessions; i++) {
|
|
|
|
|
NGAP_PDUSessionResourceSetupItemCxtRes_t *item;
|
|
|
|
|
NGAP_PDUSessionResourceSetupResponseTransfer_t *pdusessionTransfer_p = NULL;
|
|
|
|
|
|
|
|
|
|
/* pDUSessionID */
|
|
|
|
|
item->pDUSessionID = initial_ctxt_resp_p->pdusessions[i].pdusession_id;
|
|
|
|
|
/* mandatory */
|
|
|
|
|
item = (NGAP_PDUSessionResourceSetupItemCxtRes_t *)calloc(1, sizeof(NGAP_PDUSessionResourceSetupItemCxtRes_t));
|
|
|
|
|
|
|
|
|
|
/* dLQosFlowPerTNLInformation */
|
|
|
|
|
pdusessionTransfer_p = (NGAP_PDUSessionResourceSetupResponseTransfer_t *)calloc(1, sizeof(NGAP_PDUSessionResourceSetupResponseTransfer_t));
|
|
|
|
|
/* pDUSessionID */
|
|
|
|
|
item->pDUSessionID = initial_ctxt_resp_p->pdusessions[i].pdusession_id;
|
|
|
|
|
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.present = NGAP_UPTransportLayerInformation_PR_gTPTunnel;
|
|
|
|
|
/* dLQosFlowPerTNLInformation */
|
|
|
|
|
pdusessionTransfer_p = (NGAP_PDUSessionResourceSetupResponseTransfer_t *)calloc(1, sizeof(NGAP_PDUSessionResourceSetupResponseTransfer_t));
|
|
|
|
|
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.present = NGAP_UPTransportLayerInformation_PR_gTPTunnel;
|
|
|
|
|
|
|
|
|
|
GTP_TEID_TO_ASN1(initial_ctxt_resp_p->pdusessions[i].gtp_teid, &pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->gTP_TEID);
|
|
|
|
|
GTP_TEID_TO_ASN1(initial_ctxt_resp_p->pdusessions[i].gtp_teid, &pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->gTP_TEID);
|
|
|
|
|
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf = malloc(initial_ctxt_resp_p->pdusessions[i].gNB_addr.length);
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf = malloc(initial_ctxt_resp_p->pdusessions[i].gNB_addr.length);
|
|
|
|
|
|
|
|
|
|
memcpy(pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf,
|
|
|
|
|
initial_ctxt_resp_p->pdusessions[i].gNB_addr.buffer,
|
|
|
|
|
initial_ctxt_resp_p->pdusessions[i].gNB_addr.length);
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.size = initial_ctxt_resp_p->pdusessions[i].gNB_addr.length;
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.bits_unused = 0;
|
|
|
|
|
memcpy(pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf,
|
|
|
|
|
initial_ctxt_resp_p->pdusessions[i].gNB_addr.buffer,
|
|
|
|
|
initial_ctxt_resp_p->pdusessions[i].gNB_addr.length);
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.size = initial_ctxt_resp_p->pdusessions[i].gNB_addr.length;
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.bits_unused = 0;
|
|
|
|
|
|
|
|
|
|
NGAP_DEBUG("initial_ctxt_resp_p: pdusession ID %ld, gnb_addr %d.%d.%d.%d, SIZE %ld \n",
|
|
|
|
|
item->pDUSessionID,
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf[0],
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf[1],
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf[2],
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf[3],
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.size);
|
|
|
|
|
NGAP_DEBUG("initial_ctxt_resp_p: pdusession ID %ld, gnb_addr %d.%d.%d.%d, SIZE %ld \n",
|
|
|
|
|
item->pDUSessionID,
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf[0],
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf[1],
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf[2],
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.buf[3],
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->transportLayerAddress.size);
|
|
|
|
|
|
|
|
|
|
/* associatedQosFlowList. number of 1? */
|
|
|
|
|
for(int j=0; j < initial_ctxt_resp_p->pdusessions[i].nb_of_qos_flow; j++) {
|
|
|
|
|
NGAP_AssociatedQosFlowItem_t *ass_qos_item_p;
|
|
|
|
|
ass_qos_item_p = (NGAP_AssociatedQosFlowItem_t *)calloc(1, sizeof(NGAP_AssociatedQosFlowItem_t));
|
|
|
|
|
/* associatedQosFlowList. number of 1? */
|
|
|
|
|
for(int j=0; j < initial_ctxt_resp_p->pdusessions[i].nb_of_qos_flow; j++) {
|
|
|
|
|
NGAP_AssociatedQosFlowItem_t *ass_qos_item_p;
|
|
|
|
|
ass_qos_item_p = (NGAP_AssociatedQosFlowItem_t *)calloc(1, sizeof(NGAP_AssociatedQosFlowItem_t));
|
|
|
|
|
|
|
|
|
|
/* qosFlowIdentifier */
|
|
|
|
|
ass_qos_item_p->qosFlowIdentifier = initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qci;
|
|
|
|
|
/* qosFlowIdentifier */
|
|
|
|
|
ass_qos_item_p->qosFlowIdentifier = initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qfi;
|
|
|
|
|
|
|
|
|
|
/* qosFlowMappingIndication */
|
|
|
|
|
if(initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind != QOSFLOW_MAPPING_INDICATION_NON) {
|
|
|
|
|
ass_qos_item_p->qosFlowMappingIndication = malloc(sizeof(*ass_qos_item_p->qosFlowMappingIndication));
|
|
|
|
|
*ass_qos_item_p->qosFlowMappingIndication = initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind;
|
|
|
|
|
/* qosFlowMappingIndication */
|
|
|
|
|
if(initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind != QOSFLOW_MAPPING_INDICATION_NON) {
|
|
|
|
|
ass_qos_item_p->qosFlowMappingIndication = malloc(sizeof(*ass_qos_item_p->qosFlowMappingIndication));
|
|
|
|
|
*ass_qos_item_p->qosFlowMappingIndication = initial_ctxt_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind;
|
|
|
|
|
}
|
|
|
|
|
ASN_SEQUENCE_ADD(&pdusessionTransfer_p->dLQosFlowPerTNLInformation.associatedQosFlowList.list, ass_qos_item_p);
|
|
|
|
|
}
|
|
|
|
|
ASN_SEQUENCE_ADD(&pdusessionTransfer_p->dLQosFlowPerTNLInformation.associatedQosFlowList.list, ass_qos_item_p);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
memset(&res, 0, sizeof(res));
|
|
|
|
|
res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
|
|
|
|
|
item->pDUSessionResourceSetupResponseTransfer.buf = res.buffer;
|
|
|
|
|
item->pDUSessionResourceSetupResponseTransfer.size = res.result.encoded;
|
|
|
|
|
memset(&res, 0, sizeof(res));
|
|
|
|
|
res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
|
|
|
|
|
item->pDUSessionResourceSetupResponseTransfer.buf = res.buffer;
|
|
|
|
|
item->pDUSessionResourceSetupResponseTransfer.size = res.result.encoded;
|
|
|
|
|
|
|
|
|
|
ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
|
|
|
|
|
ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
|
|
|
|
|
|
|
|
|
|
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSessionResourceSetupListCxtRes.list, item);
|
|
|
|
|
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSessionResourceSetupListCxtRes.list, item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
|
|
|
|
|
|
|
|
|
/* optional */
|
|
|
|
|
if (initial_ctxt_resp_p->nb_of_pdusessions_failed) {
|
|
|
|
|
ie = (NGAP_InitialContextSetupResponseIEs_t *)calloc(1, sizeof(NGAP_InitialContextSetupResponseIEs_t));
|
|
|
|
@@ -903,6 +907,7 @@ int ngap_gNB_ue_capabilities(instance_t instance,
|
|
|
|
|
/* Prepare the NGAP message to encode */
|
|
|
|
|
memset(&pdu, 0, sizeof(pdu));
|
|
|
|
|
pdu.present = NGAP_NGAP_PDU_PR_initiatingMessage;
|
|
|
|
|
pdu.choice.initiatingMessage = (NGAP_InitiatingMessage_t *)calloc(1,sizeof(NGAP_InitiatingMessage_t));
|
|
|
|
|
pdu.choice.initiatingMessage->procedureCode = NGAP_ProcedureCode_id_UERadioCapabilityInfoIndication;
|
|
|
|
|
pdu.choice.initiatingMessage->criticality = NGAP_Criticality_ignore;
|
|
|
|
|
pdu.choice.initiatingMessage->value.present = NGAP_InitiatingMessage__value_PR_UERadioCapabilityInfoIndication;
|
|
|
|
@@ -996,6 +1001,7 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
|
|
|
|
|
/* Prepare the NGAP message to encode */
|
|
|
|
|
memset(&pdu, 0, sizeof(pdu));
|
|
|
|
|
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
|
|
|
|
|
pdu.choice.successfulOutcome = (NGAP_SuccessfulOutcome_t *)calloc(1,sizeof(struct NGAP_SuccessfulOutcome));
|
|
|
|
|
pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceSetup;
|
|
|
|
|
pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
|
|
|
|
|
pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceSetupResponse;
|
|
|
|
@@ -1036,6 +1042,8 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
|
|
|
|
|
pdusessionTransfer_p = (NGAP_PDUSessionResourceSetupResponseTransfer_t *)calloc(1, sizeof(NGAP_PDUSessionResourceSetupResponseTransfer_t));
|
|
|
|
|
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.present = NGAP_UPTransportLayerInformation_PR_gTPTunnel;
|
|
|
|
|
pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel =
|
|
|
|
|
calloc(1, sizeof(struct NGAP_GTPTunnel));
|
|
|
|
|
|
|
|
|
|
GTP_TEID_TO_ASN1(pdusession_setup_resp_p->pdusessions[i].gtp_teid, &pdusessionTransfer_p->dLQosFlowPerTNLInformation.uPTransportLayerInformation.choice.gTPTunnel->gTP_TEID);
|
|
|
|
|
|
|
|
|
@@ -1061,20 +1069,28 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
|
|
|
|
|
ass_qos_item_p = (NGAP_AssociatedQosFlowItem_t *)calloc(1, sizeof(NGAP_AssociatedQosFlowItem_t));
|
|
|
|
|
|
|
|
|
|
/* qosFlowIdentifier */
|
|
|
|
|
ass_qos_item_p->qosFlowIdentifier = pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qci;
|
|
|
|
|
ass_qos_item_p->qosFlowIdentifier = pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qfi;
|
|
|
|
|
|
|
|
|
|
/* qosFlowMappingIndication */
|
|
|
|
|
if(pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind != QOSFLOW_MAPPING_INDICATION_NON) {
|
|
|
|
|
ass_qos_item_p->qosFlowMappingIndication = malloc(sizeof(*ass_qos_item_p->qosFlowMappingIndication));
|
|
|
|
|
*ass_qos_item_p->qosFlowMappingIndication = pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind;
|
|
|
|
|
}
|
|
|
|
|
//if(pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind != QOSFLOW_MAPPING_INDICATION_NON) {
|
|
|
|
|
// ass_qos_item_p->qosFlowMappingIndication = malloc(sizeof(*ass_qos_item_p->qosFlowMappingIndication));
|
|
|
|
|
// *ass_qos_item_p->qosFlowMappingIndication = pdusession_setup_resp_p->pdusessions[i].associated_qos_flows[j].qos_flow_mapping_ind;
|
|
|
|
|
//}
|
|
|
|
|
ASN_SEQUENCE_ADD(&pdusessionTransfer_p->dLQosFlowPerTNLInformation.associatedQosFlowList.list, ass_qos_item_p);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
memset(&res, 0, sizeof(res));
|
|
|
|
|
res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
|
|
|
|
|
item->pDUSessionResourceSetupResponseTransfer.buf = res.buffer;
|
|
|
|
|
item->pDUSessionResourceSetupResponseTransfer.size = res.result.encoded;
|
|
|
|
|
// res = asn_encode_to_new_buffer(NULL, ATS_ALIGNED_CANONICAL_PER, &asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
|
|
|
|
|
// item->pDUSessionResourceSetupResponseTransfer.buf = res.buffer;
|
|
|
|
|
// item->pDUSessionResourceSetupResponseTransfer.size = res.result.encoded;
|
|
|
|
|
uint8_t buffer[100];
|
|
|
|
|
asn_enc_rval_t enc_rval = aper_encode_to_buffer(&asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer,
|
|
|
|
|
NULL,
|
|
|
|
|
pdusessionTransfer_p,
|
|
|
|
|
buffer,100);
|
|
|
|
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
|
|
|
|
item->pDUSessionResourceSetupResponseTransfer.buf = buffer;
|
|
|
|
|
item->pDUSessionResourceSetupResponseTransfer.size = enc_rval.encoded;
|
|
|
|
|
|
|
|
|
|
ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSessionResourceSetupResponseTransfer, pdusessionTransfer_p);
|
|
|
|
|
|
|
|
|
@@ -1218,6 +1234,7 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
|
|
|
|
|
/* Prepare the NGAP message to encode */
|
|
|
|
|
memset(&pdu, 0, sizeof(pdu));
|
|
|
|
|
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
|
|
|
|
|
pdu.choice.successfulOutcome = (NGAP_SuccessfulOutcome_t *)calloc(1,sizeof(struct NGAP_SuccessfulOutcome));
|
|
|
|
|
pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceModify;
|
|
|
|
|
pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
|
|
|
|
|
pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceModifyResponse;
|
|
|
|
@@ -1378,6 +1395,7 @@ int ngap_gNB_pdusession_release_resp(instance_t instance,
|
|
|
|
|
/* Prepare the NGAP message to encode */
|
|
|
|
|
memset(&pdu, 0, sizeof(pdu));
|
|
|
|
|
pdu.present = NGAP_NGAP_PDU_PR_successfulOutcome;
|
|
|
|
|
pdu.choice.successfulOutcome = (NGAP_SuccessfulOutcome_t *)calloc(1,sizeof(struct NGAP_SuccessfulOutcome));
|
|
|
|
|
pdu.choice.successfulOutcome->procedureCode = NGAP_ProcedureCode_id_PDUSessionResourceRelease;
|
|
|
|
|
pdu.choice.successfulOutcome->criticality = NGAP_Criticality_reject;
|
|
|
|
|
pdu.choice.successfulOutcome->value.present = NGAP_SuccessfulOutcome__value_PR_PDUSessionResourceReleaseResponse;
|
|
|
|
|