forked from acouzens/open5gs
gtp counter is newly proposed for checking multiple GTP transaction
This commit is contained in:
parent
e45d1887a5
commit
0bc90a7829
|
@ -79,10 +79,7 @@ void esm_state_inactive(fsm_t *s, event_t *e)
|
|||
|
||||
if (MME_HAVE_ENB_S1U_PATH(bearer))
|
||||
{
|
||||
MODIFY_BEARER_TRANSACTION_BEGIN(
|
||||
mme_ue, MODIFY_BEARER_BY_EPS_ATTACH);
|
||||
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer);
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer, 0);
|
||||
d_assert(rv == CORE_OK, return, "gtp send failed");
|
||||
}
|
||||
|
||||
|
|
|
@ -268,32 +268,36 @@ struct _mme_ue_t {
|
|||
/* Detach Request */
|
||||
nas_detach_type_t detach_type;
|
||||
|
||||
/* Modify Bearer Request/Response */
|
||||
struct {
|
||||
#define MODIFY_BEARER_BY_EPS_ATTACH 1
|
||||
#define MODIFY_BEARER_BY_EPS_UPDATE 2
|
||||
#define MODIFY_BEARER_BY_E_RAB_SETUP 3
|
||||
#define MODIFY_BEARER_BY_PATH_SWITCH_REQUEST 4
|
||||
c_uint8_t type;
|
||||
|
||||
#define MODIFY_BEARER_TRANSACTION_BEGIN(__mME, __tYPE) \
|
||||
/* GTP Request/Response Counter */
|
||||
#define GTP_COUNTER_INCREMENT(__mME, __tYPE) \
|
||||
do { \
|
||||
d_assert((__mME), break,); \
|
||||
d_assert(\
|
||||
((__mME)->modify_bearer.counter.request) == \
|
||||
((__mME)->modify_bearer.counter.response), break,); \
|
||||
(__mME)->modify_bearer.type = (__tYPE); \
|
||||
((__mME)->gtp_counter[__tYPE].request)++; \
|
||||
} while(0);
|
||||
|
||||
#define MODIFY_BEARER_TRANSACTION_END(__mME) \
|
||||
(__mME) && \
|
||||
((__mME)->modify_bearer.counter.request) == \
|
||||
((__mME)->modify_bearer.counter.response)
|
||||
struct {
|
||||
c_uint64_t request;
|
||||
c_uint64_t response;
|
||||
} counter;
|
||||
} modify_bearer;
|
||||
#define GTP_COUNTER_CHECK(__mME, __tYPE, __eXPR) \
|
||||
do { \
|
||||
d_assert((__mME), break,); \
|
||||
((__mME)->gtp_counter[__tYPE].response)++; \
|
||||
if (((__mME)->gtp_counter[__tYPE].request) == \
|
||||
((__mME)->gtp_counter[__tYPE].response)) \
|
||||
{ \
|
||||
((__mME)->gtp_counter[__tYPE].request) = 0; \
|
||||
((__mME)->gtp_counter[__tYPE].response) = 0; \
|
||||
__eXPR \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define MAX_NUM_OF_GTP_COUNTER 16
|
||||
|
||||
#define GTP_COUNTER_DELETE_SESSION 0
|
||||
#define GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH 1
|
||||
#define GTP_COUNTER_CREATE_INDIRECT_TUNNEL 2
|
||||
#define GTP_COUNTER_DELETE_INDIRECT_TUNNEL 3
|
||||
struct {
|
||||
c_uint8_t request;
|
||||
c_uint8_t response;
|
||||
} gtp_counter[MAX_NUM_OF_GTP_COUNTER];
|
||||
};
|
||||
|
||||
#define MME_HAVE_SGW_S1U_PATH(__sESS) \
|
||||
|
|
|
@ -123,7 +123,8 @@ status_t mme_gtp_send_create_session_request(mme_sess_t *sess)
|
|||
}
|
||||
|
||||
|
||||
status_t mme_gtp_send_modify_bearer_request(mme_bearer_t *bearer)
|
||||
status_t mme_gtp_send_modify_bearer_request(
|
||||
mme_bearer_t *bearer, int uli_present)
|
||||
{
|
||||
status_t rv;
|
||||
|
||||
|
@ -144,7 +145,8 @@ status_t mme_gtp_send_modify_bearer_request(mme_bearer_t *bearer)
|
|||
h.type = GTP_MODIFY_BEARER_REQUEST_TYPE;
|
||||
h.teid = mme_ue->sgw_s11_teid;
|
||||
|
||||
rv = mme_s11_build_modify_bearer_request(&pkbuf, h.type, bearer);
|
||||
rv = mme_s11_build_modify_bearer_request(
|
||||
&pkbuf, h.type, bearer, uli_present);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "S11 build error");
|
||||
|
||||
xact = gtp_xact_local_create(sess->sgw, &h, pkbuf);
|
||||
|
|
|
@ -13,7 +13,8 @@ CORE_DECLARE(status_t) mme_gtp_open();
|
|||
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(mme_bearer_t *bearer);
|
||||
CORE_DECLARE(status_t) mme_gtp_send_modify_bearer_request(
|
||||
mme_bearer_t *bearer, int uli_present);
|
||||
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(
|
||||
|
|
|
@ -161,7 +161,7 @@ status_t mme_s11_build_create_session_request(
|
|||
}
|
||||
|
||||
status_t mme_s11_build_modify_bearer_request(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, mme_bearer_t *bearer)
|
||||
pkbuf_t **pkbuf, c_uint8_t type, mme_bearer_t *bearer, int uli_present)
|
||||
{
|
||||
status_t rv;
|
||||
gtp_message_t gtp_message;
|
||||
|
@ -195,8 +195,7 @@ 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 (mme_ue->modify_bearer.type == MODIFY_BEARER_BY_EPS_UPDATE ||
|
||||
mme_ue->modify_bearer.type == MODIFY_BEARER_BY_PATH_SWITCH_REQUEST)
|
||||
if (uli_present)
|
||||
{
|
||||
memset(&uli, 0, sizeof(gtp_uli_t));
|
||||
uli.flags.e_cgi = 1;
|
||||
|
@ -216,8 +215,6 @@ status_t mme_s11_build_modify_bearer_request(
|
|||
rv = gtp_build_msg(pkbuf, >p_message);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp build failed");
|
||||
|
||||
mme_ue->modify_bearer.counter.request++;
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ 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, mme_bearer_t *bearer);
|
||||
pkbuf_t **pkbuf, c_uint8_t type, mme_bearer_t *bearer, int uli_present);
|
||||
CORE_DECLARE(status_t) mme_s11_build_delete_session_request(
|
||||
pkbuf_t **pkbuf, c_uint8_t type, mme_sess_t *sess);
|
||||
CORE_DECLARE(status_t) mme_s11_build_create_bearer_response(
|
||||
|
|
|
@ -120,16 +120,10 @@ void mme_s11_handle_modify_bearer_response(
|
|||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
|
||||
mme_ue->modify_bearer.counter.response++;
|
||||
|
||||
if (MODIFY_BEARER_TRANSACTION_END(mme_ue))
|
||||
{
|
||||
if (mme_ue->modify_bearer.type == MODIFY_BEARER_BY_PATH_SWITCH_REQUEST)
|
||||
{
|
||||
rv = s1ap_send_path_switch_ack(mme_ue);
|
||||
d_assert(rv == CORE_OK, return, "s1ap send error");
|
||||
}
|
||||
}
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH,
|
||||
rv = s1ap_send_path_switch_ack(mme_ue);
|
||||
d_assert(rv == CORE_OK, return, "s1ap send error");
|
||||
);
|
||||
}
|
||||
|
||||
void mme_s11_handle_delete_session_response(
|
||||
|
|
|
@ -272,15 +272,6 @@ void s1ap_handle_initial_context_setup_response(
|
|||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb->enb_id);
|
||||
|
||||
if (mme_ue->nas_eps.type == MME_UE_EPS_ATTACH_TYPE)
|
||||
{
|
||||
MODIFY_BEARER_TRANSACTION_BEGIN(mme_ue, MODIFY_BEARER_BY_EPS_ATTACH);
|
||||
}
|
||||
else if (mme_ue->nas_eps.type == MME_UE_EPS_UPDATE_TYPE)
|
||||
{
|
||||
MODIFY_BEARER_TRANSACTION_BEGIN(mme_ue, MODIFY_BEARER_BY_EPS_UPDATE);
|
||||
}
|
||||
|
||||
for (i = 0; i < ies->e_RABSetupListCtxtSURes.
|
||||
s1ap_E_RABSetupItemCtxtSURes.count; i++)
|
||||
{
|
||||
|
@ -305,7 +296,8 @@ void s1ap_handle_initial_context_setup_response(
|
|||
if (FSM_CHECK(&bearer->sm, esm_state_active))
|
||||
{
|
||||
status_t rv;
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer);
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer,
|
||||
mme_ue->nas_eps.type != MME_UE_EPS_ATTACH_TYPE ? 1 : 0);
|
||||
d_assert(rv == CORE_OK, return, "gtp send failed");
|
||||
}
|
||||
}
|
||||
|
@ -338,8 +330,6 @@ void s1ap_handle_e_rab_setup_response(
|
|||
INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
enb->enb_id);
|
||||
|
||||
MODIFY_BEARER_TRANSACTION_BEGIN(mme_ue, MODIFY_BEARER_BY_E_RAB_SETUP);
|
||||
|
||||
for (i = 0; i < ies->e_RABSetupListBearerSURes.
|
||||
s1ap_E_RABSetupItemBearerSURes.count; i++)
|
||||
{
|
||||
|
@ -368,7 +358,7 @@ void s1ap_handle_e_rab_setup_response(
|
|||
|
||||
if (bearer->ebi == linked_bearer->ebi)
|
||||
{
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer);
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer, 0);
|
||||
d_assert(rv == CORE_OK, return, "gtp send failed");
|
||||
}
|
||||
else
|
||||
|
@ -621,9 +611,6 @@ void s1ap_handle_path_switch_request(
|
|||
mme_ue->ue_network_capability.eia = eia >> 9;
|
||||
mme_ue->ue_network_capability.eia0 = 0;
|
||||
|
||||
MODIFY_BEARER_TRANSACTION_BEGIN(mme_ue,
|
||||
MODIFY_BEARER_BY_PATH_SWITCH_REQUEST);
|
||||
|
||||
for (i = 0; i < ies->e_RABToBeSwitchedDLList.
|
||||
s1ap_E_RABToBeSwitchedDLItem.count; i++)
|
||||
{
|
||||
|
@ -645,7 +632,10 @@ void s1ap_handle_path_switch_request(
|
|||
memcpy(&bearer->enb_s1u_addr, e_rab->transportLayerAddress.buf,
|
||||
sizeof(bearer->enb_s1u_addr));
|
||||
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer);
|
||||
GTP_COUNTER_INCREMENT(
|
||||
mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH);
|
||||
|
||||
rv = mme_gtp_send_modify_bearer_request(bearer, 1);
|
||||
d_assert(rv == CORE_OK, return, "gtp send failed");
|
||||
}
|
||||
|
||||
|
|
|
@ -601,7 +601,7 @@ abts_suite *test_handover(abts_suite *suite)
|
|||
{
|
||||
suite = ADD_SUITE(suite)
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
abts_run_test(suite, handover_test1, NULL);
|
||||
#else
|
||||
abts_run_test(suite, handover_test2, NULL);
|
||||
|
|
Loading…
Reference in New Issue