Check Requested NSSAI during registration [#554]

This commit is contained in:
Sukchan Lee 2020-09-11 22:42:38 -04:00
parent 9eea6fe583
commit ef3b84f3f6
3 changed files with 32 additions and 4 deletions

View File

@ -197,6 +197,7 @@ int gmm_handle_registration_update(amf_ue_t *amf_ue,
{
amf_sess_t *sess = NULL;
uint16_t psimask;
int i = 0;
ogs_nas_5gs_tracking_area_identity_t *last_visited_registered_tai = NULL;
ogs_nas_uplink_data_status_t *uplink_data_status = NULL;
@ -225,6 +226,25 @@ int gmm_handle_registration_update(amf_ue_t *amf_ue,
amf_ue->num_of_requested_nssai = ogs_nas_parse_nssai(
amf_ue->requested_nssai, &registration_request->requested_nssai);
for (i = 0; i < amf_ue->num_of_requested_nssai; i++) {
if (amf_find_s_nssai(
&amf_ue->tai.plmn_id, &amf_ue->requested_nssai[i]))
break;
}
if (i == amf_ue->num_of_requested_nssai) {
ogs_error("CHECK CONFIGURATION: Cannot find Requested NSSAI");
for (i = 0; i < amf_ue->num_of_requested_nssai; i++) {
ogs_error(" PLMN_ID[MCC:%d MNC:%d]",
ogs_plmn_id_mcc(&amf_ue->tai.plmn_id),
ogs_plmn_id_mnc(&amf_ue->tai.plmn_id));
ogs_error(" S_NSSAI[SST:%d SD:0x%x]",
amf_ue->requested_nssai[i].sst,
amf_ue->requested_nssai[i].sd.v);
}
return OGS_ERROR;
}
}
if (registration_request->presencemask &
@ -243,7 +263,8 @@ int gmm_handle_registration_update(amf_ue_t *amf_ue,
}
if ((registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_ALLOWED_PDU_SESSION_STATUS_PRESENT) == 0) {
OGS_NAS_5GS_REGISTRATION_REQUEST_ALLOWED_PDU_SESSION_STATUS_PRESENT)
== 0) {
amf_ue->nas.present.allowed_pdu_session_status = 0;
} else {
amf_ue->nas.present.allowed_pdu_session_status = 1;
@ -251,7 +272,7 @@ int gmm_handle_registration_update(amf_ue_t *amf_ue,
}
if ((registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_UPLINK_DATA_STATUS_PRESENT) == 0) {
OGS_NAS_5GS_REGISTRATION_REQUEST_UPLINK_DATA_STATUS_PRESENT) == 0) {
amf_ue->nas.present.uplink_data_status = 0;
} else {
amf_ue->nas.present.uplink_data_status = 1;

View File

@ -659,8 +659,15 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
break;
}
gmm_handle_security_mode_complete(
rv = gmm_handle_security_mode_complete(
amf_ue, &nas_message->gmm.security_mode_complete);
if (rv != OGS_OK) {
ogs_error("[%s] Cannot handle NAS message", amf_ue->suci);
nas_5gs_send_gmm_reject(amf_ue,
OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED);
OGS_FSM_TRAN(s, gmm_state_exception);
break;
}
ogs_kdf_kgnb_and_kn3iwf(
amf_ue->kamf, amf_ue->ul_count.i32,

View File

@ -235,7 +235,7 @@ int amf_nsmf_pdu_session_handle_update_sm_context(
ogs_error("[%s:%d] No N1 SM Content [%s]",
amf_ue->supi, sess->psi, n1SmMsg->content_id);
nas_5gs_send_back_5gsm_message(sess,
OGS_5GSM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE);
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE);
return OGS_ERROR;
}