diff --git a/src/mme/emm_sm.c b/src/mme/emm_sm.c index 22506ba9a..597686950 100644 --- a/src/mme/emm_sm.c +++ b/src/mme/emm_sm.c @@ -8,7 +8,7 @@ #include "emm_handler.h" #include "mme_s6a_handler.h" -void emm_state_initial(emm_sm_t *s, event_t *e) +void emm_state_initial(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); @@ -17,14 +17,14 @@ void emm_state_initial(emm_sm_t *s, event_t *e) FSM_TRAN(s, &emm_state_operational); } -void emm_state_final(emm_sm_t *s, event_t *e) +void emm_state_final(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); mme_sm_trace(1, e); } -void emm_state_operational(emm_sm_t *s, event_t *e) +void emm_state_operational(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); d_assert(e, return, "Null param"); @@ -104,7 +104,7 @@ void emm_state_operational(emm_sm_t *s, event_t *e) } } -void emm_state_exception(emm_sm_t *s, event_t *e) +void emm_state_exception(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); d_assert(e, return, "Null param"); diff --git a/src/mme/esm_sm.c b/src/mme/esm_sm.c index 3e1643c72..efbed16d8 100644 --- a/src/mme/esm_sm.c +++ b/src/mme/esm_sm.c @@ -7,7 +7,7 @@ #include "mme_event.h" #include "esm_handler.h" -void esm_state_initial(esm_sm_t *s, event_t *e) +void esm_state_initial(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); @@ -16,14 +16,14 @@ void esm_state_initial(esm_sm_t *s, event_t *e) FSM_TRAN(s, &esm_state_operational); } -void esm_state_final(esm_sm_t *s, event_t *e) +void esm_state_final(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); mme_sm_trace(1, e); } -void esm_state_operational(esm_sm_t *s, event_t *e) +void esm_state_operational(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); d_assert(e, return, "Null param"); @@ -81,7 +81,7 @@ void esm_state_operational(esm_sm_t *s, event_t *e) } } -void esm_state_exception(esm_sm_t *s, event_t *e) +void esm_state_exception(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); d_assert(e, return, "Null param"); diff --git a/src/mme/mme_context.c b/src/mme/mme_context.c index beedb0db2..d846b79e9 100644 --- a/src/mme/mme_context.c +++ b/src/mme/mme_context.c @@ -197,9 +197,8 @@ mme_enb_t* mme_enb_add(net_sock_t *s1ap_sock) list_init(&enb->ue_list); list_append(&self.enb_list, enb); - fsm_create((fsm_t*)&enb->s1ap_sm, - s1ap_state_initial, s1ap_state_final); - fsm_init((fsm_t*)&enb->s1ap_sm, 0); + fsm_create(&enb->sm, s1ap_state_initial, s1ap_state_final); + fsm_init(&enb->sm, 0); return enb; } @@ -208,8 +207,8 @@ status_t mme_enb_remove(mme_enb_t *enb) { d_assert(enb, return CORE_ERROR, "Null param"); - fsm_final((fsm_t*)&enb->s1ap_sm, 0); - fsm_clear((fsm_t*)&enb->s1ap_sm); + fsm_final(&enb->sm, 0); + fsm_clear(&enb->sm); mme_ue_remove_in_enb(enb); @@ -374,9 +373,8 @@ mme_ue_t* mme_ue_add(mme_enb_t *enb) list_init(&ue->esm_list); list_append(&enb->ue_list, ue); - fsm_create((fsm_t*)&ue->emm_sm, - emm_state_initial, emm_state_final); - fsm_init((fsm_t*)&ue->emm_sm, 0); + fsm_create(&ue->sm, emm_state_initial, emm_state_final); + fsm_init(&ue->sm, 0); return ue; } @@ -387,8 +385,8 @@ status_t mme_ue_remove(mme_ue_t *ue) d_assert(ue, return CORE_ERROR, "Null param"); d_assert(ue->enb, return CORE_ERROR, "Null param"); - fsm_final((fsm_t*)&ue->emm_sm, 0); - fsm_clear((fsm_t*)&ue->emm_sm); + fsm_final(&ue->sm, 0); + fsm_clear(&ue->sm); mme_esm_remove_all(ue); @@ -509,9 +507,8 @@ mme_esm_t* mme_esm_add(mme_ue_t *ue, c_uint8_t pti) list_append(&ue->esm_list, esm); - fsm_create((fsm_t*)&esm->sm, - esm_state_initial, esm_state_final); - fsm_init((fsm_t*)&esm->sm, 0); + fsm_create(&esm->sm, esm_state_initial, esm_state_final); + fsm_init(&esm->sm, 0); return esm; } @@ -521,8 +518,8 @@ status_t mme_esm_remove(mme_esm_t *esm) d_assert(esm, return CORE_ERROR, "Null param"); d_assert(esm->ue, return CORE_ERROR, "Null param"); - fsm_final((fsm_t*)&esm->sm, 0); - fsm_clear((fsm_t*)&esm->sm); + fsm_final(&esm->sm, 0); + fsm_clear(&esm->sm); list_remove(&esm->ue->esm_list, esm); index_free(&mme_esm_pool, esm); diff --git a/src/mme/mme_context.h b/src/mme/mme_context.h index e137756f1..bb6504c0a 100644 --- a/src/mme/mme_context.h +++ b/src/mme/mme_context.h @@ -84,10 +84,9 @@ typedef struct _mme_sgw_t { typedef struct _mme_enb_t { lnode_t node; /**< A node of list_t */ index_t index; /**< Index key */ + fsm_t sm; c_uint32_t enb_id; /** eNB_ID received from eNB */ - - s1ap_sm_t s1ap_sm; net_sock_t *s1ap_sock; list_t ue_list; @@ -97,9 +96,9 @@ typedef struct _mme_enb_t { typedef struct _mme_ue_t { lnode_t node; /**< A node of list_t */ index_t index; /**< Index key */ + fsm_t sm; /* State Machine */ - emm_sm_t emm_sm; /* UE identity */ c_uint32_t enb_ue_s1ap_id; /** eNB-UE-S1AP-ID received from eNB */ @@ -153,11 +152,10 @@ typedef struct _mme_ue_t { typedef struct _mme_esm_t { lnode_t node; /**< A node of list_t */ index_t index; /**< Index key */ + fsm_t sm; c_uint8_t pti; /** Procedure Trasaction Identity */ - esm_sm_t sm; - mme_ue_t *ue; } mme_esm_t; diff --git a/src/mme/mme_init.c b/src/mme/mme_init.c index 7131156ca..196d29267 100644 --- a/src/mme/mme_init.c +++ b/src/mme/mme_init.c @@ -39,7 +39,7 @@ void mme_terminate(void) void *THREAD_FUNC mme_sm_main(thread_id id, void *data) { event_t event; - mme_sm_t mme_sm; + fsm_t mme_sm; c_time_t prev_tm, now_tm; status_t rv; @@ -52,9 +52,8 @@ void *THREAD_FUNC mme_sm_main(thread_id id, void *data) gtp_xact_init(&mme_self()->gtp_xact_ctx, &mme_self()->tm_service, EVT_TM_MME_S11_T3); - fsm_create(&mme_sm.fsm, mme_state_initial, mme_state_final); - d_assert(&mme_sm.fsm, return NULL, "MME state machine creation failed"); - fsm_init((fsm_t*)&mme_sm, 0); + fsm_create(&mme_sm, mme_state_initial, mme_state_final); + fsm_init(&mme_sm, 0); prev_tm = time_now(); @@ -81,11 +80,11 @@ void *THREAD_FUNC mme_sm_main(thread_id id, void *data) continue; } - fsm_dispatch((fsm_t*)&mme_sm, (fsm_event_t*)&event); + fsm_dispatch(&mme_sm, (fsm_event_t*)&event); } - fsm_final((fsm_t*)&mme_sm, 0); - fsm_clear((fsm_t*)&mme_sm); + fsm_final(&mme_sm, 0); + fsm_clear(&mme_sm); gtp_xact_final(); event_delete(mme_self()->queue_id); diff --git a/src/mme/mme_sm.c b/src/mme/mme_sm.c index 486d3cabf..894c44b20 100644 --- a/src/mme/mme_sm.c +++ b/src/mme/mme_sm.c @@ -10,7 +10,7 @@ #include "nas_security.h" #include "mme_s11_path.h" -void mme_state_initial(mme_sm_t *s, event_t *e) +void mme_state_initial(fsm_t *s, event_t *e) { mme_sm_trace(1, e); @@ -19,14 +19,14 @@ void mme_state_initial(mme_sm_t *s, event_t *e) FSM_TRAN(s, &mme_state_operational); } -void mme_state_final(mme_sm_t *s, event_t *e) +void mme_state_final(fsm_t *s, event_t *e) { mme_sm_trace(1, e); d_assert(s, return, "Null param"); } -void mme_state_operational(mme_sm_t *s, event_t *e) +void mme_state_operational(fsm_t *s, event_t *e) { status_t rv; char buf[INET_ADDRSTRLEN]; @@ -131,14 +131,14 @@ void mme_state_operational(mme_sm_t *s, event_t *e) d_assert(index, pkbuf_free(pkbuf); break, "Null param"); d_assert(enb = mme_enb_find(index), pkbuf_free(pkbuf); break, "No eNB context"); - d_assert(FSM_STATE(&enb->s1ap_sm), + d_assert(FSM_STATE(&enb->sm), pkbuf_free(pkbuf); break, "No S1AP State Machine"); d_assert(s1ap_decode_pdu(&message, pkbuf) == CORE_OK, pkbuf_free(pkbuf); break, "Can't decode S1AP_PDU"); event_set_param3(e, (c_uintptr_t)&message); - fsm_dispatch((fsm_t*)&enb->s1ap_sm, (fsm_event_t*)e); + fsm_dispatch(&enb->sm, (fsm_event_t*)e); s1ap_free_pdu(&message); pkbuf_free(pkbuf); @@ -155,14 +155,14 @@ void mme_state_operational(mme_sm_t *s, event_t *e) d_assert(index, pkbuf_free(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), + d_assert(FSM_STATE(&ue->sm), pkbuf_free(pkbuf); break, "No EMM State Machine"); d_assert(nas_security_decode(&message, ue, pkbuf) == CORE_OK, pkbuf_free(pkbuf); break, "Can't decode NAS_EMM"); event_set_param3(e, (c_uintptr_t)&message); - fsm_dispatch((fsm_t*)&ue->emm_sm, (fsm_event_t*)e); + fsm_dispatch(&ue->sm, (fsm_event_t*)e); pkbuf_free(pkbuf); break; @@ -187,7 +187,7 @@ void mme_state_operational(mme_sm_t *s, event_t *e) pkbuf_free(pkbuf); break, "Can't decode NAS_ESM"); event_set_param3(e, (c_uintptr_t)&message); - fsm_dispatch((fsm_t*)&esm->sm, (fsm_event_t*)e); + fsm_dispatch(&esm->sm, (fsm_event_t*)e); pkbuf_free(pkbuf); break; diff --git a/src/mme/mme_sm.h b/src/mme/mme_sm.h index 5b1c7558b..caeb0d14e 100644 --- a/src/mme/mme_sm.h +++ b/src/mme/mme_sm.h @@ -9,41 +9,25 @@ extern "C" { #endif /* __cplusplus */ -typedef struct _mme_sm_t { - fsm_t fsm; -} mme_sm_t; +void mme_state_initial(fsm_t *s, event_t *e); +void mme_state_final(fsm_t *s, event_t *e); +void mme_state_operational(fsm_t *s, event_t *e); +void mme_state_exception(fsm_t *s, event_t *e); -void mme_state_initial(mme_sm_t *s, event_t *e); -void mme_state_final(mme_sm_t *s, event_t *e); -void mme_state_operational(mme_sm_t *s, event_t *e); -void mme_state_exception(mme_sm_t *s, event_t *e); +void s1ap_state_initial(fsm_t *s, event_t *e); +void s1ap_state_final(fsm_t *s, event_t *e); +void s1ap_state_operational(fsm_t *s, event_t *e); +void s1ap_state_exception(fsm_t *s, event_t *e); -typedef struct _s1ap_sm_t { - fsm_t fsm; -} s1ap_sm_t; +void emm_state_initial(fsm_t *s, event_t *e); +void emm_state_final(fsm_t *s, event_t *e); +void emm_state_operational(fsm_t *s, event_t *e); +void emm_state_exception(fsm_t *s, event_t *e); -void s1ap_state_initial(s1ap_sm_t *s, event_t *e); -void s1ap_state_final(s1ap_sm_t *s, event_t *e); -void s1ap_state_operational(s1ap_sm_t *s, event_t *e); -void s1ap_state_exception(s1ap_sm_t *s, event_t *e); - -typedef struct _emm_sm_t { - fsm_t fsm; -} emm_sm_t; - -void emm_state_initial(emm_sm_t *s, event_t *e); -void emm_state_final(emm_sm_t *s, event_t *e); -void emm_state_operational(emm_sm_t *s, event_t *e); -void emm_state_exception(emm_sm_t *s, event_t *e); - -typedef struct _esm_sm_t { - fsm_t fsm; -} esm_sm_t; - -void esm_state_initial(esm_sm_t *s, event_t *e); -void esm_state_final(esm_sm_t *s, event_t *e); -void esm_state_operational(esm_sm_t *s, event_t *e); -void esm_state_exception(esm_sm_t *s, event_t *e); +void esm_state_initial(fsm_t *s, event_t *e); +void esm_state_final(fsm_t *s, event_t *e); +void esm_state_operational(fsm_t *s, event_t *e); +void esm_state_exception(fsm_t *s, event_t *e); #define mme_sm_print(__pe) \ d_print("%s(): %s\n", __func__, mme_event_get_name(__pe)) diff --git a/src/mme/s1ap_sm.c b/src/mme/s1ap_sm.c index 8558fe6e1..cb75cbbd6 100644 --- a/src/mme/s1ap_sm.c +++ b/src/mme/s1ap_sm.c @@ -7,7 +7,7 @@ #include "s1ap_build.h" #include "s1ap_handler.h" -void s1ap_state_initial(s1ap_sm_t *s, event_t *e) +void s1ap_state_initial(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); @@ -16,14 +16,14 @@ void s1ap_state_initial(s1ap_sm_t *s, event_t *e) FSM_TRAN(s, &s1ap_state_operational); } -void s1ap_state_final(s1ap_sm_t *s, event_t *e) +void s1ap_state_final(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); mme_sm_trace(1, e); } -void s1ap_state_operational(s1ap_sm_t *s, event_t *e) +void s1ap_state_operational(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); d_assert(e, return, "Null param"); @@ -117,7 +117,7 @@ void s1ap_state_operational(s1ap_sm_t *s, event_t *e) } } -void s1ap_state_exception(s1ap_sm_t *s, event_t *e) +void s1ap_state_exception(fsm_t *s, event_t *e) { d_assert(s, return, "Null param"); d_assert(e, return, "Null param");