state_machine.h File Reference

wpa_supplicant/hostapd - State machine definitions More...

This graph shows which files directly or indirectly include this file:

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.


Detailed Description

wpa_supplicant/hostapd - State machine definitions

Copyright
Copyright (c) 2002-2005, Jouni Malinen <[email protected]>
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 Documentation

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

Enter a new state machine state.

Parameters:
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.

Parameters:
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   ) 
 

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;
State machine function entry point.

Parameters:
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   ) 
 

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;
State machine function entry point for state machine group.

Parameters:
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   ) 
 

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;
State machine function entry point for state machine group.

Parameters:
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   ) 
 

Value:

static void sm_ ## machine ## _ ## state ## _Enter(STATE_MACHINE_DATA *sm, \
        int global)
Declaration of a state machine function.

Parameters:
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.

Parameters:
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.

Parameters:
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.


Generated on Sun Dec 31 13:46:01 2006 for hostapd by  doxygen 1.4.2