update state machine
This commit is contained in:
parent
71a31cf353
commit
c8dd87123c
|
@ -77,24 +77,18 @@ void esm_handle_activate_default_bearer_accept(mme_bearer_t *bearer)
|
|||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return, "Null param");
|
||||
|
||||
if (MME_HAVE_ENB_S1U_PATH(bearer))
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"mme_gtp_send_modify_bearer_request failed");
|
||||
|
||||
mme_bearer_t *dedicated_bearer = mme_bearer_next(bearer);
|
||||
while(dedicated_bearer)
|
||||
{
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer);
|
||||
rv = nas_send_activate_dedicated_bearer_context(
|
||||
enb_ue, dedicated_bearer);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"mme_gtp_send_modify_bearer_request failed");
|
||||
}
|
||||
}
|
||||
|
||||
void esm_handle_activate_dedicated_bearer_accept(mme_bearer_t *bearer)
|
||||
{
|
||||
status_t rv;
|
||||
|
||||
d_assert(bearer, return, "Null param");
|
||||
|
||||
if (MME_HAVE_ENB_S1U_PATH(bearer))
|
||||
{
|
||||
rv = mme_gtp_send_create_bearer_response(bearer);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"mme_gtp_send_create_bearer_response failed");
|
||||
"nas_send_activate_dedicated_bearer_context failed");
|
||||
|
||||
dedicated_bearer = mme_bearer_next(dedicated_bearer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "esm_handler.h"
|
||||
#include "mme_s11_handler.h"
|
||||
#include "nas_path.h"
|
||||
#include "mme_gtp_path.h"
|
||||
|
||||
static void esm_state_pdn_connectivity_request(
|
||||
fsm_t *s, event_t *e, mme_ue_t *mme_ue, mme_sess_t *sess,
|
||||
|
@ -85,10 +86,14 @@ void esm_state_inactive(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT:
|
||||
{
|
||||
status_t rv;
|
||||
|
||||
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);
|
||||
rv = mme_gtp_send_create_bearer_response(bearer);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"mme_gtp_send_create_bearer_response failed");
|
||||
FSM_TRAN(s, esm_state_active);
|
||||
break;
|
||||
}
|
||||
|
@ -185,7 +190,6 @@ void esm_state_information(fsm_t *s, event_t *e)
|
|||
|
||||
void esm_state_active(fsm_t *s, event_t *e)
|
||||
{
|
||||
status_t rv;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
mme_sess_t *sess = NULL;
|
||||
mme_bearer_t *bearer = NULL;
|
||||
|
@ -206,30 +210,6 @@ void esm_state_active(fsm_t *s, event_t *e)
|
|||
{
|
||||
case FSM_ENTRY_SIG:
|
||||
{
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
mme_bearer_t *linked_bearer = mme_linked_bearer(bearer);
|
||||
|
||||
d_assert(linked_bearer, return, "Null param");
|
||||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return, "Null param");
|
||||
|
||||
if (linked_bearer->ebi == bearer->ebi)
|
||||
{
|
||||
/* Check dedicated bearer */
|
||||
mme_bearer_t *dedicated_bearer = mme_bearer_next(bearer);
|
||||
while(dedicated_bearer)
|
||||
{
|
||||
if (!MME_HAVE_ENB_S1U_PATH(dedicated_bearer))
|
||||
{
|
||||
rv = nas_send_activate_dedicated_bearer_context(
|
||||
enb_ue, dedicated_bearer);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"nas_send_activate_dedicated_bearer_context failed");
|
||||
}
|
||||
|
||||
dedicated_bearer = mme_bearer_next(dedicated_bearer);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FSM_EXIT_SIG:
|
||||
|
|
|
@ -155,3 +155,31 @@ status_t mme_gtp_send_create_bearer_response(mme_bearer_t *bearer)
|
|||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t mme_gtp_send_release_access_bearers_response(mme_sess_t *sess)
|
||||
{
|
||||
status_t rv;
|
||||
gtp_header_t h;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
gtp_xact_t *xact = NULL;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
|
||||
d_assert(sess, return CORE_ERROR, "Null param");
|
||||
mme_ue = sess->mme_ue;
|
||||
d_assert(mme_ue, return CORE_ERROR, "Null param");
|
||||
|
||||
memset(&h, 0, sizeof(gtp_header_t));
|
||||
h.type = GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
|
||||
rv = mme_s11_build_release_access_bearers_request(&pkbuf, h.type);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
|
||||
|
||||
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
|
||||
d_assert(xact, return CORE_ERROR, "Null param");
|
||||
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "xact_commit error");
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@ CORE_DECLARE(status_t) mme_gtp_send_modify_bearer_request(
|
|||
mme_bearer_t *bearer);
|
||||
CORE_DECLARE(status_t) mme_gtp_send_create_bearer_response(
|
||||
mme_bearer_t *bearer);
|
||||
CORE_DECLARE(status_t) mme_gtp_send_release_access_bearers_response(
|
||||
mme_sess_t *sess);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include "s1ap_build.h"
|
||||
#include "s1ap_path.h"
|
||||
#include "nas_path.h"
|
||||
#include "mme_s11_build.h"
|
||||
#include "mme_gtp_path.h"
|
||||
|
||||
#include "s1ap_handler.h"
|
||||
|
@ -321,15 +320,6 @@ void s1ap_handle_initial_context_setup_response(
|
|||
bearer->enb_s1u_teid = ntohl(bearer->enb_s1u_teid);
|
||||
memcpy(&bearer->enb_s1u_addr, e_rab->transportLayerAddress.buf,
|
||||
sizeof(bearer->enb_s1u_addr));
|
||||
|
||||
if (FSM_CHECK(&bearer->sm, esm_state_active))
|
||||
{
|
||||
status_t rv;
|
||||
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"mme_gtp_send_modify_bearer_request failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -360,8 +350,6 @@ void s1ap_handle_e_rab_setup_response(
|
|||
for (i = 0; i < ies->e_RABSetupListBearerSURes.
|
||||
s1ap_E_RABSetupItemBearerSURes.count; i++)
|
||||
{
|
||||
status_t rv;
|
||||
|
||||
mme_bearer_t *bearer = NULL;
|
||||
mme_ue_t *mme_ue = enb_ue->mme_ue;
|
||||
S1ap_E_RABSetupItemBearerSURes_t *e_rab = NULL;
|
||||
|
@ -378,25 +366,6 @@ void s1ap_handle_e_rab_setup_response(
|
|||
bearer->enb_s1u_teid = ntohl(bearer->enb_s1u_teid);
|
||||
memcpy(&bearer->enb_s1u_addr, e_rab->transportLayerAddress.buf,
|
||||
sizeof(bearer->enb_s1u_addr));
|
||||
|
||||
if (FSM_CHECK(&bearer->sm, esm_state_active))
|
||||
{
|
||||
mme_bearer_t *linked_bearer = mme_linked_bearer(bearer);
|
||||
d_assert(linked_bearer, return, "Null param");
|
||||
|
||||
if (linked_bearer->ebi == bearer->ebi) /* Default Bearer */
|
||||
{
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"mme_gtp_send_modify_bearer_request failed");
|
||||
}
|
||||
else /* Dedicated Bearer */
|
||||
{
|
||||
rv = mme_gtp_send_create_bearer_response(bearer);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"mme_gtp_send_create_bearer_response failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -435,23 +404,9 @@ void s1ap_handle_ue_context_release_request(
|
|||
mme_sess_t *sess = mme_sess_first(mme_ue);
|
||||
while (sess != NULL)
|
||||
{
|
||||
gtp_header_t h;
|
||||
pkbuf_t *pkbuf = NULL;
|
||||
gtp_xact_t *xact = NULL;
|
||||
|
||||
memset(&h, 0, sizeof(gtp_header_t));
|
||||
h.type = GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
|
||||
rv = mme_s11_build_release_access_bearers_request(
|
||||
&pkbuf, h.type);
|
||||
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");
|
||||
rv = mme_gtp_send_release_access_bearers_response(sess);
|
||||
d_assert(rv == CORE_OK, return,
|
||||
"mme_gtp_send_release_access_bearers_response failed");
|
||||
|
||||
sess = mme_sess_next(sess);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue