update it

This commit is contained in:
Sukchan Lee 2017-09-14 17:29:34 +09:00
parent 7a324ec8e9
commit 640d2efb07
8 changed files with 68 additions and 73 deletions

View File

@ -79,7 +79,7 @@ void esm_state_inactive(fsm_t *s, event_t *e)
if (MME_HAVE_ENB_S1U_PATH(bearer))
{
rv = mme_gtp_send_modify_bearer_request(NULL, bearer);
rv = mme_gtp_send_modify_bearer_request(bearer, 0);
d_assert(rv == CORE_OK, return, "gtp send failed");
}

View File

@ -124,7 +124,7 @@ status_t mme_gtp_send_create_session_request(mme_sess_t *sess)
status_t mme_gtp_send_modify_bearer_request(
enb_ue_t *enb_ue, mme_bearer_t *bearer)
mme_bearer_t *bearer, int uli_presence)
{
status_t rv;
@ -145,7 +145,8 @@ status_t mme_gtp_send_modify_bearer_request(
h.type = GTP_MODIFY_BEARER_REQUEST_TYPE;
h.teid = mme_ue->sgw_s11_teid;
rv = mme_s11_build_modify_bearer_request(&pkbuf, h.type, enb_ue, bearer);
rv = mme_s11_build_modify_bearer_request(
&pkbuf, h.type, bearer, uli_presence);
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
@ -164,19 +165,16 @@ status_t mme_gtp_send_delete_session_request(mme_sess_t *sess)
gtp_header_t h;
gtp_xact_t *xact = NULL;
mme_ue_t *mme_ue = NULL;
enb_ue_t *enb_ue = NULL;
d_assert(sess, return CORE_ERROR, "Null param");
mme_ue = sess->mme_ue;
d_assert(mme_ue, return CORE_ERROR, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return CORE_ERROR, "Null param");
memset(&h, 0, sizeof(gtp_header_t));
h.type = GTP_DELETE_SESSION_REQUEST_TYPE;
h.teid = mme_ue->sgw_s11_teid;
rv = mme_s11_build_delete_session_request(&s11buf, h.type, enb_ue, sess);
rv = mme_s11_build_delete_session_request(&s11buf, h.type, sess);
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
xact = gtp_xact_local_create(sess->sgw, &h, s11buf);
@ -226,7 +224,6 @@ status_t mme_gtp_send_create_bearer_response(mme_bearer_t *bearer)
gtp_xact_t *xact = NULL;
mme_ue_t *mme_ue = NULL;
enb_ue_t *enb_ue = NULL;
gtp_header_t h;
pkbuf_t *pkbuf = NULL;
@ -234,8 +231,6 @@ status_t mme_gtp_send_create_bearer_response(mme_bearer_t *bearer)
d_assert(bearer, return CORE_ERROR, "Null param");
mme_ue = bearer->mme_ue;
d_assert(mme_ue, return CORE_ERROR, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return CORE_ERROR, "Null param");
xact = bearer->xact;
d_assert(xact, return CORE_ERROR, "Null param");
@ -243,7 +238,7 @@ status_t mme_gtp_send_create_bearer_response(mme_bearer_t *bearer)
h.type = GTP_CREATE_BEARER_RESPONSE_TYPE;
h.teid = mme_ue->sgw_s11_teid;
rv = mme_s11_build_create_bearer_response(&pkbuf, h.type, enb_ue, bearer);
rv = mme_s11_build_create_bearer_response(&pkbuf, h.type, bearer);
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
rv = gtp_xact_update_tx(xact, &h, pkbuf);

View File

@ -14,7 +14,7 @@ CORE_DECLARE(status_t) mme_gtp_close();
CORE_DECLARE(status_t) mme_gtp_send_create_session_request(mme_sess_t *sess);
CORE_DECLARE(status_t) mme_gtp_send_modify_bearer_request(
enb_ue_t *enb_ue, mme_bearer_t *bearer);
mme_bearer_t *bearer, int uli_presence);
CORE_DECLARE(status_t) mme_gtp_send_delete_session_request(mme_sess_t *sess);
CORE_DECLARE(status_t) mme_gtp_send_delete_all_sessions(mme_ue_t *mme_ue);
CORE_DECLARE(status_t) mme_gtp_send_create_bearer_response(

View File

@ -43,7 +43,6 @@ status_t mme_s11_build_create_session_request(
d_assert(pgw_ipv4_addr, return CORE_ERROR, "Null param");
mme_ue = sess->mme_ue;
d_assert(mme_ue, return CORE_ERROR, "Null param");
d_assert(mme_ue->enb_ue, return CORE_ERROR, "Null param");
memset(&gtp_message, 0, sizeof(gtp_message_t));
@ -55,12 +54,11 @@ status_t mme_s11_build_create_session_request(
memset(&uli, 0, sizeof(gtp_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
memcpy(&uli.tai.plmn_id, &mme_ue->enb_ue->tai.plmn_id,
sizeof(uli.tai.plmn_id));
uli.tai.tac = mme_ue->enb_ue->tai.tac;
memcpy(&uli.e_cgi.plmn_id, &mme_ue->enb_ue->e_cgi.plmn_id,
memcpy(&uli.tai.plmn_id, &mme_ue->tai.plmn_id, sizeof(uli.tai.plmn_id));
uli.tai.tac = mme_ue->tai.tac;
memcpy(&uli.e_cgi.plmn_id, &mme_ue->e_cgi.plmn_id,
sizeof(uli.e_cgi.plmn_id));
uli.e_cgi.cell_id = mme_ue->enb_ue->e_cgi.cell_id;
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
req->user_location_information.presence = 1;
gtp_build_uli(&req->user_location_information, &uli,
uli_buf, GTP_MAX_ULI_LEN);
@ -161,8 +159,8 @@ status_t mme_s11_build_create_session_request(
return CORE_OK;
}
status_t mme_s11_build_modify_bearer_request(
pkbuf_t **pkbuf, c_uint8_t type, enb_ue_t *enb_ue, mme_bearer_t *bearer)
status_t mme_s11_build_modify_bearer_request(pkbuf_t **pkbuf,
c_uint8_t type, mme_bearer_t *bearer, int uli_presence)
{
status_t rv;
gtp_message_t gtp_message;
@ -172,7 +170,11 @@ status_t mme_s11_build_modify_bearer_request(
gtp_uli_t uli;
char uli_buf[GTP_MAX_ULI_LEN];
mme_ue_t *mme_ue = NULL;
d_assert(bearer, return CORE_ERROR, "Null param");
mme_ue = bearer->mme_ue;
d_assert(mme_ue, return CORE_ERROR, "Null param");
memset(&gtp_message, 0, sizeof(gtp_message_t));
@ -192,17 +194,16 @@ status_t mme_s11_build_modify_bearer_request(
req->bearer_contexts_to_be_modified.s1_u_enodeb_f_teid.len =
GTP_F_TEID_IPV4_LEN;
if (enb_ue)
if (uli_presence)
{
memset(&uli, 0, sizeof(gtp_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
memcpy(&uli.tai.plmn_id, &enb_ue->tai.plmn_id,
sizeof(uli.tai.plmn_id));
uli.tai.tac = enb_ue->tai.tac;
memcpy(&uli.e_cgi.plmn_id, &enb_ue->e_cgi.plmn_id,
memcpy(&uli.tai.plmn_id, &mme_ue->tai.plmn_id, sizeof(uli.tai.plmn_id));
uli.tai.tac = mme_ue->tai.tac;
memcpy(&uli.e_cgi.plmn_id, &mme_ue->e_cgi.plmn_id,
sizeof(uli.e_cgi.plmn_id));
uli.e_cgi.cell_id = enb_ue->e_cgi.cell_id;
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
req->user_location_information.presence = 1;
gtp_build_uli(&req->user_location_information, &uli,
uli_buf, GTP_MAX_ULI_LEN);
@ -216,10 +217,9 @@ status_t mme_s11_build_modify_bearer_request(
}
status_t mme_s11_build_delete_session_request(
pkbuf_t **pkbuf, c_uint8_t type, enb_ue_t *enb_ue, mme_sess_t *sess)
pkbuf_t **pkbuf, c_uint8_t type, mme_sess_t *sess)
{
status_t rv;
mme_bearer_t *bearer = NULL;
gtp_message_t gtp_message;
gtp_delete_session_request_t *req = &gtp_message.delete_session_request;
@ -227,7 +227,12 @@ status_t mme_s11_build_delete_session_request(
char uli_buf[GTP_MAX_ULI_LEN];
gtp_indication_t indication;
mme_bearer_t *bearer = 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");
bearer = mme_default_bearer_in_sess(sess);
d_assert(bearer, return CORE_ERROR, "Null param");
@ -236,21 +241,16 @@ status_t mme_s11_build_delete_session_request(
req->linked_eps_bearer_id.presence = 1;
req->linked_eps_bearer_id.u8 = bearer->ebi;
if (enb_ue)
{
memset(&uli, 0, sizeof(gtp_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
memcpy(&uli.tai.plmn_id, &enb_ue->tai.plmn_id,
sizeof(uli.tai.plmn_id));
uli.tai.tac = enb_ue->tai.tac;
memcpy(&uli.e_cgi.plmn_id, &enb_ue->e_cgi.plmn_id,
sizeof(uli.tai.plmn_id));
uli.e_cgi.cell_id = enb_ue->e_cgi.cell_id;
req->user_location_information.presence = 1;
gtp_build_uli(&req->user_location_information, &uli,
uli_buf, GTP_MAX_ULI_LEN);
}
memset(&uli, 0, sizeof(gtp_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
memcpy(&uli.tai.plmn_id, &mme_ue->tai.plmn_id, sizeof(uli.tai.plmn_id));
uli.tai.tac = mme_ue->tai.tac;
memcpy(&uli.e_cgi.plmn_id, &mme_ue->e_cgi.plmn_id, sizeof(uli.tai.plmn_id));
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
req->user_location_information.presence = 1;
gtp_build_uli(&req->user_location_information, &uli,
uli_buf, GTP_MAX_ULI_LEN);
memset(&indication, 0, sizeof(gtp_indication_t));
indication.oi = 1;
@ -266,7 +266,7 @@ status_t mme_s11_build_delete_session_request(
}
status_t mme_s11_build_create_bearer_response(
pkbuf_t **pkbuf, c_uint8_t type, enb_ue_t *enb_ue, mme_bearer_t *bearer)
pkbuf_t **pkbuf, c_uint8_t type, mme_bearer_t *bearer)
{
status_t rv;
gtp_message_t gtp_message;
@ -277,7 +277,11 @@ status_t mme_s11_build_create_bearer_response(
gtp_uli_t uli;
char uli_buf[GTP_MAX_ULI_LEN];
mme_ue_t *mme_ue = NULL;
d_assert(bearer, return CORE_ERROR, "Null param");
mme_ue = bearer->mme_ue;
d_assert(mme_ue, return CORE_ERROR, "Null param");
memset(&gtp_message, 0, sizeof(gtp_message_t));
@ -318,21 +322,17 @@ status_t mme_s11_build_create_bearer_response(
rsp->bearer_contexts.cause.len = sizeof(cause);
rsp->bearer_contexts.cause.data = &cause;
if (enb_ue)
{
memset(&uli, 0, sizeof(gtp_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
memcpy(&uli.tai.plmn_id, &enb_ue->tai.plmn_id,
sizeof(uli.tai.plmn_id));
uli.tai.tac = enb_ue->tai.tac;
memcpy(&uli.e_cgi.plmn_id, &enb_ue->e_cgi.plmn_id,
sizeof(uli.e_cgi.plmn_id));
uli.e_cgi.cell_id = enb_ue->e_cgi.cell_id;
rsp->user_location_information.presence = 1;
gtp_build_uli(&rsp->user_location_information, &uli,
uli_buf, GTP_MAX_ULI_LEN);
}
memset(&uli, 0, sizeof(gtp_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
memcpy(&uli.tai.plmn_id, &mme_ue->tai.plmn_id, sizeof(uli.tai.plmn_id));
uli.tai.tac = mme_ue->tai.tac;
memcpy(&uli.e_cgi.plmn_id, &mme_ue->e_cgi.plmn_id,
sizeof(uli.e_cgi.plmn_id));
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
rsp->user_location_information.presence = 1;
gtp_build_uli(&rsp->user_location_information, &uli,
uli_buf, GTP_MAX_ULI_LEN);
/* TODO : UE Time Zone */

View File

@ -9,14 +9,12 @@ extern "C" {
CORE_DECLARE(status_t) mme_s11_build_create_session_request(
pkbuf_t **pkbuf, c_uint8_t type, mme_sess_t *sess);
CORE_DECLARE(status_t) mme_s11_build_modify_bearer_request(
pkbuf_t **pkbuf, c_uint8_t type,
enb_ue_t *enb_ue, mme_bearer_t *bearer);
CORE_DECLARE(status_t) mme_s11_build_modify_bearer_request(pkbuf_t **pkbuf,
c_uint8_t type, mme_bearer_t *bearer, int uli_presense);
CORE_DECLARE(status_t) mme_s11_build_delete_session_request(
pkbuf_t **pkbuf, c_uint8_t type, enb_ue_t *enb_ue, mme_sess_t *sess);
pkbuf_t **pkbuf, c_uint8_t type, mme_sess_t *sess);
CORE_DECLARE(status_t) mme_s11_build_create_bearer_response(
pkbuf_t **pkbuf, c_uint8_t type,
enb_ue_t *enb_ue, mme_bearer_t *bearer);
pkbuf_t **pkbuf, c_uint8_t type, mme_bearer_t *bearer);
CORE_DECLARE(status_t) mme_s11_build_release_access_bearers_request(
pkbuf_t **pkbuf, c_uint8_t type);
CORE_DECLARE(status_t) mme_s11_build_downlink_data_notification_ack(

View File

@ -296,13 +296,12 @@ void s1ap_handle_initial_context_setup_response(
if (FSM_CHECK(&bearer->sm, esm_state_active))
{
if (mme_ue->nas_eps.type == MME_EPS_TYPE_ATTACH_REQUEST)
int uli_presence = 0;
if (mme_ue->nas_eps.type != MME_EPS_TYPE_ATTACH_REQUEST)
{
/* if ATTACH REQUEST,
ULI(CellID, TAC) is excluded in Modify Bearer Request */
enb_ue = NULL;
uli_presence = 1;
}
rv = mme_gtp_send_modify_bearer_request(enb_ue, bearer);
rv = mme_gtp_send_modify_bearer_request(bearer, uli_presence);
d_assert(rv == CORE_OK, return, "gtp send failed");
}
}
@ -363,7 +362,7 @@ void s1ap_handle_e_rab_setup_response(
if (bearer->ebi == linked_bearer->ebi)
{
rv = mme_gtp_send_modify_bearer_request(NULL, bearer);
rv = mme_gtp_send_modify_bearer_request(bearer, 0);
d_assert(rv == CORE_OK, return, "gtp send failed");
}
else
@ -634,7 +633,7 @@ void s1ap_handle_path_switch_request(
GTP_COUNTER_INCREMENT(
mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH);
rv = mme_gtp_send_modify_bearer_request(enb_ue, bearer);
rv = mme_gtp_send_modify_bearer_request(bearer, 1);
d_assert(rv == CORE_OK, return, "gtp send failed");
}
@ -898,7 +897,7 @@ void s1ap_handle_handover_notification(mme_enb_t *enb, s1ap_message_t *message)
GTP_COUNTER_INCREMENT(
mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_HANDOVER_NOTIFY);
rv = mme_gtp_send_modify_bearer_request(target, bearer);
rv = mme_gtp_send_modify_bearer_request(bearer, 1);
d_assert(rv == CORE_OK, return, "gtp send failed");
bearer = mme_bearer_next(bearer);

View File

@ -205,6 +205,7 @@ CORE_DECLARE(void) sgw_s11_handle_modify_bearer_request(gtp_xact_t *s11_xact,
{
rv = sgw_gtp_send_end_marker(bearer);
d_assert(rv == CORE_OK, return, "gtp send failed");
printf("SEND END MARKER\n");
bearer->e_cgi.cell_id = uli.e_cgi.cell_id;
}

View File

@ -625,7 +625,9 @@ abts_suite *test_handover(abts_suite *suite)
{
suite = ADD_SUITE(suite)
#if 0
abts_run_test(suite, handover_test1, NULL);
#endif
abts_run_test(suite, handover_test2, NULL);
return suite;