reorder control plane flow
This commit is contained in:
parent
bb5edf2a57
commit
a69760c689
|
@ -10,6 +10,7 @@
|
|||
#include "s1ap_build.h"
|
||||
#include "s1ap_path.h"
|
||||
#include "nas_path.h"
|
||||
#include "mme_s11_build.h"
|
||||
|
||||
void esm_handle_pdn_connectivity_request(mme_sess_t *sess,
|
||||
nas_pdn_connectivity_request_t *pdn_connectivity_request)
|
||||
|
@ -85,3 +86,80 @@ void esm_handle_activate_dedicated_bearer_request(mme_bearer_t *bearer)
|
|||
|
||||
d_assert(nas_send_to_enb(enb_ue, s1apbuf) == CORE_OK,,);
|
||||
}
|
||||
|
||||
void esm_handle_activate_default_bearer_accept(mme_bearer_t *bearer)
|
||||
{
|
||||
status_t rv;
|
||||
gtp_header_t h;
|
||||
gtp_xact_t *xact = NULL;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
mme_sess_t *sess = NULL;
|
||||
mme_bearer_t *dedicated_bearer = NULL;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
|
||||
d_assert(bearer, return, "Null param");
|
||||
sess = bearer->sess;
|
||||
d_assert(sess, return, "Null param");
|
||||
mme_ue = sess->mme_ue;
|
||||
d_assert(mme_ue, return, "Null param");
|
||||
|
||||
if (MME_HAVE_ENB_S1U_PATH(bearer))
|
||||
{
|
||||
memset(&h, 0, sizeof(gtp_header_t));
|
||||
h.type = GTP_MODIFY_BEARER_REQUEST_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
|
||||
rv = mme_s11_build_modify_bearer_request(&pkbuf, h.type, bearer);
|
||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||
|
||||
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
|
||||
d_assert(xact, return, "Null param");
|
||||
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
}
|
||||
|
||||
dedicated_bearer = mme_bearer_next(bearer);
|
||||
while(dedicated_bearer)
|
||||
{
|
||||
if (!MME_HAVE_ENB_S1U_PATH(dedicated_bearer))
|
||||
{
|
||||
esm_handle_activate_dedicated_bearer_request(dedicated_bearer);
|
||||
}
|
||||
dedicated_bearer = mme_bearer_next(dedicated_bearer);
|
||||
}
|
||||
}
|
||||
|
||||
void esm_handle_activate_dedicated_bearer_accept(mme_bearer_t *bearer)
|
||||
{
|
||||
status_t rv;
|
||||
gtp_header_t h;
|
||||
gtp_xact_t *xact = NULL;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
mme_sess_t *sess = NULL;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
|
||||
d_assert(bearer, return, "Null param");
|
||||
sess = bearer->sess;
|
||||
d_assert(sess, return, "Null param");
|
||||
mme_ue = sess->mme_ue;
|
||||
d_assert(mme_ue, return, "Null param");
|
||||
xact = bearer->xact;
|
||||
d_assert(xact, return, "Null param");
|
||||
|
||||
if (MME_HAVE_ENB_S1U_PATH(bearer))
|
||||
{
|
||||
memset(&h, 0, sizeof(gtp_header_t));
|
||||
h.type = GTP_CREATE_BEARER_RESPONSE_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
|
||||
rv = mme_s11_build_create_bearer_response(&pkbuf, h.type, bearer);
|
||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||
|
||||
rv = gtp_xact_update_tx(xact, &h, pkbuf);
|
||||
d_assert(xact, return, "Null param");
|
||||
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,10 @@ CORE_DECLARE(void) esm_handle_information_response(mme_sess_t *sess,
|
|||
nas_esm_information_response_t *bearer_information_response);
|
||||
CORE_DECLARE(void) esm_handle_activate_dedicated_bearer_request(
|
||||
mme_bearer_t *bearer);
|
||||
CORE_DECLARE(void) esm_handle_activate_default_bearer_accept(
|
||||
mme_bearer_t *bearer);
|
||||
CORE_DECLARE(void) esm_handle_activate_dedicated_bearer_accept(
|
||||
mme_bearer_t *bearer);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -86,21 +86,11 @@ void esm_state_inactive(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT:
|
||||
{
|
||||
mme_bearer_t *dedicated_bearer = NULL;
|
||||
|
||||
d_trace(3, "[NAS] Activate default EPS bearer "
|
||||
"context accept : UE[%s] --> ESM[%d]\n",
|
||||
mme_ue->imsi_bcd, bearer->pti);
|
||||
dedicated_bearer = mme_bearer_next(bearer);
|
||||
while(dedicated_bearer)
|
||||
{
|
||||
if (!MME_HAVE_ENB_S1U_PATH(dedicated_bearer))
|
||||
{
|
||||
esm_handle_activate_dedicated_bearer_request(
|
||||
dedicated_bearer);
|
||||
}
|
||||
dedicated_bearer = mme_bearer_next(dedicated_bearer);
|
||||
}
|
||||
|
||||
esm_handle_activate_default_bearer_accept(bearer);
|
||||
FSM_TRAN(s, esm_state_active);
|
||||
break;
|
||||
}
|
||||
|
@ -109,6 +99,7 @@ void esm_state_inactive(fsm_t *s, event_t *e)
|
|||
d_trace(3, "[NAS] Activate dedicated EPS bearer "
|
||||
"context accept : UE[%s] --> ESM[%d]\n",
|
||||
mme_ue->imsi_bcd, bearer->pti);
|
||||
esm_handle_activate_dedicated_bearer_accept(bearer);
|
||||
FSM_TRAN(s, esm_state_active);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -429,18 +429,21 @@ void s1ap_handle_initial_context_setup_response(
|
|||
memcpy(&bearer->enb_s1u_addr, e_rab->transportLayerAddress.buf,
|
||||
sizeof(bearer->enb_s1u_addr));
|
||||
|
||||
memset(&h, 0, sizeof(gtp_header_t));
|
||||
h.type = GTP_MODIFY_BEARER_REQUEST_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
if (FSM_CHECK(&bearer->sm, esm_state_active))
|
||||
{
|
||||
memset(&h, 0, sizeof(gtp_header_t));
|
||||
h.type = GTP_MODIFY_BEARER_REQUEST_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
|
||||
rv = mme_s11_build_modify_bearer_request(&pkbuf, h.type, bearer);
|
||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||
rv = mme_s11_build_modify_bearer_request(&pkbuf, h.type, bearer);
|
||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||
|
||||
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
|
||||
d_assert(xact, return, "Null param");
|
||||
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
|
||||
d_assert(xact, return, "Null param");
|
||||
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -495,18 +498,21 @@ void s1ap_handle_e_rab_setup_response(
|
|||
memcpy(&bearer->enb_s1u_addr, e_rab->transportLayerAddress.buf,
|
||||
sizeof(bearer->enb_s1u_addr));
|
||||
|
||||
memset(&h, 0, sizeof(gtp_header_t));
|
||||
h.type = GTP_CREATE_BEARER_RESPONSE_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
if (FSM_CHECK(&bearer->sm, esm_state_active))
|
||||
{
|
||||
memset(&h, 0, sizeof(gtp_header_t));
|
||||
h.type = GTP_CREATE_BEARER_RESPONSE_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
|
||||
rv = mme_s11_build_create_bearer_response(&pkbuf, h.type, bearer);
|
||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||
rv = mme_s11_build_create_bearer_response(&pkbuf, h.type, bearer);
|
||||
d_assert(rv == CORE_OK, return, "S11 build error");
|
||||
|
||||
rv = gtp_xact_update_tx(xact, &h, pkbuf);
|
||||
d_assert(xact, return, "Null param");
|
||||
rv = gtp_xact_update_tx(xact, &h, pkbuf);
|
||||
d_assert(xact, return, "Null param");
|
||||
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -191,6 +191,8 @@ static void attach_test1(abts_case *tc, void *data)
|
|||
/***********************************************************************
|
||||
* Attach Request : Known IMSI, Integrity Protected, No Security Context
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
mme_self()->mme_ue_s1ap_id = 16777372;
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
@ -287,6 +289,8 @@ static void attach_test1(abts_case *tc, void *data)
|
|||
/*****************************************************************
|
||||
* Attach Request : Known GUTI, Integrity Protected, MAC Matched
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex+1);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
@ -311,6 +315,8 @@ static void attach_test1(abts_case *tc, void *data)
|
|||
rc = tests1ap_enb_read(sock, recvbuf);
|
||||
pkbuf_free(recvbuf);
|
||||
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
/* Send Detach Request */
|
||||
rv = tests1ap_build_detach_request(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
@ -333,6 +339,8 @@ static void attach_test1(abts_case *tc, void *data)
|
|||
/*****************************************************************
|
||||
* Attach Request : Unknown GUTI, Integrity Protected
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex+2);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
@ -493,6 +501,8 @@ static void attach_test2(abts_case *tc, void *data)
|
|||
/*****************************************************************
|
||||
* Attach Request : Known IMSI, Plain NAS message
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
@ -560,11 +570,11 @@ static void attach_test2(abts_case *tc, void *data)
|
|||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
/*****************************************************************
|
||||
* Attach Request : IMSI, Integrity Protected, MAC Matched
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex+1);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
@ -592,6 +602,8 @@ static void attach_test2(abts_case *tc, void *data)
|
|||
/*****************************************************************
|
||||
* Attach Request : IMSI, Integrity Protected, MAC Failed
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex+2);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
@ -755,6 +767,8 @@ static void attach_test3(abts_case *tc, void *data)
|
|||
/*****************************************************************
|
||||
* Attach Request : Known IMSI, Plain NAS message
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
@ -843,6 +857,8 @@ static void attach_test3(abts_case *tc, void *data)
|
|||
pkbuf_free(recvbuf);
|
||||
|
||||
/* Send UE Release Request */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
rv = tests1ap_build_ue_context_release_request(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
@ -864,9 +880,9 @@ static void attach_test3(abts_case *tc, void *data)
|
|||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
/* Send Service Request */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
/* Send Service Request */
|
||||
rv = tests1ap_build_service_request(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
|
Loading…
Reference in New Issue