forked from acouzens/open5gs
update it
This commit is contained in:
parent
e4f52d6ba6
commit
f34e494deb
|
@ -224,8 +224,10 @@ out:
|
|||
|
||||
status_t gtp_xact_timeout(index_t index)
|
||||
{
|
||||
gtp_xact_t *xact = index_find(>p_xact_pool, index);
|
||||
|
||||
gtp_xact_t *xact = NULL;
|
||||
|
||||
d_assert(index, goto out, "Invalid Index");
|
||||
xact = index_find(>p_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
10
main.c
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue