mme_sess_t is added

This commit is contained in:
Sukchan Lee 2017-04-27 23:06:10 +09:00
parent d7aa300833
commit a377aa7c31
10 changed files with 251 additions and 85 deletions

View File

@ -27,6 +27,7 @@ void emm_handle_esm_message_container(
nas_esm_header_t *h = NULL;
c_uint8_t pti = NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED;
c_uint8_t ebi = NAS_EPS_BEARER_IDENTITY_UNASSIGNED;
mme_sess_t *sess = NULL;
mme_bearer_t *bearer = NULL;
d_assert(ue, return, "Null param");
@ -39,12 +40,16 @@ void emm_handle_esm_message_container(
pti = h->procedure_transaction_identity;
ebi = h->eps_bearer_identity;
if (pti == NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED && ebi)
bearer = mme_bearer_find_by_ebi(ue, ebi);
bearer = mme_bearer_find_by_ue_ebi(ue, ebi);
else if (ebi == NAS_EPS_BEARER_IDENTITY_UNASSIGNED && pti)
bearer = mme_bearer_find_by_pti(ue, pti);
bearer = mme_bearer_find_by_ue_pti(ue, pti);
if (!bearer)
bearer = mme_bearer_add(ue, pti);
{
sess = mme_sess_add(ue);
d_assert(sess, return, "Null param");
bearer = mme_bearer_add(sess, pti);
}
d_assert(bearer, return, "Null param");
/* The Packet Buffer(pkbuf_t) for NAS message MUST make a HEADROOM.

View File

@ -81,26 +81,30 @@ void emm_state_operational(fsm_t *s, event_t *e)
}
case S6A_CMD_UPDATE_LOCATION:
{
mme_bearer_t *bearer = mme_bearer_first(ue);
while(bearer)
mme_sess_t *sess = mme_sess_first(ue);
while(sess)
{
event_t e;
event_set(&e, MME_EVT_ESM_BEARER_FROM_S6A);
event_set_param1(&e, (c_uintptr_t)bearer->index);
event_set_param2(&e,
(c_uintptr_t)S6A_CMD_UPDATE_LOCATION);
mme_event_send(&e);
mme_bearer_t *bearer = mme_bearer_first(sess);
while(bearer)
{
event_t e;
event_set(&e, MME_EVT_ESM_BEARER_FROM_S6A);
event_set_param1(&e, (c_uintptr_t)bearer->index);
event_set_param2(&e,
(c_uintptr_t)S6A_CMD_UPDATE_LOCATION);
mme_event_send(&e);
bearer = mme_bearer_next(bearer);
bearer = mme_bearer_next(bearer);
}
sess = mme_sess_next(sess);
}
break;
}
case GTP_MODIFY_BEARER_RESPONSE_TYPE:
{
d_info("[GTP] Modify Bearer Response : "
"MME[%d] <-- SGW[%d]",
ue->mme_s11_teid, ue->sgw_s11_teid);
"MME <-- SGW");
break;
}
}

View File

@ -54,18 +54,18 @@ void esm_handle_s6a_update_location(mme_bearer_t *bearer)
void esm_handle_modify_bearer_request(mme_bearer_t *bearer)
{
status_t rv;
mme_ue_t *ue = NULL;
mme_sess_t *sess = NULL;
pkbuf_t *pkbuf = NULL;
d_assert(bearer, return, "Null param");
ue = bearer->ue;
d_assert(ue, return, "Null param");
sess = bearer->sess;
d_assert(sess, return, "Null param");
rv = mme_s11_build_modify_bearer_request(&pkbuf, bearer);
d_assert(rv == CORE_OK, return, "S11 build error");
rv = mme_s11_send_to_sgw(bearer->sgw,
GTP_MODIFY_BEARER_REQUEST_TYPE, ue->sgw_s11_teid, pkbuf);
GTP_MODIFY_BEARER_REQUEST_TYPE, sess->sgw_s11_teid, pkbuf);
d_assert(rv == CORE_OK, return, "S11 send error");
}

View File

@ -23,6 +23,7 @@ pool_declare(mme_sgw_pool, mme_sgw_t, MAX_NUM_OF_SGW);
index_declare(mme_enb_pool, mme_enb_t, MAX_NUM_OF_ENB);
index_declare(mme_ue_pool, mme_ue_t, MAX_NUM_OF_UE);
index_declare(mme_sess_pool, mme_sess_t, MAX_NUM_OF_UE);
index_declare(mme_bearer_pool, mme_bearer_t, MAX_NUM_OF_UE_BEARER);
pool_declare(mme_pdn_pool, pdn_t, MAX_NUM_OF_UE_PDN);
@ -53,6 +54,7 @@ status_t mme_context_init()
list_init(&self.enb_list);
index_init(&mme_ue_pool, MAX_NUM_OF_UE);
index_init(&mme_sess_pool, MAX_NUM_OF_UE);
index_init(&mme_bearer_pool, MAX_NUM_OF_UE_BEARER);
pool_init(&mme_pdn_pool, MAX_NUM_OF_UE_PDN);
@ -109,6 +111,7 @@ status_t mme_context_final()
pool_final(&mme_pdn_pool);
index_final(&mme_bearer_pool);
index_final(&mme_sess_pool);
index_final(&mme_ue_pool);
index_final(&mme_enb_pool);
@ -313,13 +316,11 @@ mme_ue_t* mme_ue_add(mme_enb_t *enb)
ue->mme_ue_s1ap_id = NEXT_ID(self.mme_ue_s1ap_id, 1, 0xffffffff);
hash_set(self.mme_ue_s1ap_id_hash, &ue->mme_ue_s1ap_id,
sizeof(ue->mme_ue_s1ap_id), ue);
ue->mme_s11_teid = ue->index;
ue->mme_s11_addr = mme_self()->s11_addr;
ue->ebi = MIN_EPS_BEARER_ID - 1; /* Setup EBI Generator */
list_init(&ue->pdn_list);
list_init(&ue->bearer_list);
list_init(&ue->sess_list);
list_append(&enb->ue_list, ue);
ue->enb = enb;
@ -339,7 +340,7 @@ status_t mme_ue_remove(mme_ue_t *ue)
fsm_final(&ue->sm, 0);
fsm_clear(&ue->sm);
mme_bearer_remove_all(ue);
mme_sess_remove_all(ue);
mme_pdn_remove_all(ue);
list_remove(&ue->enb->ue_list, ue);
@ -378,11 +379,6 @@ mme_ue_t* mme_ue_find_by_mme_ue_s1ap_id(c_uint32_t mme_ue_s1ap_id)
&mme_ue_s1ap_id, sizeof(mme_ue_s1ap_id));
}
mme_ue_t* mme_ue_find_by_teid(c_uint32_t teid)
{
return mme_ue_find(teid);
}
hash_index_t *mme_ue_first()
{
d_assert(self.mme_ue_s1ap_id_hash, return NULL, "Null param");
@ -450,10 +446,105 @@ mme_ue_t* mme_ue_next_in_enb(mme_ue_t *ue)
return list_next(ue);
}
mme_bearer_t* mme_bearer_add(mme_ue_t *ue, c_uint8_t pti)
mme_sess_t *mme_sess_add(mme_ue_t *ue)
{
mme_sess_t *sess = NULL;
index_alloc(&mme_sess_pool, &sess);
d_assert(sess, return NULL, "Null param");
sess->mme_s11_teid = sess->index;
sess->mme_s11_addr = mme_self()->s11_addr;
list_init(&sess->bearer_list);
list_append(&ue->sess_list, sess);
sess->ue = ue;
return sess;
}
status_t mme_sess_remove(mme_sess_t *sess)
{
d_assert(sess, return CORE_ERROR, "Null param");
d_assert(sess->ue, return CORE_ERROR, "Null param");
mme_bearer_remove_all(sess);
list_remove(&sess->ue->sess_list, sess);
index_free(&mme_sess_pool, sess);
return CORE_OK;
}
status_t mme_sess_remove_all(mme_ue_t *ue)
{
mme_sess_t *sess = NULL, *next_sess = NULL;
sess = mme_sess_first(ue);
while (sess)
{
next_sess = mme_sess_next(sess);
mme_sess_remove(sess);
sess = next_sess;
}
return CORE_OK;
}
mme_sess_t* mme_sess_find(index_t index)
{
d_assert(index, return NULL, "Invalid Index");
return index_find(&mme_sess_pool, index);
}
mme_sess_t* mme_sess_find_by_teid(c_uint32_t teid)
{
return mme_sess_find(teid);
}
mme_sess_t* mme_sess_first(mme_ue_t *ue)
{
return list_first(&ue->sess_list);
}
mme_sess_t* mme_sess_next(mme_sess_t *sess)
{
return list_next(sess);
}
mme_sess_t* mme_sess_find_by_ebi(mme_ue_t *ue, c_uint8_t ebi)
{
mme_sess_t *sess = NULL;
mme_bearer_t *bearer = NULL;
sess = mme_sess_first(ue);
while (sess)
{
bearer = mme_bearer_first(sess);
while (bearer)
{
if (ebi == bearer->ebi)
return sess;
bearer = mme_bearer_next(bearer);
}
sess = mme_sess_next(sess);
}
return NULL;
}
mme_bearer_t* mme_bearer_add(mme_sess_t *sess, c_uint8_t pti)
{
mme_bearer_t *bearer = NULL;
mme_ue_t *ue = NULL;
d_assert(sess, return NULL, "Null param");
ue = sess->ue;
d_assert(ue, return NULL, "Null param");
index_alloc(&mme_bearer_pool, &bearer);
@ -462,9 +553,11 @@ mme_bearer_t* mme_bearer_add(mme_ue_t *ue, c_uint8_t pti)
bearer->pti = pti;
bearer->ebi = NEXT_ID(ue->ebi, MIN_EPS_BEARER_ID, MAX_EPS_BEARER_ID);
bearer->ue = ue;
list_append(&ue->bearer_list, bearer);
list_append(&sess->bearer_list, bearer);
bearer->ue = ue;
bearer->sess = sess;
fsm_create(&bearer->sm, esm_state_initial, esm_state_final);
fsm_init(&bearer->sm, 0);
@ -474,24 +567,24 @@ mme_bearer_t* mme_bearer_add(mme_ue_t *ue, c_uint8_t pti)
status_t mme_bearer_remove(mme_bearer_t *bearer)
{
d_assert(bearer, return CORE_ERROR, "Null param");
d_assert(bearer->ue, return CORE_ERROR, "Null param");
d_assert(bearer->sess, return CORE_ERROR, "Null param");
fsm_final(&bearer->sm, 0);
fsm_clear(&bearer->sm);
list_remove(&bearer->ue->bearer_list, bearer);
list_remove(&bearer->sess->bearer_list, bearer);
index_free(&mme_bearer_pool, bearer);
return CORE_OK;
}
status_t mme_bearer_remove_all(mme_ue_t *ue)
status_t mme_bearer_remove_all(mme_sess_t *sess)
{
mme_bearer_t *bearer = NULL, *next_bearer = NULL;
d_assert(ue, return CORE_ERROR, "Null param");
d_assert(sess, return CORE_ERROR, "Null param");
bearer = mme_bearer_first(ue);
bearer = mme_bearer_first(sess);
while (bearer)
{
next_bearer = mme_bearer_next(bearer);
@ -510,47 +603,79 @@ mme_bearer_t* mme_bearer_find(index_t index)
return index_find(&mme_bearer_pool, index);
}
mme_bearer_t* mme_bearer_find_by_pti(mme_ue_t *ue, c_uint8_t pti)
mme_bearer_t* mme_bearer_find_by_ue_pti(mme_ue_t *ue, c_uint8_t pti)
{
mme_sess_t *sess = NULL;
mme_bearer_t *bearer = NULL;
d_assert(ue, return NULL, "Null param");
bearer = mme_bearer_first(ue);
while (bearer)
{
if (pti == bearer->pti)
break;
bearer = mme_bearer_next(bearer);
sess = mme_sess_first(ue);
while (sess)
{
bearer = mme_bearer_first(sess);
while (bearer)
{
if (pti == bearer->pti)
return bearer;
bearer = mme_bearer_next(bearer);
}
sess = mme_sess_next(sess);
}
return bearer;
return NULL;
}
mme_bearer_t* mme_bearer_find_by_ebi(mme_ue_t *ue, c_uint8_t ebi)
mme_bearer_t* mme_bearer_find_by_ue_ebi(mme_ue_t *ue, c_uint8_t ebi)
{
mme_sess_t *sess = NULL;
mme_bearer_t *bearer = NULL;
d_assert(ue, return NULL, "Null param");
bearer = mme_bearer_first(ue);
sess = mme_sess_first(ue);
while (sess)
{
bearer = mme_bearer_first(sess);
while (bearer)
{
if (ebi == bearer->ebi)
return bearer;
bearer = mme_bearer_next(bearer);
}
sess = mme_sess_next(sess);
}
return NULL;
}
mme_bearer_t* mme_bearer_find_by_sess_ebi(mme_sess_t *sess, c_uint8_t ebi)
{
mme_bearer_t *bearer = NULL;
d_assert(sess, return NULL, "Null param");
bearer = mme_bearer_first(sess);
while (bearer)
{
if (ebi == bearer->ebi)
break;
return bearer;
bearer = mme_bearer_next(bearer);
}
return bearer;
return NULL;
}
mme_bearer_t* mme_bearer_first(mme_ue_t *ue)
mme_bearer_t* mme_bearer_first(mme_sess_t *sess)
{
d_assert(ue, return NULL, "Null param");
d_assert(sess, return NULL, "Null param");
return list_first(&ue->bearer_list);
return list_first(&sess->bearer_list);
}
mme_bearer_t* mme_bearer_next(mme_bearer_t *bearer)

View File

@ -142,19 +142,30 @@ typedef struct _mme_ue_t {
list_t pdn_list;
c_uint32_t subscribed_rau_tau_timer; /* seconds */
/* ESM Info */
c_uint8_t ebi; /* EPS Bearer ID generator */
list_t sess_list;
mme_enb_t *enb;
} mme_ue_t;
typedef struct _mme_sess_t {
lnode_t node; /**< A node of list_t */
index_t index; /**< An index of this node */
/* IMPORTANT!
* MME-S11-TEID is same with an index */
c_uint32_t mme_s11_teid;
c_uint32_t mme_s11_addr;
c_uint32_t sgw_s11_teid;
c_uint32_t sgw_s11_addr;
/* ESM Info */
c_uint8_t ebi; /* EPS Bearer ID generator */
/* mme_bearer_first(sess) : Default Bearer Context */
list_t bearer_list;
mme_enb_t *enb;
} mme_ue_t;
mme_ue_t *ue;
} mme_sess_t;
typedef struct _mme_bearer_t {
lnode_t node; /**< A node of list_t */
@ -179,6 +190,7 @@ typedef struct _mme_bearer_t {
pdn_t *pdn;
mme_ue_t *ue;
mme_sess_t *sess;
} mme_bearer_t;
CORE_DECLARE(status_t) mme_context_init(void);
@ -207,7 +219,6 @@ CORE_DECLARE(status_t) mme_ue_remove_all();
CORE_DECLARE(mme_ue_t*) mme_ue_find(index_t index);
CORE_DECLARE(mme_ue_t*) mme_ue_find_by_mme_ue_s1ap_id(
c_uint32_t mme_ue_s1ap_id);
CORE_DECLARE(mme_ue_t*) mme_ue_find_by_teid(c_uint32_t teid);
CORE_DECLARE(hash_index_t *) mme_ue_first();
CORE_DECLARE(hash_index_t *) mme_ue_next(hash_index_t *hi);
CORE_DECLARE(mme_ue_t *) mme_ue_this(hash_index_t *hi);
@ -218,13 +229,26 @@ CORE_DECLARE(mme_ue_t*) mme_ue_find_by_enb_ue_s1ap_id(
CORE_DECLARE(mme_ue_t*) mme_ue_first_in_enb(mme_enb_t *enb);
CORE_DECLARE(mme_ue_t*) mme_ue_next_in_enb(mme_ue_t *ue);
CORE_DECLARE(mme_bearer_t*) mme_bearer_add(mme_ue_t *ue, c_uint8_t pti);
CORE_DECLARE(mme_sess_t*) mme_sess_add(mme_ue_t *ue);
CORE_DECLARE(status_t ) mme_sess_remove(mme_sess_t *sess);
CORE_DECLARE(status_t ) mme_sess_remove_all(mme_ue_t *ue);
CORE_DECLARE(mme_sess_t*) mme_sess_find(index_t index);
CORE_DECLARE(mme_sess_t*) mme_sess_find_by_teid(c_uint32_t teid);
CORE_DECLARE(mme_sess_t*) mme_sess_find_by_ebi(mme_ue_t *ue, c_uint8_t ebi);
CORE_DECLARE(mme_sess_t*) mme_sess_first(mme_ue_t *ue);
CORE_DECLARE(mme_sess_t*) mme_sess_next(mme_sess_t *sess);
CORE_DECLARE(mme_bearer_t*) mme_bearer_add(mme_sess_t *sess, c_uint8_t pti);
CORE_DECLARE(status_t) mme_bearer_remove(mme_bearer_t *bearer);
CORE_DECLARE(status_t) mme_bearer_remove_all(mme_ue_t *ue);
CORE_DECLARE(status_t) mme_bearer_remove_all(mme_sess_t *sess);
CORE_DECLARE(mme_bearer_t*) mme_bearer_find(index_t index);
CORE_DECLARE(mme_bearer_t*) mme_bearer_find_by_pti(mme_ue_t *ue, c_uint8_t pti);
CORE_DECLARE(mme_bearer_t*) mme_bearer_find_by_ebi(mme_ue_t *ue, c_uint8_t ebi);
CORE_DECLARE(mme_bearer_t*) mme_bearer_first(mme_ue_t *ue);
CORE_DECLARE(mme_bearer_t*) mme_bearer_find_by_ue_pti(
mme_ue_t *ue, c_uint8_t pti);
CORE_DECLARE(mme_bearer_t*) mme_bearer_find_by_ue_ebi(
mme_ue_t *ue, c_uint8_t ebi);
CORE_DECLARE(mme_bearer_t*) mme_bearer_find_by_sess_ebi(
mme_sess_t *sess, c_uint8_t ebi);
CORE_DECLARE(mme_bearer_t*) mme_bearer_first(mme_sess_t *sess);
CORE_DECLARE(mme_bearer_t*) mme_bearer_next(mme_bearer_t *bearer);
CORE_DECLARE(pdn_t*) mme_pdn_add(mme_ue_t *ue, c_int8_t *apn);

View File

@ -8,12 +8,14 @@
#include "3gpp_common.h"
#include "mme_context.h"
status_t mme_s11_build_create_session_request(pkbuf_t **pkbuf, mme_bearer_t *bearer)
status_t mme_s11_build_create_session_request(
pkbuf_t **pkbuf, mme_bearer_t *bearer)
{
status_t rv;
pdn_t *pdn = NULL;
mme_sgw_t *sgw = NULL;
mme_ue_t *ue = NULL;
mme_sess_t *sess = NULL;
gtp_message_t gtp_message;
gtp_create_session_request_t *req = &gtp_message.create_session_request;
@ -30,7 +32,9 @@ status_t mme_s11_build_create_session_request(pkbuf_t **pkbuf, mme_bearer_t *bea
d_assert(pdn, return CORE_ERROR, "Null param");
sgw = bearer->sgw;
d_assert(sgw, return CORE_ERROR, "Null param");
ue = bearer->ue;
sess = bearer->sess;
d_assert(sess, return CORE_ERROR, "Null param");
ue = sess->ue;
d_assert(ue, return CORE_ERROR, "Null param");
memset(&gtp_message, 0, sizeof(gtp_message_t));
@ -66,8 +70,8 @@ status_t mme_s11_build_create_session_request(pkbuf_t **pkbuf, mme_bearer_t *bea
memset(&mme_s11_teid, 0, sizeof(gtp_f_teid_t));
mme_s11_teid.ipv4 = 1;
mme_s11_teid.interface_type = GTP_F_TEID_S11_MME_GTP_C;
mme_s11_teid.teid = htonl(ue->mme_s11_teid);
mme_s11_teid.ipv4_addr = ue->mme_s11_addr;
mme_s11_teid.teid = htonl(sess->mme_s11_teid);
mme_s11_teid.ipv4_addr = sess->mme_s11_addr;
req->sender_f_teid_for_control_plane.presence = 1;
req->sender_f_teid_for_control_plane.data = &mme_s11_teid;
req->sender_f_teid_for_control_plane.len = GTP_F_TEID_IPV4_LEN;

View File

@ -9,7 +9,7 @@
#include "mme_s11_handler.h"
void mme_s11_handle_create_session_response(
mme_ue_t *ue, gtp_create_session_response_t *rsp)
mme_sess_t *sess, gtp_create_session_response_t *rsp)
{
event_t e;
@ -19,7 +19,7 @@ void mme_s11_handle_create_session_response(
mme_bearer_t *bearer = NULL;
pdn_t *pdn = NULL;
d_assert(ue, return, "Null param");
d_assert(sess, return, "Null param");
d_assert(rsp, return, "Null param");
if (rsp->sender_f_teid_for_control_plane.presence == 0)
@ -48,16 +48,16 @@ void mme_s11_handle_create_session_response(
return;
}
bearer = mme_bearer_find_by_ebi(
ue, rsp->bearer_contexts_created.eps_bearer_id.u8);
bearer = mme_bearer_find_by_sess_ebi(
sess, rsp->bearer_contexts_created.eps_bearer_id.u8);
d_assert(bearer, return, "No ESM Context");
pdn = bearer->pdn;
d_assert(pdn, return, "No PDN Context");
/* Receive Control Plane(UL) : SGW-S11 */
sgw_s11_teid = rsp->sender_f_teid_for_control_plane.data;
ue->sgw_s11_teid = ntohl(sgw_s11_teid->teid);
ue->sgw_s11_addr = sgw_s11_teid->ipv4_addr;
sess->sgw_s11_teid = ntohl(sgw_s11_teid->teid);
sess->sgw_s11_addr = sgw_s11_teid->ipv4_addr;
memcpy(&pdn->paa, rsp->pdn_address_allocation.data,
rsp->pdn_address_allocation.len);
@ -75,7 +75,7 @@ void mme_s11_handle_create_session_response(
bearer->sgw_s1u_addr = sgw_s1u_teid->ipv4_addr;
d_info("[GTP] Create Session Response : "
"MME[%d] <-- SGW[%d]", ue->mme_s11_teid, ue->sgw_s11_teid);
"MME[%d] <-- SGW[%d]", sess->mme_s11_teid, sess->sgw_s11_teid);
event_set(&e, MME_EVT_EMM_BEARER_FROM_S11);
event_set_param1(&e, (c_uintptr_t)bearer->index);
@ -84,10 +84,14 @@ void mme_s11_handle_create_session_response(
}
void mme_s11_handle_modify_bearer_response(
mme_ue_t *ue, gtp_modify_bearer_response_t *rsp)
mme_sess_t *sess, gtp_modify_bearer_response_t *rsp)
{
mme_ue_t *ue = NULL;
event_t e;
d_assert(sess, return, "Null param");
ue = sess->ue;
event_set(&e, MME_EVT_EMM_UE_FROM_S11);
event_set_param1(&e, (c_uintptr_t)ue->index);
event_set_param2(&e, (c_uintptr_t)GTP_MODIFY_BEARER_RESPONSE_TYPE);

View File

@ -10,9 +10,9 @@ extern "C" {
#endif /* __cplusplus */
CORE_DECLARE(void) mme_s11_handle_create_session_response(
mme_ue_t *ue, gtp_create_session_response_t *rsp);
mme_sess_t *sess, gtp_create_session_response_t *rsp);
CORE_DECLARE(void) mme_s11_handle_modify_bearer_response(
mme_ue_t *ue, gtp_modify_bearer_response_t *rsp);
mme_sess_t *sess, gtp_modify_bearer_response_t *rsp);
#ifdef __cplusplus
}

View File

@ -232,7 +232,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
c_uint8_t type;
c_uint32_t teid;
gtp_message_t gtp_message;
mme_ue_t *ue = NULL;
mme_sess_t *sess = NULL;
d_assert(pkbuf, break, "Null param");
d_assert(sock, pkbuf_free(pkbuf); break, "Null param");
@ -244,18 +244,18 @@ void mme_state_operational(fsm_t *s, event_t *e)
if (rv != CORE_OK)
break;
ue = mme_ue_find_by_teid(teid);
d_assert(ue, pkbuf_free(pkbuf); break,
sess = mme_sess_find_by_teid(teid);
d_assert(sess, pkbuf_free(pkbuf); break,
"No Session Context(TEID:%d)", teid);
switch(type)
{
case GTP_CREATE_SESSION_RESPONSE_TYPE:
mme_s11_handle_create_session_response(
ue, &gtp_message.create_session_response);
sess, &gtp_message.create_session_response);
break;
case GTP_MODIFY_BEARER_RESPONSE_TYPE:
mme_s11_handle_modify_bearer_response(
ue, &gtp_message.modify_bearer_response);
sess, &gtp_message.modify_bearer_response);
break;
default:
d_warn("Not implmeneted(type:%d)", type);

View File

@ -41,8 +41,8 @@ static void event_s1ap_to_nas(mme_ue_t *ue, S1ap_NAS_PDU_t *nasPdu)
}
else if (h->protocol_discriminator == NAS_PROTOCOL_DISCRIMINATOR_ESM)
{
mme_bearer_t *bearer = mme_bearer_find_by_pti(ue,
h->procedure_transaction_identity);
mme_bearer_t *bearer = mme_bearer_find_by_ue_pti(
ue, h->procedure_transaction_identity);
if (bearer)
{
event_set(&e, MME_EVT_ESM_BEARER_MSG);
@ -245,7 +245,7 @@ void s1ap_handle_initial_context_setup_response(
ies->e_RABSetupListCtxtSURes.s1ap_E_RABSetupItemCtxtSURes.array[i];
d_assert(e_rab, return, "Null param");
bearer = mme_bearer_find_by_ebi(ue, e_rab->e_RAB_ID);
bearer = mme_bearer_find_by_ue_ebi(ue, e_rab->e_RAB_ID);
d_assert(bearer, return, "Null param");
memcpy(&bearer->enb_s1u_teid, e_rab->gTP_TEID.buf,
sizeof(bearer->enb_s1u_teid));