Commit 45e5be9c authored by zhenghuangkun's avatar zhenghuangkun Committed by Noboru Kobayashi

Add ErrorIndication

Add Paging
Add PDUSessionResourceModifyRequest
parent 57b28d07
...@@ -593,11 +593,6 @@ typedef struct ngap_initial_context_setup_req_s { ...@@ -593,11 +593,6 @@ typedef struct ngap_initial_context_setup_req_s {
typedef struct ngap_paging_ind_s { typedef struct ngap_paging_ind_s {
/* UE identity index value.
* Specified in 3GPP TS 36.304
*/
unsigned ue_index_value:10;
/* UE paging identity */ /* UE paging identity */
ngap_ue_paging_identity_t ue_paging_identity; ngap_ue_paging_identity_t ue_paging_identity;
......
...@@ -75,6 +75,10 @@ ...@@ -75,6 +75,10 @@
#include "NGAP_PDUSessionResourceModifyUnsuccessfulTransfer.h" #include "NGAP_PDUSessionResourceModifyUnsuccessfulTransfer.h"
#include "NGAP_PDUSessionResourceReleasedItemRelRes.h" #include "NGAP_PDUSessionResourceReleasedItemRelRes.h"
#include "NGAP_PDUSessionResourceToReleaseItemRelCmd.h" #include "NGAP_PDUSessionResourceToReleaseItemRelCmd.h"
#include "NGAP_PDUSessionResourceModifyItemModReq.h"
#include "NGAP_PDUSessionResourceModifyRequestTransfer.h"
#include "NGAP_QosFlowAddOrModifyRequestItem.h"
#include "NGAP_TAIListForPagingItem.h"
/* Checking version of ASN1C compiler */ /* Checking version of ASN1C compiler */
#if (ASN1C_ENVIRONMENT_VERSION < ASN1C_MINIMUM_VERSION) #if (ASN1C_ENVIRONMENT_VERSION < ASN1C_MINIMUM_VERSION)
......
...@@ -455,21 +455,23 @@ static ...@@ -455,21 +455,23 @@ static
int ngap_gNB_handle_error_indication(uint32_t assoc_id, int ngap_gNB_handle_error_indication(uint32_t assoc_id,
uint32_t stream, uint32_t stream,
NGAP_NGAP_PDU_t *pdu) { NGAP_NGAP_PDU_t *pdu) {
#if 0
NGAP_ErrorIndication_t *container; NGAP_ErrorIndication_t *container;
NGAP_ErrorIndicationIEs_t *ie; NGAP_ErrorIndicationIEs_t *ie;
ngap_gNB_amf_data_t *amf_desc_p; ngap_gNB_amf_data_t *amf_desc_p;
uint64_t amf_ue_ngap_id;
DevAssert(pdu != NULL); DevAssert(pdu != NULL);
container = &pdu->choice.initiatingMessage.value.choice.ErrorIndication; container = &pdu->choice.initiatingMessage.value.choice.ErrorIndication;
/* S1 Setup Failure == Non UE-related procedure -> stream 0 */ /* NG Setup Failure == Non UE-related procedure -> stream 0 */
if (stream != 0) { if (stream != 0) {
NGAP_WARN("[SCTP %d] Received s1 Error indication on stream != 0 (%d)\n", NGAP_WARN("[SCTP %d] Received ng Error indication on stream != 0 (%d)\n",
assoc_id, stream); assoc_id, stream);
} }
if ((amf_desc_p = ngap_gNB_get_AMF(NULL, assoc_id, 0)) == NULL) { if ((amf_desc_p = ngap_gNB_get_AMF(NULL, assoc_id, 0)) == NULL) {
NGAP_ERROR("[SCTP %d] Received S1 Error indication for non existing " NGAP_ERROR("[SCTP %d] Received ng Error indication for non existing "
"AMF context\n", assoc_id); "AMF context\n", assoc_id);
return -1; return -1;
} }
...@@ -479,15 +481,16 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id, ...@@ -479,15 +481,16 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id,
/* optional */ /* optional */
if (ie != NULL) { if (ie != NULL) {
NGAP_WARN("Received S1 Error indication AMF UE NGAP ID 0x%lx\n", ie->value.choice.AMF_UE_NGAP_ID); asn_INTEGER2ulong(&(ie->value.choice.AMF_UE_NGAP_ID), &amf_ue_ngap_id);
NGAP_WARN("Received NG Error indication AMF UE NGAP ID 0x%lx\n", amf_ue_ngap_id);
} }
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_ErrorIndicationIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_ErrorIndicationIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_gNB_UE_NGAP_ID, false); NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID, false);
/* optional */ /* optional */
if (ie != NULL) { if (ie != NULL) {
NGAP_WARN("Received S1 Error indication gNB UE NGAP ID 0x%lx\n", ie->value.choice.GNB_UE_NGAP_ID); NGAP_WARN("Received NG Error indication gNB UE NGAP ID 0x%lx\n", ie->value.choice.RAN_UE_NGAP_ID);
} }
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_ErrorIndicationIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_ErrorIndicationIEs_t, ie, container,
...@@ -497,168 +500,204 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id, ...@@ -497,168 +500,204 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id,
if (ie) { if (ie) {
switch(ie->value.choice.Cause.present) { switch(ie->value.choice.Cause.present) {
case NGAP_Cause_PR_NOTHING: case NGAP_Cause_PR_NOTHING:
NGAP_WARN("Received S1 Error indication cause NOTHING\n"); NGAP_WARN("Received NG Error indication cause NOTHING\n");
break; break;
case NGAP_Cause_PR_radioNetwork: case NGAP_Cause_PR_radioNetwork:
switch (ie->value.choice.Cause.choice.radioNetwork) { switch (ie->value.choice.Cause.choice.radioNetwork) {
case NGAP_CauseRadioNetwork_unspecified: case NGAP_CauseRadioNetwork_unspecified:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_unspecified\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_unspecified\n");
break; break;
case NGAP_CauseRadioNetwork_tx2relocoverall_expiry: case NGAP_CauseRadioNetwork_txnrelocoverall_expiry:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_tx2relocoverall_expiry\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_txnrelocoverall_expiry\n");
break; break;
case NGAP_CauseRadioNetwork_successful_handover: case NGAP_CauseRadioNetwork_successful_handover:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_successful_handover\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_successful_handover\n");
break; break;
case NGAP_CauseRadioNetwork_release_due_to_eutran_generated_reason: case NGAP_CauseRadioNetwork_release_due_to_ngran_generated_reason:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_release_due_to_eutran_generated_reason\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_release_due_to_ngran_generated_reason\n");
break;
case NGAP_CauseRadioNetwork_release_due_to_5gc_generated_reason:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_release_due_to_5gc_generated_reason\n");
break; break;
case NGAP_CauseRadioNetwork_handover_cancelled: case NGAP_CauseRadioNetwork_handover_cancelled:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_handover_cancelled\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_handover_cancelled\n");
break; break;
case NGAP_CauseRadioNetwork_partial_handover: case NGAP_CauseRadioNetwork_partial_handover:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_partial_handover\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_partial_handover\n");
break; break;
case NGAP_CauseRadioNetwork_ho_failure_in_target_EPC_gNB_or_target_system: case NGAP_CauseRadioNetwork_ho_failure_in_target_5GC_ngran_node_or_target_system:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_ho_failure_in_target_EPC_gNB_or_target_system\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_ho_failure_in_target_5GC_ngran_node_or_target_system\n");
break; break;
case NGAP_CauseRadioNetwork_ho_target_not_allowed: case NGAP_CauseRadioNetwork_ho_target_not_allowed:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_ho_target_not_allowed\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_ho_target_not_allowed\n");
break; break;
case NGAP_CauseRadioNetwork_tS1relocoverall_expiry: case NGAP_CauseRadioNetwork_tngrelocoverall_expiry:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_tS1relocoverall_expiry\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_tngrelocoverall_expiry\n");
break; break;
case NGAP_CauseRadioNetwork_tS1relocprep_expiry: case NGAP_CauseRadioNetwork_tngrelocprep_expiry:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_tS1relocprep_expiry\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_tngrelocprep_expiry\n");
break; break;
case NGAP_CauseRadioNetwork_cell_not_available: case NGAP_CauseRadioNetwork_cell_not_available:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_cell_not_available\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_cell_not_available\n");
break; break;
case NGAP_CauseRadioNetwork_unknown_targetID: case NGAP_CauseRadioNetwork_unknown_targetID:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_unknown_targetID\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_unknown_targetID\n");
break; break;
case NGAP_CauseRadioNetwork_no_radio_resources_available_in_target_cell: case NGAP_CauseRadioNetwork_no_radio_resources_available_in_target_cell:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_no_radio_resources_available_in_target_cell\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_no_radio_resources_available_in_target_cell\n");
break; break;
case NGAP_CauseRadioNetwork_unknown_amf_ue_ngap_id: case NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_unknown_amf_ue_ngap_id\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID\n");
break; break;
case NGAP_CauseRadioNetwork_unknown_enb_ue_ngap_id: case NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_unknown_enb_ue_ngap_id\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_inconsistent_remote_UE_NGAP_ID\n");
break;
case NGAP_CauseRadioNetwork_unknown_pair_ue_ngap_id:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_unknown_pair_ue_ngap_id\n");
break; break;
case NGAP_CauseRadioNetwork_handover_desirable_for_radio_reason: case NGAP_CauseRadioNetwork_handover_desirable_for_radio_reason:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_handover_desirable_for_radio_reason\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_handover_desirable_for_radio_reason\n");
break; break;
case NGAP_CauseRadioNetwork_time_critical_handover: case NGAP_CauseRadioNetwork_time_critical_handover:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_time_critical_handover\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_time_critical_handover\n");
break; break;
case NGAP_CauseRadioNetwork_resource_optimisation_handover: case NGAP_CauseRadioNetwork_resource_optimisation_handover:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_resource_optimisation_handover\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_resource_optimisation_handover\n");
break; break;
case NGAP_CauseRadioNetwork_reduce_load_in_serving_cell: case NGAP_CauseRadioNetwork_reduce_load_in_serving_cell:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_reduce_load_in_serving_cell\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_reduce_load_in_serving_cell\n");
break; break;
case NGAP_CauseRadioNetwork_user_inactivity: case NGAP_CauseRadioNetwork_user_inactivity:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_user_inactivity\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_user_inactivity\n");
break; break;
case NGAP_CauseRadioNetwork_radio_connection_with_ue_lost: case NGAP_CauseRadioNetwork_radio_connection_with_ue_lost:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_radio_connection_with_ue_lost\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_radio_connection_with_ue_lost\n");
break;
case NGAP_CauseRadioNetwork_load_balancing_tau_required:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_load_balancing_tau_required\n");
break;
case NGAP_CauseRadioNetwork_cs_fallback_triggered:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_cs_fallback_triggered\n");
break; break;
case NGAP_CauseRadioNetwork_ue_not_available_for_ps_service: case NGAP_CauseRadioNetwork_radio_resources_not_available:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_ue_not_available_for_ps_service\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_radio_resources_not_available\n");
break; break;
case NGAP_CauseRadioNetwork_radio_resources_not_available: case NGAP_CauseRadioNetwork_invalid_qos_combination:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_radio_resources_not_available\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_invalid_qos_combination\n");
break; break;
case NGAP_CauseRadioNetwork_failure_in_radio_interface_procedure: case NGAP_CauseRadioNetwork_failure_in_radio_interface_procedure:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_failure_in_radio_interface_procedure\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_failure_in_radio_interface_procedure\n");
break; break;
case NGAP_CauseRadioNetwork_invalid_qos_combination: case NGAP_CauseRadioNetwork_interaction_with_other_procedure:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_invalngap_id_qos_combination\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_interaction_with_other_procedure\n");
break; break;
case NGAP_CauseRadioNetwork_interrat_redirection: case NGAP_CauseRadioNetwork_unknown_PDU_session_ID:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_interrat_redirection\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_unknown_PDU_session_ID\n");
break; break;
case NGAP_CauseRadioNetwork_interaction_with_other_procedure: case NGAP_CauseRadioNetwork_unkown_qos_flow_ID:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_interaction_with_other_procedure\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_unkown_qos_flow_ID\n");
break; break;
case NGAP_CauseRadioNetwork_unknown_PDUSESSION_ID: case NGAP_CauseRadioNetwork_multiple_PDU_session_ID_instances:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_unknown_PDUSESSION_ID\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_multiple_PDU_session_ID_instances\n");
break; break;
case NGAP_CauseRadioNetwork_multiple_PDUSESSION_ID_instances: case NGAP_CauseRadioNetwork_multiple_qos_flow_ID_instances:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_multiple_PDUSESSION_ID_instances\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_multiple_qos_flow_ID_instances\n");
break; break;
case NGAP_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported: case NGAP_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported\n");
break; break;
case NGAP_CauseRadioNetwork_ng_intra_system_handover_triggered: case NGAP_CauseRadioNetwork_ng_intra_system_handover_triggered:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_ng_intra_system_handover_triggered\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_ng_intra_system_handover_triggered\n");
break; break;
case NGAP_CauseRadioNetwork_ng_inter_system_handover_triggered: case NGAP_CauseRadioNetwork_ng_inter_system_handover_triggered:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_ng_inter_system_handover_triggered\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_ng_inter_system_handover_triggered\n");
break;
case NGAP_CauseRadioNetwork_xn_handover_triggered:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_xn_handover_triggered\n");
break;
case NGAP_CauseRadioNetwork_not_supported_5QI_value:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_not_supported_5QI_value\n");
break; break;
case NGAP_CauseRadioNetwork_x2_handover_triggered: case NGAP_CauseRadioNetwork_ue_context_transfer:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_x2_handover_triggered\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_ue_context_transfer\n");
break; break;
case NGAP_CauseRadioNetwork_redirection_towards_1xRTT: case NGAP_CauseRadioNetwork_ims_voice_eps_fallback_or_rat_fallback_triggered:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_redirection_towards_1xRTT\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_ims_voice_eps_fallback_or_rat_fallback_triggered\n");
break; break;
case NGAP_CauseRadioNetwork_not_supported_QCI_value: case NGAP_CauseRadioNetwork_up_integrity_protection_not_possible:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_not_supported_QCI_value\n"); NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_up_integrity_protection_not_possible\n");
break;
case NGAP_CauseRadioNetwork_up_confidentiality_protection_not_possible:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_up_confidentiality_protection_not_possible\n");
break; break;
case NGAP_CauseRadioNetwork_invalid_CSG_Id:
NGAP_WARN("Received S1 Error indication NGAP_CauseRadioNetwork_invalngap_id_CSG_Id\n"); case NGAP_CauseRadioNetwork_slice_not_supported:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_slice_not_supported\n");
break;
case NGAP_CauseRadioNetwork_ue_in_rrc_inactive_state_not_reachable:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_ue_in_rrc_inactive_state_not_reachable\n");
break;
case NGAP_CauseRadioNetwork_redirection:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_redirection\n");
break;
case NGAP_CauseRadioNetwork_resources_not_available_for_the_slice:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_resources_not_available_for_the_slice\n");
break;
case NGAP_CauseRadioNetwork_ue_max_integrity_protected_data_rate_reason:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_ue_max_integrity_protected_data_rate_reason\n");
break;
case NGAP_CauseRadioNetwork_release_due_to_cn_detected_mobility:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_release_due_to_cn_detected_mobility\n");
break;
case NGAP_CauseRadioNetwork_n26_interface_not_available:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_n26_interface_not_available\n");
break;
case NGAP_CauseRadioNetwork_release_due_to_pre_emption:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_release_due_to_pre_emption\n");
break;
case NGAP_CauseRadioNetwork_multiple_location_reporting_reference_ID_instances:
NGAP_WARN("Received NG Error indication NGAP_CauseRadioNetwork_multiple_location_reporting_reference_ID_instances\n");
break; break;
default: default:
NGAP_WARN("Received S1 Error indication cause radio network case not handled\n"); NGAP_WARN("Received NG Error indication cause radio network case not handled\n");
} }
break; break;
...@@ -666,15 +705,15 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id, ...@@ -666,15 +705,15 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id,
case NGAP_Cause_PR_transport: case NGAP_Cause_PR_transport:
switch (ie->value.choice.Cause.choice.transport) { switch (ie->value.choice.Cause.choice.transport) {
case NGAP_CauseTransport_transport_resource_unavailable: case NGAP_CauseTransport_transport_resource_unavailable:
NGAP_WARN("Received S1 Error indication NGAP_CauseTransport_transport_resource_unavailable\n"); NGAP_WARN("Received NG Error indication NGAP_CauseTransport_transport_resource_unavailable\n");
break; break;
case NGAP_CauseTransport_unspecified: case NGAP_CauseTransport_unspecified:
NGAP_WARN("Received S1 Error indication NGAP_CauseTransport_unspecified\n"); NGAP_WARN("Received NG Error indication NGAP_CauseTransport_unspecified\n");
break; break;
default: default:
NGAP_WARN("Received S1 Error indication cause transport case not handled\n"); NGAP_WARN("Received NG Error indication cause transport case not handled\n");
} }
break; break;
...@@ -682,26 +721,23 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id, ...@@ -682,26 +721,23 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id,
case NGAP_Cause_PR_nas: case NGAP_Cause_PR_nas:
switch (ie->value.choice.Cause.choice.nas) { switch (ie->value.choice.Cause.choice.nas) {
case NGAP_CauseNas_normal_release: case NGAP_CauseNas_normal_release:
NGAP_WARN("Received S1 Error indication NGAP_CauseNas_normal_release\n"); NGAP_WARN("Received NG Error indication NGAP_CauseNas_normal_release\n");
break; break;
case NGAP_CauseNas_authentication_failure: case NGAP_CauseNas_authentication_failure:
NGAP_WARN("Received S1 Error indication NGAP_CauseNas_authentication_failure\n"); NGAP_WARN("Received NG Error indication NGAP_CauseNas_authentication_failure\n");
break; break;
case NGAP_CauseNas_detach: case NGAP_CauseNas_deregister:
NGAP_WARN("Received S1 Error indication NGAP_CauseNas_detach\n"); NGAP_WARN("Received NG Error indication NGAP_CauseNas_deregister\n");
break; break;
case NGAP_CauseNas_unspecified: case NGAP_CauseNas_unspecified:
NGAP_WARN("Received S1 Error indication NGAP_CauseNas_unspecified\n"); NGAP_WARN("Received NG Error indication NGAP_CauseNas_unspecified\n");
break;
case NGAP_CauseNas_csg_subscription_expiry:
NGAP_WARN("Received S1 Error indication NGAP_CauseNas_csg_subscription_expiry\n");
break; break;
default: default:
NGAP_WARN("Received S1 Error indication cause nas case not handled\n"); NGAP_WARN("Received NG Error indication cause nas case not handled\n");
} }
break; break;
...@@ -709,35 +745,35 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id, ...@@ -709,35 +745,35 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id,
case NGAP_Cause_PR_protocol: case NGAP_Cause_PR_protocol:
switch (ie->value.choice.Cause.choice.protocol) { switch (ie->value.choice.Cause.choice.protocol) {
case NGAP_CauseProtocol_transfer_syntax_error: case NGAP_CauseProtocol_transfer_syntax_error:
NGAP_WARN("Received S1 Error indication NGAP_CauseProtocol_transfer_syntax_error\n"); NGAP_WARN("Received NG Error indication NGAP_CauseProtocol_transfer_syntax_error\n");
break; break;
case NGAP_CauseProtocol_abstract_syntax_error_reject: case NGAP_CauseProtocol_abstract_syntax_error_reject:
NGAP_WARN("Received S1 Error indication NGAP_CauseProtocol_abstract_syntax_error_reject\n"); NGAP_WARN("Received NG Error indication NGAP_CauseProtocol_abstract_syntax_error_reject\n");
break; break;
case NGAP_CauseProtocol_abstract_syntax_error_ignore_and_notify: case NGAP_CauseProtocol_abstract_syntax_error_ignore_and_notify:
NGAP_WARN("Received S1 Error indication NGAP_CauseProtocol_abstract_syntax_error_ignore_and_notify\n"); NGAP_WARN("Received NG Error indication NGAP_CauseProtocol_abstract_syntax_error_ignore_and_notify\n");
break; break;
case NGAP_CauseProtocol_message_not_compatible_with_receiver_state: case NGAP_CauseProtocol_message_not_compatible_with_receiver_state:
NGAP_WARN("Received S1 Error indication NGAP_CauseProtocol_message_not_compatible_with_receiver_state\n"); NGAP_WARN("Received NG Error indication NGAP_CauseProtocol_message_not_compatible_with_receiver_state\n");
break; break;
case NGAP_CauseProtocol_semantic_error: case NGAP_CauseProtocol_semantic_error:
NGAP_WARN("Received S1 Error indication NGAP_CauseProtocol_semantic_error\n"); NGAP_WARN("Received NG Error indication NGAP_CauseProtocol_semantic_error\n");
break; break;
case NGAP_CauseProtocol_abstract_syntax_error_falsely_constructed_message: case NGAP_CauseProtocol_abstract_syntax_error_falsely_constructed_message:
NGAP_WARN("Received S1 Error indication NGAP_CauseProtocol_abstract_syntax_error_falsely_constructed_message\n"); NGAP_WARN("Received NG Error indication NGAP_CauseProtocol_abstract_syntax_error_falsely_constructed_message\n");
break; break;
case NGAP_CauseProtocol_unspecified: case NGAP_CauseProtocol_unspecified:
NGAP_WARN("Received S1 Error indication NGAP_CauseProtocol_unspecified\n"); NGAP_WARN("Received NG Error indication NGAP_CauseProtocol_unspecified\n");
break; break;
default: default:
NGAP_WARN("Received S1 Error indication cause protocol case not handled\n"); NGAP_WARN("Received NG Error indication cause protocol case not handled\n");
} }
break; break;
...@@ -745,37 +781,43 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id, ...@@ -745,37 +781,43 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id,
case NGAP_Cause_PR_misc: case NGAP_Cause_PR_misc:
switch (ie->value.choice.Cause.choice.protocol) { switch (ie->value.choice.Cause.choice.protocol) {
case NGAP_CauseMisc_control_processing_overload: case NGAP_CauseMisc_control_processing_overload:
NGAP_WARN("Received S1 Error indication NGAP_CauseMisc_control_processing_overload\n"); NGAP_WARN("Received NG Error indication NGAP_CauseMisc_control_processing_overload\n");
break; break;
case NGAP_CauseMisc_not_enough_user_plane_processing_resources: case NGAP_CauseMisc_not_enough_user_plane_processing_resources:
NGAP_WARN("Received S1 Error indication NGAP_CauseMisc_not_enough_user_plane_processing_resources\n"); NGAP_WARN("Received NG Error indication NGAP_CauseMisc_not_enough_user_plane_processing_resources\n");
break; break;
case NGAP_CauseMisc_hardware_failure: case NGAP_CauseMisc_hardware_failure:
NGAP_WARN("Received S1 Error indication NGAP_CauseMisc_hardware_failure\n"); NGAP_WARN("Received NG Error indication NGAP_CauseMisc_hardware_failure\n");
break; break;
case NGAP_CauseMisc_om_intervention: case NGAP_CauseMisc_om_intervention:
NGAP_WARN("Received S1 Error indication NGAP_CauseMisc_om_intervention\n"); NGAP_WARN("Received NG Error indication NGAP_CauseMisc_om_intervention\n");
break; break;
case NGAP_CauseMisc_unspecified: case NGAP_CauseMisc_unspecified:
NGAP_WARN("Received S1 Error indication NGAP_CauseMisc_unspecified\n"); NGAP_WARN("Received NG Error indication NGAP_CauseMisc_unspecified\n");
break; break;
case NGAP_CauseMisc_unknown_PLMN: case NGAP_CauseMisc_unknown_PLMN:
NGAP_WARN("Received S1 Error indication NGAP_CauseMisc_unknown_PLMN\n"); NGAP_WARN("Received NG Error indication NGAP_CauseMisc_unknown_PLMN\n");
break; break;
default: default:
NGAP_WARN("Received S1 Error indication cause misc case not handled\n"); NGAP_WARN("Received NG Error indication cause misc case not handled\n");
} }
break; break;
default:
NGAP_WARN("Received NG Error indication cause NGAP_Cause_PR_choice_Extensions\n");
break;
} }
} }
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_ErrorIndicationIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_ErrorIndicationIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_CriticalityDiagnostics, false); NGAP_ProtocolIE_ID_id_CriticalityDiagnostics, false);
...@@ -783,7 +825,7 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id, ...@@ -783,7 +825,7 @@ int ngap_gNB_handle_error_indication(uint32_t assoc_id,
// TODO continue // TODO continue
} }
#endif
// TODO continue // TODO continue
return 0; return 0;
} }
...@@ -976,7 +1018,7 @@ int ngap_gNB_handle_initial_context_request(uint32_t assoc_id, ...@@ -976,7 +1018,7 @@ int ngap_gNB_handle_initial_context_request(uint32_t assoc_id,
{ {
NGAP_QosFlowSetupRequestItem_t *qosFlowItem_p; NGAP_QosFlowSetupRequestItem_t *qosFlowItem_p;
NGAP_DEBUG("servedGUAMIs.list.count %d\n", pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count); NGAP_DEBUG("QosFlowSetupRequestList.list.count %d\n", pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count);
DevAssert(pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count > 0); DevAssert(pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count > 0);
DevAssert(pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count <= NGAP_maxnoofQosFlows); DevAssert(pdusessionTransfer_ies->value.choice.QosFlowSetupRequestList.list.count <= NGAP_maxnoofQosFlows);
...@@ -1400,7 +1442,7 @@ static ...@@ -1400,7 +1442,7 @@ static
int ngap_gNB_handle_paging(uint32_t assoc_id, int ngap_gNB_handle_paging(uint32_t assoc_id,
uint32_t stream, uint32_t stream,
NGAP_NGAP_PDU_t *pdu) { NGAP_NGAP_PDU_t *pdu) {
#if 0
ngap_gNB_amf_data_t *amf_desc_p = NULL; ngap_gNB_amf_data_t *amf_desc_p = NULL;
ngap_gNB_instance_t *ngap_gNB_instance = NULL; ngap_gNB_instance_t *ngap_gNB_instance = NULL;
MessageDef *message_p = NULL; MessageDef *message_p = NULL;
...@@ -1436,93 +1478,33 @@ int ngap_gNB_handle_paging(uint32_t assoc_id, ...@@ -1436,93 +1478,33 @@ int ngap_gNB_handle_paging(uint32_t assoc_id,
/* convert NGAP_PagingIEs_t to ngap_paging_ind_t */ /* convert NGAP_PagingIEs_t to ngap_paging_ind_t */
/* id-UEIdentityIndexValue : convert UE Identity Index value */ /* id-UEIdentityIndexValue : convert UE Identity Index value */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_UEIdentityIndexValue, true); NGAP_ProtocolIE_ID_id_UEPagingIdentity, true);
if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */ if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
NGAP_PAGING_IND(message_p).ue_index_value = BIT_STRING_to_uint32(&ie->value.choice.UEIdentityIndexValue); OCTET_STRING_TO_INT16(&ie->value.choice.UEPagingIdentity.choice.fiveG_S_TMSI.aMFSetID, NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.amf_set_id);
NGAP_DEBUG("[SCTP %d] Received Paging ue_index_value (%d)\n", OCTET_STRING_TO_INT8(&ie->value.choice.UEPagingIdentity.choice.fiveG_S_TMSI.aMFPointer, NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.amf_pointer);
assoc_id,(uint32_t)NGAP_PAGING_IND(message_p).ue_index_value); OCTET_STRING_TO_INT32(&ie->value.choice.UEPagingIdentity.choice.fiveG_S_TMSI.fiveG_TMSI, NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.m_tmsi);
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.amf_code = 0;
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi = 0;
} else {
return -1;
}
/* id-UEPagingID */ NGAP_DEBUG("[SCTP %d] Received Paging Identity amf_set_id %d, amf_pointer %d, m_tmsi %d\n",
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container, assoc_id,
NGAP_ProtocolIE_ID_id_UEPagingID, true); NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.amf_set_id,
NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.amf_pointer,
if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */ NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.m_tmsi);
/* convert UE Paging Identity */
if (ie->value.choice.UEPagingID.present == NGAP_UEPagingID_PR_s_TMSI) {
NGAP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_s_tmsi;
OCTET_STRING_TO_INT8(&ie->value.choice.UEPagingID.choice.s_TMSI.mMEC, NGAP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.amf_code);
OCTET_STRING_TO_INT32(&ie->value.choice.UEPagingID.choice.s_TMSI.m_TMSI, NGAP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi);
} else if (ie->value.choice.UEPagingID.present == NGAP_UEPagingID_PR_iMSI) {
NGAP_PAGING_IND(message_p).ue_paging_identity.presenceMask = UE_PAGING_IDENTITY_imsi;
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length = 0;
for (int i = 0; i < ie->value.choice.UEPagingID.choice.iMSI.size; i++) {
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i] = (uint8_t)(ie->value.choice.UEPagingID.choice.iMSI.buf[i] & 0x0F );
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length++;
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1] = (uint8_t)((ie->value.choice.UEPagingID.choice.iMSI.buf[i]>>4) & 0x0F);
LOG_D(NGAP,"paging : i %d %d imsi %d %d \n",2*i,2*i+1,NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i], NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1]);
if (NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2*i+1] == 0x0F) {
if(i != ie->value.choice.UEPagingID.choice.iMSI.size - 1) {
/* invalid paging_p->uePagingID.choise.iMSI.buffer */
NGAP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI error(i %d 0x0F)\n", assoc_id,i);
return -1;
}
} else { } else {
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length++;
}
} /* for i... */
if (NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length >= NGAP_IMSI_LENGTH) {
/* invalid paging_p->uePagingID.choise.iMSI.size */
NGAP_ERROR("[SCTP %d] Received Paging : uePagingID.choise.iMSI.size(%d) is over IMSI length(%d)\n", assoc_id, NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length, NGAP_IMSI_LENGTH);
return -1;
}
} else { /* of if (ie->value.choice.UEPagingID.present == NGAP_UEPagingID_PR_iMSI) */
/* invalid paging_p->uePagingID.present */
NGAP_ERROR("[SCTP %d] Received Paging : uePagingID.present(%d) is unknown\n", assoc_id, ie->value.choice.UEPagingID.present);
return -1;
}
} else { /* of ie != NULL */
return -1; return -1;
} }
NGAP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256;
NGAP_PAGING_IND(message_p).paging_drx = NGAP_PAGING_DRX_256;
/* id-pagingDRX */ /* id-pagingDRX */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_pagingDRX, false); NGAP_ProtocolIE_ID_id_PagingDRX, false);
/* optional */ /* optional */
if (ie) { if (ie) {
NGAP_PAGING_IND(message_p).paging_drx = ie->value.choice.PagingDRX; NGAP_PAGING_IND(message_p).paging_drx = ie->value.choice.PagingDRX;
} else { } else {
NGAP_PAGING_IND(message_p).paging_drx = PAGING_DRX_256; NGAP_PAGING_IND(message_p).paging_drx = NGAP_PAGING_DRX_256;
}
/* */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_CNDomain, true);
if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
/* id-CNDomain : convert cnDomain */
if (ie->value.choice.CNDomain == NGAP_CNDomain_ps) {
NGAP_PAGING_IND(message_p).cn_domain = CN_DOMAIN_PS;
} else if (ie->value.choice.CNDomain == NGAP_CNDomain_cs) {
NGAP_PAGING_IND(message_p).cn_domain = CN_DOMAIN_CS;
} else {
/* invalid paging_p->cnDomain */
NGAP_ERROR("[SCTP %d] Received Paging : cnDomain(%ld) is unknown\n", assoc_id, ie->value.choice.CNDomain);
itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p);
return -1;
}
} else {
return -1;
} }
memset (&NGAP_PAGING_IND(message_p).plmn_identity[0], 0, sizeof(plmn_identity_t)*256); memset (&NGAP_PAGING_IND(message_p).plmn_identity[0], 0, sizeof(plmn_identity_t)*256);
...@@ -1530,15 +1512,15 @@ int ngap_gNB_handle_paging(uint32_t assoc_id, ...@@ -1530,15 +1512,15 @@ int ngap_gNB_handle_paging(uint32_t assoc_id,
NGAP_PAGING_IND(message_p).tai_size = 0; NGAP_PAGING_IND(message_p).tai_size = 0;
/* id-TAIList */ /* id-TAIList */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PagingIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_TAIList, true); NGAP_ProtocolIE_ID_id_TAIListForPaging, true);
if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */ if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
NGAP_INFO("[SCTP %d] Received Paging taiList: count %d\n", assoc_id, ie->value.choice.TAIList.list.count); NGAP_INFO("[SCTP %d] Received Paging taiList For Paging: count %d\n", assoc_id, ie->value.choice.TAIListForPaging.list.count);
for (int i = 0; i < ie->value.choice.TAIList.list.count; i++) { for (int i = 0; i < ie->value.choice.TAIListForPaging.list.count; i++) {
NGAP_TAIItem_t *item_p; NGAP_TAIListForPagingItem_t *item_p;
item_p = &(((NGAP_TAIItemIEs_t *)ie->value.choice.TAIList.list.array[i])->value.choice.TAIItem); item_p = (NGAP_TAIListForPagingItem_t *)ie->value.choice.TAIListForPaging.list.array[i];
TBCD_TO_MCC_MNC(&(item_p->tAI.pLMNidentity), NGAP_PAGING_IND(message_p).plmn_identity[i].mcc, TBCD_TO_MCC_MNC(&(item_p->tAI.pLMNIdentity), NGAP_PAGING_IND(message_p).plmn_identity[i].mcc,
NGAP_PAGING_IND(message_p).plmn_identity[i].mnc, NGAP_PAGING_IND(message_p).plmn_identity[i].mnc,
NGAP_PAGING_IND(message_p).plmn_identity[i].mnc_digit_length); NGAP_PAGING_IND(message_p).plmn_identity[i].mnc_digit_length);
OCTET_STRING_TO_INT16(&(item_p->tAI.tAC), NGAP_PAGING_IND(message_p).tac[i]); OCTET_STRING_TO_INT16(&(item_p->tAI.tAC), NGAP_PAGING_IND(message_p).tac[i]);
...@@ -1553,18 +1535,14 @@ int ngap_gNB_handle_paging(uint32_t assoc_id, ...@@ -1553,18 +1535,14 @@ int ngap_gNB_handle_paging(uint32_t assoc_id,
} }
//paging parameter values //paging parameter values
NGAP_DEBUG("[SCTP %d] Received Paging parameters: ue_index_value %d cn_domain %d paging_drx %d paging_priority %d\n",assoc_id, NGAP_DEBUG("[SCTP %d] Received Paging parameters: Paging Identity amf_set_id %d amf_pointer %d m_tmsi %d paging_drx %d paging_priority %d\n",assoc_id,
NGAP_PAGING_IND(message_p).ue_index_value, NGAP_PAGING_IND(message_p).cn_domain, NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.amf_set_id,
NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.amf_pointer,
NGAP_PAGING_IND(message_p).ue_paging_identity.s_tmsi.m_tmsi,
NGAP_PAGING_IND(message_p).paging_drx, NGAP_PAGING_IND(message_p).paging_priority); NGAP_PAGING_IND(message_p).paging_drx, NGAP_PAGING_IND(message_p).paging_priority);
NGAP_DEBUG("[SCTP %d] Received Paging parameters(ue): presenceMask %d s_tmsi.m_tmsi %d s_tmsi.amf_code %d IMSI length %d (0-5) %d%d%d%d%d%d\n",assoc_id,
NGAP_PAGING_IND(message_p).ue_paging_identity.presenceMask, NGAP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.m_tmsi,
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.s_tmsi.amf_code, NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.length,
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[0], NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[1],
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[2], NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[3],
NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[4], NGAP_PAGING_IND(message_p).ue_paging_identity.choice.imsi.buffer[5]);
/* send message to RRC */ /* send message to RRC */
itti_send_msg_to_task(TASK_RRC_GNB, ngap_gNB_instance->instance, message_p); itti_send_msg_to_task(TASK_RRC_GNB, ngap_gNB_instance->instance, message_p);
#endif
return 0; return 0;
} }
...@@ -1572,53 +1550,53 @@ static ...@@ -1572,53 +1550,53 @@ static
int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id, int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id,
uint32_t stream, uint32_t stream,
NGAP_NGAP_PDU_t *pdu) { NGAP_NGAP_PDU_t *pdu) {
#if 0
int i, nb_of_pdusessions_failed; int i, nb_of_pdusessions_failed;
ngap_gNB_amf_data_t *amf_desc_p = NULL; ngap_gNB_amf_data_t *amf_desc_p = NULL;
ngap_gNB_ue_context_t *ue_desc_p = NULL; ngap_gNB_ue_context_t *ue_desc_p = NULL;
MessageDef *message_p = NULL; MessageDef *message_p = NULL;
NGAP_PDUSESSIONModifyRequest_t *container; NGAP_PDUSessionResourceModifyRequest_t *container;
NGAP_PDUSESSIONModifyRequestIEs_t *ie; NGAP_PDUSessionResourceModifyRequestIEs_t *ie;
NGAP_GNB_UE_NGAP_ID_t enb_ue_ngap_id; NGAP_RAN_UE_NGAP_ID_t gnb_ue_ngap_id;
NGAP_AMF_UE_NGAP_ID_t amf_ue_ngap_id; uint64_t amf_ue_ngap_id;
DevAssert(pdu != NULL); DevAssert(pdu != NULL);
container = &pdu->choice.initiatingMessage.value.choice.PDUSESSIONModifyRequest; container = &pdu->choice.initiatingMessage.value.choice.PDUSessionResourceModifyRequest;
if ((amf_desc_p = ngap_gNB_get_AMF(NULL, assoc_id, 0)) == NULL) { if ((amf_desc_p = ngap_gNB_get_AMF(NULL, assoc_id, 0)) == NULL) {
NGAP_ERROR("[SCTP %d] Received E-RAB modify request for non " NGAP_ERROR("[SCTP %d] Received PDUSession Resource modify request for non "
"existing AMF context\n", assoc_id); "existing AMF context\n", assoc_id);
return -1; return -1;
} }
/* id-AMF-UE-NGAP-ID */ /* id-AMF-UE-NGAP-ID */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSESSIONModifyRequestIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceModifyRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID, true); NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID, true);
if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */ if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
amf_ue_ngap_id = ie->value.choice.AMF_UE_NGAP_ID; asn_INTEGER2ulong(&(ie->value.choice.AMF_UE_NGAP_ID), &amf_ue_ngap_id);
} else { } else {
return -1; return -1;
} }
/* id-gNB-UE-NGAP-ID */ /* id-RAN-UE-NGAP-ID */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSESSIONModifyRequestIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceModifyRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_gNB_UE_NGAP_ID, true); NGAP_ProtocolIE_ID_id_RAN_UE_NGAP_ID, true);
if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */ if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
enb_ue_ngap_id = ie->value.choice.GNB_UE_NGAP_ID; gnb_ue_ngap_id = ie->value.choice.RAN_UE_NGAP_ID;
} else { } else {
return -1; return -1;
} }
if ((ue_desc_p = ngap_gNB_get_ue_context(amf_desc_p->ngap_gNB_instance, if ((ue_desc_p = ngap_gNB_get_ue_context(amf_desc_p->ngap_gNB_instance,
enb_ue_ngap_id)) == NULL) { gnb_ue_ngap_id)) == NULL) {
NGAP_ERROR("[SCTP %d] Received E-RAB modify request for non " NGAP_ERROR("[SCTP %d] Received PDUSession Resource modify request for non "
"existing UE context 0x%06lx\n", assoc_id, "existing UE context 0x%08lx\n", assoc_id,
enb_ue_ngap_id); gnb_ue_ngap_id);
return -1; return -1;
} }
/* E-RAB modify request = UE-related procedure -> stream != 0 */ /* PDUSession Resource modify request = UE-related procedure -> stream != 0 */
if (stream == 0) { if (stream == 0) {
NGAP_ERROR("[SCTP %d] Received UE-related procedure on stream (%d)\n", NGAP_ERROR("[SCTP %d] Received UE-related procedure on stream (%d)\n",
assoc_id, stream); assoc_id, stream);
...@@ -1628,21 +1606,21 @@ int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id, ...@@ -1628,21 +1606,21 @@ int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id,
ue_desc_p->rx_stream = stream; ue_desc_p->rx_stream = stream;
if (ue_desc_p->amf_ue_ngap_id != amf_ue_ngap_id) { if (ue_desc_p->amf_ue_ngap_id != amf_ue_ngap_id) {
NGAP_WARN("UE context amf_ue_ngap_id is different form that of the message (%d != %ld)", NGAP_WARN("UE context amf_ue_ngap_id is different form that of the message (%ld != %ld)",
ue_desc_p->amf_ue_ngap_id, amf_ue_ngap_id); (uint64_t)ue_desc_p->amf_ue_ngap_id, amf_ue_ngap_id);
message_p = itti_alloc_new_message (TASK_RRC_GNB, NGAP_PDUSESSION_MODIFY_RESP); message_p = itti_alloc_new_message (TASK_RRC_GNB, NGAP_PDUSESSION_MODIFY_RESP);
NGAP_PDUSESSION_MODIFY_RESP (message_p).gNB_ue_ngap_id = enb_ue_ngap_id; NGAP_PDUSESSION_MODIFY_RESP (message_p).gNB_ue_ngap_id = gnb_ue_ngap_id;
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSESSIONModifyRequestIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceModifyRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_PDUSESSIONToBeModifiedListBearerModReq, true); NGAP_ProtocolIE_ID_id_PDUSessionResourceModifyListModReq, true);
if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */ if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
for(nb_of_pdusessions_failed = 0; nb_of_pdusessions_failed < ie->value.choice.PDUSESSIONToBeModifiedListBearerModReq.list.count; nb_of_pdusessions_failed++) { for(nb_of_pdusessions_failed = 0; nb_of_pdusessions_failed < ie->value.choice.PDUSessionResourceModifyListModReq.list.count; nb_of_pdusessions_failed++) {
NGAP_PDUSESSIONToBeModifiedItemBearerModReq_t *item_p; NGAP_PDUSessionResourceModifyItemModReq_t *item_p;
item_p = &(((NGAP_PDUSESSIONToBeModifiedItemBearerModReqIEs_t *) item_p = (NGAP_PDUSessionResourceModifyItemModReq_t *)ie->value.choice.PDUSessionResourceModifyListModReq.list.array[nb_of_pdusessions_failed];
ie->value.choice.PDUSESSIONToBeModifiedListBearerModReq.list.array[nb_of_pdusessions_failed])->value.choice.PDUSESSIONToBeModifiedItemBearerModReq);
NGAP_PDUSESSION_MODIFY_RESP(message_p).pdusessions_failed[nb_of_pdusessions_failed].pdusession_id = item_p->e_RAB_ID; NGAP_PDUSESSION_MODIFY_RESP(message_p).pdusessions_failed[nb_of_pdusessions_failed].pdusession_id = item_p->pDUSessionID;
NGAP_PDUSESSION_MODIFY_RESP(message_p).pdusessions_failed[nb_of_pdusessions_failed].cause = NGAP_Cause_PR_radioNetwork; NGAP_PDUSESSION_MODIFY_RESP(message_p).pdusessions_failed[nb_of_pdusessions_failed].cause = NGAP_Cause_PR_radioNetwork;
NGAP_PDUSESSION_MODIFY_RESP(message_p).pdusessions_failed[nb_of_pdusessions_failed].cause_value = NGAP_CauseRadioNetwork_unknown_amf_ue_ngap_id; NGAP_PDUSESSION_MODIFY_RESP(message_p).pdusessions_failed[nb_of_pdusessions_failed].cause_value = NGAP_CauseRadioNetwork_unknown_local_UE_NGAP_ID;
} }
} else { } else {
return -1; return -1;
...@@ -1659,47 +1637,115 @@ int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id, ...@@ -1659,47 +1637,115 @@ int ngap_gNB_handle_pdusession_modify_request(uint32_t assoc_id,
message_p = itti_alloc_new_message(TASK_NGAP, NGAP_PDUSESSION_MODIFY_REQ); message_p = itti_alloc_new_message(TASK_NGAP, NGAP_PDUSESSION_MODIFY_REQ);
NGAP_PDUSESSION_MODIFY_REQ(message_p).ue_initial_id = ue_desc_p->ue_initial_id; NGAP_PDUSESSION_MODIFY_REQ(message_p).ue_initial_id = ue_desc_p->ue_initial_id;
NGAP_PDUSESSION_MODIFY_REQ(message_p).amf_ue_ngap_id = amf_ue_ngap_id; NGAP_PDUSESSION_MODIFY_REQ(message_p).amf_ue_ngap_id = amf_ue_ngap_id;
NGAP_PDUSESSION_MODIFY_REQ(message_p).gNB_ue_ngap_id = enb_ue_ngap_id; NGAP_PDUSESSION_MODIFY_REQ(message_p).gNB_ue_ngap_id = gnb_ue_ngap_id;
/* id-E-RABToBeModifiedListBearerModReq */ /* id-PDUSessionResourceModifyListModReq */
NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSESSIONModifyRequestIEs_t, ie, container, NGAP_FIND_PROTOCOLIE_BY_ID(NGAP_PDUSessionResourceModifyRequestIEs_t, ie, container,
NGAP_ProtocolIE_ID_id_PDUSESSIONToBeModifiedListBearerModReq, true); NGAP_ProtocolIE_ID_id_PDUSessionResourceModifyListModReq, true);
if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */ if (ie != NULL) { /* checked by macro but cppcheck doesn't see it */
NGAP_PDUSESSION_MODIFY_REQ(message_p).nb_pdusessions_tomodify = NGAP_PDUSESSION_MODIFY_REQ(message_p).nb_pdusessions_tomodify =
ie->value.choice.PDUSESSIONToBeModifiedListBearerModReq.list.count; ie->value.choice.PDUSessionResourceModifyListModReq.list.count;
for (i = 0; i < ie->value.choice.PDUSESSIONToBeModifiedListBearerModReq.list.count; i++) { for (i = 0; i < ie->value.choice.PDUSessionResourceModifyListModReq.list.count; i++) {
NGAP_PDUSESSIONToBeModifiedItemBearerModReq_t *item_p; NGAP_PDUSessionResourceModifyItemModReq_t *item_p;
item_p = &(((NGAP_PDUSESSIONToBeModifiedItemBearerModReqIEs_t *)ie->value.choice.PDUSESSIONToBeModifiedListBearerModReq.list.array[i])->value.choice.PDUSESSIONToBeModifiedItemBearerModReq); asn_dec_rval_t dec_rval;
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].pdusession_id = item_p->e_RAB_ID; NGAP_PDUSessionResourceModifyRequestTransfer_t *pdusessionTransfer_p = NULL;
NGAP_PDUSessionResourceModifyRequestTransferIEs_t *pdusessionTransfer_ies = NULL;
item_p = (NGAP_PDUSessionResourceModifyItemModReq_t *)ie->value.choice.PDUSessionResourceModifyListModReq.list.array[i];
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].pdusession_id = item_p->pDUSessionID;
// check for the NAS PDU // check for the NAS PDU
if (item_p->nAS_PDU.size > 0 ) { if (item_p->nAS_PDU != NULL && item_p->nAS_PDU->size > 0 ) {
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.length = item_p->nAS_PDU.size; NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.length = item_p->nAS_PDU->size;
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.buffer = malloc(sizeof(uint8_t) * item_p->nAS_PDU.size); NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.buffer = malloc(sizeof(uint8_t) * item_p->nAS_PDU->size);
memcpy(NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.buffer, memcpy(NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.buffer,
item_p->nAS_PDU.buf, item_p->nAS_PDU.size); item_p->nAS_PDU->buf, item_p->nAS_PDU->size);
} else { } else {
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.length = 0; NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.length = 0;
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.buffer = NULL; NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nas_pdu.buffer = NULL;
continue; continue;
} }
dec_rval = uper_decode(NULL,
&asn_DEF_NGAP_PDUSessionResourceModifyRequestTransfer,
(void **)&pdusessionTransfer_p,
item_p->pDUSessionResourceModifyRequestTransfer.buf,
item_p->pDUSessionResourceModifyRequestTransfer.size, 0, 0);
if(dec_rval.code != RC_OK) {
NGAP_ERROR("could not decode PDUSessionResourceModifyRequestTransfer\n");
return -1;
}
for(int j=0; j< pdusessionTransfer_p->protocolIEs.list.count; j++) {
pdusessionTransfer_ies = pdusessionTransfer_p->protocolIEs.list.array[j];
switch(pdusessionTransfer_ies->id) {
/* optional PDUSessionAggregateMaximumBitRate */
case NGAP_ProtocolIE_ID_id_PDUSessionAggregateMaximumBitRate:
break;
/* optional UL-NGU-UP-TNLModifyList */
case NGAP_ProtocolIE_ID_id_UL_NGU_UP_TNLModifyList:
break;
/* optional NetworkInstance */
case NGAP_ProtocolIE_ID_id_NetworkInstance:
break;
/* optional QosFlowAddOrModifyRequestList */
case NGAP_ProtocolIE_ID_id_QosFlowAddOrModifyRequestList:
{
NGAP_QosFlowAddOrModifyRequestItem_t *qosFlowItem_p;
NGAP_DEBUG("QosFlowAddOrModifyRequestList.list.count %d\n", pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count);
DevAssert(pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count > 0);
DevAssert(pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count <= NGAP_maxnoofQosFlows);
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].nb_qos = pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count;
for(int qosIdx = 0; qosIdx < pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.count; qosIdx++) {
qosFlowItem_p = pdusessionTransfer_ies->value.choice.QosFlowAddOrModifyRequestList.list.array[qosIdx];
/* Set the QOS informations */ /* Set the QOS informations */
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].qos.qci = item_p->e_RABLevelQoSParameters.qCI; NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].qos[qosIdx].qci = (uint8_t)qosFlowItem_p->qosFlowIdentifier;
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].qos.allocation_retention_priority.priority_level = if(qosFlowItem_p->qosFlowLevelQosParameters) {
item_p->e_RABLevelQoSParameters.allocationRetentionPriority.priorityLevel; NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].qos[qosIdx].allocation_retention_priority.priority_level =
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].qos.allocation_retention_priority.pre_emp_capability = qosFlowItem_p->qosFlowLevelQosParameters->allocationAndRetentionPriority.priorityLevelARP;
item_p->e_RABLevelQoSParameters.allocationRetentionPriority.pre_emptionCapability; NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].qos[qosIdx].allocation_retention_priority.pre_emp_capability =
NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].qos.allocation_retention_priority.pre_emp_vulnerability = qosFlowItem_p->qosFlowLevelQosParameters->allocationAndRetentionPriority.pre_emptionCapability;
item_p->e_RABLevelQoSParameters.allocationRetentionPriority.pre_emptionVulnerability; NGAP_PDUSESSION_MODIFY_REQ(message_p).pdusession_modify_params[i].qos[qosIdx].allocation_retention_priority.pre_emp_vulnerability =
qosFlowItem_p->qosFlowLevelQosParameters->allocationAndRetentionPriority.pre_emptionVulnerability;
}
}
}
break;
/* optional QosFlowToReleaseList */
case NGAP_ProtocolIE_ID_id_QosFlowToReleaseList:
break;
/* optional AdditionalUL-NGU-UP-TNLInformation */
case NGAP_ProtocolIE_ID_id_AdditionalUL_NGU_UP_TNLInformation:
break;
/* optional CommonNetworkInstance */
case NGAP_ProtocolIE_ID_id_CommonNetworkInstance:
break;
default:
NGAP_ERROR("could not found protocolIEs id %ld\n", pdusessionTransfer_ies->id);
return -1;
}
}
} }
itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p); itti_send_msg_to_task(TASK_RRC_GNB, ue_desc_p->gNB_instance->instance, message_p);
} else { /* of if (ie != NULL)*/ } else { /* of if (ie != NULL)*/
return -1; return -1;
} }
#endif
return 0; return 0;
} }
// handle e-rab release command and send it to rrc_end // handle e-rab release command and send it to rrc_end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment