wpa_supplicant / hostapd  2.5
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Macros
state_machine.h File Reference

wpa_supplicant/hostapd - State machine definitions More...

Go to the source code of this file.

Macros

#define SM_STATE(machine, state)
 Declaration of a state machine function. More...
 
#define SM_ENTRY(machine, state)
 State machine function entry point. More...
 
#define SM_ENTRY_M(machine, _state, data)
 State machine function entry point for state machine group. More...
 
#define SM_ENTRY_MA(machine, _state, data)
 State machine function entry point for state machine group. More...
 
#define SM_ENTER(machine, state)   sm_ ## machine ## _ ## state ## _Enter(sm, 0)
 Enter a new state machine state. More...
 
#define SM_ENTER_GLOBAL(machine, state)   sm_ ## machine ## _ ## state ## _Enter(sm, 1)
 Enter a new state machine state based on global rule. More...
 
#define SM_STEP(machine)   static void sm_ ## machine ## _Step(STATE_MACHINE_DATA *sm)
 Declaration of a state machine step function. More...
 
#define SM_STEP_RUN(machine)   sm_ ## machine ## _Step(sm)
 Call the state machine step function. More...
 

Detailed Description

wpa_supplicant/hostapd - State machine definitions

This file includes a set of pre-processor macros that can be used to implement a state machine. In addition to including this header file, each file implementing a state machine must define STATE_MACHINE_DATA to be the data structure including state variables (enum machine_state, Boolean changed), and STATE_MACHINE_DEBUG_PREFIX to be a string that is used as a prefix for all debug messages. If SM_ENTRY_MA macro is used to define a group of state machines with shared data structure, STATE_MACHINE_ADDR needs to be defined to point to the MAC address used in debug output. SM_ENTRY_M macro can be used to define similar group of state machines without this additional debug info.

Macro Definition Documentation

#define SM_ENTER (   machine,
  state 
)    sm_ ## machine ## _ ## state ## _Enter(sm, 0)

Enter a new state machine state.

Parameters
machineState machine name
stateState machine state

This macro expands to a function call to a state machine function defined with SM_STATE macro. SM_ENTER is used in a state machine step function to move the state machine to a new state.

#define SM_ENTER_GLOBAL (   machine,
  state 
)    sm_ ## machine ## _ ## state ## _Enter(sm, 1)

Enter a new state machine state based on global rule.

Parameters
machineState machine name
stateState machine state

This macro is like SM_ENTER, but this is used when entering a new state based on a global (not specific to any particular state) rule. A separate macro is used to avoid unwanted debug message floods when the same global rule is forcing a state machine to remain in on state.

#define SM_ENTRY (   machine,
  state 
)
Value:
if (!global || sm->machine ## _state != machine ## _ ## state) { \
sm->changed = TRUE; \
wpa_printf(MSG_DEBUG, STATE_MACHINE_DEBUG_PREFIX ": " #machine \
" entering state " #state); \
} \
sm->machine ## _state = machine ## _ ## state;
void wpa_printf(int level, const char *fmt,...)
conditional printf
Definition: wpa_debug.c:200

State machine function entry point.

Parameters
machineState machine name
stateState machine state

This macro is used inside each state machine function declared with SM_STATE. SM_ENTRY should be in the beginning of the function body, but after declaration of possible local variables. This macro prints debug information about state transition and update the state machine state.

#define SM_ENTRY_M (   machine,
  _state,
  data 
)
Value:
if (!global || sm->data ## _ ## state != machine ## _ ## _state) { \
sm->changed = TRUE; \
wpa_printf(MSG_DEBUG, STATE_MACHINE_DEBUG_PREFIX ": " \
#machine " entering state " #_state); \
} \
sm->data ## _ ## state = machine ## _ ## _state;
void wpa_printf(int level, const char *fmt,...)
conditional printf
Definition: wpa_debug.c:200

State machine function entry point for state machine group.

Parameters
machineState machine name
_stateState machine state
dataState variable prefix (full variable: prefix_state)

This macro is like SM_ENTRY, but for state machine groups that use a shared data structure for more than one state machine. Both machine and prefix parameters are set to "sub-state machine" name. prefix is used to allow more than one state variable to be stored in the same data structure.

#define SM_ENTRY_MA (   machine,
  _state,
  data 
)
Value:
if (!global || sm->data ## _ ## state != machine ## _ ## _state) { \
sm->changed = TRUE; \
wpa_printf(MSG_DEBUG, STATE_MACHINE_DEBUG_PREFIX ": " MACSTR " " \
#machine " entering state " #_state, \
MAC2STR(STATE_MACHINE_ADDR)); \
} \
sm->data ## _ ## state = machine ## _ ## _state;
void wpa_printf(int level, const char *fmt,...)
conditional printf
Definition: wpa_debug.c:200

State machine function entry point for state machine group.

Parameters
machineState machine name
_stateState machine state
dataState variable prefix (full variable: prefix_state)

This macro is like SM_ENTRY_M, but a MAC address is included in debug output. STATE_MACHINE_ADDR has to be defined to point to the MAC address to be included in debug.

#define SM_STATE (   machine,
  state 
)
Value:
static void sm_ ## machine ## _ ## state ## _Enter(STATE_MACHINE_DATA *sm, \
int global)

Declaration of a state machine function.

Parameters
machineState machine name
stateState machine state

This macro is used to declare a state machine function. It is used in place of a C function definition to declare functions to be run when the state is entered by calling SM_ENTER or SM_ENTER_GLOBAL.

#define SM_STEP (   machine)    static void sm_ ## machine ## _Step(STATE_MACHINE_DATA *sm)

Declaration of a state machine step function.

Parameters
machineState machine name

This macro is used to declare a state machine step function. It is used in place of a C function definition to declare a function that is used to move state machine to a new state based on state variables. This function uses SM_ENTER and SM_ENTER_GLOBAL macros to enter new state.

#define SM_STEP_RUN (   machine)    sm_ ## machine ## _Step(sm)

Call the state machine step function.

Parameters
machineState machine name

This macro expands to a function call to a state machine step function defined with SM_STEP macro.