|
libosmocore 1.10.0.47-38eb4
Osmocom core library
|
Osmocom generic Finite State Machine implementation. More...
#include <errno.h>#include <stdbool.h>#include <string.h>#include <inttypes.h>#include <osmocom/core/fsm.h>#include <osmocom/core/talloc.h>#include <osmocom/core/logging.h>#include <osmocom/core/utils.h>Functions | |
| LLIST_HEAD (osmo_g_fsms) | |
| static void | fsm_free_or_steal (void *talloc_object) |
| Internal call to free an FSM instance, which redirects to the context set by osmo_fsm_set_dealloc_ctx() if any. | |
| void | osmo_fsm_log_addr (bool log_addr) |
| specify if FSM instance addresses should be logged or not | |
| void | osmo_fsm_log_timeouts (bool log_timeouts) |
| Enable or disable logging of timeout values for FSM instance state changes. | |
| void | osmo_fsm_term_safely (bool term_safely) |
| Enable safer way to deallocate cascades of terminating FSM instances. | |
| void | osmo_fsm_set_dealloc_ctx (void *ctx) |
| Instead of deallocating FSM instances, move them to the given talloc context. | |
| static void | osmo_fsm_defer_free (void *talloc_object) |
| talloc_free() the given object immediately, or once ongoing FSM terminations are done. | |
| struct osmo_fsm * | osmo_fsm_find_by_name (const char *name) |
| struct osmo_fsm_inst * | osmo_fsm_inst_find_by_name (const struct osmo_fsm *fsm, const char *name) |
| struct osmo_fsm_inst * | osmo_fsm_inst_find_by_id (const struct osmo_fsm *fsm, const char *id) |
| int | osmo_fsm_register (struct osmo_fsm *fsm) |
| register a FSM with the core | |
| void | osmo_fsm_unregister (struct osmo_fsm *fsm) |
| unregister a FSM from the core | |
| static void | fsm_tmr_cb (void *data) |
| int | osmo_fsm_inst_update_id (struct osmo_fsm_inst *fi, const char *id) |
| Change id of the FSM instance. | |
| static void | update_name (struct osmo_fsm_inst *fi) |
| int | osmo_fsm_inst_update_id_f (struct osmo_fsm_inst *fi, const char *fmt,...) |
| Change id of the FSM instance using a string format. | |
| int | osmo_fsm_inst_update_id_f_sanitize (struct osmo_fsm_inst *fi, char replace_with, const char *fmt,...) |
| Change id of the FSM instance using a string format, and ensuring a valid id. | |
| struct osmo_fsm_inst * | osmo_fsm_inst_alloc (struct osmo_fsm *fsm, void *ctx, void *priv, int log_level, const char *id) |
| allocate a new instance of a specified FSM | |
| struct osmo_fsm_inst * | osmo_fsm_inst_alloc_child (struct osmo_fsm *fsm, struct osmo_fsm_inst *parent, uint32_t parent_term_event) |
| allocate a new instance of a specified FSM as child of other FSM instance | |
| void | osmo_fsm_inst_unlink_parent (struct osmo_fsm_inst *fi, void *ctx) |
| unlink child FSM from its parent FSM. | |
| void | osmo_fsm_inst_change_parent (struct osmo_fsm_inst *fi, struct osmo_fsm_inst *new_parent, uint32_t new_parent_term_event) |
| change parent instance of an FSM. | |
| void | osmo_fsm_inst_free (struct osmo_fsm_inst *fi) |
| delete a given instance of a FSM | |
| const char * | osmo_fsm_event_name (const struct osmo_fsm *fsm, uint32_t event) |
| get human-readable name of FSM event | |
| const char * | osmo_fsm_inst_name (const struct osmo_fsm_inst *fi) |
| get human-readable name of FSM instance | |
| const char * | osmo_fsm_state_name (const struct osmo_fsm *fsm, uint32_t state) |
| get human-readable name of FSM state | |
| static int | state_chg (struct osmo_fsm_inst *fi, uint32_t new_state, bool keep_timer, unsigned long timeout_ms, int T, const char *file, int line) |
| int | _osmo_fsm_inst_state_chg (struct osmo_fsm_inst *fi, uint32_t new_state, unsigned long timeout_secs, int T, const char *file, int line) |
| perform a state change of the given FSM instance | |
| int | _osmo_fsm_inst_state_chg_ms (struct osmo_fsm_inst *fi, uint32_t new_state, unsigned long timeout_ms, int T, const char *file, int line) |
| int | _osmo_fsm_inst_state_chg_keep_timer (struct osmo_fsm_inst *fi, uint32_t new_state, const char *file, int line) |
| perform a state change while keeping the current timer running. | |
| int | _osmo_fsm_inst_state_chg_keep_or_start_timer (struct osmo_fsm_inst *fi, uint32_t new_state, unsigned long timeout_secs, int T, const char *file, int line) |
| perform a state change while keeping the current timer if running, or starting a timer otherwise. | |
| int | _osmo_fsm_inst_state_chg_keep_or_start_timer_ms (struct osmo_fsm_inst *fi, uint32_t new_state, unsigned long timeout_ms, int T, const char *file, int line) |
| int | _osmo_fsm_inst_dispatch (struct osmo_fsm_inst *fi, uint32_t event, void *data, const char *file, int line) |
| dispatch an event to an osmocom finite state machine instance | |
| void | _osmo_fsm_inst_term (struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause, void *data, const char *file, int line) |
| Terminate FSM instance with given cause. | |
| void | _osmo_fsm_inst_term_children (struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause, void *data, const char *file, int line) |
| Terminate all child FSM instances of an FSM instance. | |
| void | _osmo_fsm_inst_broadcast_children (struct osmo_fsm_inst *fi, uint32_t event, void *data, const char *file, int line) |
| Broadcast an event to all the FSMs children. | |
Variables | ||
| static bool | fsm_log_addr = true | |
| static bool | fsm_log_timeouts = false | |
| static bool | fsm_term_safely_enabled = false | |
| See osmo_fsm_term_safely(). | ||
| struct { | ||
| struct osmo_fsm_inst * root_fi | ||
| The first FSM instance that invoked osmo_fsm_inst_term() in the current cascade. More... | ||
| unsigned int depth | ||
| 2 if a secondary FSM terminates, 3 if a secondary FSM causes a tertiary FSM to terminate, and so on. More... | ||
| void * collect_ctx | ||
| Talloc context to collect all deferred deallocations (FSM instances, and talloc objects if any). More... | ||
| void * fsm_dealloc_ctx | ||
| See osmo_fsm_set_dealloc_ctx() More... | ||
| } | fsm_term_safely | |
| Internal state for FSM instance termination cascades. | ||
| const struct value_string | osmo_fsm_term_cause_names [] | |
Osmocom generic Finite State Machine implementation.
| void* collect_ctx |
Talloc context to collect all deferred deallocations (FSM instances, and talloc objects if any).
| unsigned int depth |
2 if a secondary FSM terminates, 3 if a secondary FSM causes a tertiary FSM to terminate, and so on.
| void* fsm_dealloc_ctx |
| struct osmo_fsm_inst* root_fi |
The first FSM instance that invoked osmo_fsm_inst_term() in the current cascade.