remove STORE_SESSION in Create Session Request/Response

EBI is mandatory in Create Session Response.
So, we can get the session context from EBI
This commit is contained in:
Sukchan Lee 2017-09-02 10:14:40 +09:00
parent af8b6ff212
commit 4f5c3d2872
6 changed files with 42 additions and 14 deletions

View File

@ -264,6 +264,13 @@ typedef struct _mme_sess_t {
list_t bearer_list;
/* Related Context */
#define MME_S11_PATH_IN_SESSION(session) \
do { \
d_assert((session), return, "Null param"); \
(session)->sgw = mme_sgw_next((session)->sgw); \
if (!(session)->sgw) (session)->sgw = mme_sgw_first(); \
d_assert((session)->sgw, return, "Null param"); \
} while(0)
mme_sgw_t *sgw;
mme_ue_t *mme_ue;

View File

@ -22,10 +22,8 @@ void mme_s11_handle_create_session_request(mme_sess_t *sess)
mme_ue_t *mme_ue = NULL;
/* Use round-robin for selecting SGW */
d_assert(sess, return, "Null param");
sess->sgw = mme_sgw_next(sess->sgw);
if (!sess->sgw) sess->sgw = mme_sgw_first();
d_assert(sess->sgw, return, "Null param");
MME_S11_PATH_IN_SESSION(sess);
mme_ue = sess->mme_ue;
d_assert(mme_ue, return, "Null param");
@ -40,8 +38,6 @@ void mme_s11_handle_create_session_request(mme_sess_t *sess)
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
d_assert(xact, return, "Null param");
GTP_XACT_STORE_SESSION(xact, sess);
rv = gtp_xact_commit(xact);
d_assert(rv == CORE_OK, return, "xact_commit error");
}
@ -60,12 +56,6 @@ void mme_s11_handle_create_session_response(
d_assert(xact, return, "Null param");
d_assert(mme_ue, return, "Null param");
d_assert(rsp, return, "Null param");
sess = GTP_XACT_RETRIEVE_SESSION(xact);
d_assert(sess, return, "Null param");
bearer = mme_default_bearer_in_sess(sess);
d_assert(bearer, return, "Null param");
pdn = sess->pdn;
d_assert(pdn, return, "Null param");
if (rsp->sender_f_teid_for_control_plane.presence == 0)
{
@ -93,6 +83,14 @@ void mme_s11_handle_create_session_response(
return;
}
bearer = mme_bearer_find_by_ue_ebi(mme_ue,
rsp->bearer_contexts_created.eps_bearer_id.u8);
d_assert(bearer, return, "Null param");
sess = bearer->sess;
d_assert(sess, return, "Null param");
pdn = sess->pdn;
d_assert(pdn, return, "Null param");
/* Receive Control Plane(UL) : SGW-S11 */
sgw_s11_teid = rsp->sender_f_teid_for_control_plane.data;
mme_ue->sgw_s11_teid = ntohl(sgw_s11_teid->teid);

View File

@ -89,6 +89,15 @@ typedef struct _pgw_sess_t {
int hash_keylen;
list_t bearer_list;
/* Related Context */
#define PGW_S5C_PATH_IN_SESSION(session, xaction) \
do { \
d_assert((session), return, "Null param"); \
d_assert((xaction), return, "Null param"); \
(session)->sgw = (xaction)->gnode; \
} while(0)
pgw_sgw_t *sgw;
} pgw_sess_t;
typedef struct _pgw_bearer_t {

View File

@ -96,6 +96,8 @@ void pgw_gx_handle_cca_initial_request(
rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.len =
GTP_F_TEID_IPV4_LEN;
PGW_S5C_PATH_IN_SESSION(sess, xact);
gtp_message.h.type = GTP_CREATE_SESSION_RESPONSE_TYPE;
gtp_message.h.teid = sess->sgw_s5c_teid;

View File

@ -83,7 +83,19 @@ typedef struct _sgw_sess_t {
list_t bearer_list;
/* Related Context */
#define SGW_S11_PATH_IN_SESSION(session, xaction) \
do { \
d_assert((session), return, "Null param"); \
d_assert((xaction), return, "Null param"); \
(session)->mme = (xaction)->gnode; \
} while(0)
sgw_mme_t *mme;
#define SGW_S5C_PATH_IN_SESSION(session, gnode) \
do { \
d_assert((session), return, "Null param"); \
d_assert((gnode), return, "Null param"); \
(session)->pgw = gnode; \
} while(0)
sgw_mme_t *pgw;
sgw_ue_t *sgw_ue;
} sgw_sess_t;

View File

@ -104,8 +104,8 @@ void sgw_handle_create_session_request(gtp_xact_t *s11_xact,
}
/* Setup GTP Node */
sess->pgw = pgw;
sess->mme = s11_xact->gnode;
SGW_S5C_PATH_IN_SESSION(sess, pgw);
SGW_S11_PATH_IN_SESSION(sess, s11_xact);
req->pgw_s5_s8_address_for_control_plane_or_pmip.presence = 0;