[MME] Exception handle - APN duplicated (#1431)
This commit is contained in:
parent
2cb06b3085
commit
41553de7a4
|
@ -2890,7 +2890,7 @@ mme_bearer_t *mme_bearer_find_by_ue_ebi(mme_ue_t *mme_ue, uint8_t ebi)
|
|||
}
|
||||
|
||||
mme_bearer_t *mme_bearer_find_or_add_by_message(
|
||||
mme_ue_t *mme_ue, ogs_nas_eps_message_t *message)
|
||||
mme_ue_t *mme_ue, ogs_nas_eps_message_t *message, bool esm_piggybacked)
|
||||
{
|
||||
uint8_t pti = OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED;
|
||||
uint8_t ebi = OGS_NAS_EPS_BEARER_IDENTITY_UNASSIGNED;
|
||||
|
@ -2998,11 +2998,22 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
|
|||
ogs_nas_eps_pdn_connectivity_request_t *pdn_connectivity_request =
|
||||
&message->esm.pdn_connectivity_request;
|
||||
if (pdn_connectivity_request->presencemask &
|
||||
OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_ACCESS_POINT_NAME_PRESENT)
|
||||
OGS_NAS_EPS_PDN_CONNECTIVITY_REQUEST_ACCESS_POINT_NAME_PRESENT) {
|
||||
sess = mme_sess_find_by_apn(mme_ue,
|
||||
pdn_connectivity_request->access_point_name.apn);
|
||||
else
|
||||
if (sess && esm_piggybacked == false) {
|
||||
ogs_assert(OGS_OK ==
|
||||
nas_eps_send_pdn_connectivity_reject(
|
||||
sess,
|
||||
ESM_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED,
|
||||
esm_piggybacked));
|
||||
ogs_warn("APN duplicated [%s]",
|
||||
pdn_connectivity_request->access_point_name.apn);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
sess = mme_sess_first(mme_ue);
|
||||
}
|
||||
|
||||
if (!sess)
|
||||
sess = mme_sess_add(mme_ue, pti);
|
||||
|
|
|
@ -796,7 +796,7 @@ void mme_bearer_remove_all(mme_sess_t *sess);
|
|||
mme_bearer_t *mme_bearer_find_by_sess_ebi(mme_sess_t *sess, uint8_t ebi);
|
||||
mme_bearer_t *mme_bearer_find_by_ue_ebi(mme_ue_t *mme_ue, uint8_t ebi);
|
||||
mme_bearer_t *mme_bearer_find_or_add_by_message(
|
||||
mme_ue_t *mme_ue, ogs_nas_eps_message_t *message);
|
||||
mme_ue_t *mme_ue, ogs_nas_eps_message_t *message, bool esm_piggybacked);
|
||||
mme_bearer_t *mme_default_bearer_in_sess(mme_sess_t *sess);
|
||||
mme_bearer_t *mme_linked_bearer(mme_bearer_t *bearer);
|
||||
mme_bearer_t *mme_bearer_first(mme_sess_t *sess);
|
||||
|
|
|
@ -374,9 +374,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
|||
break;
|
||||
}
|
||||
|
||||
bearer = mme_bearer_find_or_add_by_message(mme_ue, &nas_message);
|
||||
bearer = mme_bearer_find_or_add_by_message(
|
||||
mme_ue, &nas_message, e->esm_piggybacked);
|
||||
if (!bearer) {
|
||||
ogs_error("mme_bearer_find_or_add_by_message() failed");
|
||||
ogs_pkbuf_free(pkbuf);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -233,20 +233,9 @@ static void issues_1431_func(abts_case *tc, void *data)
|
|||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
tests1ap_recv(test_ue, recvbuf);
|
||||
ABTS_INT_EQUAL(tc,
|
||||
S1AP_ProcedureCode_id_E_RABSetup,
|
||||
S1AP_ProcedureCode_id_downlinkNASTransport,
|
||||
test_ue->s1ap_procedure_code);
|
||||
|
||||
/* Send E-RABSetupResponse */
|
||||
bearer = test_bearer_find_by_ue_ebi(test_ue, 5);
|
||||
ogs_assert(bearer);
|
||||
sendbuf = test_s1ap_build_e_rab_failed_setup_response(
|
||||
bearer,
|
||||
S1AP_Cause_PR_radioNetwork,
|
||||
S1AP_CauseRadioNetwork_multiple_E_RAB_ID_instances);
|
||||
ABTS_PTR_NOTNULL(tc, sendbuf);
|
||||
rv = testenb_s1ap_send(s1ap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Just Delay */
|
||||
ogs_msleep(100);
|
||||
|
||||
|
|
|
@ -1163,7 +1163,7 @@ static void test3_func(abts_case *tc, void *data)
|
|||
S1AP_ProcedureCode_id_E_RABRelease,
|
||||
test_ue->s1ap_procedure_code);
|
||||
|
||||
/* Send PDN Connectivity Request */
|
||||
/* Send PDN connectivity Request */
|
||||
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
|
||||
ogs_assert(sess);
|
||||
sess->pti = 39;
|
||||
|
@ -1179,41 +1179,14 @@ static void test3_func(abts_case *tc, void *data)
|
|||
rv = testenb_s1ap_send(s1ap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Receive E-RABSetupRequest +
|
||||
* Activate default EPS bearer context request */
|
||||
/* Receive PDN connectivity reject */
|
||||
recvbuf = testenb_s1ap_read(s1ap);
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
tests1ap_recv(test_ue, recvbuf);
|
||||
ABTS_INT_EQUAL(tc,
|
||||
S1AP_ProcedureCode_id_E_RABSetup,
|
||||
S1AP_ProcedureCode_id_downlinkNASTransport,
|
||||
test_ue->s1ap_procedure_code);
|
||||
|
||||
/* Send E-RABSetupResponse */
|
||||
bearer = test_bearer_find_by_ue_ebi(test_ue, 6);
|
||||
ogs_assert(bearer);
|
||||
sendbuf = test_s1ap_build_e_rab_setup_response(bearer);
|
||||
ABTS_PTR_NOTNULL(tc, sendbuf);
|
||||
rv = testenb_s1ap_send(s1ap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Send Activate default EPS bearer context accept */
|
||||
esmbuf = testesm_build_activate_default_eps_bearer_context_accept(
|
||||
bearer, true);
|
||||
ABTS_PTR_NOTNULL(tc, esmbuf);
|
||||
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
|
||||
ABTS_PTR_NOTNULL(tc, sendbuf);
|
||||
rv = testenb_s1ap_send(s1ap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Send GTP-U ICMP Packet */
|
||||
rv = test_gtpu_send_ping(gtpu, bearer, TEST_PING_IPV4);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Receive GTP-U ICMP Packet */
|
||||
recvbuf = test_gtpu_read(gtpu);
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
/* Send Detach Request */
|
||||
emmbuf = testemm_build_detach_request(test_ue, 1, true, false);
|
||||
ABTS_PTR_NOTNULL(tc, emmbuf);
|
||||
|
|
Loading…
Reference in New Issue