📄 bacpstate.c
字号:
/* bacpstate.c - state machine table *//* Copyright 1999 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01c,06aug02,jr fixed build warnings 01b,19jun01,sd commented bacpZeroRestartCounters () which is unused01a,09feb01,sd created*//*DESCRIPTIONThis module implements the state machine functions for the BACP component.These functions are called from the execute_bacp_state_machine () to take the necessary action on the occurance of a event. Thes functions call the action table functions for taking the necessary action.*//**$Log:: /Rtrware/devdrvrs/BACP/vbacpsts.h $ * * 4 4/30/98 3:01p Alex * Bacp v4.2.0 check in * * 1 4/24/98 12:55a Release Engineer * code cleanup, code style changes, linted, system level test * BACP v4.2.0**//* includes */#include "vxWorks.h"#include "stdio.h"#include "private/ppp/bacpstate.h"/* locals and forwards */LOCAL void bacpThisLayerStart (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpThisLayerFinished (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpThisLayerUp (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpThisLayerDown (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpInitializeCounters (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);#if 0LOCAL void bacpZeroRestartCounters (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);#endifLOCAL void bacpSendConfigurationRequest (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpSendConfigurationAck (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpSendConfigurationNak (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpSendConfigurationReject (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpSendTerminationRequest (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpSendTerminationAck (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);LOCAL void bacpSendCodeReject (PFW_PLUGIN_OBJ_STATE * pluginObjState, M_BLK_ID pMblk, PPP_STATE end_state);/* globals */BACP_STATE_MACHINE_TABLE bacp_state_machine_table [NUMBER_OF_PPP_STATES][NUMBER_OF_PPP_EVENTS] = { { /* ----------------------------------------------------------------- */ /* INITIAL state: 0 */ /* This is the state when the BACP module is just created after the */ /* system reset. First and only event expected in this state is call */ /* to initialize BACP. The state is then changed to STOPPED . */ /* */ /* ----------------------------------------------------------------- */ /* UP */ {bacpNullState, PPP_CLOSED_STATE}, /* DOWN */ {bacpNullState, PPP_INITIAL_STATE}, /* OPEN */ {bacpInitializeCounters, PPP_STARTING_STATE}, /* CLOSE */ {bacpNullState, PPP_INITIAL_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER */{bacpNullState, PPP_INITIAL_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED */{bacpNullState, PPP_INITIAL_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpNullState, PPP_INITIAL_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpNullState, PPP_INITIAL_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION */{bacpNullState, PPP_INITIAL_STATE}, /* CONFIGURE_ACK */ {bacpNullState, PPP_INITIAL_STATE}, /* CONFIGURE_NAK */ {bacpNullState, PPP_INITIAL_STATE}, /* CONFIGURE_REJECT */ {bacpNullState, PPP_INITIAL_STATE}, /* TERMINATE_REQUEST */ {bacpNullState, PPP_INITIAL_STATE}, /* TERMINATE_ACK */ {bacpNullState, PPP_INITIAL_STATE}, /* UNKNOWN_CODE */ {bacpNullState, PPP_INITIAL_STATE}, /* CODE_REJECT_PERMITTED */ {bacpNullState, PPP_INITIAL_STATE}, /* PROTOCOL_REJECT */ {bacpNullState, PPP_INITIAL_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpNullState, PPP_INITIAL_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_INITIAL_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_INITIAL_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_INITIAL_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_INITIAL_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_INITIAL_STATE} }, { /* ----------------------------------------------------------------- */ /* STARTING state: 1 not used */ /* ----------------------------------------------------------------- */ /* UP */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE, bacpThisLayerStart, PPP_REQUEST_SENT_STATE}, /* DOWN */ {bacpNullState, PPP_STARTING_STATE}, /* OPEN */ {bacpInitializeCounters, PPP_STARTING_STATE}, /* CLOSE */ {bacpNullState, PPP_CLOSED_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER */{bacpNullState, PPP_STARTING_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED */{bacpNullState, PPP_STARTING_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpNullState, PPP_STARTING_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpNullState, PPP_STARTING_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION */{bacpNullState, PPP_STARTING_STATE}, /* CONFIGURE_ACK */ {bacpNullState, PPP_STARTING_STATE}, /* CONFIGURE_NAK */ {bacpNullState, PPP_STARTING_STATE}, /* CONFIGURE_REJECT */ {bacpNullState, PPP_STARTING_STATE}, /* TERMINATE_REQUEST */ {bacpNullState, PPP_STARTING_STATE}, /* TERMINATE_ACK */ {bacpNullState, PPP_STARTING_STATE}, /* UNKNOWN_CODE */ {bacpNullState, PPP_STARTING_STATE}, /* CODE_REJECT_PERMITTED */ {bacpNullState, PPP_STARTING_STATE}, /* PROTOCOL_REJECT */ {bacpNullState, PPP_STARTING_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpNullState, PPP_STARTING_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_STARTING_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_STARTING_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_STARTING_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_STARTING_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_STARTING_STATE} }, { /* ----------------------------------------------------------------- */ /* CLOSED state: 2 */ /* equivalent to INITIAL state, needs an OPEN to start sending CR */ /* ----------------------------------------------------------------- */ /* UP */ {bacpNullState, PPP_CLOSED_STATE}, /* DOWN */ {bacpNullState, PPP_CLOSED_STATE}, /* OPEN */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE, bacpThisLayerStart, PPP_REQUEST_SENT_STATE}, /* CLOSE */ {bacpNullState, NO_CHANGE_TO_PPP_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER */ {bacpNullState, PPP_CLOSED_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED */ {bacpNullState, PPP_CLOSED_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpNullState, PPP_CLOSED_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpNullState, PPP_CLOSED_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION */ {bacpNullState, PPP_CLOSED_STATE}, /* CONFIGURE_ACK */ {bacpNullState, PPP_CLOSED_STATE}, /* CONFIGURE_NAK */ {bacpNullState, PPP_CLOSED_STATE}, /* CONFIGURE_REJECT */ {bacpNullState, PPP_CLOSED_STATE}, /* TERMINATE_REQUEST */ {bacpNullState, PPP_CLOSED_STATE}, /* TERMINATE_ACK */ {bacpNullState, PPP_CLOSED_STATE}, /* UNKNOWN_CODE */ {bacpNullState, PPP_CLOSED_STATE}, /* CODE_REJECT_PERMITTED */ {bacpNullState, PPP_CLOSED_STATE}, /* PROTOCOL_REJECT */ {bacpNullState, PPP_CLOSED_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpNullState, PPP_CLOSED_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_CLOSED_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_CLOSED_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_CLOSED_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_CLOSED_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_CLOSED_STATE} }, { /* ----------------------------------------------------------------- */ /* STOPPED state: 3 */ /* MP connection is down, we need un UP event to set timers and */ /* send CR */ /* ----------------------------------------------------------------- */ /* UP */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE, bacpThisLayerStart, PPP_REQUEST_SENT_STATE}, /* DOWN */ {bacpNullState, PPP_STOPPED_STATE}, /* OPEN */ {bacpNullState, PPP_STOPPED_STATE}, /* CLOSE */ {bacpNullState, PPP_STOPPED_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER */{bacpNullState, PPP_STOPPED_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED */{bacpNullState, PPP_STOPPED_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpNullState, PPP_STOPPED_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpNullState, PPP_STOPPED_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION */{bacpNullState, PPP_STOPPED_STATE}, /* CONFIGURE_ACK */ {bacpNullState, PPP_STOPPED_STATE}, /* CONFIGURE_NAK */ {bacpNullState, PPP_STOPPED_STATE}, /* CONFIGURE_REJECT */ {bacpNullState, PPP_STOPPED_STATE}, /* TERMINATE_REQUEST */ {bacpNullState, PPP_STOPPED_STATE}, /* TERMINATE_ACK */ {bacpNullState, PPP_STOPPED_STATE}, /* UNKNOWN_CODE */ {bacpNullState, PPP_STOPPED_STATE}, /* CODE_REJECT_PERMITTED */ {bacpNullState, PPP_STOPPED_STATE}, /* PROTOCOL_REJECT */ {bacpNullState, PPP_STOPPED_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpNullState, PPP_STOPPED_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_STOPPED_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_STOPPED_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_STOPPED_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_STOPPED_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_STOPPED_STATE} }, { /* ----------------------------------------------------------------- */ /* CLOSING state: 4 */ /* We received a CLOSE comand and are waiting to go to CLOSED state */ /* ----------------------------------------------------------------- */ /* UP */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* DOWN */ {bacpNullState, PPP_CLOSING_STATE}, /* OPEN */ {bacpNullState, PPP_CLOSING_STATE}, /* CLOSE */ {bacpNullState, PPP_CLOSING_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER */{bacpSendTerminationRequest, PPP_CLOSING_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED*/ {bacpThisLayerFinished, PPP_CLOSED_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpSetState, PPP_CLOSING_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpSetState, PPP_CLOSING_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION */{bacpSetState, PPP_CLOSING_STATE}, /* CONFIGURE_ACK */ {bacpSetState, PPP_CLOSING_STATE}, /* CONFIGURE_NAK */ {bacpSetState, PPP_CLOSING_STATE}, /* CONFIGURE_REJECT */ {bacpSetState, PPP_CLOSING_STATE}, /* TERMINATE_REQUEST */ {bacpSendTerminationAck, PPP_CLOSING_STATE}, /* TERMINATE_ACK */ {bacpThisLayerFinished, PPP_CLOSED_STATE}, /* UNKNOWN_CODE */ {bacpSendCodeReject, PPP_CLOSING_STATE}, /* CODE_REJECT_PERMITTED */ {bacpSetState, PPP_CLOSING_STATE}, /* PROTOCOL_REJECT */ {bacpSetState, PPP_CLOSING_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpThisLayerFinished, PPP_CLOSED_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_CLOSING_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_CLOSING_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_CLOSING_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_CLOSING_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_CLOSING_STATE} }, { /* ----------------------------------------------------------------- */ /* STOPPING state: 5 */ /* ----------------------------------------------------------------- */ /* UP */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* DOWN */ {bacpSetState, PPP_INITIAL_STATE}, /* OPEN */ {bacpNullState, PPP_STOPPING_STATE}, /* CLOSE */ {bacpNullState, PPP_STOPPING_STATE}, /* */ /* TIMEOUT_WITH_COUNTER_GREATER */{bacpSendTerminationRequest, PPP_STOPPING_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED */{bacpThisLayerFinished, PPP_STOPPED_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpSetState, PPP_STOPPING_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpSetState, PPP_STOPPING_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION */{bacpSetState, PPP_STOPPING_STATE}, /* CONFIGURE_ACK */ {bacpSetState, PPP_STOPPING_STATE}, /* CONFIGURE_NAK */ {bacpSetState, PPP_STOPPING_STATE}, /* CONFIGURE_REJECT */ {bacpSetState, PPP_STOPPING_STATE}, /* TERMINATE_REQUEST */ {bacpSendTerminationAck, PPP_STOPPING_STATE}, /* TERMINATE_ACK */ {bacpThisLayerFinished, PPP_STOPPED_STATE}, /* UNKNOWN_CODE */ {bacpSendCodeReject, PPP_STOPPING_STATE}, /* CODE_REJECT_PERMITTED */ {bacpSetState, PPP_STOPPING_STATE}, /* PROTOCOL_REJECT */ {bacpSetState, PPP_STOPPING_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpThisLayerFinished, PPP_STOPPED_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_STOPPING_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_STOPPING_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_STOPPING_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_STOPPING_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_STOPPING_STATE} }, { /* ----------------------------------------------------------------- */ /* REQUEST_SENT state: 6 */ /* Our configurastion request is sent out. Nothing is received yet */ /* from theother side, we are waiting for configuration ACK/NAK/REJ */ /* and config REQ If we timeout sending CRs then we go to STOPPED */ /* state and wait - the side probably does not support BACP */ /* ----------------------------------------------------------------- */ /* UP */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* DOWN */ {bacpSetState, PPP_STOPPED_STATE}, /* OPEN */ {bacpNullState, PPP_REQUEST_SENT_STATE}, /* CLOSE */ {bacpNullState, PPP_REQUEST_SENT_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER*/{bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED*/{bacpThisLayerFinished, PPP_STOPPED_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpSendConfigurationAck, PPP_ACK_SENT_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpSendConfigurationNak, PPP_REQUEST_SENT_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION*/{bacpSendConfigurationReject, PPP_REQUEST_SENT_STATE}, /* CONFIGURE_ACK */ {bacpInitializeCounters, NO_CHANGE_TO_PPP_STATE, bacpSetState, PPP_ACK_RECEIVED_STATE}, /* CONFIGURE_NAK */ {bacpInitializeCounters, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* CONFIGURE_REJECT */ {bacpInitializeCounters, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* TERMINATE_REQUEST */ {bacpSendTerminationAck, PPP_REQUEST_SENT_STATE}, /* TERMINATE_ACK */ {bacpSetState, PPP_REQUEST_SENT_STATE},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -