wpa_supplicant/hostapd - State machine definitions More...
Go to the source code of this file.
Defines | |
#define | SM_STATE(machine, state) |
Declaration of a state machine function. | |
#define | SM_ENTRY(machine, state) |
State machine function entry point. | |
#define | SM_ENTRY_M(machine, _state, data) |
State machine function entry point for state machine group. | |
#define | SM_ENTRY_MA(machine, _state, data) |
State machine function entry point for state machine group. | |
#define | SM_ENTER(machine, state) sm_ ## machine ## _ ## state ## _Enter(sm, 0) |
Enter a new state machine state. | |
#define | SM_ENTER_GLOBAL(machine, state) sm_ ## machine ## _ ## state ## _Enter(sm, 1) |
Enter a new state machine state based on global rule. | |
#define | SM_STEP(machine) static void sm_ ## machine ## _Step(STATE_MACHINE_DATA *sm) |
Declaration of a state machine step function. | |
#define | SM_STEP_RUN(machine) sm_ ## machine ## _Step(sm) |
Call the state machine step function. |
wpa_supplicant/hostapd - State machine definitions
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.
Alternatively, this software may be distributed under the terms of BSD license.
See README and COPYING for more details.
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.
Definition in file state_machine.h.
#define SM_ENTER | ( | machine, | |||
state | ) | sm_ ## machine ## _ ## state ## _Enter(sm, 0) |
Enter a new state machine state.
machine | State machine name | |
state | State 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.
Definition at line 113 of file state_machine.h.
#define SM_ENTER_GLOBAL | ( | machine, | |||
state | ) | sm_ ## machine ## _ ## state ## _Enter(sm, 1) |
Enter a new state machine state based on global rule.
machine | State machine name | |
state | State 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.
Definition at line 127 of file state_machine.h.
#define SM_ENTRY | ( | machine, | |||
state | ) |
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;
State machine function entry point.
machine | State machine name | |
state | State 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.
Definition at line 55 of file state_machine.h.
#define SM_ENTRY_M | ( | machine, | |||
_state, | |||||
data | ) |
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;
State machine function entry point for state machine group.
machine | State machine name | |
_state | State machine state | |
data | State 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.
Definition at line 75 of file state_machine.h.
#define SM_ENTRY_MA | ( | machine, | |||
_state, | |||||
data | ) |
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;
State machine function entry point for state machine group.
machine | State machine name | |
_state | State machine state | |
data | State 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.
Definition at line 94 of file state_machine.h.
#define SM_STATE | ( | machine, | |||
state | ) |
static void sm_ ## machine ## _ ## state ## _Enter(STATE_MACHINE_DATA *sm, \ int global)
Declaration of a state machine function.
machine | State machine name | |
state | State 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.
Definition at line 40 of file state_machine.h.
#define SM_STEP | ( | machine | ) | static void sm_ ## machine ## _Step(STATE_MACHINE_DATA *sm) |
Declaration of a state machine step function.
machine | State 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.
Definition at line 140 of file state_machine.h.
#define SM_STEP_RUN | ( | machine | ) | sm_ ## machine ## _Step(sm) |
Call the state machine step function.
machine | State machine name |
This macro expands to a function call to a state machine step function defined with SM_STEP macro.
Definition at line 151 of file state_machine.h.