diff --git a/src/amf/ngap-handler.c b/src/amf/ngap-handler.c index 814900258..133a34bd3 100644 --- a/src/amf/ngap-handler.c +++ b/src/amf/ngap-handler.c @@ -318,23 +318,19 @@ void ngap_handle_ng_setup_request(amf_gnb_t *gnb, ogs_ngap_message_t *message) return; } + /* + * TS38.413 + * Section 8.7.1.4 Abnormal Conditions + * + * If the AMF does not identify any of the PLMNs/SNPNs indicated + * in the NG SETUP REQUEST message, it shall reject the NG Setup + * procedure with an appropriate cause value. + */ if (gnb_plmn_id_is_foreign(gnb)) { ogs_warn("NG-Setup failure:"); ogs_warn(" globalGNB_ID PLMN-ID is foreign"); - group = NGAP_Cause_PR_protocol; - cause = NGAP_CauseProtocol_message_not_compatible_with_receiver_state; - - r = ngap_send_ng_setup_failure(gnb, group, cause); - ogs_expect(r == OGS_OK); - ogs_assert(r != OGS_ERROR); - return; - } - - if (gnb->num_of_supported_ta_list == 0) { - ogs_warn("NG-Setup failure:"); - ogs_warn(" No supported TA exist in NG-Setup request"); - group = NGAP_Cause_PR_protocol; - cause = NGAP_CauseProtocol_message_not_compatible_with_receiver_state; + group = NGAP_Cause_PR_misc; + cause = NGAP_CauseMisc_unknown_PLMN_or_SNPN; r = ngap_send_ng_setup_failure(gnb, group, cause); ogs_expect(r == OGS_OK); diff --git a/src/mme/s1ap-handler.c b/src/mme/s1ap-handler.c index 225b99896..ccc85af9c 100644 --- a/src/mme/s1ap-handler.c +++ b/src/mme/s1ap-handler.c @@ -206,11 +206,21 @@ void s1ap_handle_s1_setup_request(mme_enb_t *enb, ogs_s1ap_message_t *message) return; } + /* + * TS36.413 + * Section 8.7.3.4 Abnormal Conditions + * + * If the eNB initiates the procedure by sending a S1 SETUP REQUEST + * message including the PLMN Identity IEs and none of the PLMNs + * provided by the eNB is identified by the MME, then the MME shall + * reject the eNB S1 Setup Request procedure with the appropriate cause + * value, e.g., “Unknown PLMN”. + */ if (enb_plmn_id_is_foreign(enb)) { ogs_warn("S1-Setup failure:"); ogs_warn(" Global-ENB-ID PLMN-ID is foreign"); group = S1AP_Cause_PR_misc; - cause = S1AP_CauseProtocol_semantic_error; + cause = S1AP_CauseMisc_unknown_PLMN; r = s1ap_send_s1_setup_failure(enb, group, cause); ogs_expect(r == OGS_OK);