Stae MAchine
This commit is contained in:
parent
e5f5687b2b
commit
ce4a1dd2df
137
src/ac/statemachine.c
Normal file
137
src/ac/statemachine.c
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <mavl.h>
|
||||||
|
|
||||||
|
#include "cw/capwap.h"
|
||||||
|
#include "cw/dbg.h"
|
||||||
|
|
||||||
|
#include "statemachine.h"
|
||||||
|
|
||||||
|
static cw_StateMachineState_t statemachine_states[];
|
||||||
|
|
||||||
|
int cw_statemachine_run(struct cw_StateMachine * mach)
|
||||||
|
{
|
||||||
|
struct mavl * st = cw_statemachine_load_states(NULL,statemachine_states);
|
||||||
|
mavl_destroy(st);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cw_StateMachineState_t statemachine_states[]={
|
||||||
|
{ CW_STATE_NONE, CAPWAP_STATE_DISCOVERY, /* transition */
|
||||||
|
NULL,0 /* timer */
|
||||||
|
|
||||||
|
}
|
||||||
|
,
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_DTLS_SETUP, CAPWAP_STATE_JOIN, /* transition */
|
||||||
|
"wait-join",CAPWAP_WAIT_JOIN, /* timer */
|
||||||
|
1 /* retval */
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_JOIN,CAPWAP_STATE_TIMEOUT,
|
||||||
|
NULL,0,
|
||||||
|
0, "WTP Join timeout"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_JOIN, CAPWAP_STATE_JOIN,
|
||||||
|
NULL,0,
|
||||||
|
1, "WTP has joined"
|
||||||
|
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_JOIN, CAPWAP_STATE_CONFIGURE,
|
||||||
|
"capwap-timers/change-state-pending-timer",CAPWAP_TIMER_CHANGE_STATE_PENDING_TIMER,
|
||||||
|
1, NULL
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_CONFIGURE,CAPWAP_STATE_TIMEOUT,
|
||||||
|
NULL,0,
|
||||||
|
0, "WTP change state timeout"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_CONFIGURE,CAPWAP_STATE_DATA_CHECK,
|
||||||
|
"capwap-timers/data-check-timer",CAPWAP_TIMER_DATA_CHECK_TIMER,
|
||||||
|
1, NULL
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_DATA_CHECK,CAPWAP_STATE_TIMEOUT,
|
||||||
|
NULL,0,
|
||||||
|
0, "WTP data check timeout"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_DATA_CHECK,CAPWAP_STATE_RUN,
|
||||||
|
"capwap-timers/echo-interval",CAPWAP_ECHO_INTERVAL,
|
||||||
|
1, NULL
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_RUN,CAPWAP_STATE_RUN,
|
||||||
|
"capwap-timers/echo-interval",CAPWAP_ECHO_INTERVAL,
|
||||||
|
1, NULL
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
CAPWAP_STATE_RUN,CAPWAP_STATE_TIMEOUT,
|
||||||
|
NULL,0,
|
||||||
|
0, "WTP echo timout"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{0,0,0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int cmp_statemachine_state(const void *state1, const void *state2)
|
||||||
|
{
|
||||||
|
const struct cw_StateMachineState *s1 = state1;
|
||||||
|
const struct cw_StateMachineState *s2 = state2;
|
||||||
|
int rc;
|
||||||
|
rc = s1->state - s2->state;
|
||||||
|
if (rc!=0)
|
||||||
|
return rc;
|
||||||
|
return s1->prevstate-s2->prevstate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct mavl * cw_statemachine_load_states (struct mavl * statemachine_states, cw_StateMachineState_t * states)
|
||||||
|
{
|
||||||
|
cw_StateMachineState_t * s;
|
||||||
|
int replaced;
|
||||||
|
cw_dbg(DBG_STATE,"Loading State Machine States");
|
||||||
|
|
||||||
|
if (statemachine_states == NULL){
|
||||||
|
statemachine_states = mavl_create(cmp_statemachine_state,NULL,sizeof(cw_StateMachineState_t));
|
||||||
|
if (statemachine_states == NULL)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
s=states;
|
||||||
|
while (s->state != 0){
|
||||||
|
const char * repstr;
|
||||||
|
mavl_replace(statemachine_states,s,&replaced);
|
||||||
|
|
||||||
|
if (replaced){
|
||||||
|
repstr = "Replacing";
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
repstr = "Adding";
|
||||||
|
}
|
||||||
|
cw_dbg(DBG_STATE," %s: [%s->%s]",repstr,
|
||||||
|
cw_strstate(s->prevstate),
|
||||||
|
cw_strstate(s->state));
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
13
src/ac/statemachine.h
Normal file
13
src/ac/statemachine.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#ifndef STATEMACHINE_H
|
||||||
|
#define STATEMACHINE_H
|
||||||
|
|
||||||
|
struct cw_StateMachine{
|
||||||
|
uint8_t prevstate,currentstate;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct mavl * cw_statemachine_load_states (struct mavl * statemachine_states, cw_StateMachineState_t * states);
|
||||||
|
int cw_statemachine_run(struct cw_StateMachine * mach);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user