| /* |
| * Copyright (C) 2004 Andrew Beekhof <andrew@beekhof.net> |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This software is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| #ifndef XML_FSA_MATRIX__H |
| # define XML_FSA_MATRIX__H |
| |
| /* |
| * The state transition table. The rows are inputs, and |
| * the columns are states. |
| */ |
| const enum crmd_fsa_state crmd_fsa_state[MAXINPUT][MAXSTATE] = { |
| /* Got an I_NULL */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_CIB_OP */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_CIB_UPDATE */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_RECOVERY, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_RECOVERY, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_DC_TIMEOUT */ |
| { |
| /* S_IDLE ==> */ S_RECOVERY, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_RECOVERY, |
| /* S_FINALIZE_JOIN ==> */ S_RECOVERY, |
| /* S_NOT_DC ==> */ S_ELECTION, |
| /* S_POLICY_ENGINE ==> */ S_RECOVERY, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RECOVERY, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_ELECTION, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, |
| /* S_HALT ==> */ S_ELECTION, |
| }, |
| |
| /* Got an I_ELECTION */ |
| { |
| /* S_IDLE ==> */ S_ELECTION, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_ELECTION, |
| /* S_FINALIZE_JOIN ==> */ S_ELECTION, |
| /* S_NOT_DC ==> */ S_ELECTION, |
| /* S_POLICY_ENGINE ==> */ S_ELECTION, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_ELECTION, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_ELECTION, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_PE_CALC */ |
| { |
| /* S_IDLE ==> */ S_POLICY_ENGINE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_RELEASE_DC */ |
| { |
| /* S_IDLE ==> */ S_RELEASE_DC, |
| /* S_ELECTION ==> */ S_RELEASE_DC, |
| /* S_INTEGRATION ==> */ S_RELEASE_DC, |
| /* S_FINALIZE_JOIN ==> */ S_RELEASE_DC, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_RELEASE_DC, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_RELEASE_DC, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_ELECTION_DC */ |
| { |
| /* S_IDLE ==> */ S_INTEGRATION, |
| /* S_ELECTION ==> */ S_INTEGRATION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, |
| /* S_NOT_DC ==> */ S_INTEGRATION, |
| /* S_POLICY_ENGINE ==> */ S_INTEGRATION, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_ERROR */ |
| { |
| /* S_IDLE ==> */ S_RECOVERY, |
| /* S_ELECTION ==> */ S_RECOVERY, |
| /* S_INTEGRATION ==> */ S_RECOVERY, |
| /* S_FINALIZE_JOIN ==> */ S_RECOVERY, |
| /* S_NOT_DC ==> */ S_RECOVERY, |
| /* S_POLICY_ENGINE ==> */ S_RECOVERY, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RECOVERY, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_RECOVERY, |
| /* S_STOPPING ==> */ S_TERMINATE, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, |
| /* S_HALT ==> */ S_RECOVERY, |
| }, |
| |
| /* Got an I_FAIL */ |
| { |
| /* S_IDLE ==> */ S_RECOVERY, |
| /* S_ELECTION ==> */ S_RELEASE_DC, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, |
| /* S_NOT_DC ==> */ S_RECOVERY, |
| /* S_POLICY_ENGINE ==> */ S_INTEGRATION, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STOPPING, |
| /* S_PENDING ==> */ S_STOPPING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_HALT ==> */ S_RELEASE_DC, |
| }, |
| |
| /* Got an I_INTEGRATED */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_FINALIZE_JOIN, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_RECOVERY, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_FINALIZED */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_POLICY_ENGINE, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_RECOVERY, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_NODE_JOIN */ |
| { |
| /* S_IDLE ==> */ S_INTEGRATION, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_INTEGRATION, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_NOT_DC */ |
| { |
| /* S_IDLE ==> */ S_RECOVERY, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_RECOVERY, |
| /* S_FINALIZE_JOIN ==> */ S_RECOVERY, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_RECOVERY, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_NOT_DC, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_RECOVERED */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_PENDING, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_RELEASE_FAIL */ |
| { |
| /* S_IDLE ==> */ S_STOPPING, |
| /* S_ELECTION ==> */ S_STOPPING, |
| /* S_INTEGRATION ==> */ S_STOPPING, |
| /* S_FINALIZE_JOIN ==> */ S_STOPPING, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_STOPPING, |
| /* S_RECOVERY ==> */ S_STOPPING, |
| /* S_RELEASE_DC ==> */ S_STOPPING, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_STOPPING, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_RELEASE_SUCCESS */ |
| { |
| /* S_IDLE ==> */ S_RECOVERY, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_RECOVERY, |
| /* S_FINALIZE_JOIN ==> */ S_RECOVERY, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_RECOVERY, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_PENDING, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_RESTART */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_TE_SUCCESS */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_IDLE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_ROUTER */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_SHUTDOWN */ |
| { |
| /* S_IDLE ==> */ S_POLICY_ENGINE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_STOPPING, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STOPPING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_HALT ==> */ S_ELECTION, |
| }, |
| |
| /* Got an I_STOP */ |
| { |
| /* S_IDLE ==> */ S_STOPPING, |
| /* S_ELECTION ==> */ S_STOPPING, |
| /* S_INTEGRATION ==> */ S_STOPPING, |
| /* S_FINALIZE_JOIN ==> */ S_STOPPING, |
| /* S_NOT_DC ==> */ S_STOPPING, |
| /* S_POLICY_ENGINE ==> */ S_STOPPING, |
| /* S_RECOVERY ==> */ S_STOPPING, |
| /* S_RELEASE_DC ==> */ S_STOPPING, |
| /* S_STARTING ==> */ S_STOPPING, |
| /* S_PENDING ==> */ S_STOPPING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_STOPPING, |
| /* S_HALT ==> */ S_STOPPING, |
| }, |
| |
| /* Got an I_TERMINATE */ |
| { |
| /* S_IDLE ==> */ S_TERMINATE, |
| /* S_ELECTION ==> */ S_TERMINATE, |
| /* S_INTEGRATION ==> */ S_TERMINATE, |
| /* S_FINALIZE_JOIN ==> */ S_TERMINATE, |
| /* S_NOT_DC ==> */ S_TERMINATE, |
| /* S_POLICY_ENGINE ==> */ S_TERMINATE, |
| /* S_RECOVERY ==> */ S_TERMINATE, |
| /* S_RELEASE_DC ==> */ S_TERMINATE, |
| /* S_STARTING ==> */ S_TERMINATE, |
| /* S_PENDING ==> */ S_TERMINATE, |
| /* S_STOPPING ==> */ S_TERMINATE, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TERMINATE, |
| /* S_HALT ==> */ S_TERMINATE, |
| }, |
| |
| /* Got an I_STARTUP */ |
| { |
| /* S_IDLE ==> */ S_RECOVERY, |
| /* S_ELECTION ==> */ S_RECOVERY, |
| /* S_INTEGRATION ==> */ S_RECOVERY, |
| /* S_FINALIZE_JOIN ==> */ S_RECOVERY, |
| /* S_NOT_DC ==> */ S_RECOVERY, |
| /* S_POLICY_ENGINE ==> */ S_RECOVERY, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_PE_SUCCESS */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_JOIN_OFFER */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_PENDING, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_JOIN_REQUEST */ |
| { |
| /* S_IDLE ==> */ S_INTEGRATION, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_INTEGRATION, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_JOIN_RESULT */ |
| { |
| /* S_IDLE ==> */ S_INTEGRATION, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_PENDING, |
| /* S_POLICY_ENGINE ==> */ S_INTEGRATION, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_RECOVERY, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_WAIT_FOR_EVENT */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_DC_HEARTBEAT */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_LRM_EVENT */ |
| { |
| /* S_IDLE ==> */ S_IDLE, |
| /* S_ELECTION ==> */ S_ELECTION, |
| /* S_INTEGRATION ==> */ S_INTEGRATION, |
| /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, |
| /* S_NOT_DC ==> */ S_NOT_DC, |
| /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_PENDING */ |
| { |
| /* S_IDLE ==> */ S_PENDING, |
| /* S_ELECTION ==> */ S_PENDING, |
| /* S_INTEGRATION ==> */ S_PENDING, |
| /* S_FINALIZE_JOIN ==> */ S_PENDING, |
| /* S_NOT_DC ==> */ S_PENDING, |
| /* S_POLICY_ENGINE ==> */ S_PENDING, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_PENDING, |
| /* S_PENDING ==> */ S_PENDING, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_PENDING, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| |
| /* Got an I_HALT */ |
| { |
| /* S_IDLE ==> */ S_HALT, |
| /* S_ELECTION ==> */ S_HALT, |
| /* S_INTEGRATION ==> */ S_HALT, |
| /* S_FINALIZE_JOIN ==> */ S_HALT, |
| /* S_NOT_DC ==> */ S_HALT, |
| /* S_POLICY_ENGINE ==> */ S_HALT, |
| /* S_RECOVERY ==> */ S_RECOVERY, |
| /* S_RELEASE_DC ==> */ S_RELEASE_DC, |
| /* S_STARTING ==> */ S_STARTING, |
| /* S_PENDING ==> */ S_HALT, |
| /* S_STOPPING ==> */ S_STOPPING, |
| /* S_TERMINATE ==> */ S_TERMINATE, |
| /* S_TRANSITION_ENGINE ==> */ S_HALT, |
| /* S_HALT ==> */ S_HALT, |
| }, |
| }; |
| |
| /* |
| * The action table. Each entry is a set of actions to take or-ed |
| * together. Like the state table, the rows are inputs, and |
| * the columns are states. |
| */ |
| |
| /* NOTE: In the fsa, the actions are extracted then state is updated. */ |
| |
| const long long crmd_fsa_actions[MAXINPUT][MAXSTATE] = { |
| |
| /* Got an I_NULL */ |
| { |
| /* S_IDLE ==> */ A_NOTHING, |
| /* S_ELECTION ==> */ A_NOTHING, |
| /* S_INTEGRATION ==> */ A_NOTHING, |
| /* S_FINALIZE_JOIN ==> */ A_NOTHING, |
| /* S_NOT_DC ==> */ A_NOTHING, |
| /* S_POLICY_ENGINE ==> */ A_NOTHING, |
| /* S_RECOVERY ==> */ A_NOTHING, |
| /* S_RELEASE_DC ==> */ A_NOTHING, |
| /* S_STARTING ==> */ A_NOTHING, |
| /* S_PENDING ==> */ A_NOTHING, |
| /* S_STOPPING ==> */ A_NOTHING, |
| /* S_TERMINATE ==> */ A_NOTHING, |
| /* S_TRANSITION_ENGINE ==> */ A_NOTHING, |
| /* S_HALT ==> */ A_NOTHING, |
| }, |
| |
| /* Got an I_CIB_OP */ |
| { |
| /* S_IDLE ==> */ A_ERROR, |
| /* S_ELECTION ==> */ A_ERROR, |
| /* S_INTEGRATION ==> */ A_ERROR, |
| /* S_FINALIZE_JOIN ==> */ A_ERROR, |
| /* S_NOT_DC ==> */ A_ERROR, |
| /* S_POLICY_ENGINE ==> */ A_ERROR, |
| /* S_RECOVERY ==> */ A_ERROR, |
| /* S_RELEASE_DC ==> */ A_ERROR, |
| /* S_STARTING ==> */ A_ERROR, |
| /* S_PENDING ==> */ A_ERROR, |
| /* S_STOPPING ==> */ A_ERROR, |
| /* S_TERMINATE ==> */ A_ERROR, |
| /* S_TRANSITION_ENGINE ==> */ A_ERROR, |
| /* S_HALT ==> */ A_ERROR, |
| }, |
| |
| /* Got an I_CIB_UPDATE */ |
| { |
| /* S_IDLE ==> */ A_LOG, |
| /* S_ELECTION ==> */ A_LOG, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_LOG, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_LOG, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_DC_TIMEOUT */ |
| { |
| /* S_IDLE ==> */ A_WARN, |
| /* S_ELECTION ==> */ A_ELECTION_VOTE, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_ELECTION_VOTE | A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_WARN, |
| /* S_RECOVERY ==> */ A_NOTHING, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_ELECTION_VOTE | A_WARN, |
| /* S_STOPPING ==> */ A_NOTHING, |
| /* S_TERMINATE ==> */ A_NOTHING, |
| /* S_TRANSITION_ENGINE ==> */ A_TE_CANCEL | A_WARN, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_ELECTION */ |
| { |
| /* S_IDLE ==> */ A_ELECTION_VOTE, |
| /* S_ELECTION ==> */ A_ELECTION_VOTE, |
| /* S_INTEGRATION ==> */ A_ELECTION_VOTE, |
| /* S_FINALIZE_JOIN ==> */ A_ELECTION_VOTE, |
| /* S_NOT_DC ==> */ A_ELECTION_VOTE, |
| /* S_POLICY_ENGINE ==> */ A_ELECTION_VOTE, |
| /* S_RECOVERY ==> */ A_LOG, |
| /* S_RELEASE_DC ==> */ A_LOG, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_ELECTION_VOTE, |
| /* S_STOPPING ==> */ A_LOG, |
| /* S_TERMINATE ==> */ A_LOG, |
| /* S_TRANSITION_ENGINE ==> */ A_ELECTION_VOTE, |
| /* S_HALT ==> */ A_ELECTION_VOTE, |
| }, |
| |
| /* Got an I_PE_CALC */ |
| { |
| /* S_IDLE ==> */ A_PE_INVOKE, |
| /* S_ELECTION ==> */ A_NOTHING, |
| /* S_INTEGRATION ==> */ A_NOTHING, |
| /* S_FINALIZE_JOIN ==> */ A_NOTHING, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_PE_INVOKE, |
| /* S_RECOVERY ==> */ A_NOTHING, |
| /* S_RELEASE_DC ==> */ A_NOTHING, |
| /* S_STARTING ==> */ A_ERROR, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_ERROR, |
| /* S_TRANSITION_ENGINE ==> */ A_PE_INVOKE, |
| /* S_HALT ==> */ A_ERROR, |
| }, |
| |
| /* Got an I_RELEASE_DC */ |
| { |
| /* S_IDLE ==> */ O_RELEASE, |
| /* S_ELECTION ==> */ O_RELEASE, |
| /* S_INTEGRATION ==> */ O_RELEASE | A_WARN, |
| /* S_FINALIZE_JOIN ==> */ O_RELEASE | A_WARN, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ O_RELEASE | A_WARN, |
| /* S_RECOVERY ==> */ O_RELEASE, |
| /* S_RELEASE_DC ==> */ O_RELEASE | A_WARN, |
| /* S_STARTING ==> */ A_ERROR, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ O_RELEASE | A_WARN, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_ELECTION_DC */ |
| { |
| /* S_IDLE ==> */ A_WARN | A_ELECTION_VOTE, |
| /* S_ELECTION ==> */ |
| A_LOG | A_DC_TAKEOVER | A_PE_START | A_TE_START | A_DC_JOIN_OFFER_ALL | A_DC_TIMER_STOP, |
| /* S_INTEGRATION ==> */ A_WARN | A_ELECTION_VOTE | A_DC_JOIN_OFFER_ALL, |
| /* S_FINALIZE_JOIN ==> */ A_WARN | A_ELECTION_VOTE | A_DC_JOIN_OFFER_ALL, |
| /* S_NOT_DC ==> */ A_LOG | A_ELECTION_VOTE, |
| /* S_POLICY_ENGINE ==> */ A_WARN | A_ELECTION_VOTE, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN | A_ELECTION_VOTE, |
| /* S_STARTING ==> */ A_LOG | A_WARN, |
| /* S_PENDING ==> */ A_LOG | A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN | A_ELECTION_VOTE, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_ERROR */ |
| { |
| /* S_IDLE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, |
| /* S_ELECTION ==> */ A_ERROR | A_RECOVER | O_RELEASE, |
| /* S_INTEGRATION ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, |
| /* S_FINALIZE_JOIN ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, |
| /* S_NOT_DC ==> */ A_ERROR | A_RECOVER, |
| /* S_POLICY_ENGINE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, |
| /* S_RECOVERY ==> */ A_ERROR | O_RELEASE, |
| /* S_RELEASE_DC ==> */ A_ERROR | A_RECOVER, |
| /* S_STARTING ==> */ A_ERROR | A_RECOVER, |
| /* S_PENDING ==> */ A_ERROR | A_RECOVER, |
| /* S_STOPPING ==> */ A_ERROR | A_EXIT_1, |
| /* S_TERMINATE ==> */ A_ERROR | A_EXIT_1, |
| /* S_TRANSITION_ENGINE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, |
| /* S_HALT ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, |
| }, |
| |
| /* Got an I_FAIL */ |
| { |
| /* S_IDLE ==> */ A_WARN, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_WARN | A_DC_JOIN_OFFER_ALL, |
| /* S_FINALIZE_JOIN ==> */ A_WARN | A_DC_JOIN_OFFER_ALL, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_WARN | A_DC_JOIN_OFFER_ALL | A_TE_CANCEL, |
| /* S_RECOVERY ==> */ A_WARN | O_RELEASE, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN | A_EXIT_1, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN | O_LRM_RECONNECT | A_PE_INVOKE | A_TE_CANCEL, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_INTEGRATED */ |
| { |
| /* S_IDLE ==> */ A_NOTHING, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_DC_JOIN_FINALIZE, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_NOTHING, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_NOTHING, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_FINALIZED */ |
| { |
| /* S_IDLE ==> */ A_NOTHING, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_FINAL | A_TE_CANCEL, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_NOTHING, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_NOTHING, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_NODE_JOIN */ |
| { |
| /* S_IDLE ==> */ A_TE_HALT | A_DC_JOIN_OFFER_ONE, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_DC_JOIN_OFFER_ONE, |
| /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_OFFER_ONE, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_TE_HALT | A_DC_JOIN_OFFER_ONE, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_NOT_DC */ |
| { |
| /* S_IDLE ==> */ A_WARN | O_RELEASE, |
| /* S_ELECTION ==> */ A_ERROR | A_ELECTION_START | A_DC_TIMER_STOP, |
| /* S_INTEGRATION ==> */ A_ERROR | O_RELEASE, |
| /* S_FINALIZE_JOIN ==> */ A_ERROR | O_RELEASE, |
| /* S_NOT_DC ==> */ A_LOG, |
| /* S_POLICY_ENGINE ==> */ A_ERROR | O_RELEASE, |
| /* S_RECOVERY ==> */ A_ERROR | O_RELEASE, |
| /* S_RELEASE_DC ==> */ A_ERROR | O_RELEASE, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_LOG | A_DC_TIMER_STOP, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_ERROR | O_RELEASE, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_RECOVERED */ |
| { |
| /* S_IDLE ==> */ A_WARN, |
| /* S_ELECTION ==> */ A_ELECTION_VOTE, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_WARN, |
| /* S_RECOVERY ==> */ A_LOG, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_RELEASE_FAIL */ |
| { |
| /* S_IDLE ==> */ A_WARN, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_NOTHING, |
| /* S_RECOVERY ==> */ A_WARN | A_SHUTDOWN_REQ, |
| /* S_RELEASE_DC ==> */ A_NOTHING, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_RELEASE_SUCCESS */ |
| { |
| /* S_IDLE ==> */ A_WARN, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_WARN, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_LOG, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_LOG, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_RESTART */ |
| { |
| /* S_IDLE ==> */ A_NOTHING, |
| /* S_ELECTION ==> */ A_LOG | A_ELECTION_VOTE, |
| /* S_INTEGRATION ==> */ A_LOG | A_DC_JOIN_OFFER_ALL, |
| /* S_FINALIZE_JOIN ==> */ A_LOG | A_DC_JOIN_FINALIZE, |
| /* S_NOT_DC ==> */ A_LOG | A_NOTHING, |
| /* S_POLICY_ENGINE ==> */ A_LOG | A_PE_INVOKE, |
| /* S_RECOVERY ==> */ A_LOG | A_RECOVER | O_RELEASE, |
| /* S_RELEASE_DC ==> */ A_LOG | O_RELEASE, |
| /* S_STARTING ==> */ A_LOG, |
| /* S_PENDING ==> */ A_LOG, |
| /* S_STOPPING ==> */ A_LOG, |
| /* S_TERMINATE ==> */ A_LOG, |
| /* S_TRANSITION_ENGINE ==> */ A_LOG | A_TE_INVOKE, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_TE_SUCCESS */ |
| { |
| /* S_IDLE ==> */ A_LOG, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_ERROR, |
| /* S_POLICY_ENGINE ==> */ A_WARN, |
| /* S_RECOVERY ==> */ A_RECOVER | A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_ERROR, |
| /* S_PENDING ==> */ A_ERROR, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_LOG, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_ROUTER */ |
| { |
| /* S_IDLE ==> */ A_MSG_ROUTE, |
| /* S_ELECTION ==> */ A_MSG_ROUTE, |
| /* S_INTEGRATION ==> */ A_MSG_ROUTE, |
| /* S_FINALIZE_JOIN ==> */ A_MSG_ROUTE, |
| /* S_NOT_DC ==> */ A_MSG_ROUTE, |
| /* S_POLICY_ENGINE ==> */ A_MSG_ROUTE, |
| /* S_RECOVERY ==> */ A_MSG_ROUTE, |
| /* S_RELEASE_DC ==> */ A_MSG_ROUTE, |
| /* S_STARTING ==> */ A_MSG_ROUTE, |
| /* S_PENDING ==> */ A_MSG_ROUTE, |
| /* S_STOPPING ==> */ A_MSG_ROUTE, |
| /* S_TERMINATE ==> */ A_MSG_ROUTE, |
| /* S_TRANSITION_ENGINE ==> */ A_MSG_ROUTE, |
| /* S_HALT ==> */ A_WARN | A_MSG_ROUTE, |
| }, |
| |
| /* Got an I_SHUTDOWN */ |
| { |
| /* S_IDLE ==> */ A_LOG | A_SHUTDOWN_REQ, |
| /* S_ELECTION ==> */ A_LOG | A_SHUTDOWN_REQ | A_ELECTION_VOTE, |
| /* S_INTEGRATION ==> */ A_LOG | A_SHUTDOWN_REQ, |
| /* S_FINALIZE_JOIN ==> */ A_LOG | A_SHUTDOWN_REQ, |
| /* S_NOT_DC ==> */ A_SHUTDOWN_REQ, |
| /* S_POLICY_ENGINE ==> */ A_LOG | A_SHUTDOWN_REQ, |
| /* S_RECOVERY ==> */ A_WARN | O_EXIT | O_RELEASE, |
| /* S_RELEASE_DC ==> */ A_WARN | A_SHUTDOWN_REQ, |
| /* S_STARTING ==> */ A_WARN | O_EXIT, |
| /* S_PENDING ==> */ A_SHUTDOWN_REQ, |
| /* S_STOPPING ==> */ A_LOG, |
| /* S_TERMINATE ==> */ A_LOG, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN | A_SHUTDOWN_REQ, |
| /* S_HALT ==> */ A_WARN | A_ELECTION_START | A_SHUTDOWN_REQ, |
| }, |
| |
| /* Got an I_STOP */ |
| { |
| /* S_IDLE ==> */ A_ERROR | O_RELEASE | O_EXIT, |
| /* S_ELECTION ==> */ O_RELEASE | O_EXIT, |
| /* S_INTEGRATION ==> */ A_WARN | O_RELEASE | O_EXIT, |
| /* S_FINALIZE_JOIN ==> */ A_ERROR | O_RELEASE | O_EXIT, |
| /* S_NOT_DC ==> */ O_EXIT, |
| /* S_POLICY_ENGINE ==> */ A_WARN | O_RELEASE | O_EXIT, |
| /* S_RECOVERY ==> */ A_ERROR | O_RELEASE | O_EXIT, |
| /* S_RELEASE_DC ==> */ A_ERROR | O_RELEASE | O_EXIT, |
| /* S_STARTING ==> */ O_EXIT, |
| /* S_PENDING ==> */ O_EXIT, |
| /* S_STOPPING ==> */ O_EXIT, |
| /* S_TERMINATE ==> */ A_ERROR | A_EXIT_1, |
| /* S_TRANSITION_ENGINE ==> */ A_LOG | O_RELEASE | O_EXIT, |
| /* S_HALT ==> */ O_RELEASE | O_EXIT | A_WARN, |
| }, |
| |
| /* Got an I_TERMINATE */ |
| { |
| /* S_IDLE ==> */ A_ERROR | O_EXIT, |
| /* S_ELECTION ==> */ A_ERROR | O_EXIT, |
| /* S_INTEGRATION ==> */ A_ERROR | O_EXIT, |
| /* S_FINALIZE_JOIN ==> */ A_ERROR | O_EXIT, |
| /* S_NOT_DC ==> */ A_ERROR | O_EXIT, |
| /* S_POLICY_ENGINE ==> */ A_ERROR | O_EXIT, |
| /* S_RECOVERY ==> */ A_ERROR | O_EXIT, |
| /* S_RELEASE_DC ==> */ A_ERROR | O_EXIT, |
| /* S_STARTING ==> */ O_EXIT, |
| /* S_PENDING ==> */ A_ERROR | O_EXIT, |
| /* S_STOPPING ==> */ O_EXIT, |
| /* S_TERMINATE ==> */ O_EXIT, |
| /* S_TRANSITION_ENGINE ==> */ A_ERROR | O_EXIT, |
| /* S_HALT ==> */ A_ERROR | O_EXIT, |
| }, |
| |
| /* Got an I_STARTUP */ |
| { |
| /* S_IDLE ==> */ A_WARN, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_WARN, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ |
| A_LOG | A_STARTUP | A_CIB_START | A_LRM_CONNECT | A_CCM_CONNECT | A_HA_CONNECT | A_READCONFIG | |
| A_STARTED, |
| /* S_PENDING ==> */ A_LOG, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_PE_SUCCESS */ |
| { |
| /* S_IDLE ==> */ A_LOG, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_NOTHING, |
| /* S_POLICY_ENGINE ==> */ A_TE_INVOKE, |
| /* S_RECOVERY ==> */ A_RECOVER | A_LOG, |
| /* S_RELEASE_DC ==> */ A_LOG, |
| /* S_STARTING ==> */ A_ERROR, |
| /* S_PENDING ==> */ A_LOG, |
| /* S_STOPPING ==> */ A_ERROR, |
| /* S_TERMINATE ==> */ A_ERROR, |
| /* S_TRANSITION_ENGINE ==> */ A_LOG, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_JOIN_OFFER */ |
| { |
| /* S_IDLE ==> */ A_WARN | A_CL_JOIN_REQUEST, |
| /* S_ELECTION ==> */ A_WARN | A_ELECTION_VOTE, |
| /* S_INTEGRATION ==> */ A_CL_JOIN_REQUEST, |
| /* S_FINALIZE_JOIN ==> */ A_CL_JOIN_REQUEST, |
| /* S_NOT_DC ==> */ A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, |
| /* S_POLICY_ENGINE ==> */ A_WARN | A_CL_JOIN_REQUEST, |
| /* S_RECOVERY ==> */ A_WARN | A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, |
| /* S_RELEASE_DC ==> */ A_WARN | A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, |
| /* S_STARTING ==> */ A_LOG, |
| /* S_PENDING ==> */ A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, |
| /* S_STOPPING ==> */ A_LOG, |
| /* S_TERMINATE ==> */ A_LOG, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN | A_CL_JOIN_REQUEST, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_JOIN_REQUEST */ |
| { |
| /* S_IDLE ==> */ A_DC_JOIN_OFFER_ONE, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_DC_JOIN_PROCESS_REQ, |
| /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_OFFER_ONE, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_JOIN_RESULT */ |
| { |
| /* S_IDLE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, |
| /* S_ELECTION ==> */ A_LOG, |
| /* S_INTEGRATION ==> */ A_LOG | A_CL_JOIN_RESULT | A_DC_JOIN_PROCESS_ACK, |
| /* S_FINALIZE_JOIN ==> */ A_CL_JOIN_RESULT | A_DC_JOIN_PROCESS_ACK, |
| /* S_NOT_DC ==> */ A_ERROR | A_CL_JOIN_ANNOUNCE, |
| /* S_POLICY_ENGINE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, |
| /* S_RECOVERY ==> */ A_LOG, |
| /* S_RELEASE_DC ==> */ A_LOG, |
| /* S_STARTING ==> */ A_ERROR, |
| /* S_PENDING ==> */ A_CL_JOIN_RESULT, |
| /* S_STOPPING ==> */ A_ERROR, |
| /* S_TERMINATE ==> */ A_ERROR, |
| /* S_TRANSITION_ENGINE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_WAIT_FOR_EVENT */ |
| { |
| /* S_IDLE ==> */ A_LOG, |
| /* S_ELECTION ==> */ A_LOG, |
| /* S_INTEGRATION ==> */ A_LOG, |
| /* S_FINALIZE_JOIN ==> */ A_LOG, |
| /* S_NOT_DC ==> */ A_LOG, |
| /* S_POLICY_ENGINE ==> */ A_LOG, |
| /* S_RECOVERY ==> */ A_LOG, |
| /* S_RELEASE_DC ==> */ A_LOG, |
| /* S_STARTING ==> */ A_LOG, |
| /* S_PENDING ==> */ A_LOG, |
| /* S_STOPPING ==> */ A_LOG, |
| /* S_TERMINATE ==> */ A_LOG, |
| /* S_TRANSITION_ENGINE ==> */ A_LOG, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_DC_HEARTBEAT */ |
| { |
| /* S_IDLE ==> */ A_ERROR, |
| /* S_ELECTION ==> */ A_WARN | A_ELECTION_VOTE, |
| /* S_INTEGRATION ==> */ A_ERROR, |
| /* S_FINALIZE_JOIN ==> */ A_ERROR, |
| /* S_NOT_DC ==> */ A_NOTHING, |
| /* S_POLICY_ENGINE ==> */ A_ERROR, |
| /* S_RECOVERY ==> */ A_NOTHING, |
| /* S_RELEASE_DC ==> */ A_LOG, |
| /* S_STARTING ==> */ A_LOG, |
| /* S_PENDING ==> */ A_LOG | A_CL_JOIN_ANNOUNCE, |
| /* S_STOPPING ==> */ A_NOTHING, |
| /* S_TERMINATE ==> */ A_NOTHING, |
| /* S_TRANSITION_ENGINE ==> */ A_ERROR, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_LRM_EVENT */ |
| { |
| /* S_IDLE ==> */ A_LRM_EVENT, |
| /* S_ELECTION ==> */ A_LRM_EVENT, |
| /* S_INTEGRATION ==> */ A_LRM_EVENT, |
| /* S_FINALIZE_JOIN ==> */ A_LRM_EVENT, |
| /* S_NOT_DC ==> */ A_LRM_EVENT, |
| /* S_POLICY_ENGINE ==> */ A_LRM_EVENT, |
| /* S_RECOVERY ==> */ A_LRM_EVENT, |
| /* S_RELEASE_DC ==> */ A_LRM_EVENT, |
| /* S_STARTING ==> */ A_LRM_EVENT, |
| /* S_PENDING ==> */ A_LRM_EVENT, |
| /* S_STOPPING ==> */ A_LRM_EVENT, |
| /* S_TERMINATE ==> */ A_LRM_EVENT, |
| /* S_TRANSITION_ENGINE ==> */ A_LRM_EVENT, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* For everyone ending up in S_PENDING, (re)start the DC timer and wait for I_JOIN_OFFER or I_NOT_DC */ |
| /* Got an I_PENDING */ |
| { |
| /* S_IDLE ==> */ O_RELEASE | O_DC_TIMER_RESTART, |
| /* S_ELECTION ==> */ O_RELEASE | O_DC_TIMER_RESTART, |
| /* S_INTEGRATION ==> */ O_RELEASE | O_DC_TIMER_RESTART, |
| /* S_FINALIZE_JOIN ==> */ O_RELEASE | O_DC_TIMER_RESTART, |
| /* S_NOT_DC ==> */ A_LOG | O_DC_TIMER_RESTART, |
| /* S_POLICY_ENGINE ==> */ O_RELEASE | O_DC_TIMER_RESTART, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN | O_DC_TIMER_RESTART, |
| /* S_STARTING ==> */ A_LOG | A_DC_TIMER_START | A_CL_JOIN_QUERY, |
| /* S_PENDING ==> */ A_LOG | O_DC_TIMER_RESTART, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ O_RELEASE | O_DC_TIMER_RESTART, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| |
| /* Got an I_HALT */ |
| { |
| /* S_IDLE ==> */ A_WARN, |
| /* S_ELECTION ==> */ A_WARN, |
| /* S_INTEGRATION ==> */ A_WARN, |
| /* S_FINALIZE_JOIN ==> */ A_WARN, |
| /* S_NOT_DC ==> */ A_WARN, |
| /* S_POLICY_ENGINE ==> */ A_WARN, |
| /* S_RECOVERY ==> */ A_WARN, |
| /* S_RELEASE_DC ==> */ A_WARN, |
| /* S_STARTING ==> */ A_WARN, |
| /* S_PENDING ==> */ A_WARN, |
| /* S_STOPPING ==> */ A_WARN, |
| /* S_TERMINATE ==> */ A_WARN, |
| /* S_TRANSITION_ENGINE ==> */ A_WARN, |
| /* S_HALT ==> */ A_WARN, |
| }, |
| }; |
| |
| #endif |