Use GTP-U Buffering instead of Deletion[#592,#568]

This commit is contained in:
Sukchan Lee 2020-10-07 21:21:48 -04:00
parent 0eb68eefe2
commit d64db21050
12 changed files with 39 additions and 20 deletions

View File

@ -296,6 +296,7 @@ void nas_5gs_send_configuration_update_command(
amf_timer_cfg(AMF_TIMER_T3555)->duration);
} else {
ogs_expect_or_return(param);
gmmbuf = gmm_build_configuration_update_command(amf_ue, param);
ogs_expect_or_return(gmmbuf);

View File

@ -183,15 +183,13 @@ ogs_pkbuf_t *emm_build_identity_request(mme_ue_t *mme_ue)
return ogs_nas_eps_plain_encode(&message);
}
ogs_pkbuf_t *emm_build_authentication_request(mme_ue_t *mme_ue,
ogs_diam_e_utran_vector_t *e_utran_vector)
ogs_pkbuf_t *emm_build_authentication_request(mme_ue_t *mme_ue)
{
ogs_nas_eps_message_t message;
ogs_nas_eps_authentication_request_t *authentication_request =
&message.emm.authentication_request;
ogs_assert(mme_ue);
ogs_assert(e_utran_vector);
memset(&message, 0, sizeof(message));
message.emm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
@ -201,9 +199,9 @@ ogs_pkbuf_t *emm_build_authentication_request(mme_ue_t *mme_ue,
authentication_request->nas_key_set_identifierasme.value =
mme_ue->nas_eps.ksi;
memcpy(authentication_request->authentication_parameter_rand.rand,
e_utran_vector->rand, OGS_RAND_LEN);
mme_ue->rand, OGS_RAND_LEN);
memcpy(authentication_request->authentication_parameter_autn.autn,
e_utran_vector->autn, OGS_AUTN_LEN);
mme_ue->autn, OGS_AUTN_LEN);
authentication_request->authentication_parameter_autn.length =
OGS_AUTN_LEN;

View File

@ -34,8 +34,7 @@ ogs_pkbuf_t *emm_build_attach_reject(
ogs_pkbuf_t *emm_build_identity_request(mme_ue_t *mme_ue);
ogs_pkbuf_t *emm_build_security_mode_command(mme_ue_t *mme_ue);
ogs_pkbuf_t *emm_build_authentication_request(mme_ue_t *mme_ue,
ogs_diam_e_utran_vector_t *e_utran_vector);
ogs_pkbuf_t *emm_build_authentication_request(mme_ue_t *mme_ue);
ogs_pkbuf_t *emm_build_authentication_reject(void);
ogs_pkbuf_t *emm_build_detach_accept(mme_ue_t *mme_ue);

View File

@ -641,7 +641,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
nas_eps_send_authentication_reject(mme_ue);
} else {
mme_ue->t3460.retry_count++;
nas_eps_send_authentication_request(mme_ue, NULL);
nas_eps_send_authentication_request(mme_ue);
}
break;
default:

View File

