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;
|
list_t bearer_list;
|
||||||
|
|
||||||
/* Related Context */
|
/* 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_sgw_t *sgw;
|
||||||
mme_ue_t *mme_ue;
|
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;
|
mme_ue_t *mme_ue = NULL;
|
||||||
|
|
||||||
/* Use round-robin for selecting SGW */
|
/* Use round-robin for selecting SGW */
|
||||||
d_assert(sess, return, "Null param");
|
MME_S11_PATH_IN_SESSION(sess);
|
||||||
sess->sgw = mme_sgw_next(sess->sgw);
|
|
||||||
if (!sess->sgw) sess->sgw = mme_sgw_first();
|
|
||||||
d_assert(sess->sgw, return, "Null param");
|
|
||||||
mme_ue = sess->mme_ue;
|
mme_ue = sess->mme_ue;
|
||||||
d_assert(mme_ue, return, "Null param");
|
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);
|
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
|
||||||
d_assert(xact, return, "Null param");
|
d_assert(xact, return, "Null param");
|
||||||
|
|
||||||
GTP_XACT_STORE_SESSION(xact, sess);
|
|
||||||
|
|
||||||
rv = gtp_xact_commit(xact);
|
rv = gtp_xact_commit(xact);
|
||||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
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(xact, return, "Null param");
|
||||||
d_assert(mme_ue, return, "Null param");
|
d_assert(mme_ue, return, "Null param");
|
||||||
d_assert(rsp, 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)
|
if (rsp->sender_f_teid_for_control_plane.presence == 0)
|
||||||
{
|
{
|
||||||
|
@ -93,6 +83,14 @@ void mme_s11_handle_create_session_response(
|
||||||
return;
|
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 */
|
/* Receive Control Plane(UL) : SGW-S11 */
|
||||||
sgw_s11_teid = rsp->sender_f_teid_for_control_plane.data;
|
sgw_s11_teid = rsp->sender_f_teid_for_control_plane.data;
|
||||||
mme_ue->sgw_s11_teid = ntohl(sgw_s11_teid->teid);
|
mme_ue->sgw_s11_teid = ntohl(sgw_s11_teid->teid);
|
||||||
|
|
|
@ -89,6 +89,15 @@ typedef struct _pgw_sess_t {
|
||||||
int hash_keylen;
|
int hash_keylen;
|
||||||
|
|
||||||
list_t bearer_list;
|
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;
|
} pgw_sess_t;
|
||||||
|
|
||||||
typedef struct _pgw_bearer_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 =
|
rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.len =
|
||||||
GTP_F_TEID_IPV4_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.type = GTP_CREATE_SESSION_RESPONSE_TYPE;
|
||||||
gtp_message.h.teid = sess->sgw_s5c_teid;
|
gtp_message.h.teid = sess->sgw_s5c_teid;
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,19 @@ typedef struct _sgw_sess_t {
|
||||||
list_t bearer_list;
|
list_t bearer_list;
|
||||||
|
|
||||||
/* Related Context */
|
/* 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;
|
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_mme_t *pgw;
|
||||||
sgw_ue_t *sgw_ue;
|
sgw_ue_t *sgw_ue;
|
||||||
} sgw_sess_t;
|
} sgw_sess_t;
|
||||||
|
|
|
@ -104,8 +104,8 @@ void sgw_handle_create_session_request(gtp_xact_t *s11_xact,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup GTP Node */
|
/* Setup GTP Node */
|
||||||
sess->pgw = pgw;
|
SGW_S5C_PATH_IN_SESSION(sess, pgw);
|
||||||
sess->mme = s11_xact->gnode;
|
SGW_S11_PATH_IN_SESSION(sess, s11_xact);
|
||||||
|
|
||||||
req->pgw_s5_s8_address_for_control_plane_or_pmip.presence = 0;
|
req->pgw_s5_s8_address_for_control_plane_or_pmip.presence = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue