update it
This commit is contained in:
parent
7a324ec8e9
commit
640d2efb07
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(>p_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(>p_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 = >p_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(>p_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 */
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue