update it

This commit is contained in:
Sukchan Lee 2017-04-10 23:59:59 +09:00
parent e4f52d6ba6
commit f34e494deb
12 changed files with 73 additions and 55 deletions

View File

@ -224,8 +224,10 @@ out:
status_t gtp_xact_timeout(index_t index)
{
gtp_xact_t *xact = index_find(&gtp_xact_pool, index);
gtp_xact_t *xact = NULL;
d_assert(index, goto out, "Invalid Index");
xact = index_find(&gtp_xact_pool, index);
d_assert(xact, goto out, "Null param");
d_assert(xact->sock, goto out, "Null param");
d_assert(xact->gnode, goto out, "Null param");

10
main.c
View File

@ -123,10 +123,12 @@ int main(int argc, char *argv[])
#if 0
extern int _mme_sm;
d_trace_level(&_mme_sm, 100);
extern int _enb_s1_sm;
d_trace_level(&_enb_s1_sm, 100);
extern int _ue_emm_sm;
d_trace_level(&_ue_emm_sm, 100);
extern int _s1ap_sm;
d_trace_level(&_s1ap_sm, 100);
extern int _emm_sm;
d_trace_level(&_emm_sm, 100);
extern int _esm_sm;
d_trace_level(&_esm_sm, 100);
extern int _s1ap_recv;
d_trace_level(&_s1ap_recv, 100);

View File

@ -29,9 +29,6 @@ void emm_state_operational(emm_sm_t *s, event_t *e)
d_assert(s, return, "Null param");
d_assert(e, return, "Null param");
mme_ue_t *ue = s->ctx;
d_assert(ue, return, "Null param");
mme_sm_trace(1, e);
switch (event_get(e))
@ -46,7 +43,13 @@ void emm_state_operational(emm_sm_t *s, event_t *e)
}
case EVT_MSG_MME_EMM:
{
nas_message_t *message = (nas_message_t *)event_get_param3(e);
mme_ue_t *ue = NULL;
nas_message_t *message = NULL;
ue = mme_ue_find(event_get_param1(e));
d_assert(ue, return, "Null param");
message = (nas_message_t *)event_get_param3(e);
d_assert(message, break, "Null param");
switch(message->emm.h.message_type)

View File

@ -28,13 +28,6 @@ void esm_state_operational(esm_sm_t *s, event_t *e)
d_assert(s, return, "Null param");
d_assert(e, return, "Null param");
mme_esm_t *esm = s->ctx;
mme_ue_t *ue = NULL;
d_assert(esm, return, "Null param");
ue = esm->ue;
d_assert(ue, return, "Null param");
mme_sm_trace(1, e);
switch (event_get(e))
@ -49,7 +42,15 @@ void esm_state_operational(esm_sm_t *s, event_t *e)
}
case EVT_MSG_MME_ESM:
{
nas_message_t *message = (nas_message_t *)event_get_param3(e);
mme_esm_t *esm = NULL;
mme_ue_t *ue = NULL;
nas_message_t *message = NULL;
esm = mme_esm_find(event_get_param1(e));
d_assert(esm, return, "Null param");
ue = esm->ue;
d_assert(ue, return, "Null param");
message = (nas_message_t *)event_get_param3(e);
d_assert(message, break, "Null param");
switch(message->esm.h.message_type)

View File

@ -19,10 +19,11 @@
static mme_context_t self;
pool_declare(mme_sgw_pool, mme_sgw_t, MAX_NUM_OF_SGW);
pool_declare(mme_enb_pool, mme_enb_t, MAX_NUM_OF_ENB);
pool_declare(mme_pdn_pool, pdn_t, MAX_NUM_OF_PDN);
pool_declare(mme_ue_pool, mme_ue_t, MAX_NUM_OF_UE);
pool_declare(mme_esm_pool, mme_esm_t, MAX_NUM_OF_ESM);
pool_declare(mme_enb_pool, mme_enb_t, MAX_NUM_OF_ENB);
index_declare(mme_ue_pool, mme_ue_t, MAX_NUM_OF_UE);
index_declare(mme_esm_pool, mme_esm_t, MAX_NUM_OF_ESM);
static int context_initialized = 0;
@ -35,10 +36,11 @@ status_t mme_context_init()
memset(&self, 0, sizeof(mme_context_t));
pool_init(&mme_sgw_pool, MAX_NUM_OF_SGW);
pool_init(&mme_enb_pool, MAX_NUM_OF_ENB);
pool_init(&mme_pdn_pool, MAX_NUM_OF_PDN);
pool_init(&mme_ue_pool, MAX_NUM_OF_UE);
pool_init(&mme_esm_pool, MAX_NUM_OF_ESM);
pool_init(&mme_enb_pool, MAX_NUM_OF_ENB);
index_init(&mme_ue_pool, MAX_NUM_OF_UE);
index_init(&mme_esm_pool, MAX_NUM_OF_ESM);
list_init(&self.sgw_list);
list_init(&self.enb_list);
@ -93,11 +95,12 @@ status_t mme_context_final()
d_assert(self.mme_ue_s1ap_id_hash, , "Null param");
hash_destroy(self.mme_ue_s1ap_id_hash);
pool_final(&mme_sgw_pool);
index_final(&mme_ue_pool);
index_final(&mme_esm_pool);
pool_final(&mme_enb_pool);
pool_final(&mme_sgw_pool);
pool_final(&mme_pdn_pool);
pool_final(&mme_ue_pool);
pool_final(&mme_esm_pool);
context_initialized = 0;
@ -185,7 +188,6 @@ mme_enb_t* mme_enb_add(net_sock_t *s1ap_sock)
pool_alloc_node(&mme_enb_pool, &enb);
d_assert(enb, return NULL, "Null param");
memset(enb, 0, sizeof(mme_enb_t));
enb->s1ap_sock = s1ap_sock;
@ -353,11 +355,9 @@ mme_ue_t* mme_ue_add(mme_enb_t *enb)
d_assert(self.mme_ue_s1ap_id_hash, return NULL, "Null param");
d_assert(enb, return NULL, "Null param");
pool_alloc_node(&mme_ue_pool, &ue);
index_alloc(&mme_ue_pool, &ue);
d_assert(ue, return NULL, "Null param");
memset(ue, 0, sizeof(mme_ue_t));
ue->mme_ue_s1ap_id = NEXT_ID(self.mme_ue_s1ap_id, 0xffffffff);
hash_set(self.mme_ue_s1ap_id_hash, &ue->mme_ue_s1ap_id,
sizeof(ue->mme_ue_s1ap_id), ue);
@ -389,7 +389,7 @@ status_t mme_ue_remove(mme_ue_t *ue)
hash_set(self.mme_ue_s1ap_id_hash, &ue->mme_ue_s1ap_id,
sizeof(ue->mme_ue_s1ap_id), NULL);
pool_free_node(&mme_ue_pool, ue);
index_free(&mme_ue_pool, ue);
return CORE_OK;
}
@ -408,6 +408,12 @@ status_t mme_ue_remove_all()
return CORE_OK;
}
mme_ue_t* mme_ue_find(index_t index)
{
d_assert(index, return NULL, "Invalid Index");
return index_find(&mme_ue_pool, index);
}
mme_ue_t* mme_ue_find_by_mme_ue_s1ap_id(c_uint32_t mme_ue_s1ap_id)
{
d_assert(self.mme_ue_s1ap_id_hash, return NULL, "Null param");
@ -488,11 +494,9 @@ mme_esm_t* mme_esm_add(mme_ue_t *ue, c_uint8_t pti)
d_assert(ue, return NULL, "Null param");
pool_alloc_node(&mme_esm_pool, &esm);
index_alloc(&mme_esm_pool, &esm);
d_assert(esm, return NULL, "Null param");
memset(esm, 0, sizeof(mme_esm_t));
esm->pti = pti;
esm->ue = ue;
@ -500,7 +504,6 @@ mme_esm_t* mme_esm_add(mme_ue_t *ue, c_uint8_t pti)
fsm_create((fsm_t*)&esm->sm,
esm_state_initial, esm_state_final);
esm->sm.ctx = esm;
fsm_init((fsm_t*)&esm->sm, 0);
return esm;
@ -515,7 +518,7 @@ status_t mme_esm_remove(mme_esm_t *esm)
fsm_clear((fsm_t*)&esm->sm);
list_remove(&esm->ue->esm_list, esm);
pool_free_node(&mme_esm_pool, esm);
index_free(&mme_esm_pool, esm);
return CORE_OK;
}
@ -539,6 +542,12 @@ status_t mme_esm_remove_all(mme_ue_t *ue)
return CORE_OK;
}
mme_esm_t* mme_esm_find(index_t index)
{
d_assert(index, return NULL, "Invalid Index");
return index_find(&mme_esm_pool, index);
}
mme_esm_t* mme_esm_find_by_pti(mme_ue_t *ue, c_uint8_t pti)
{
mme_esm_t *esm = NULL;

View File

@ -2,6 +2,7 @@
#define __MME_CONTEXT__
#include "core_list.h"
#include "core_index.h"
#include "core_errno.h"
#include "core_net.h"
#include "core_sha2.h"
@ -82,6 +83,7 @@ typedef struct _mme_sgw_t {
typedef struct _mme_enb_t {
lnode_t node; /**< A node of list_t */
index_t index;
c_uint32_t enb_id; /** eNB_ID received from eNB */
@ -94,6 +96,7 @@ typedef struct _mme_enb_t {
typedef struct _mme_ue_t {
lnode_t node; /**< A node of list_t */
index_t index;
/* State Machine */
emm_sm_t emm_sm;
@ -149,6 +152,7 @@ typedef struct _mme_ue_t {
typedef struct _mme_esm_t {
lnode_t node; /**< A node of list_t */
index_t index;
c_uint8_t pti; /** Procedure Trasaction Identity */
@ -186,6 +190,7 @@ CORE_DECLARE(pdn_t*) mme_pdn_next(pdn_t *pdn);
CORE_DECLARE(mme_ue_t*) mme_ue_add(mme_enb_t *enb);
CORE_DECLARE(status_t) mme_ue_remove(mme_ue_t *ue);
CORE_DECLARE(status_t) mme_ue_remove_all();
CORE_DECLARE(mme_ue_t*) mme_ue_find(index_t index);
CORE_DECLARE(mme_ue_t*) mme_ue_find_by_mme_ue_s1ap_id(
c_uint32_t mme_ue_s1ap_id);
CORE_DECLARE(hash_index_t *) mme_ue_first();
@ -201,6 +206,7 @@ CORE_DECLARE(mme_ue_t*) mme_ue_next_in_enb(mme_ue_t *ue);
CORE_DECLARE(mme_esm_t*) mme_esm_add(mme_ue_t *ue, c_uint8_t pti);
CORE_DECLARE(status_t) mme_esm_remove(mme_esm_t *esm);
CORE_DECLARE(status_t) mme_esm_remove_all(mme_ue_t *ue);
CORE_DECLARE(mme_esm_t*) mme_esm_find(index_t index);
CORE_DECLARE(mme_esm_t*) mme_esm_find_by_pti(mme_ue_t *ue, c_uint8_t pti);
CORE_DECLARE(mme_esm_t*) mme_esm_first(mme_ue_t *ue);
CORE_DECLARE(mme_esm_t*) mme_esm_next(mme_esm_t *esm);

View File

@ -68,7 +68,7 @@ void mme_event_s1ap_to_emm(mme_ue_t *ue, S1ap_NAS_PDU_t *nasPdu)
memcpy(sendbuf->payload, nasPdu->buf, nasPdu->size);
event_set(&e, EVT_MSG_MME_EMM);
event_set_param1(&e, (c_uintptr_t)ue);
event_set_param1(&e, (c_uintptr_t)ue->index);
event_set_param2(&e, (c_uintptr_t)sendbuf);
mme_event_send(&e);
}
@ -90,7 +90,7 @@ void mme_event_emm_to_esm(mme_esm_t *esm,
esm_message_container->data, esm_message_container->len);
event_set(&e, EVT_MSG_MME_ESM);
event_set_param1(&e, (c_uintptr_t)esm);
event_set_param1(&e, (c_uintptr_t)esm->index);
event_set_param2(&e, (c_uintptr_t)sendbuf);
mme_event_send(&e);
}

View File

@ -109,7 +109,7 @@ static void mme_s6a_aia_cb(void *data, struct msg **msg)
error++; goto out,);
event_set(&e, EVT_MSG_MME_EMM);
event_set_param1(&e, (c_uintptr_t)ue);
event_set_param1(&e, (c_uintptr_t)ue->index);
event_set_param2(&e, (c_uintptr_t)sendbuf);
if (mme_event_send(&e) != CORE_OK)
{

View File

@ -150,10 +150,12 @@ void mme_state_operational(mme_sm_t *s, event_t *e)
case EVT_MSG_MME_EMM:
{
nas_message_t message;
mme_ue_t *ue = (mme_ue_t *)event_get_param1(e);
index_t index = event_get_param1(e);
mme_ue_t *ue = NULL;
pkbuf_t *pkbuf = (pkbuf_t *)event_get_param2(e);
d_assert(pkbuf, break, "Null param");
ue = mme_ue_find(index);
d_assert(ue, pkbuf_free(pkbuf); break, "No UE context");
d_assert(FSM_STATE(&ue->emm_sm),
pkbuf_free(pkbuf); break, "No EMM State Machine");
@ -170,11 +172,14 @@ void mme_state_operational(mme_sm_t *s, event_t *e)
case EVT_MSG_MME_ESM:
{
nas_message_t message;
mme_esm_t *esm = (mme_esm_t *)event_get_param1(e);
index_t index = event_get_param1(e);
mme_esm_t *esm = NULL;
mme_ue_t *ue = NULL;
pkbuf_t *pkbuf = (pkbuf_t *)event_get_param2(e);
d_assert(pkbuf, break, "Null param");
d_assert(index, break, "Null param");
esm = mme_esm_find(index);
d_assert(esm, pkbuf_free(pkbuf); break, "No ESM context");
d_assert(ue = esm->ue, pkbuf_free(pkbuf); break, "No UE context");
d_assert(FSM_STATE(&esm->sm),
@ -224,10 +229,7 @@ void mme_state_operational(mme_sm_t *s, event_t *e)
}
case EVT_TM_MME_S11_T3:
{
index_t index = (index_t)event_get_param1(e);
d_assert(index, break, "Null param");
gtp_xact_timeout(index);
gtp_xact_timeout(event_get_param1(e));
break;
}
default:

View File

@ -40,7 +40,6 @@ void emm_state_exception(emm_sm_t *s, event_t *e);
typedef struct _esm_sm_t {
fsm_t fsm;
void *ctx;
} esm_sm_t;
void esm_state_initial(esm_sm_t *s, event_t *e);

View File

@ -89,10 +89,7 @@ void pgw_state_operational(pgw_sm_t *s, event_t *e)
}
case EVT_TM_PGW_T3:
{
index_t index = (index_t)event_get_param1(e);
d_assert(index, break, "Null param");
gtp_xact_timeout(index);
gtp_xact_timeout(event_get_param1(e));
break;
}
default:

View File

@ -95,10 +95,7 @@ void sgw_state_operational(sgw_sm_t *s, event_t *e)
}
case EVT_TM_SGW_T3:
{
index_t index = (index_t)event_get_param1(e);
d_assert(index, break, "Null param");
gtp_xact_timeout(index);
gtp_xact_timeout(event_get_param1(e));
break;
}
default: