diff --git a/docs/_docs/tutorial/01-your-first-lte.md b/docs/_docs/tutorial/01-your-first-lte.md index 2b421c2d9..29c8584cb 100644 --- a/docs/_docs/tutorial/01-your-first-lte.md +++ b/docs/_docs/tutorial/01-your-first-lte.md @@ -334,7 +334,7 @@ Change back to the srsRAN source directory and copy the main config example as w ```bash $ cp srsenb/enb.conf.example srsenb/enb.conf $ cp srsenb/rr.conf.example srsenb/rr.conf -$ cp srsenb/drb.conf.example srsenb/drb.conf +$ cp srsenb/rb.conf.example srsenb/rb.conf $ cp srsenb/sib.conf.example srsenb/sib.conf ``` diff --git a/src/mme/esm-handler.c b/src/mme/esm-handler.c index 0f5bf377f..752f760c8 100644 --- a/src/mme/esm-handler.c +++ b/src/mme/esm-handler.c @@ -236,13 +236,17 @@ int esm_handle_information_response(mme_sess_t *sess, mme_csmap_t *csmap = mme_csmap_find_by_tai(&mme_ue->tai); mme_ue->csmap = csmap; - if (csmap) { - ogs_assert(OGS_OK == - sgsap_send_location_update_request(mme_ue)); - } else { + if (!csmap || + mme_ue->network_access_mode == + OGS_NETWORK_ACCESS_MODE_ONLY_PACKET || + mme_ue->nas_eps.attach.value == + OGS_NAS_ATTACH_TYPE_EPS_ATTACH) { r = nas_eps_send_attach_accept(mme_ue); ogs_expect(r == OGS_OK); ogs_assert(r != OGS_ERROR); + } else { + ogs_assert(OGS_OK == + sgsap_send_location_update_request(mme_ue)); } } else { ogs_assert(OGS_OK == diff --git a/src/mme/mme-s11-handler.c b/src/mme/mme-s11-handler.c index 103921b45..148f0e94e 100644 --- a/src/mme/mme-s11-handler.c +++ b/src/mme/mme-s11-handler.c @@ -427,17 +427,20 @@ void mme_s11_handle_create_session_response( mme_csmap_t *csmap = mme_csmap_find_by_tai(&mme_ue->tai); mme_ue->csmap = csmap; - if (csmap) { - ogs_assert(OGS_PDU_SESSION_TYPE_IS_VALID( - session->paa.session_type)); - ogs_assert(OGS_OK == - sgsap_send_location_update_request(mme_ue)); - } else { + if (!csmap || + mme_ue->network_access_mode == + OGS_NETWORK_ACCESS_MODE_ONLY_PACKET || + mme_ue->nas_eps.attach.value == + OGS_NAS_ATTACH_TYPE_EPS_ATTACH) { ogs_assert(OGS_PDU_SESSION_TYPE_IS_VALID( session->paa.session_type)); r = nas_eps_send_attach_accept(mme_ue); ogs_expect(r == OGS_OK); ogs_assert(r != OGS_ERROR); + } else { + ogs_assert(OGS_PDU_SESSION_TYPE_IS_VALID( + session->paa.session_type)); + ogs_assert(OGS_OK == sgsap_send_location_update_request(mme_ue)); } } else if (create_action == OGS_GTP_CREATE_IN_TRACKING_AREA_UPDATE) { diff --git a/src/mme/sgsap-handler.c b/src/mme/sgsap-handler.c index ea0384a78..5e7b20479 100644 --- a/src/mme/sgsap-handler.c +++ b/src/mme/sgsap-handler.c @@ -210,11 +210,9 @@ void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf) ogs_plmn_id_hexdump(&lai->nas_plmn_id), lai->lac); } - r = nas_eps_send_attach_reject(mme_ue->enb_ue, mme_ue, - emm_cause, OGS_NAS_ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + r = nas_eps_send_attach_accept(mme_ue); ogs_expect(r == OGS_OK); ogs_assert(r != OGS_ERROR); - mme_send_delete_session_or_mme_ue_context_release(mme_ue); return; diff --git a/tests/csfb/mo-idle-test.c b/tests/csfb/mo-idle-test.c index cf2dfac31..762447f4c 100644 --- a/tests/csfb/mo-idle-test.c +++ b/tests/csfb/mo-idle-test.c @@ -470,11 +470,84 @@ static void test2_func(abts_case *tc, void *data) rv = testvlr_sgsap_send(sgsap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); - /* Receive Attach Reject */ + /* Receive Initial Context Setup Request + + * Attach Accept + + * Activate Default Bearer Context Request */ recvbuf = testenb_s1ap_read(s1ap); ABTS_PTR_NOTNULL(tc, recvbuf); tests1ap_recv(test_ue, recvbuf); + /* Send Initial Context Setup Response */ + sendbuf = test_s1ap_build_initial_context_setup_response(test_ue); + ABTS_PTR_NOTNULL(tc, sendbuf); + rv = testenb_s1ap_send(s1ap, sendbuf); + ABTS_INT_EQUAL(tc, OGS_OK, rv); + + /* Send Attach Complete + Activate default EPS bearer cotext accept */ + test_ue->nr_cgi.cell_id = 0x1234502; + bearer = test_bearer_find_by_ue_ebi(test_ue, 5); + ogs_assert(bearer); + esmbuf = testesm_build_activate_default_eps_bearer_context_accept( + bearer, false); + ABTS_PTR_NOTNULL(tc, esmbuf); + emmbuf = testemm_build_attach_complete(test_ue, esmbuf); + ABTS_PTR_NOTNULL(tc, emmbuf); + sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); + ABTS_PTR_NOTNULL(tc, sendbuf); + rv = testenb_s1ap_send(s1ap, sendbuf); + ABTS_INT_EQUAL(tc, OGS_OK, rv); + + /* Receive EMM information */ + recvbuf = testenb_s1ap_read(s1ap); + ABTS_PTR_NOTNULL(tc, recvbuf); + tests1ap_recv(test_ue, recvbuf); + + /* Send UE Context Release Request */ + sendbuf = test_s1ap_build_ue_context_release_request(test_ue, + S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_user_inactivity); + ABTS_PTR_NOTNULL(tc, sendbuf); + rv = testenb_s1ap_send(s1ap, sendbuf); + ABTS_INT_EQUAL(tc, OGS_OK, rv); + + /* Receive UE Context Release Command */ + recvbuf = testenb_s1ap_read(s1ap); + ABTS_PTR_NOTNULL(tc, recvbuf); + tests1ap_recv(test_ue, recvbuf); + + /* Send UE Context Release Complete */ + sendbuf = test_s1ap_build_ue_context_release_complete(test_ue); + ABTS_PTR_NOTNULL(tc, sendbuf); + rv = testenb_s1ap_send(s1ap, sendbuf); + ABTS_INT_EQUAL(tc, OGS_OK, rv); + + /* Send Service Request */ + emmbuf = testemm_build_service_request(test_ue); + ABTS_PTR_NOTNULL(tc, emmbuf); + sendbuf = test_s1ap_build_initial_ue_message( + test_ue, emmbuf, S1AP_RRC_Establishment_Cause_mo_Data, true); + ABTS_PTR_NOTNULL(tc, sendbuf); + rv = testenb_s1ap_send(s1ap, sendbuf); + ABTS_INT_EQUAL(tc, OGS_OK, rv); + + /* Receive Initial Context Setup Request */ + recvbuf = testenb_s1ap_read(s1ap); + ABTS_PTR_NOTNULL(tc, recvbuf); + tests1ap_recv(test_ue, recvbuf); + + /* Send Initial Context Setup Response */ + sendbuf = test_s1ap_build_initial_context_setup_response(test_ue); + ABTS_PTR_NOTNULL(tc, sendbuf); + rv = testenb_s1ap_send(s1ap, sendbuf); + ABTS_INT_EQUAL(tc, OGS_OK, rv); + + /* Send Detach Request */ + emmbuf = testemm_build_detach_request(test_ue, 1, true, true); + ABTS_PTR_NOTNULL(tc, emmbuf); + sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf); + ABTS_PTR_NOTNULL(tc, sendbuf); + rv = testenb_s1ap_send(s1ap, sendbuf); + ABTS_INT_EQUAL(tc, OGS_OK, rv); + /* Receive UE Context Release Command */ recvbuf = testenb_s1ap_read(s1ap); ABTS_PTR_NOTNULL(tc, recvbuf);