@ -355,6 +355,7 @@ struct mme_ue_s {
uint8_t xres_len;
uint8_t kasme[OGS_SHA256_DIGEST_SIZE];
uint8_t rand[OGS_RAND_LEN];
uint8_t autn[OGS_AUTN_LEN];
uint8_t knas_int[OGS_SHA256_DIGEST_SIZE/2];
uint8_t knas_enc[OGS_SHA256_DIGEST_SIZE/2];
uint32_t dl_count;

View File

@ -253,7 +253,8 @@ static void mme_s6a_aia_cb(void *data, struct msg **msg)
ret = fd_msg_search_avp(*msg, ogs_diam_experimental_result, &avp);
ogs_assert(ret == 0);
if (avp) {
ret = fd_avp_search_avp(avp, ogs_diam_experimental_result_code, &avpch);
ret = fd_avp_search_avp(
avp, ogs_diam_experimental_result_code, &avpch);
ogs_assert(ret == 0);
if (avpch) {
ret = fd_msg_avp_hdr(avpch, &hdr);
@ -319,7 +320,8 @@ static void mme_s6a_aia_cb(void *data, struct msg **msg)
error++;
}
ret = fd_avp_search_avp(avp, ogs_diam_s6a_e_utran_vector, &avp_e_utran_vector);
ret = fd_avp_search_avp(
avp, ogs_diam_s6a_e_utran_vector, &avp_e_utran_vector);
ogs_assert(ret == 0);
if (avp) {
ret = fd_msg_avp_hdr(avp_e_utran_vector, &hdr);

View File

@ -51,14 +51,14 @@ void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue)
}
}
#if 0
#if 1
void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue)
{
mme_ue_t *mme_ue = NULL;
ogs_assert(enb_ue);
mme_ue = enb_ue->mme_ue;
if (mme_ue && BEARER_CONTEXT_IS_ACTIVE(mme_ue)) {
if (mme_ue) {
ogs_debug("[%s] Release access bearer request", mme_ue->imsi_bcd);
mme_gtp_send_release_access_bearers_request(mme_ue);
} else {

View File

@ -28,7 +28,6 @@ extern "C" {
void mme_send_delete_session_or_detach(mme_ue_t *mme_ue);
void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue);
void mme_send_delete_session_or_enb_ue_context_release(enb_ue_t *enb_ue);
void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue);
#ifdef __cplusplus

View File

@ -37,13 +37,14 @@ void mme_s6a_handle_aia(mme_ue_t *mme_ue,
memcpy(mme_ue->xres, e_utran_vector->xres, mme_ue->xres_len);
memcpy(mme_ue->kasme, e_utran_vector->kasme, OGS_SHA256_DIGEST_SIZE);
memcpy(mme_ue->rand, e_utran_vector->rand, OGS_RAND_LEN);
memcpy(mme_ue->autn, e_utran_vector->autn, OGS_AUTN_LEN);
CLEAR_MME_UE_TIMER(mme_ue->t3460);
if (mme_ue->nas_eps.ksi == OGS_NAS_KSI_NO_KEY_IS_AVAILABLE)
mme_ue->nas_eps.ksi = 0;
nas_eps_send_authentication_request(mme_ue, e_utran_vector);
nas_eps_send_authentication_request(mme_ue);
}
void mme_s6a_handle_ula(mme_ue_t *mme_ue,

View File

@ -166,6 +166,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
addr = e->addr;
ogs_assert(addr);
ogs_assert(addr->ogs_sa_family == AF_INET ||
addr->ogs_sa_family == AF_INET6);
ogs_info("eNB-S1 accepted[%s] in master_sm module",
OGS_ADDR(addr, buf));
@ -189,6 +192,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
addr = e->addr;
ogs_assert(addr);
ogs_assert(addr->ogs_sa_family == AF_INET ||
addr->ogs_sa_family == AF_INET6);
max_num_of_ostreams = e->max_num_of_ostreams;
enb = mme_enb_find_by_addr(addr);
@ -213,6 +219,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
addr = e->addr;
ogs_assert(addr);
ogs_assert(addr->ogs_sa_family == AF_INET ||
addr->ogs_sa_family == AF_INET6);
enb = mme_enb_find_by_addr(addr);
if (enb) {
ogs_info("eNB-S1[%s] connection refused!!!", OGS_ADDR(addr, buf));
@ -232,6 +241,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
pkbuf = e->pkbuf;
ogs_assert(pkbuf);
ogs_assert(addr->ogs_sa_family == AF_INET ||
addr->ogs_sa_family == AF_INET6);
enb = mme_enb_find_by_addr(addr);
ogs_free(addr);
@ -644,6 +656,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
addr = e->addr;
ogs_assert(addr);
ogs_assert(addr->ogs_sa_family == AF_INET ||
addr->ogs_sa_family == AF_INET6);
max_num_of_ostreams = e->max_num_of_ostreams;
vlr = mme_vlr_find_by_addr(addr);
@ -668,6 +683,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
addr = e->addr;
ogs_assert(addr);
ogs_assert(addr->ogs_sa_family == AF_INET ||
addr->ogs_sa_family == AF_INET6);
vlr = mme_vlr_find_by_addr(addr);
ogs_free(addr);
@ -695,6 +713,9 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
pkbuf = e->pkbuf;
ogs_assert(pkbuf);
ogs_assert(addr->ogs_sa_family == AF_INET ||
addr->ogs_sa_family == AF_INET6);
vlr = mme_vlr_find_by_addr(addr);
ogs_free(addr);

View File

@ -172,8 +172,7 @@ void nas_eps_send_identity_request(mme_ue_t *mme_ue)
ogs_expect(rv == OGS_OK);
}
void nas_eps_send_authentication_request(
mme_ue_t *mme_ue, ogs_diam_e_utran_vector_t *e_utran_vector)
void nas_eps_send_authentication_request(mme_ue_t *mme_ue)
{
int rv;
ogs_pkbuf_t *emmbuf = NULL;
@ -187,8 +186,7 @@ void nas_eps_send_authentication_request(
emmbuf = mme_ue->t3460.pkbuf;
ogs_expect_or_return(emmbuf);
} else {
ogs_assert(e_utran_vector);
emmbuf = emm_build_authentication_request(mme_ue, e_utran_vector);
emmbuf = emm_build_authentication_request(mme_ue);
ogs_expect_or_return(emmbuf);
}

View File

@ -38,8 +38,7 @@ void nas_eps_send_attach_reject(mme_ue_t *mme_ue,
void nas_eps_send_identity_request(mme_ue_t *mme_ue);
void nas_eps_send_authentication_request(
mme_ue_t *mme_ue, ogs_diam_e_utran_vector_t *e_utran_vector);
void nas_eps_send_authentication_request(mme_ue_t *mme_ue);
void nas_eps_send_authentication_reject(mme_ue_t *mme_ue);
void nas_eps_send_security_mode_command(mme_ue_t *mme_ue);