forked from acouzens/open5gs
- Update Kenb when required(after NAS SMC and after Attach req if
security_ctx avilable) - attach & detach & attach : Passed - attach & idel & ServiceRequest : Passed
This commit is contained in:
parent
67003aef5a
commit
60166055f6
|
@ -128,7 +128,35 @@ void emm_handle_attach_request(
|
||||||
|
|
||||||
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
||||||
{
|
{
|
||||||
emm_handle_attach_accept(mme_ue);
|
/* Update Kenb */
|
||||||
|
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32, mme_ue->kenb);
|
||||||
|
|
||||||
|
/* FIXME :
|
||||||
|
* Need to refine the code to start from ESM_Info_req.
|
||||||
|
* Call esm_handle_s6a_update_location(bearer) here
|
||||||
|
* or send event ?
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
mme_sess_t *sess = mme_sess_first(mme_ue);
|
||||||
|
while(sess)
|
||||||
|
{
|
||||||
|
mme_bearer_t *bearer = mme_bearer_first(sess);
|
||||||
|
while(bearer)
|
||||||
|
{
|
||||||
|
event_t e;
|
||||||
|
event_set(&e, MME_EVT_ESM_BEARER_FROM_S6A);
|
||||||
|
event_set_param1(&e, (c_uintptr_t)bearer->index);
|
||||||
|
event_set_param2(&e,
|
||||||
|
(c_uintptr_t)S6A_CMD_UPDATE_LOCATION);
|
||||||
|
mme_event_send(&e);
|
||||||
|
|
||||||
|
bearer = mme_bearer_next(bearer);
|
||||||
|
}
|
||||||
|
|
||||||
|
sess = mme_sess_next(sess);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -168,7 +196,36 @@ void emm_handle_attach_request(
|
||||||
/* Known GUTI */
|
/* Known GUTI */
|
||||||
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
||||||
{
|
{
|
||||||
emm_handle_attach_accept(mme_ue);
|
/* Update Kenb */
|
||||||
|
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32,
|
||||||
|
mme_ue->kenb);
|
||||||
|
|
||||||
|
/* FIXME :
|
||||||
|
* Need to refine the code to start from ESM_Info_req.
|
||||||
|
* Call esm_handle_s6a_update_location(bearer) here
|
||||||
|
* or send event ?
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
|
||||||
|
mme_sess_t *sess = mme_sess_first(mme_ue);
|
||||||
|
while(sess)
|
||||||
|
{
|
||||||
|
mme_bearer_t *bearer = mme_bearer_first(sess);
|
||||||
|
while(bearer)
|
||||||
|
{
|
||||||
|
event_t e;
|
||||||
|
event_set(&e, MME_EVT_ESM_BEARER_FROM_S6A);
|
||||||
|
event_set_param1(&e, (c_uintptr_t)bearer->index);
|
||||||
|
event_set_param2(&e,
|
||||||
|
(c_uintptr_t)S6A_CMD_UPDATE_LOCATION);
|
||||||
|
mme_event_send(&e);
|
||||||
|
|
||||||
|
bearer = mme_bearer_next(bearer);
|
||||||
|
}
|
||||||
|
|
||||||
|
sess = mme_sess_next(sess);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -404,6 +461,7 @@ void emm_handle_authentication_response(mme_ue_t *mme_ue,
|
||||||
mme_ue->kasme, mme_ue->knas_enc);
|
mme_ue->kasme, mme_ue->knas_enc);
|
||||||
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32, mme_ue->kenb);
|
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32, mme_ue->kenb);
|
||||||
|
|
||||||
|
|
||||||
d_info("[NAS] Security mode command : UE[%s] <-- EMM",
|
d_info("[NAS] Security mode command : UE[%s] <-- EMM",
|
||||||
mme_ue->imsi_bcd);
|
mme_ue->imsi_bcd);
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "emm_handler.h"
|
#include "emm_handler.h"
|
||||||
#include "emm_build.h"
|
#include "emm_build.h"
|
||||||
#include "mme_s6a_handler.h"
|
#include "mme_s6a_handler.h"
|
||||||
|
#include "mme_kdf.h"
|
||||||
|
|
||||||
void emm_state_initial(fsm_t *s, event_t *e)
|
void emm_state_initial(fsm_t *s, event_t *e)
|
||||||
{
|
{
|
||||||
|
@ -161,6 +162,12 @@ void emm_state_operational(fsm_t *s, event_t *e)
|
||||||
{
|
{
|
||||||
d_info("[NAS] Security mode complete : UE[%s] --> EMM",
|
d_info("[NAS] Security mode complete : UE[%s] --> EMM",
|
||||||
mme_ue->imsi_bcd);
|
mme_ue->imsi_bcd);
|
||||||
|
|
||||||
|
/* Update Kenb */
|
||||||
|
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
||||||
|
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32,
|
||||||
|
mme_ue->kenb);
|
||||||
|
|
||||||
mme_s6a_send_ulr(mme_ue);
|
mme_s6a_send_ulr(mme_ue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "nas_message.h"
|
#include "nas_message.h"
|
||||||
#include "nas_security.h"
|
#include "nas_security.h"
|
||||||
|
#include "mme_kdf.h"
|
||||||
|
|
||||||
status_t nas_security_encode(
|
status_t nas_security_encode(
|
||||||
pkbuf_t **pkbuf, mme_ue_t *mme_ue, nas_message_t *message)
|
pkbuf_t **pkbuf, mme_ue_t *mme_ue, nas_message_t *message)
|
||||||
|
@ -154,6 +155,10 @@ status_t nas_security_decode(mme_ue_t *mme_ue,
|
||||||
mme_ue->mac_failed = 1;
|
mme_ue->mac_failed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Update Kenb */
|
||||||
|
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
||||||
|
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32, mme_ue->kenb);
|
||||||
|
|
||||||
return CORE_OK;
|
return CORE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue