forked from acouzens/open5gs
update it
This commit is contained in:
parent
63cfc93819
commit
0315c6d109
|
@ -21,97 +21,6 @@
|
|||
|
||||
#include "emm_handler.h"
|
||||
|
||||
mme_ue_t *emm_find_ue_by_message(enb_ue_t *enb_ue, nas_message_t *message)
|
||||
{
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
|
||||
d_assert(enb_ue, return NULL, "Null param");
|
||||
|
||||
switch(message->emm.h.message_type)
|
||||
{
|
||||
case NAS_ATTACH_REQUEST:
|
||||
{
|
||||
nas_attach_request_t *attach_request =
|
||||
&message->emm.attach_request;
|
||||
|
||||
nas_eps_mobile_identity_t *eps_mobile_identity =
|
||||
&attach_request->eps_mobile_identity;
|
||||
|
||||
switch(eps_mobile_identity->imsi.type)
|
||||
{
|
||||
case NAS_EPS_MOBILE_IDENTITY_IMSI:
|
||||
{
|
||||
c_int8_t imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_imsi_to_bcd(
|
||||
&eps_mobile_identity->imsi, eps_mobile_identity->length,
|
||||
imsi_bcd);
|
||||
|
||||
d_trace(3,"Search mme_ue by UE_IMSI[%s]\n", imsi_bcd);
|
||||
|
||||
mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
|
||||
|
||||
break;
|
||||
}
|
||||
case NAS_EPS_MOBILE_IDENTITY_GUTI:
|
||||
{
|
||||
nas_eps_mobile_identity_guti_t *nas_guti = NULL;
|
||||
nas_guti = &eps_mobile_identity->guti;
|
||||
guti_t guti;
|
||||
|
||||
guti.plmn_id = nas_guti->plmn_id;
|
||||
guti.mme_gid = nas_guti->mme_gid;
|
||||
guti.mme_code = nas_guti->mme_code;
|
||||
guti.m_tmsi = nas_guti->m_tmsi;
|
||||
|
||||
d_trace(3,"Search mme_ue by GUTI[G:%d,C:%d,M_TMSI:0x%x]\n",
|
||||
guti.mme_gid,
|
||||
guti.mme_code,
|
||||
guti.m_tmsi);
|
||||
|
||||
mme_ue = mme_ue_find_by_guti(&guti);
|
||||
if (!mme_ue)
|
||||
{
|
||||
d_warn("Cannot find mme_ue by "
|
||||
"GUTI[G:%d,C:%d,M_TMSI:0x%x]\n",
|
||||
guti.mme_gid,
|
||||
guti.mme_code,
|
||||
guti.m_tmsi);
|
||||
}
|
||||
else
|
||||
{
|
||||
mme_associate_ue_context(mme_ue, enb_ue);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("Uknown message imsi type =%d\n",
|
||||
eps_mobile_identity->imsi.type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NAS_DETACH_REQUEST:
|
||||
{
|
||||
/* TODO */
|
||||
break;
|
||||
}
|
||||
case NAS_TRACKING_AREA_UPDATE_REQUEST:
|
||||
{
|
||||
/* TODO */
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return mme_ue;
|
||||
}
|
||||
|
||||
static status_t emm_send_to_enb(enb_ue_t *enb_ue, pkbuf_t *pkbuf)
|
||||
{
|
||||
mme_enb_t *enb = NULL;
|
||||
|
@ -259,6 +168,8 @@ void emm_handle_attach_request(
|
|||
guti.mme_code = nas_guti->mme_code;
|
||||
guti.m_tmsi = nas_guti->m_tmsi;
|
||||
|
||||
mme_associate_ue_context(mme_ue, enb_ue);
|
||||
|
||||
d_info("[NAS] Attach request : GUTI[G:%d,C:%d,M_TMSI:0x%x]-"
|
||||
"IMSI:[%s] --> EMM",
|
||||
guti.mme_gid,
|
||||
|
|
|
@ -32,9 +32,6 @@ CORE_DECLARE(void) emm_handle_delete_session_response(mme_bearer_t *bearer);
|
|||
CORE_DECLARE(void) emm_handle_service_request(
|
||||
mme_ue_t *mme_ue, nas_service_request_t *service_request);
|
||||
|
||||
CORE_DECLARE(mme_ue_t*) emm_find_ue_by_message(
|
||||
enb_ue_t *enb_ue, nas_message_t *message);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "s1ap_message.h"
|
||||
|
||||
#include "context.h"
|
||||
#include "nas_conv.h"
|
||||
#include "mme_context.h"
|
||||
#include "mme_event.h"
|
||||
|
||||
|
@ -1065,6 +1066,103 @@ mme_ue_t *mme_ue_this(hash_index_t *hi)
|
|||
return hash_this_val(hi);
|
||||
}
|
||||
|
||||
mme_ue_t* mme_ue_find_by_message(nas_message_t *message)
|
||||
{
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
|
||||
switch(message->emm.h.message_type)
|
||||
{
|
||||
case NAS_ATTACH_REQUEST:
|
||||
{
|
||||
nas_attach_request_t *attach_request =
|
||||
&message->emm.attach_request;
|
||||
|
||||
nas_eps_mobile_identity_t *eps_mobile_identity =
|
||||
&attach_request->eps_mobile_identity;
|
||||
|
||||
switch(eps_mobile_identity->imsi.type)
|
||||
{
|
||||
case NAS_EPS_MOBILE_IDENTITY_IMSI:
|
||||
{
|
||||
c_int8_t imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_imsi_to_bcd(
|
||||
&eps_mobile_identity->imsi, eps_mobile_identity->length,
|
||||
imsi_bcd);
|
||||
|
||||
|
||||
mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
|
||||
if (mme_ue)
|
||||
{
|
||||
d_trace(3,"known UE by IMSI[%s]\n", imsi_bcd);
|
||||
}
|
||||
else
|
||||
{
|
||||
d_trace(3,"Unknown UE by IMSI[%s]\n", imsi_bcd);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NAS_EPS_MOBILE_IDENTITY_GUTI:
|
||||
{
|
||||
nas_eps_mobile_identity_guti_t *nas_guti = NULL;
|
||||
nas_guti = &eps_mobile_identity->guti;
|
||||
guti_t guti;
|
||||
|
||||
guti.plmn_id = nas_guti->plmn_id;
|
||||
guti.mme_gid = nas_guti->mme_gid;
|
||||
guti.mme_code = nas_guti->mme_code;
|
||||
guti.m_tmsi = nas_guti->m_tmsi;
|
||||
|
||||
d_trace(3,"Search mme_ue by GUTI[G:%d,C:%d,M_TMSI:0x%x]\n",
|
||||
guti.mme_gid,
|
||||
guti.mme_code,
|
||||
guti.m_tmsi);
|
||||
|
||||
mme_ue = mme_ue_find_by_guti(&guti);
|
||||
if (mme_ue)
|
||||
{
|
||||
d_warn("Known UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
guti.mme_gid,
|
||||
guti.mme_code,
|
||||
guti.m_tmsi);
|
||||
}
|
||||
else
|
||||
{
|
||||
d_warn("Unknown UE by GUTI[G:%d,C:%d,M_TMSI:0x%x]",
|
||||
guti.mme_gid,
|
||||
guti.mme_code,
|
||||
guti.m_tmsi);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
d_error("Uknown message imsi type =%d\n",
|
||||
eps_mobile_identity->imsi.type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NAS_DETACH_REQUEST:
|
||||
{
|
||||
/* TODO */
|
||||
break;
|
||||
}
|
||||
case NAS_TRACKING_AREA_UPDATE_REQUEST:
|
||||
{
|
||||
/* TODO */
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return mme_ue;
|
||||
}
|
||||
|
||||
/* At this point, I'm not sure whether this function is exported or not */
|
||||
static status_t mme_ue_new_guti(mme_ue_t *mme_ue)
|
||||
{
|
||||
|
|
|
@ -289,6 +289,7 @@ CORE_DECLARE(mme_ue_t*) mme_ue_find_by_imsi(c_uint8_t *imsi, int imsi_len);
|
|||
CORE_DECLARE(mme_ue_t*) mme_ue_find_by_imsi_bcd(c_int8_t *imsi_bcd);
|
||||
CORE_DECLARE(mme_ue_t*) mme_ue_find_by_guti(guti_t *guti);
|
||||
|
||||
CORE_DECLARE(mme_ue_t*) mme_ue_find_by_message(nas_message_t *message);
|
||||
CORE_DECLARE(status_t) mme_ue_set_imsi(
|
||||
mme_ue_t *mme_ue, c_int8_t *imsi_bcd);
|
||||
CORE_DECLARE(status_t) mme_associate_ue_context(
|
||||
|
|
|
@ -171,10 +171,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
mme_ue = enb_ue->mme_ue;
|
||||
if (!mme_ue)
|
||||
{
|
||||
/* Find MME UE by NAS message or create if needed */
|
||||
mme_ue = emm_find_ue_by_message(enb_ue, &message);
|
||||
|
||||
/* If not found , create one */
|
||||
mme_ue = mme_ue_find_by_message(&message);
|
||||
if (!mme_ue)
|
||||
{
|
||||
mme_ue = mme_ue_add(enb_ue);
|
||||
|
|
Loading…
Reference in New Issue