71 void (*allstate_action)(
struct osmo_fsm_inst *fi, uint32_t event,
void *data);
120 #define LOGPFSML(fi, level, fmt, args...) \ 121 LOGP((fi)->fsm->log_subsys, level, "%s{%s}: " fmt, \ 122 osmo_fsm_inst_name(fi), \ 123 osmo_fsm_state_name((fi)->fsm, (fi)->state), ## args) 125 #define LOGPFSM(fi, fmt, args...) \ 126 LOGPFSML(fi, (fi)->log_level, fmt, ## args) 128 #define LOGPFSMLSRC(fi, level, caller_file, caller_line, fmt, args...) \ 129 LOGPSRC((fi)->fsm->log_subsys, level, \ 130 caller_file, caller_line, \ 132 osmo_fsm_inst_name(fi), \ 133 osmo_fsm_state_name((fi)->fsm, (fi)->state), \ 136 #define LOGPFSMSRC(fi, caller_file, caller_line, fmt, args...) \ 137 LOGPFSMLSRC(fi, (fi)->log_level, \ 138 caller_file, caller_line, \ 169 #define osmo_fsm_inst_state_chg(fi, new_state, timeout_secs, T) \ 170 _osmo_fsm_inst_state_chg(fi, new_state, timeout_secs, T, \ 171 __BASE_FILE__, __LINE__) 173 unsigned long timeout_secs,
int T,
174 const char *file,
int line);
182 #define osmo_fsm_inst_dispatch(fi, event, data) \ 183 _osmo_fsm_inst_dispatch(fi, event, data, __BASE_FILE__, __LINE__) 185 const char *file,
int line);
193 #define osmo_fsm_inst_term(fi, cause, data) \ 194 _osmo_fsm_inst_term(fi, cause, data, __BASE_FILE__, __LINE__) 197 const char *file,
int line);
205 #define osmo_fsm_inst_term_children(fi, cause, data) \ 206 _osmo_fsm_inst_term_children(fi, cause, data, __BASE_FILE__, __LINE__) 210 const char *file,
int line);
uint32_t state
current state of the FSM
Definition: fsm.h:98
struct osmo_fsm_inst * parent
the parent FSM that has created us
Definition: fsm.h:108
int log_subsys
logging sub-system for this FSM
Definition: fsm.h:78
uint32_t out_state_mask
bit-mask to which other states this state may transiton
Definition: fsm.h:45
const char * name
human-readable name of this state
Definition: fsm.h:47
struct osmo_fsm_inst * osmo_fsm_inst_find_by_name(const struct osmo_fsm *fsm, const char *name)
Definition: fsm.c:115
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
Definition: fsm.c:415
const char * name
human readable fully-qualified name
Definition: fsm.h:92
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
Definition: fsm.c:359
uint32_t allstate_event_mask
bit-mask of events permitted in all states
Definition: fsm.h:69
const char * get_value_string(const struct value_string *vs, uint32_t val)
get human-readable string for given value
Definition: utils.c:53
void osmo_fsm_inst_free(struct osmo_fsm_inst *fi)
delete a given instance of a FSM
Definition: fsm.c:282
void osmo_fsm_log_addr(bool log_addr)
specify if FSM instance addresses should be logged or not
Definition: fsm.c:100
osmo_fsm_term_cause
Definition: fsm.h:20
const struct value_string osmo_fsm_term_cause_names[]
Definition: fsm.c:546
int T
timer number for states with time-out
Definition: fsm.h:101
void osmo_fsm_unregister(struct osmo_fsm *fsm)
unregister a FSM from the core
Definition: fsm.c:168
struct osmo_fsm * fsm
back-pointer to the FSM of which we are an instance
Definition: fsm.h:88
struct osmo_fsm_inst * osmo_fsm_inst_find_by_id(const struct osmo_fsm *fsm, const char *id)
Definition: fsm.c:127
static const char * osmo_fsm_inst_state_name(struct osmo_fsm_inst *fi)
return the name of the state the FSM instance is currently in.
Definition: fsm.h:160
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.
Definition: fsm.c:468
struct osmo_fsm * osmo_fsm_find_by_name(const char *name)
Definition: fsm.c:105
const char * osmo_fsm_event_name(struct osmo_fsm *fsm, uint32_t event)
get human-readable name of FSM event
Definition: fsm.c:295
const char * id
human readable identifier
Definition: fsm.h:90
A mapping between human-readable string and numeric value.
Definition: utils.h:30
uint32_t parent_term_event
the event we should send upon termination
Definition: fsm.h:110
void(* onleave)(struct osmo_fsm_inst *fi, uint32_t next_state)
function to be called just before leaving the state
Definition: fsm.h:53
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.
Definition: fsm.c:515
erroneous termination of process
Definition: fsm.h:28
unsigned int num_states
number of entries in states
Definition: fsm.h:67
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
Definition: fsm.c:204
Osmocom timer handling routines.
const char * name
human readable name
Definition: fsm.h:63
static const char * osmo_fsm_term_cause_name(enum osmo_fsm_term_cause cause)
Definition: fsm.h:34
void * priv
some private data of this instance
Definition: fsm.h:94
a single instanceof an osmocom finite state machine
Definition: fsm.h:84
int log_level
logging level for this FSM
Definition: fsm.h:96
Simple doubly linked list implementation.
(double) linked list header structure
Definition: linuxlist.h:46
const char * osmo_fsm_inst_name(struct osmo_fsm_inst *fi)
get human-readable name of FSM instance
Definition: fsm.c:309
a description of an osmocom finite state machine
Definition: fsm.h:57
void(* action)(struct osmo_fsm_inst *fi, uint32_t event, void *data)
function to be called for events arriving in this state
Definition: fsm.h:49
description of a rule in the FSM
Definition: fsm.h:41
const struct osmo_fsm_state * states
table of state transition rules
Definition: fsm.h:65
void(* onenter)(struct osmo_fsm_inst *fi, uint32_t prev_state)
function to be called just after entering the state
Definition: fsm.h:51
const struct value_string * event_names
human-readable names of events
Definition: fsm.h:80
terminate because parent terminated
Definition: fsm.h:22
const char * osmo_fsm_state_name(struct osmo_fsm *fsm, uint32_t state)
get human-readable name of FSM instance
Definition: fsm.c:325
A structure representing a single instance of a timer.
Definition: timer.h:54
int osmo_fsm_register(struct osmo_fsm *fsm)
register a FSM with the core
Definition: fsm.c:147
uint32_t in_event_mask
bit-mask of permitted input events for this state
Definition: fsm.h:43
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
Definition: fsm.c:256
regular termination of process
Definition: fsm.h:26
termination due to time-out
Definition: fsm.h:30
terminate on explicit user request
Definition: fsm.h:24