📄 bacpstate.c
字号:
/* UNKNOWN_CODE */ {bacpSendCodeReject, PPP_REQUEST_SENT_STATE}, /* CODE_REJECT_PERMITTED */ {bacpSetState, PPP_REQUEST_SENT_STATE}, /* PROTOCOL_REJECT */ {bacpSetState, PPP_REQUEST_SENT_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpThisLayerFinished, PPP_STOPPED_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_REQUEST_SENT_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_REQUEST_SENT_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_REQUEST_SENT_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_REQUEST_SENT_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_REQUEST_SENT_STATE} }, { /* ----------------------------------------------------------------- */ /* ACK_RECEIVED state: 7 */ /* We sent CR and received an ACK. We are waiting for the other side */ /* to send CR before we go to OPPENED state */ /* ----------------------------------------------------------------- */ /* UP */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* DOWN */ {bacpSetState, PPP_CLOSED_STATE}, /* OPEN */ {bacpNullState, PPP_ACK_RECEIVED_STATE}, /* CLOSE */ {bacpNullState, PPP_ACK_RECEIVED_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER*/{bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED*/{bacpThisLayerFinished, PPP_STOPPED_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpSendConfigurationAck, NO_CHANGE_TO_PPP_STATE, bacpThisLayerUp, PPP_OPENED_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpSendConfigurationNak, PPP_ACK_RECEIVED_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION */{bacpSendConfigurationReject, PPP_ACK_RECEIVED_STATE}, /* CONFIGURE_ACK */ {bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* CONFIGURE_NAK */ {bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* CONFIGURE_REJECT */ {bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* TERMINATE_REQUEST */ {bacpSendTerminationAck, PPP_REQUEST_SENT_STATE}, /* TERMINATE_ACK */ {bacpSetState, PPP_REQUEST_SENT_STATE}, /* UNKNOWN_CODE */ {bacpSendCodeReject, PPP_ACK_RECEIVED_STATE}, /* CODE_REJECT_PERMITTED */ {bacpSetState, PPP_REQUEST_SENT_STATE}, /* PROTOCOL_REJECT */ {bacpSetState, PPP_REQUEST_SENT_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpThisLayerFinished, PPP_STOPPED_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_ACK_RECEIVED_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_ACK_RECEIVED_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_ACK_RECEIVED_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_ACK_RECEIVED_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_ACK_RECEIVED_STATE} }, { /* ----------------------------------------------------------------- */ /* ACK_SENT state: 8 */ /* ----------------------------------------------------------------- */ /* UP */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* DOWN */ {bacpSetState, PPP_STOPPED_STATE}, /* OPEN */ {bacpNullState, PPP_ACK_SENT_STATE}, /* CLOSE */ {bacpNullState, PPP_CLOSED_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER */{bacpSendConfigurationRequest, PPP_ACK_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, PPP_OPENED_STATE, bacpThisLayerUp, PPP_OPENED_STATE}, /* CONFIGURE_NAK */ {bacpInitializeCounters, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationRequest, PPP_ACK_SENT_STATE}, /* CONFIGURE_REJECT */ {bacpInitializeCounters, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationRequest, PPP_ACK_SENT_STATE}, /* TERMINATE_REQUEST */ {bacpSendTerminationAck, PPP_REQUEST_SENT_STATE}, /* TERMINATE_ACK */ {bacpSetState, PPP_REQUEST_SENT_STATE}, /* UNKNOWN_CODE */ {bacpSendCodeReject, PPP_ACK_SENT_STATE}, /* CODE_REJECT_PERMITTED */ {bacpSetState, PPP_ACK_SENT_STATE}, /* PROTOCOL_REJECT */ {bacpSetState, PPP_ACK_SENT_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpThisLayerFinished, PPP_STOPPED_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_ACK_SENT_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_ACK_SENT_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_ACK_SENT_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_ACK_SENT_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_ACK_SENT_STATE} }, { /* ----------------------------------------------------------------- */ /* OPENED state: 9 */ /* ----------------------------------------------------------------- */ /* UP */ {bacpInitializeCounters, PPP_STARTING_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* DOWN */ {bacpThisLayerDown, PPP_STARTING_STATE}, /* OPEN */ {bacpNullState, PPP_OPENED_STATE}, /* CLOSE */ {bacpNullState, PPP_CLOSED_STATE}, /* TIMEOUT_WITH_COUNTER_GREATER */{bacpSendConfigurationRequest, PPP_ACK_SENT_STATE}, /* TIMEOUT_WITH_COUNTER_EXPIRED */{bacpNullState, PPP_STOPPED_STATE}, /* RX */ /* CONFIGURE_REQUEST_GOOD */ {bacpSendConfigurationAck, PPP_OPENED_STATE}, /* CONFIGURE_REQUEST_BAD */ {bacpThisLayerDown, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationNak, PPP_ACK_RECEIVED_STATE}, /* CONFIGURE_REQUEST_BAD_OPTION */ {bacpThisLayerDown, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationReject, PPP_ACK_RECEIVED_STATE}, /* CONFIGURE_ACK */ {bacpThisLayerDown, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationRequest, PPP_ACK_SENT_STATE}, /* CONFIGURE_NAK */ {bacpThisLayerDown, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationRequest, PPP_ACK_SENT_STATE}, /* CONFIGURE_REJECT */ {bacpThisLayerDown, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationRequest, PPP_ACK_SENT_STATE}, /* TERMINATE_REQUEST */ {bacpThisLayerDown, NO_CHANGE_TO_PPP_STATE, bacpSendTerminationAck, PPP_STOPPING_STATE}, /* TERMINATE_ACK */ {bacpThisLayerDown, NO_CHANGE_TO_PPP_STATE, bacpSendConfigurationRequest, PPP_REQUEST_SENT_STATE}, /* UNKNOWN_CODE */ {bacpSendCodeReject, PPP_OPENED_STATE}, /* CODE_REJECT_PERMITTED */ {bacpSetState, PPP_OPENED_STATE}, /* PROTOCOL_REJECT */ {bacpSetState, PPP_OPENED_STATE}, /* CODE_REJECT_CATASTROPHIC */ {bacpThisLayerDown, NO_CHANGE_TO_PPP_STATE, bacpInitializeCounters, NO_CHANGE_TO_PPP_STATE, bacpSendTerminationRequest, PPP_STOPPING_STATE}, /* ECHO_REQUEST */ {bacpNullState, PPP_OPENED_STATE}, /* ECHO_REPLY */ {bacpNullState, PPP_OPENED_STATE}, /* DISCARD_REQUEST */ {bacpNullState, PPP_OPENED_STATE}, /* PPP_ECHO_RESPONSE_TIMEOUT */ {bacpNullState, PPP_OPENED_STATE}, /* PPP_ECHO_RESPONSE_FAILURE */ {bacpNullState, PPP_OPENED_STATE} } };/******************************************************************************** execute_bacp_state_machine - execute BACP state machine** BACP component makes state transitions in response to calls made to this * function. This function checks for non-NULL value of execute state machine * function and if it is non-NULL, executes the corresponding function from * the state machine table. ** RETURNS: N/A*/void execute_bacp_state_machine ( PFW_PLUGIN_OBJ_STATE * pluginState, /* state for the stack */ PPP_EVENT ppp_event, /* BACP event */ M_BLK_ID pMblk /* packet */ ) { BACP_CONTROL_PROTOCOL_STATE_DATA *pStateData = (BACP_CONTROL_PROTOCOL_STATE_DATA *)pluginState->stackData; PPP_STATE original_state; if (pStateData != NULL) original_state = pStateData->state; else return; /* check if its a valid state transition */ if (bacp_state_machine_table [original_state][ppp_event].end_state == ILLEGAL_PPP_STATE) { printf ("BACP: %s:Illegal transition; state %d, Event %d, stack 0x%x\n", pluginState->pluginObj->name, original_state, (USHORT) ppp_event, (UINT32)pluginState->stackObj); if (pMblk != NULL) netMblkClChainFree (pMblk); return; } /* call the state machine function 1 */ if (bacp_state_machine_table [original_state][ppp_event].fptr_state_function != NULL) { (*bacp_state_machine_table [original_state][ppp_event].fptr_state_function) (pluginState, pMblk, bacp_state_machine_table[original_state][ppp_event].end_state); if ((bacp_state_machine_table [original_state][ppp_event].end_state != NO_CHANGE_TO_PPP_STATE) && (bacp_state_machine_table [original_state][ppp_event].fptr_state_function != bacpSetState)) { bacpSetState (pluginState, NULL, bacp_state_machine_table [original_state][ppp_event].end_state); } } /* call the state machine function 2 */ if (bacp_state_machine_table [original_state][ppp_event].fptr_state_function_1 != NULL) { (*bacp_state_machine_table [original_state][ppp_event].fptr_state_function_1) (pluginState, pMblk, bacp_state_machine_table [original_state][ppp_event].end_state_1); if ((bacp_state_machine_table [original_state][ppp_event].end_state_1 != NO_CHANGE_TO_PPP_STATE) && (bacp_state_machine_table [original_state][ppp_event].fptr_state_function_1 != bacpSetState)) { bacpSetState (pluginState, NULL, bacp_state_machine_table [original_state][ppp_event].end_state_1); } } /* call the state machine function 3 */ if (bacp_state_machine_table [original_state][ppp_event].fptr_state_function_2 != NULL) { (*bacp_state_machine_table [original_state][ppp_event].fptr_state_function_2) (pluginState, pMblk, bacp_state_machine_table [original_state][ppp_event].end_state_2); if ((bacp_state_machine_table [original_state][ppp_event].end_state_2 != NO_CHANGE_TO_PPP_STATE) && (bacp_state_machine_table [original_state][ppp_event].fptr_state_function_2 != bacpSetState)) { bacpSetState (pluginState, NULL, bacp_state_machine_table [original_state][ppp_event].end_state_2); } } /* set the old state */ pStateData->old_state = (BYTE_ENUM (PPP_STATE)) original_state; }/******************************************************************************** bacpSetState - set BACP state** This function is called to set the state of stackData. Input state is checked* for ILLEGAL_PPP_STATE and if it is not so then stackData state is updated to * this state.** RETURNS: N/A*/void bacpSetState ( PFW_PLUGIN_OBJ_STATE * pluginState, /* state for the stack */ M_BLK_ID pMblk, /* packet */ PPP_STATE end_state /* end state */ ) { BACP_CONTROL_PROTOCOL_STATE_DATA *pStateData = (BACP_CONTROL_PROTOCOL_STATE_DATA *)pluginState->stackData; PPP_STATE original_state = pStateData->state; /* is end-state invalid -illegal transition */ if (end_state == ILLEGAL_PPP_STATE) { printf ("BACP: %s: Illegal transition; state %d, Event %d, stack 0x%x\n", pluginState->pluginObj->name, original_state, (USHORT)NUMBER_OF_PPP_EVENTS, (UINT32)pluginState->stackObj); if (pMblk != NULL) { netMblkClChainFree (pMblk); } return; } /* set the end state */ pStateData->state = (BYTE_ENUM (PPP_STATE)) end_state; }/******************************************************************************** bacpNullState - NULL state handler function** RETURNS: N/A*/void bacpNullState ( PFW_PLUGIN_OBJ_STATE * pluginState, /* state for the stack */ M_BLK_ID pMblk, /* packet */ PPP_STATE end_state /* end state */ ) { }/******************************************************************************** bacpThisLayerStart - perform this layer start action** This function calls action table function, this_layer_start. ** RETURNS: N/A*/LOCAL void bacpThisLayerStart ( PFW_PLUGIN_OBJ_STATE * pluginState, /* state for the stack */ M_BLK_ID pMblk, /* packet */ PPP_STATE end_state /* end state */ ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -