Merge branch 'master' of https://github.com/acetcom/cellwire
This commit is contained in:
commit
c760efded6
|
@ -52,7 +52,9 @@ status_t hss_context_final(void)
|
|||
static status_t hss_context_prepare()
|
||||
{
|
||||
self.mme_s6a_port = DIAMETER_PORT;
|
||||
self.mme_s6a_tls_port = DIAMETER_SECURE_PORT;
|
||||
self.hss_s6a_port = DIAMETER_PORT;
|
||||
self.hss_s6a_tls_port = DIAMETER_SECURE_PORT;
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
@ -181,6 +183,11 @@ status_t hss_context_parse_config()
|
|||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (v) self.hss_s6a_port = atoi(v);
|
||||
}
|
||||
else if (jsmntok_equal(json, t+m, "S6A_TLS_PORT") == 0)
|
||||
{
|
||||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (v) self.hss_s6a_tls_port = atoi(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -228,6 +235,11 @@ status_t hss_context_parse_config()
|
|||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (v) self.mme_s6a_port = atoi(v);
|
||||
}
|
||||
else if (jsmntok_equal(json, t+m, "S6A_TLS_PORT") == 0)
|
||||
{
|
||||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (v) self.mme_s6a_tls_port = atoi(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,8 +50,10 @@ typedef struct _hss_context_t {
|
|||
char* s6a_config_path; /* HSS S6A Configuration File Path */
|
||||
char* hss_s6a_addr; /* HSS S6A local address (STIRNG)*/
|
||||
c_uint16_t hss_s6a_port; /* HSS S6A local port */
|
||||
char* mme_s6a_addr; /* HSS S6A local address (STIRNG)*/
|
||||
c_uint16_t mme_s6a_port; /* HSS S6A local port */
|
||||
c_uint16_t hss_s6a_tls_port; /* HSS S6A local TLS port */
|
||||
char* mme_s6a_addr; /* MME S6A address (STIRNG)*/
|
||||
c_uint16_t mme_s6a_port; /* MME S6A port */
|
||||
c_uint16_t mme_s6a_tls_port; /* MME S6A TLS port */
|
||||
|
||||
void *subscriberCollection;
|
||||
mutex_id db_lock;
|
||||
|
|
|
@ -498,6 +498,7 @@ status_t hss_s6a_init(void)
|
|||
s6a_config->cnf_diamrlm = S6A_REALM;
|
||||
s6a_config->cnf_addr = hss_self()->hss_s6a_addr;
|
||||
s6a_config->cnf_port = hss_self()->hss_s6a_port;
|
||||
s6a_config->cnf_port_tls = hss_self()->hss_s6a_tls_port;
|
||||
|
||||
s6a_config->pi_diamid = MME_IDENTITY;
|
||||
s6a_config->pi_addr = hss_self()->mme_s6a_addr;
|
||||
|
|
|
@ -128,7 +128,35 @@ void emm_handle_attach_request(
|
|||
|
||||
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
|
||||
{
|
||||
|
@ -168,7 +196,36 @@ void emm_handle_attach_request(
|
|||
/* Known GUTI */
|
||||
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
|
||||
{
|
||||
|
@ -404,6 +461,7 @@ void emm_handle_authentication_response(mme_ue_t *mme_ue,
|
|||
mme_ue->kasme, mme_ue->knas_enc);
|
||||
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32, mme_ue->kenb);
|
||||
|
||||
|
||||
d_info("[NAS] Security mode command : UE[%s] <-- EMM",
|
||||
mme_ue->imsi_bcd);
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "emm_handler.h"
|
||||
#include "emm_build.h"
|
||||
#include "mme_s6a_handler.h"
|
||||
#include "mme_kdf.h"
|
||||
|
||||
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",
|
||||
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);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -105,7 +105,9 @@ static status_t mme_context_prepare()
|
|||
self.relative_capacity = 0xff;
|
||||
|
||||
self.mme_s6a_port = DIAMETER_PORT;
|
||||
self.mme_s6a_tls_port = DIAMETER_SECURE_PORT;
|
||||
self.hss_s6a_port = DIAMETER_PORT;
|
||||
self.hss_s6a_tls_port = DIAMETER_SECURE_PORT;
|
||||
self.s1ap_port = S1AP_SCTP_PORT;
|
||||
self.s11_port = GTPV2_C_UDP_PORT;
|
||||
|
||||
|
@ -316,6 +318,12 @@ status_t mme_context_parse_config()
|
|||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (v) self.hss_s6a_port = atoi(v);
|
||||
}
|
||||
else if (jsmntok_equal(json, t+m, "S6A_TLS_PORT")
|
||||
== 0)
|
||||
{
|
||||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (v) self.hss_s6a_tls_port = atoi(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -372,6 +380,11 @@ status_t mme_context_parse_config()
|
|||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (v) self.mme_s6a_port = atoi(v);
|
||||
}
|
||||
else if (jsmntok_equal(json, t+m, "S6A_TLS_PORT") == 0)
|
||||
{
|
||||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
if (v) self.mme_s6a_tls_port = atoi(v);
|
||||
}
|
||||
else if (jsmntok_equal(json, t+m, "S1AP_ADDR") == 0)
|
||||
{
|
||||
char *v = jsmntok_to_string(json, t+m+1);
|
||||
|
|
|
@ -43,8 +43,10 @@ typedef struct _mme_context_t {
|
|||
char* s6a_config_path; /* MME S6A Configuration File Path */
|
||||
char* mme_s6a_addr; /* MME S6A local address (STIRNG)*/
|
||||
c_uint16_t mme_s6a_port; /* MME S6A local port */
|
||||
char* hss_s6a_addr; /* HSS S6A local address (STIRNG)*/
|
||||
c_uint16_t hss_s6a_port; /* HSS S6A local port */
|
||||
c_uint16_t mme_s6a_tls_port; /* MME S6A local TLS port */
|
||||
char* hss_s6a_addr; /* HSS S6A address (STIRNG)*/
|
||||
c_uint16_t hss_s6a_port; /* HSS S6A port */
|
||||
c_uint16_t hss_s6a_tls_port; /* HSS S6A TLS port */
|
||||
|
||||
c_uint32_t s1ap_addr; /* MME S1AP local address */
|
||||
c_uint16_t s1ap_port; /* MME S1AP local port */
|
||||
|
|
|
@ -583,6 +583,7 @@ status_t mme_s6a_init(void)
|
|||
s6a_config->cnf_diamrlm = S6A_REALM;
|
||||
s6a_config->cnf_addr = mme_self()->mme_s6a_addr;
|
||||
s6a_config->cnf_port = mme_self()->mme_s6a_port;
|
||||
s6a_config->cnf_port_tls = mme_self()->mme_s6a_tls_port;
|
||||
|
||||
s6a_config->pi_diamid = HSS_IDENTITY;
|
||||
s6a_config->pi_addr = mme_self()->hss_s6a_addr;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include "nas_message.h"
|
||||
#include "nas_security.h"
|
||||
#include "mme_kdf.h"
|
||||
|
||||
status_t nas_security_encode(
|
||||
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;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
NETWORK :
|
||||
{
|
||||
S6A_ADDR : "10.1.35.214"
|
||||
S6A_PORT : 30868,
|
||||
S6A_TLS_PORT : 30869
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue