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:
parent
af8b6ff212
commit
4f5c3d2872
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue