root/daemons/controld/controld_matrix.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. controld_fsa_get_next_state
  2. controld_fsa_get_action

   1 /*
   2  * Copyright 2004-2022 the Pacemaker project contributors
   3  *
   4  * The version control history for this file may have further details.
   5  *
   6  * This source code is licensed under the GNU Lesser General Public License
   7  * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
   8  */
   9 
  10 #include <crm_internal.h>
  11 
  12 #include <stdint.h>                 // uint64_t
  13 
  14 #include <pacemaker-controld.h>
  15 
  16 /*
  17  *      The state transition table.  The rows are inputs, and
  18  *      the columns are states.
  19  */
  20 static const enum crmd_fsa_state fsa_next_states[MAXINPUT][MAXSTATE] = {
  21 /* Got an I_NULL */
  22     {
  23      /* S_IDLE               ==> */ S_IDLE,
  24      /* S_ELECTION           ==> */ S_ELECTION,
  25      /* S_INTEGRATION        ==> */ S_INTEGRATION,
  26      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
  27      /* S_NOT_DC             ==> */ S_NOT_DC,
  28      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
  29      /* S_RECOVERY           ==> */ S_RECOVERY,
  30      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
  31      /* S_STARTING           ==> */ S_STARTING,
  32      /* S_PENDING            ==> */ S_PENDING,
  33      /* S_STOPPING           ==> */ S_STOPPING,
  34      /* S_TERMINATE          ==> */ S_TERMINATE,
  35      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
  36      /* S_HALT               ==> */ S_HALT,
  37      },
  38 
  39 /* Got an I_CIB_OP */
  40     {
  41      /* S_IDLE               ==> */ S_IDLE,
  42      /* S_ELECTION           ==> */ S_ELECTION,
  43      /* S_INTEGRATION        ==> */ S_INTEGRATION,
  44      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
  45      /* S_NOT_DC             ==> */ S_NOT_DC,
  46      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
  47      /* S_RECOVERY           ==> */ S_RECOVERY,
  48      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
  49      /* S_STARTING           ==> */ S_STARTING,
  50      /* S_PENDING            ==> */ S_PENDING,
  51      /* S_STOPPING           ==> */ S_STOPPING,
  52      /* S_TERMINATE          ==> */ S_TERMINATE,
  53      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
  54      /* S_HALT               ==> */ S_HALT,
  55      },
  56 
  57 /* Got an I_CIB_UPDATE */
  58     {
  59      /* S_IDLE               ==> */ S_IDLE,
  60      /* S_ELECTION           ==> */ S_ELECTION,
  61      /* S_INTEGRATION        ==> */ S_INTEGRATION,
  62      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
  63      /* S_NOT_DC             ==> */ S_RECOVERY,
  64      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
  65      /* S_RECOVERY           ==> */ S_RECOVERY,
  66      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
  67      /* S_STARTING           ==> */ S_RECOVERY,
  68      /* S_PENDING            ==> */ S_RECOVERY,
  69      /* S_STOPPING           ==> */ S_STOPPING,
  70      /* S_TERMINATE          ==> */ S_TERMINATE,
  71      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
  72      /* S_HALT               ==> */ S_HALT,
  73      },
  74 
  75 /* Got an I_DC_TIMEOUT */
  76     {
  77      /* S_IDLE               ==> */ S_RECOVERY,
  78      /* S_ELECTION           ==> */ S_ELECTION,
  79      /* S_INTEGRATION        ==> */ S_RECOVERY,
  80      /* S_FINALIZE_JOIN      ==> */ S_RECOVERY,
  81      /* S_NOT_DC             ==> */ S_ELECTION,
  82      /* S_POLICY_ENGINE      ==> */ S_RECOVERY,
  83      /* S_RECOVERY           ==> */ S_RECOVERY,
  84      /* S_RELEASE_DC         ==> */ S_RECOVERY,
  85      /* S_STARTING           ==> */ S_STARTING,
  86      /* S_PENDING            ==> */ S_ELECTION,
  87      /* S_STOPPING           ==> */ S_STOPPING,
  88      /* S_TERMINATE          ==> */ S_TERMINATE,
  89      /* S_TRANSITION_ENGINE  ==> */ S_RECOVERY,
  90      /* S_HALT               ==> */ S_ELECTION,
  91      },
  92 
  93 /* Got an I_ELECTION */
  94     {
  95      /* S_IDLE               ==> */ S_ELECTION,
  96      /* S_ELECTION           ==> */ S_ELECTION,
  97      /* S_INTEGRATION        ==> */ S_ELECTION,
  98      /* S_FINALIZE_JOIN      ==> */ S_ELECTION,
  99      /* S_NOT_DC             ==> */ S_ELECTION,
 100      /* S_POLICY_ENGINE      ==> */ S_ELECTION,
 101      /* S_RECOVERY           ==> */ S_RECOVERY,
 102      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 103      /* S_STARTING           ==> */ S_STARTING,
 104      /* S_PENDING            ==> */ S_ELECTION,
 105      /* S_STOPPING           ==> */ S_STOPPING,
 106      /* S_TERMINATE          ==> */ S_TERMINATE,
 107      /* S_TRANSITION_ENGINE  ==> */ S_ELECTION,
 108      /* S_HALT               ==> */ S_HALT,
 109      },
 110 
 111 /* Got an I_PE_CALC */
 112     {
 113      /* S_IDLE               ==> */ S_POLICY_ENGINE,
 114      /* S_ELECTION           ==> */ S_ELECTION,
 115      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 116      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 117      /* S_NOT_DC             ==> */ S_NOT_DC,
 118      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 119      /* S_RECOVERY           ==> */ S_RECOVERY,
 120      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 121      /* S_STARTING           ==> */ S_RECOVERY,
 122      /* S_PENDING            ==> */ S_PENDING,
 123      /* S_STOPPING           ==> */ S_STOPPING,
 124      /* S_TERMINATE          ==> */ S_TERMINATE,
 125      /* S_TRANSITION_ENGINE  ==> */ S_POLICY_ENGINE,
 126      /* S_HALT               ==> */ S_HALT,
 127      },
 128 
 129 /* Got an I_RELEASE_DC */
 130     {
 131      /* S_IDLE               ==> */ S_RELEASE_DC,
 132      /* S_ELECTION           ==> */ S_RELEASE_DC,
 133      /* S_INTEGRATION        ==> */ S_RELEASE_DC,
 134      /* S_FINALIZE_JOIN      ==> */ S_RELEASE_DC,
 135      /* S_NOT_DC             ==> */ S_NOT_DC,
 136      /* S_POLICY_ENGINE      ==> */ S_RELEASE_DC,
 137      /* S_RECOVERY           ==> */ S_RECOVERY,
 138      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 139      /* S_STARTING           ==> */ S_RECOVERY,
 140      /* S_PENDING            ==> */ S_PENDING,
 141      /* S_STOPPING           ==> */ S_STOPPING,
 142      /* S_TERMINATE          ==> */ S_TERMINATE,
 143      /* S_TRANSITION_ENGINE  ==> */ S_RELEASE_DC,
 144      /* S_HALT               ==> */ S_HALT,
 145      },
 146 
 147 /* Got an I_ELECTION_DC */
 148     {
 149      /* S_IDLE               ==> */ S_INTEGRATION,
 150      /* S_ELECTION           ==> */ S_INTEGRATION,
 151      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 152      /* S_FINALIZE_JOIN      ==> */ S_INTEGRATION,
 153      /* S_NOT_DC             ==> */ S_INTEGRATION,
 154      /* S_POLICY_ENGINE      ==> */ S_INTEGRATION,
 155      /* S_RECOVERY           ==> */ S_RECOVERY,
 156      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 157      /* S_STARTING           ==> */ S_RECOVERY,
 158      /* S_PENDING            ==> */ S_PENDING,
 159      /* S_STOPPING           ==> */ S_STOPPING,
 160      /* S_TERMINATE          ==> */ S_TERMINATE,
 161      /* S_TRANSITION_ENGINE  ==> */ S_INTEGRATION,
 162      /* S_HALT               ==> */ S_HALT,
 163      },
 164 
 165 /* Got an I_ERROR */
 166     {
 167      /* S_IDLE               ==> */ S_RECOVERY,
 168      /* S_ELECTION           ==> */ S_RECOVERY,
 169      /* S_INTEGRATION        ==> */ S_RECOVERY,
 170      /* S_FINALIZE_JOIN      ==> */ S_RECOVERY,
 171      /* S_NOT_DC             ==> */ S_RECOVERY,
 172      /* S_POLICY_ENGINE      ==> */ S_RECOVERY,
 173      /* S_RECOVERY           ==> */ S_RECOVERY,
 174      /* S_RELEASE_DC         ==> */ S_RECOVERY,
 175      /* S_STARTING           ==> */ S_RECOVERY,
 176      /* S_PENDING            ==> */ S_RECOVERY,
 177      /* S_STOPPING           ==> */ S_TERMINATE,
 178      /* S_TERMINATE          ==> */ S_TERMINATE,
 179      /* S_TRANSITION_ENGINE  ==> */ S_RECOVERY,
 180      /* S_HALT               ==> */ S_RECOVERY,
 181      },
 182 
 183 /* Got an I_FAIL */
 184     {
 185      /* S_IDLE               ==> */ S_RECOVERY,
 186      /* S_ELECTION           ==> */ S_RELEASE_DC,
 187      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 188      /* S_FINALIZE_JOIN      ==> */ S_INTEGRATION,
 189      /* S_NOT_DC             ==> */ S_RECOVERY,
 190      /* S_POLICY_ENGINE      ==> */ S_INTEGRATION,
 191      /* S_RECOVERY           ==> */ S_RECOVERY,
 192      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 193      /* S_STARTING           ==> */ S_STOPPING,
 194      /* S_PENDING            ==> */ S_STOPPING,
 195      /* S_STOPPING           ==> */ S_STOPPING,
 196      /* S_TERMINATE          ==> */ S_TERMINATE,
 197      /* S_TRANSITION_ENGINE  ==> */ S_POLICY_ENGINE,
 198      /* S_HALT               ==> */ S_RELEASE_DC,
 199      },
 200 
 201 /* Got an I_INTEGRATED */
 202     {
 203      /* S_IDLE               ==> */ S_IDLE,
 204      /* S_ELECTION           ==> */ S_ELECTION,
 205      /* S_INTEGRATION        ==> */ S_FINALIZE_JOIN,
 206      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 207      /* S_NOT_DC             ==> */ S_NOT_DC,
 208      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 209      /* S_RECOVERY           ==> */ S_RECOVERY,
 210      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 211      /* S_STARTING           ==> */ S_RECOVERY,
 212      /* S_PENDING            ==> */ S_RECOVERY,
 213      /* S_STOPPING           ==> */ S_STOPPING,
 214      /* S_TERMINATE          ==> */ S_TERMINATE,
 215      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 216      /* S_HALT               ==> */ S_HALT,
 217      },
 218 
 219 /* Got an I_FINALIZED */
 220     {
 221      /* S_IDLE               ==> */ S_IDLE,
 222      /* S_ELECTION           ==> */ S_ELECTION,
 223      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 224      /* S_FINALIZE_JOIN      ==> */ S_POLICY_ENGINE,
 225      /* S_NOT_DC             ==> */ S_NOT_DC,
 226      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 227      /* S_RECOVERY           ==> */ S_RECOVERY,
 228      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 229      /* S_STARTING           ==> */ S_RECOVERY,
 230      /* S_PENDING            ==> */ S_RECOVERY,
 231      /* S_STOPPING           ==> */ S_STOPPING,
 232      /* S_TERMINATE          ==> */ S_TERMINATE,
 233      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 234      /* S_HALT               ==> */ S_HALT,
 235      },
 236 
 237 /* Got an I_NODE_JOIN */
 238     {
 239      /* S_IDLE               ==> */ S_INTEGRATION,
 240      /* S_ELECTION           ==> */ S_ELECTION,
 241      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 242      /* S_FINALIZE_JOIN      ==> */ S_INTEGRATION,
 243      /* S_NOT_DC             ==> */ S_NOT_DC,
 244      /* S_POLICY_ENGINE      ==> */ S_INTEGRATION,
 245      /* S_RECOVERY           ==> */ S_RECOVERY,
 246      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 247      /* S_STARTING           ==> */ S_RECOVERY,
 248      /* S_PENDING            ==> */ S_PENDING,
 249      /* S_STOPPING           ==> */ S_STOPPING,
 250      /* S_TERMINATE          ==> */ S_TERMINATE,
 251      /* S_TRANSITION_ENGINE  ==> */ S_INTEGRATION,
 252      /* S_HALT               ==> */ S_HALT,
 253      },
 254 
 255 /* Got an I_NOT_DC */
 256     {
 257      /* S_IDLE               ==> */ S_RECOVERY,
 258      /* S_ELECTION           ==> */ S_ELECTION,
 259      /* S_INTEGRATION        ==> */ S_RECOVERY,
 260      /* S_FINALIZE_JOIN      ==> */ S_RECOVERY,
 261      /* S_NOT_DC             ==> */ S_NOT_DC,
 262      /* S_POLICY_ENGINE      ==> */ S_RECOVERY,
 263      /* S_RECOVERY           ==> */ S_RECOVERY,
 264      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 265      /* S_STARTING           ==> */ S_RECOVERY,
 266      /* S_PENDING            ==> */ S_NOT_DC,
 267      /* S_STOPPING           ==> */ S_STOPPING,
 268      /* S_TERMINATE          ==> */ S_TERMINATE,
 269      /* S_TRANSITION_ENGINE  ==> */ S_RECOVERY,
 270      /* S_HALT               ==> */ S_HALT,
 271      },
 272 
 273 /* Got an I_RECOVERED */
 274     {
 275      /* S_IDLE               ==> */ S_IDLE,
 276      /* S_ELECTION           ==> */ S_ELECTION,
 277      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 278      /* S_FINALIZE_JOIN      ==> */ S_INTEGRATION,
 279      /* S_NOT_DC             ==> */ S_NOT_DC,
 280      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 281      /* S_RECOVERY           ==> */ S_PENDING,
 282      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 283      /* S_STARTING           ==> */ S_STARTING,
 284      /* S_PENDING            ==> */ S_PENDING,
 285      /* S_STOPPING           ==> */ S_STOPPING,
 286      /* S_TERMINATE          ==> */ S_TERMINATE,
 287      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 288      /* S_HALT               ==> */ S_HALT,
 289      },
 290 
 291 /* Got an I_RELEASE_FAIL */
 292     {
 293      /* S_IDLE               ==> */ S_STOPPING,
 294      /* S_ELECTION           ==> */ S_STOPPING,
 295      /* S_INTEGRATION        ==> */ S_STOPPING,
 296      /* S_FINALIZE_JOIN      ==> */ S_STOPPING,
 297      /* S_NOT_DC             ==> */ S_NOT_DC,
 298      /* S_POLICY_ENGINE      ==> */ S_STOPPING,
 299      /* S_RECOVERY           ==> */ S_STOPPING,
 300      /* S_RELEASE_DC         ==> */ S_STOPPING,
 301      /* S_STARTING           ==> */ S_RECOVERY,
 302      /* S_PENDING            ==> */ S_PENDING,
 303      /* S_STOPPING           ==> */ S_STOPPING,
 304      /* S_TERMINATE          ==> */ S_TERMINATE,
 305      /* S_TRANSITION_ENGINE  ==> */ S_STOPPING,
 306      /* S_HALT               ==> */ S_HALT,
 307      },
 308 
 309 /* Got an I_RELEASE_SUCCESS */
 310     {
 311      /* S_IDLE               ==> */ S_RECOVERY,
 312      /* S_ELECTION           ==> */ S_ELECTION,
 313      /* S_INTEGRATION        ==> */ S_RECOVERY,
 314      /* S_FINALIZE_JOIN      ==> */ S_RECOVERY,
 315      /* S_NOT_DC             ==> */ S_NOT_DC,
 316      /* S_POLICY_ENGINE      ==> */ S_RECOVERY,
 317      /* S_RECOVERY           ==> */ S_RECOVERY,
 318      /* S_RELEASE_DC         ==> */ S_PENDING,
 319      /* S_STARTING           ==> */ S_RECOVERY,
 320      /* S_PENDING            ==> */ S_PENDING,
 321      /* S_STOPPING           ==> */ S_STOPPING,
 322      /* S_TERMINATE          ==> */ S_TERMINATE,
 323      /* S_TRANSITION_ENGINE  ==> */ S_RECOVERY,
 324      /* S_HALT               ==> */ S_HALT,
 325      },
 326 
 327 /* Got an I_RESTART */
 328     {
 329      /* S_IDLE               ==> */ S_IDLE,
 330      /* S_ELECTION           ==> */ S_ELECTION,
 331      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 332      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 333      /* S_NOT_DC             ==> */ S_NOT_DC,
 334      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 335      /* S_RECOVERY           ==> */ S_RECOVERY,
 336      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 337      /* S_STARTING           ==> */ S_STARTING,
 338      /* S_PENDING            ==> */ S_PENDING,
 339      /* S_STOPPING           ==> */ S_STOPPING,
 340      /* S_TERMINATE          ==> */ S_TERMINATE,
 341      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 342      /* S_HALT               ==> */ S_HALT,
 343      },
 344 
 345 /* Got an I_TE_SUCCESS */
 346     {
 347      /* S_IDLE               ==> */ S_IDLE,
 348      /* S_ELECTION           ==> */ S_ELECTION,
 349      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 350      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 351      /* S_NOT_DC             ==> */ S_NOT_DC,
 352      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 353      /* S_RECOVERY           ==> */ S_RECOVERY,
 354      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 355      /* S_STARTING           ==> */ S_RECOVERY,
 356      /* S_PENDING            ==> */ S_PENDING,
 357      /* S_STOPPING           ==> */ S_STOPPING,
 358      /* S_TERMINATE          ==> */ S_TERMINATE,
 359      /* S_TRANSITION_ENGINE  ==> */ S_IDLE,
 360      /* S_HALT               ==> */ S_HALT,
 361      },
 362 
 363 /* Got an I_ROUTER */
 364     {
 365      /* S_IDLE               ==> */ S_IDLE,
 366      /* S_ELECTION           ==> */ S_ELECTION,
 367      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 368      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 369      /* S_NOT_DC             ==> */ S_NOT_DC,
 370      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 371      /* S_RECOVERY           ==> */ S_RECOVERY,
 372      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 373      /* S_STARTING           ==> */ S_STARTING,
 374      /* S_PENDING            ==> */ S_PENDING,
 375      /* S_STOPPING           ==> */ S_STOPPING,
 376      /* S_TERMINATE          ==> */ S_TERMINATE,
 377      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 378      /* S_HALT               ==> */ S_HALT,
 379      },
 380 
 381 /* Got an I_SHUTDOWN */
 382     {
 383      /* S_IDLE               ==> */ S_POLICY_ENGINE,
 384      /* S_ELECTION           ==> */ S_ELECTION,
 385      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 386      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 387      /* S_NOT_DC             ==> */ S_NOT_DC,
 388      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 389      /* S_RECOVERY           ==> */ S_STOPPING,
 390      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 391      /* S_STARTING           ==> */ S_STOPPING,
 392      /* S_PENDING            ==> */ S_PENDING,
 393      /* S_STOPPING           ==> */ S_STOPPING,
 394      /* S_TERMINATE          ==> */ S_TERMINATE,
 395      /* S_TRANSITION_ENGINE  ==> */ S_POLICY_ENGINE,
 396      /* S_HALT               ==> */ S_ELECTION,
 397      },
 398 
 399 /* Got an I_STOP */
 400     {
 401      /* S_IDLE               ==> */ S_STOPPING,
 402      /* S_ELECTION           ==> */ S_STOPPING,
 403      /* S_INTEGRATION        ==> */ S_STOPPING,
 404      /* S_FINALIZE_JOIN      ==> */ S_STOPPING,
 405      /* S_NOT_DC             ==> */ S_STOPPING,
 406      /* S_POLICY_ENGINE      ==> */ S_STOPPING,
 407      /* S_RECOVERY           ==> */ S_STOPPING,
 408      /* S_RELEASE_DC         ==> */ S_STOPPING,
 409      /* S_STARTING           ==> */ S_STOPPING,
 410      /* S_PENDING            ==> */ S_STOPPING,
 411      /* S_STOPPING           ==> */ S_STOPPING,
 412      /* S_TERMINATE          ==> */ S_TERMINATE,
 413      /* S_TRANSITION_ENGINE  ==> */ S_STOPPING,
 414      /* S_HALT               ==> */ S_STOPPING,
 415      },
 416 
 417 /* Got an I_TERMINATE */
 418     {
 419      /* S_IDLE               ==> */ S_TERMINATE,
 420      /* S_ELECTION           ==> */ S_TERMINATE,
 421      /* S_INTEGRATION        ==> */ S_TERMINATE,
 422      /* S_FINALIZE_JOIN      ==> */ S_TERMINATE,
 423      /* S_NOT_DC             ==> */ S_TERMINATE,
 424      /* S_POLICY_ENGINE      ==> */ S_TERMINATE,
 425      /* S_RECOVERY           ==> */ S_TERMINATE,
 426      /* S_RELEASE_DC         ==> */ S_TERMINATE,
 427      /* S_STARTING           ==> */ S_TERMINATE,
 428      /* S_PENDING            ==> */ S_TERMINATE,
 429      /* S_STOPPING           ==> */ S_TERMINATE,
 430      /* S_TERMINATE          ==> */ S_TERMINATE,
 431      /* S_TRANSITION_ENGINE  ==> */ S_TERMINATE,
 432      /* S_HALT               ==> */ S_TERMINATE,
 433      },
 434 
 435 /* Got an I_STARTUP */
 436     {
 437      /* S_IDLE               ==> */ S_RECOVERY,
 438      /* S_ELECTION           ==> */ S_RECOVERY,
 439      /* S_INTEGRATION        ==> */ S_RECOVERY,
 440      /* S_FINALIZE_JOIN      ==> */ S_RECOVERY,
 441      /* S_NOT_DC             ==> */ S_RECOVERY,
 442      /* S_POLICY_ENGINE      ==> */ S_RECOVERY,
 443      /* S_RECOVERY           ==> */ S_RECOVERY,
 444      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 445      /* S_STARTING           ==> */ S_STARTING,
 446      /* S_PENDING            ==> */ S_PENDING,
 447      /* S_STOPPING           ==> */ S_STOPPING,
 448      /* S_TERMINATE          ==> */ S_TERMINATE,
 449      /* S_TRANSITION_ENGINE  ==> */ S_RECOVERY,
 450      /* S_HALT               ==> */ S_HALT,
 451      },
 452 
 453 /* Got an I_PE_SUCCESS */
 454     {
 455      /* S_IDLE               ==> */ S_IDLE,
 456      /* S_ELECTION           ==> */ S_ELECTION,
 457      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 458      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 459      /* S_NOT_DC             ==> */ S_NOT_DC,
 460      /* S_POLICY_ENGINE      ==> */ S_TRANSITION_ENGINE,
 461      /* S_RECOVERY           ==> */ S_RECOVERY,
 462      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 463      /* S_STARTING           ==> */ S_RECOVERY,
 464      /* S_PENDING            ==> */ S_PENDING,
 465      /* S_STOPPING           ==> */ S_STOPPING,
 466      /* S_TERMINATE          ==> */ S_TERMINATE,
 467      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 468      /* S_HALT               ==> */ S_HALT,
 469      },
 470 
 471 /* Got an I_JOIN_OFFER */
 472     {
 473      /* S_IDLE               ==> */ S_IDLE,
 474      /* S_ELECTION           ==> */ S_ELECTION,
 475      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 476      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 477      /* S_NOT_DC             ==> */ S_PENDING,
 478      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 479      /* S_RECOVERY           ==> */ S_RECOVERY,
 480      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 481      /* S_STARTING           ==> */ S_STARTING,
 482      /* S_PENDING            ==> */ S_PENDING,
 483      /* S_STOPPING           ==> */ S_STOPPING,
 484      /* S_TERMINATE          ==> */ S_TERMINATE,
 485      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 486      /* S_HALT               ==> */ S_HALT,
 487      },
 488 
 489 /* Got an I_JOIN_REQUEST */
 490     {
 491      /* S_IDLE               ==> */ S_INTEGRATION,
 492      /* S_ELECTION           ==> */ S_ELECTION,
 493      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 494      /* S_FINALIZE_JOIN      ==> */ S_INTEGRATION,
 495      /* S_NOT_DC             ==> */ S_NOT_DC,
 496      /* S_POLICY_ENGINE      ==> */ S_INTEGRATION,
 497      /* S_RECOVERY           ==> */ S_RECOVERY,
 498      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 499      /* S_STARTING           ==> */ S_STARTING,
 500      /* S_PENDING            ==> */ S_PENDING,
 501      /* S_STOPPING           ==> */ S_STOPPING,
 502      /* S_TERMINATE          ==> */ S_TERMINATE,
 503      /* S_TRANSITION_ENGINE  ==> */ S_INTEGRATION,
 504      /* S_HALT               ==> */ S_HALT,
 505      },
 506 
 507 /* Got an I_JOIN_RESULT */
 508     {
 509      /* S_IDLE               ==> */ S_INTEGRATION,
 510      /* S_ELECTION           ==> */ S_ELECTION,
 511      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 512      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 513      /* S_NOT_DC             ==> */ S_PENDING,
 514      /* S_POLICY_ENGINE      ==> */ S_INTEGRATION,
 515      /* S_RECOVERY           ==> */ S_RECOVERY,
 516      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 517      /* S_STARTING           ==> */ S_RECOVERY,
 518      /* S_PENDING            ==> */ S_PENDING,
 519      /* S_STOPPING           ==> */ S_STOPPING,
 520      /* S_TERMINATE          ==> */ S_TERMINATE,
 521      /* S_TRANSITION_ENGINE  ==> */ S_INTEGRATION,
 522      /* S_HALT               ==> */ S_HALT,
 523      },
 524 
 525 /* Got an I_WAIT_FOR_EVENT */
 526     {
 527      /* S_IDLE               ==> */ S_IDLE,
 528      /* S_ELECTION           ==> */ S_ELECTION,
 529      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 530      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 531      /* S_NOT_DC             ==> */ S_NOT_DC,
 532      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 533      /* S_RECOVERY           ==> */ S_RECOVERY,
 534      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 535      /* S_STARTING           ==> */ S_STARTING,
 536      /* S_PENDING            ==> */ S_PENDING,
 537      /* S_STOPPING           ==> */ S_STOPPING,
 538      /* S_TERMINATE          ==> */ S_TERMINATE,
 539      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 540      /* S_HALT               ==> */ S_HALT,
 541      },
 542 
 543 /* Got an I_DC_HEARTBEAT */
 544     {
 545      /* S_IDLE               ==> */ S_IDLE,
 546      /* S_ELECTION           ==> */ S_ELECTION,
 547      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 548      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 549      /* S_NOT_DC             ==> */ S_NOT_DC,
 550      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 551      /* S_RECOVERY           ==> */ S_RECOVERY,
 552      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 553      /* S_STARTING           ==> */ S_STARTING,
 554      /* S_PENDING            ==> */ S_PENDING,
 555      /* S_STOPPING           ==> */ S_STOPPING,
 556      /* S_TERMINATE          ==> */ S_TERMINATE,
 557      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 558      /* S_HALT               ==> */ S_HALT,
 559      },
 560 
 561 /* Got an I_LRM_EVENT */
 562     {
 563      /* S_IDLE               ==> */ S_IDLE,
 564      /* S_ELECTION           ==> */ S_ELECTION,
 565      /* S_INTEGRATION        ==> */ S_INTEGRATION,
 566      /* S_FINALIZE_JOIN      ==> */ S_FINALIZE_JOIN,
 567      /* S_NOT_DC             ==> */ S_NOT_DC,
 568      /* S_POLICY_ENGINE      ==> */ S_POLICY_ENGINE,
 569      /* S_RECOVERY           ==> */ S_RECOVERY,
 570      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 571      /* S_STARTING           ==> */ S_STARTING,
 572      /* S_PENDING            ==> */ S_PENDING,
 573      /* S_STOPPING           ==> */ S_STOPPING,
 574      /* S_TERMINATE          ==> */ S_TERMINATE,
 575      /* S_TRANSITION_ENGINE  ==> */ S_TRANSITION_ENGINE,
 576      /* S_HALT               ==> */ S_HALT,
 577      },
 578 
 579 /* Got an I_PENDING */
 580     {
 581      /* S_IDLE               ==> */ S_PENDING,
 582      /* S_ELECTION           ==> */ S_PENDING,
 583      /* S_INTEGRATION        ==> */ S_PENDING,
 584      /* S_FINALIZE_JOIN      ==> */ S_PENDING,
 585      /* S_NOT_DC             ==> */ S_PENDING,
 586      /* S_POLICY_ENGINE      ==> */ S_PENDING,
 587      /* S_RECOVERY           ==> */ S_RECOVERY,
 588      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 589      /* S_STARTING           ==> */ S_PENDING,
 590      /* S_PENDING            ==> */ S_PENDING,
 591      /* S_STOPPING           ==> */ S_STOPPING,
 592      /* S_TERMINATE          ==> */ S_TERMINATE,
 593      /* S_TRANSITION_ENGINE  ==> */ S_PENDING,
 594      /* S_HALT               ==> */ S_HALT,
 595      },
 596 
 597 /* Got an I_HALT */
 598     {
 599      /* S_IDLE               ==> */ S_HALT,
 600      /* S_ELECTION           ==> */ S_HALT,
 601      /* S_INTEGRATION        ==> */ S_HALT,
 602      /* S_FINALIZE_JOIN      ==> */ S_HALT,
 603      /* S_NOT_DC             ==> */ S_HALT,
 604      /* S_POLICY_ENGINE      ==> */ S_HALT,
 605      /* S_RECOVERY           ==> */ S_RECOVERY,
 606      /* S_RELEASE_DC         ==> */ S_RELEASE_DC,
 607      /* S_STARTING           ==> */ S_STARTING,
 608      /* S_PENDING            ==> */ S_HALT,
 609      /* S_STOPPING           ==> */ S_STOPPING,
 610      /* S_TERMINATE          ==> */ S_TERMINATE,
 611      /* S_TRANSITION_ENGINE  ==> */ S_HALT,
 612      /* S_HALT               ==> */ S_HALT,
 613      },
 614 };
 615 
 616 /*
 617  *      The action table.  Each entry is a set of actions to take or-ed
 618  *      together.  Like the state table, the rows are inputs, and
 619  *      the columns are states.
 620  */
 621 
 622 /* NOTE: In the fsa, the actions are extracted then state is updated. */
 623 
 624 static const uint64_t fsa_actions[MAXINPUT][MAXSTATE] = {
 625 
 626 /* Got an I_NULL */
 627     {
 628      /* S_IDLE               ==> */ A_NOTHING,
 629      /* S_ELECTION           ==> */ A_NOTHING,
 630      /* S_INTEGRATION        ==> */ A_NOTHING,
 631      /* S_FINALIZE_JOIN      ==> */ A_NOTHING,
 632      /* S_NOT_DC             ==> */ A_NOTHING,
 633      /* S_POLICY_ENGINE      ==> */ A_NOTHING,
 634      /* S_RECOVERY           ==> */ A_NOTHING,
 635      /* S_RELEASE_DC         ==> */ A_NOTHING,
 636      /* S_STARTING           ==> */ A_NOTHING,
 637      /* S_PENDING            ==> */ A_NOTHING,
 638      /* S_STOPPING           ==> */ A_NOTHING,
 639      /* S_TERMINATE          ==> */ A_NOTHING,
 640      /* S_TRANSITION_ENGINE  ==> */ A_NOTHING,
 641      /* S_HALT               ==> */ A_NOTHING,
 642      },
 643 
 644 /* Got an I_CIB_OP */
 645     {
 646      /* S_IDLE               ==> */ A_ERROR,
 647      /* S_ELECTION           ==> */ A_ERROR,
 648      /* S_INTEGRATION        ==> */ A_ERROR,
 649      /* S_FINALIZE_JOIN      ==> */ A_ERROR,
 650      /* S_NOT_DC             ==> */ A_ERROR,
 651      /* S_POLICY_ENGINE      ==> */ A_ERROR,
 652      /* S_RECOVERY           ==> */ A_ERROR,
 653      /* S_RELEASE_DC         ==> */ A_ERROR,
 654      /* S_STARTING           ==> */ A_ERROR,
 655      /* S_PENDING            ==> */ A_ERROR,
 656      /* S_STOPPING           ==> */ A_ERROR,
 657      /* S_TERMINATE          ==> */ A_ERROR,
 658      /* S_TRANSITION_ENGINE  ==> */ A_ERROR,
 659      /* S_HALT               ==> */ A_ERROR,
 660      },
 661 
 662 /* Got an I_CIB_UPDATE */
 663     {
 664      /* S_IDLE               ==> */ A_LOG,
 665      /* S_ELECTION           ==> */ A_LOG,
 666      /* S_INTEGRATION        ==> */ A_WARN,
 667      /* S_FINALIZE_JOIN      ==> */ A_WARN,
 668      /* S_NOT_DC             ==> */ A_WARN,
 669      /* S_POLICY_ENGINE      ==> */ A_LOG,
 670      /* S_RECOVERY           ==> */ A_WARN,
 671      /* S_RELEASE_DC         ==> */ A_WARN,
 672      /* S_STARTING           ==> */ A_WARN,
 673      /* S_PENDING            ==> */ A_WARN,
 674      /* S_STOPPING           ==> */ A_WARN,
 675      /* S_TERMINATE          ==> */ A_WARN,
 676      /* S_TRANSITION_ENGINE  ==> */ A_LOG,
 677      /* S_HALT               ==> */ A_WARN,
 678      },
 679 
 680 /* Got an I_DC_TIMEOUT */
 681     {
 682      /* S_IDLE               ==> */ A_WARN,
 683      /* S_ELECTION           ==> */ A_ELECTION_VOTE,
 684      /* S_INTEGRATION        ==> */ A_WARN,
 685      /* S_FINALIZE_JOIN      ==> */ A_WARN,
 686      /* S_NOT_DC             ==> */ A_ELECTION_VOTE | A_WARN,
 687      /* S_POLICY_ENGINE      ==> */ A_WARN,
 688      /* S_RECOVERY           ==> */ A_NOTHING,
 689      /* S_RELEASE_DC         ==> */ A_WARN,
 690      /* S_STARTING           ==> */ A_WARN,
 691      /* S_PENDING            ==> */ A_ELECTION_VOTE | A_WARN,
 692      /* S_STOPPING           ==> */ A_NOTHING,
 693      /* S_TERMINATE          ==> */ A_NOTHING,
 694      /* S_TRANSITION_ENGINE  ==> */ A_TE_CANCEL | A_WARN,
 695      /* S_HALT               ==> */ A_WARN,
 696      },
 697 
 698 /* Got an I_ELECTION */
 699     {
 700      /* S_IDLE               ==> */ A_ELECTION_VOTE,
 701      /* S_ELECTION           ==> */ A_ELECTION_VOTE,
 702      /* S_INTEGRATION        ==> */ A_ELECTION_VOTE,
 703      /* S_FINALIZE_JOIN      ==> */ A_ELECTION_VOTE,
 704      /* S_NOT_DC             ==> */ A_ELECTION_VOTE,
 705      /* S_POLICY_ENGINE      ==> */ A_ELECTION_VOTE,
 706      /* S_RECOVERY           ==> */ A_LOG,
 707      /* S_RELEASE_DC         ==> */ A_LOG,
 708      /* S_STARTING           ==> */ A_WARN,
 709      /* S_PENDING            ==> */ A_ELECTION_VOTE,
 710      /* S_STOPPING           ==> */ A_LOG,
 711      /* S_TERMINATE          ==> */ A_LOG,
 712      /* S_TRANSITION_ENGINE  ==> */ A_ELECTION_VOTE,
 713      /* S_HALT               ==> */ A_ELECTION_VOTE,
 714      },
 715 
 716 /* Got an I_PE_CALC */
 717     {
 718      /* S_IDLE               ==> */ A_PE_INVOKE,
 719      /* S_ELECTION           ==> */ A_NOTHING,
 720      /* S_INTEGRATION        ==> */ A_NOTHING,
 721      /* S_FINALIZE_JOIN      ==> */ A_NOTHING,
 722      /* S_NOT_DC             ==> */ A_WARN,
 723      /* S_POLICY_ENGINE      ==> */ A_PE_INVOKE,
 724      /* S_RECOVERY           ==> */ A_NOTHING,
 725      /* S_RELEASE_DC         ==> */ A_NOTHING,
 726      /* S_STARTING           ==> */ A_ERROR,
 727      /* S_PENDING            ==> */ A_WARN,
 728      /* S_STOPPING           ==> */ A_WARN,
 729      /* S_TERMINATE          ==> */ A_ERROR,
 730      /* S_TRANSITION_ENGINE  ==> */ A_PE_INVOKE,
 731      /* S_HALT               ==> */ A_ERROR,
 732      },
 733 
 734 /* Got an I_RELEASE_DC */
 735     {
 736      /* S_IDLE               ==> */ O_RELEASE,
 737      /* S_ELECTION           ==> */ O_RELEASE,
 738      /* S_INTEGRATION        ==> */ O_RELEASE | A_WARN,
 739      /* S_FINALIZE_JOIN      ==> */ O_RELEASE | A_WARN,
 740      /* S_NOT_DC             ==> */ A_WARN,
 741      /* S_POLICY_ENGINE      ==> */ O_RELEASE | A_WARN,
 742      /* S_RECOVERY           ==> */ O_RELEASE,
 743      /* S_RELEASE_DC         ==> */ O_RELEASE | A_WARN,
 744      /* S_STARTING           ==> */ A_ERROR,
 745      /* S_PENDING            ==> */ A_WARN,
 746      /* S_STOPPING           ==> */ A_WARN,
 747      /* S_TERMINATE          ==> */ A_WARN,
 748      /* S_TRANSITION_ENGINE  ==> */ O_RELEASE | A_WARN,
 749      /* S_HALT               ==> */ A_WARN,
 750      },
 751 
 752 /* Got an I_ELECTION_DC */
 753     {
 754      /* S_IDLE               ==> */ A_WARN | A_ELECTION_VOTE,
 755      /* S_ELECTION           ==> */
 756      A_LOG | A_DC_TAKEOVER | A_PE_START | A_TE_START | A_DC_JOIN_OFFER_ALL | A_DC_TIMER_STOP,
 757      /* S_INTEGRATION        ==> */ A_WARN | A_ELECTION_VOTE | A_DC_JOIN_OFFER_ALL,
 758      /* S_FINALIZE_JOIN      ==> */ A_WARN | A_ELECTION_VOTE | A_DC_JOIN_OFFER_ALL,
 759      /* S_NOT_DC             ==> */ A_LOG | A_ELECTION_VOTE,
 760      /* S_POLICY_ENGINE      ==> */ A_WARN | A_ELECTION_VOTE,
 761      /* S_RECOVERY           ==> */ A_WARN,
 762      /* S_RELEASE_DC         ==> */ A_WARN | A_ELECTION_VOTE,
 763      /* S_STARTING           ==> */ A_LOG | A_WARN,
 764      /* S_PENDING            ==> */ A_LOG | A_WARN,
 765      /* S_STOPPING           ==> */ A_WARN,
 766      /* S_TERMINATE          ==> */ A_WARN,
 767      /* S_TRANSITION_ENGINE  ==> */ A_WARN | A_ELECTION_VOTE,
 768      /* S_HALT               ==> */ A_WARN,
 769      },
 770 
 771 /* Got an I_ERROR */
 772     {
 773      /* S_IDLE               ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START,
 774      /* S_ELECTION           ==> */ A_ERROR | A_RECOVER | O_RELEASE,
 775      /* S_INTEGRATION        ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START,
 776      /* S_FINALIZE_JOIN      ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START,
 777      /* S_NOT_DC             ==> */ A_ERROR | A_RECOVER,
 778      /* S_POLICY_ENGINE      ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START,
 779      /* S_RECOVERY           ==> */ A_ERROR | O_RELEASE,
 780      /* S_RELEASE_DC         ==> */ A_ERROR | A_RECOVER,
 781      /* S_STARTING           ==> */ A_ERROR | A_RECOVER,
 782      /* S_PENDING            ==> */ A_ERROR | A_RECOVER,
 783      /* S_STOPPING           ==> */ A_ERROR | A_EXIT_1,
 784      /* S_TERMINATE          ==> */ A_ERROR | A_EXIT_1,
 785      /* S_TRANSITION_ENGINE  ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START,
 786      /* S_HALT               ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START,
 787      },
 788 
 789 /* Got an I_FAIL */
 790     {
 791      /* S_IDLE               ==> */ A_WARN,
 792      /* S_ELECTION           ==> */ A_WARN,
 793      /* S_INTEGRATION        ==> */ A_WARN | A_DC_JOIN_OFFER_ALL,
 794      /* S_FINALIZE_JOIN      ==> */ A_WARN | A_DC_JOIN_OFFER_ALL,
 795      /* S_NOT_DC             ==> */ A_WARN,
 796      /* S_POLICY_ENGINE      ==> */ A_WARN | A_DC_JOIN_OFFER_ALL | A_TE_CANCEL,
 797      /* S_RECOVERY           ==> */ A_WARN | O_RELEASE,
 798      /* S_RELEASE_DC         ==> */ A_WARN,
 799      /* S_STARTING           ==> */ A_WARN,
 800      /* S_PENDING            ==> */ A_WARN,
 801      /* S_STOPPING           ==> */ A_WARN,
 802      /* S_TERMINATE          ==> */ A_WARN | A_EXIT_1,
 803      /* S_TRANSITION_ENGINE  ==> */ A_WARN | O_LRM_RECONNECT | A_PE_INVOKE | A_TE_CANCEL,
 804      /* S_HALT               ==> */ A_WARN,
 805      },
 806 
 807 /* Got an I_INTEGRATED */
 808     {
 809      /* S_IDLE               ==> */ A_NOTHING,
 810      /* S_ELECTION           ==> */ A_WARN,
 811      /* S_INTEGRATION        ==> */ A_DC_JOIN_FINALIZE,
 812      /* S_FINALIZE_JOIN      ==> */ A_WARN,
 813      /* S_NOT_DC             ==> */ A_WARN,
 814      /* S_POLICY_ENGINE      ==> */ A_NOTHING,
 815      /* S_RECOVERY           ==> */ A_WARN,
 816      /* S_RELEASE_DC         ==> */ A_WARN,
 817      /* S_STARTING           ==> */ A_WARN,
 818      /* S_PENDING            ==> */ A_WARN,
 819      /* S_STOPPING           ==> */ A_WARN,
 820      /* S_TERMINATE          ==> */ A_WARN,
 821      /* S_TRANSITION_ENGINE  ==> */ A_NOTHING,
 822      /* S_HALT               ==> */ A_WARN,
 823      },
 824 
 825 /* Got an I_FINALIZED */
 826     {
 827      /* S_IDLE               ==> */ A_NOTHING,
 828      /* S_ELECTION           ==> */ A_WARN,
 829      /* S_INTEGRATION        ==> */ A_WARN,
 830      /* S_FINALIZE_JOIN      ==> */ A_DC_JOIN_FINAL | A_TE_CANCEL,
 831      /* S_NOT_DC             ==> */ A_WARN,
 832      /* S_POLICY_ENGINE      ==> */ A_NOTHING,
 833      /* S_RECOVERY           ==> */ A_WARN,
 834      /* S_RELEASE_DC         ==> */ A_WARN,
 835      /* S_STARTING           ==> */ A_WARN,
 836      /* S_PENDING            ==> */ A_WARN,
 837      /* S_STOPPING           ==> */ A_WARN,
 838      /* S_TERMINATE          ==> */ A_WARN,
 839      /* S_TRANSITION_ENGINE  ==> */ A_NOTHING,
 840      /* S_HALT               ==> */ A_WARN,
 841      },
 842 
 843 /* Got an I_NODE_JOIN */
 844     {
 845      /* S_IDLE               ==> */ A_TE_HALT | A_DC_JOIN_OFFER_ONE,
 846      /* S_ELECTION           ==> */ A_WARN,
 847      /* S_INTEGRATION        ==> */ A_DC_JOIN_OFFER_ONE,
 848      /* S_FINALIZE_JOIN      ==> */ A_DC_JOIN_OFFER_ONE,
 849      /* S_NOT_DC             ==> */ A_WARN,
 850      /* S_POLICY_ENGINE      ==> */ A_DC_JOIN_OFFER_ONE,
 851      /* S_RECOVERY           ==> */ A_WARN,
 852      /* S_RELEASE_DC         ==> */ A_WARN,
 853      /* S_STARTING           ==> */ A_WARN,
 854      /* S_PENDING            ==> */ A_WARN,
 855      /* S_STOPPING           ==> */ A_WARN,
 856      /* S_TERMINATE          ==> */ A_WARN,
 857      /* S_TRANSITION_ENGINE  ==> */ A_TE_HALT | A_DC_JOIN_OFFER_ONE,
 858      /* S_HALT               ==> */ A_WARN,
 859      },
 860 
 861 /* Got an I_NOT_DC */
 862     {
 863      /* S_IDLE               ==> */ A_WARN | O_RELEASE,
 864      /* S_ELECTION           ==> */ A_ERROR | A_ELECTION_START | A_DC_TIMER_STOP,
 865      /* S_INTEGRATION        ==> */ A_ERROR | O_RELEASE,
 866      /* S_FINALIZE_JOIN      ==> */ A_ERROR | O_RELEASE,
 867      /* S_NOT_DC             ==> */ A_LOG,
 868      /* S_POLICY_ENGINE      ==> */ A_ERROR | O_RELEASE,
 869      /* S_RECOVERY           ==> */ A_ERROR | O_RELEASE,
 870      /* S_RELEASE_DC         ==> */ A_ERROR | O_RELEASE,
 871      /* S_STARTING           ==> */ A_WARN,
 872      /* S_PENDING            ==> */ A_LOG | A_DC_TIMER_STOP,
 873      /* S_STOPPING           ==> */ A_WARN,
 874      /* S_TERMINATE          ==> */ A_WARN,
 875      /* S_TRANSITION_ENGINE  ==> */ A_ERROR | O_RELEASE,
 876      /* S_HALT               ==> */ A_WARN,
 877      },
 878 
 879 /* Got an I_RECOVERED */
 880     {
 881      /* S_IDLE               ==> */ A_WARN,
 882      /* S_ELECTION           ==> */ A_ELECTION_VOTE,
 883      /* S_INTEGRATION        ==> */ A_WARN,
 884      /* S_FINALIZE_JOIN      ==> */ A_WARN,
 885      /* S_NOT_DC             ==> */ A_WARN,
 886      /* S_POLICY_ENGINE      ==> */ A_WARN,
 887      /* S_RECOVERY           ==> */ A_LOG,
 888      /* S_RELEASE_DC         ==> */ A_WARN,
 889      /* S_STARTING           ==> */ A_WARN,
 890      /* S_PENDING            ==> */ A_WARN,
 891      /* S_STOPPING           ==> */ A_WARN,
 892      /* S_TERMINATE          ==> */ A_WARN,
 893      /* S_TRANSITION_ENGINE  ==> */ A_WARN,
 894      /* S_HALT               ==> */ A_WARN,
 895      },
 896 
 897 /* Got an I_RELEASE_FAIL */
 898     {
 899      /* S_IDLE               ==> */ A_WARN,
 900      /* S_ELECTION           ==> */ A_WARN,
 901      /* S_INTEGRATION        ==> */ A_WARN,
 902      /* S_FINALIZE_JOIN      ==> */ A_WARN,
 903      /* S_NOT_DC             ==> */ A_WARN,
 904      /* S_POLICY_ENGINE      ==> */ A_NOTHING,
 905      /* S_RECOVERY           ==> */ A_WARN | A_SHUTDOWN_REQ,
 906      /* S_RELEASE_DC         ==> */ A_NOTHING,
 907      /* S_STARTING           ==> */ A_WARN,
 908      /* S_PENDING            ==> */ A_WARN,
 909      /* S_STOPPING           ==> */ A_WARN,
 910      /* S_TERMINATE          ==> */ A_WARN,
 911      /* S_TRANSITION_ENGINE  ==> */ A_WARN,
 912      /* S_HALT               ==> */ A_WARN,
 913      },
 914 
 915 /* Got an I_RELEASE_SUCCESS */
 916     {
 917      /* S_IDLE               ==> */ A_WARN,
 918      /* S_ELECTION           ==> */ A_WARN,
 919      /* S_INTEGRATION        ==> */ A_WARN,
 920      /* S_FINALIZE_JOIN      ==> */ A_WARN,
 921      /* S_NOT_DC             ==> */ A_WARN,
 922      /* S_POLICY_ENGINE      ==> */ A_WARN,
 923      /* S_RECOVERY           ==> */ A_WARN,
 924      /* S_RELEASE_DC         ==> */ A_LOG,
 925      /* S_STARTING           ==> */ A_WARN,
 926      /* S_PENDING            ==> */ A_LOG,
 927      /* S_STOPPING           ==> */ A_WARN,
 928      /* S_TERMINATE          ==> */ A_WARN,
 929      /* S_TRANSITION_ENGINE  ==> */ A_WARN,
 930      /* S_HALT               ==> */ A_WARN,
 931      },
 932 
 933 /* Got an I_RESTART */
 934     {
 935      /* S_IDLE               ==> */ A_NOTHING,
 936      /* S_ELECTION           ==> */ A_LOG | A_ELECTION_VOTE,
 937      /* S_INTEGRATION        ==> */ A_LOG | A_DC_JOIN_OFFER_ALL,
 938      /* S_FINALIZE_JOIN      ==> */ A_LOG | A_DC_JOIN_FINALIZE,
 939      /* S_NOT_DC             ==> */ A_LOG | A_NOTHING,
 940      /* S_POLICY_ENGINE      ==> */ A_LOG | A_PE_INVOKE,
 941      /* S_RECOVERY           ==> */ A_LOG | A_RECOVER | O_RELEASE,
 942      /* S_RELEASE_DC         ==> */ A_LOG | O_RELEASE,
 943      /* S_STARTING           ==> */ A_LOG,
 944      /* S_PENDING            ==> */ A_LOG,
 945      /* S_STOPPING           ==> */ A_LOG,
 946      /* S_TERMINATE          ==> */ A_LOG,
 947      /* S_TRANSITION_ENGINE  ==> */ A_LOG | A_TE_INVOKE,
 948      /* S_HALT               ==> */ A_WARN,
 949      },
 950 
 951 /* Got an I_TE_SUCCESS */
 952     {
 953      /* S_IDLE               ==> */ A_LOG,
 954      /* S_ELECTION           ==> */ A_WARN,
 955      /* S_INTEGRATION        ==> */ A_WARN,
 956      /* S_FINALIZE_JOIN      ==> */ A_WARN,
 957      /* S_NOT_DC             ==> */ A_ERROR,
 958      /* S_POLICY_ENGINE      ==> */ A_WARN,
 959      /* S_RECOVERY           ==> */ A_RECOVER | A_WARN,
 960      /* S_RELEASE_DC         ==> */ A_WARN,
 961      /* S_STARTING           ==> */ A_ERROR,
 962      /* S_PENDING            ==> */ A_ERROR,
 963      /* S_STOPPING           ==> */ A_WARN,
 964      /* S_TERMINATE          ==> */ A_WARN,
 965      /* S_TRANSITION_ENGINE  ==> */ A_LOG,
 966      /* S_HALT               ==> */ A_WARN,
 967      },
 968 
 969 /* Got an I_ROUTER */
 970     {
 971      /* S_IDLE               ==> */ A_MSG_ROUTE,
 972      /* S_ELECTION           ==> */ A_MSG_ROUTE,
 973      /* S_INTEGRATION        ==> */ A_MSG_ROUTE,
 974      /* S_FINALIZE_JOIN      ==> */ A_MSG_ROUTE,
 975      /* S_NOT_DC             ==> */ A_MSG_ROUTE,
 976      /* S_POLICY_ENGINE      ==> */ A_MSG_ROUTE,
 977      /* S_RECOVERY           ==> */ A_MSG_ROUTE,
 978      /* S_RELEASE_DC         ==> */ A_MSG_ROUTE,
 979      /* S_STARTING           ==> */ A_MSG_ROUTE,
 980      /* S_PENDING            ==> */ A_MSG_ROUTE,
 981      /* S_STOPPING           ==> */ A_MSG_ROUTE,
 982      /* S_TERMINATE          ==> */ A_MSG_ROUTE,
 983      /* S_TRANSITION_ENGINE  ==> */ A_MSG_ROUTE,
 984      /* S_HALT               ==> */ A_WARN | A_MSG_ROUTE,
 985      },
 986 
 987 /* Got an I_SHUTDOWN */
 988     {
 989      /* S_IDLE               ==> */ A_LOG | A_SHUTDOWN_REQ,
 990      /* S_ELECTION           ==> */ A_LOG | A_SHUTDOWN_REQ | A_ELECTION_VOTE,
 991      /* S_INTEGRATION        ==> */ A_LOG | A_SHUTDOWN_REQ,
 992      /* S_FINALIZE_JOIN      ==> */ A_LOG | A_SHUTDOWN_REQ,
 993      /* S_NOT_DC             ==> */ A_SHUTDOWN_REQ,
 994      /* S_POLICY_ENGINE      ==> */ A_LOG | A_SHUTDOWN_REQ,
 995      /* S_RECOVERY           ==> */ A_WARN | O_EXIT | O_RELEASE,
 996      /* S_RELEASE_DC         ==> */ A_WARN | A_SHUTDOWN_REQ,
 997      /* S_STARTING           ==> */ A_WARN | O_EXIT,
 998      /* S_PENDING            ==> */ A_SHUTDOWN_REQ,
 999      /* S_STOPPING           ==> */ A_LOG,
1000      /* S_TERMINATE          ==> */ A_LOG,
1001      /* S_TRANSITION_ENGINE  ==> */ A_WARN | A_SHUTDOWN_REQ,
1002      /* S_HALT               ==> */ A_WARN | A_ELECTION_START | A_SHUTDOWN_REQ,
1003      },
1004 
1005 /* Got an I_STOP */
1006     {
1007      /* S_IDLE               ==> */ A_ERROR | O_RELEASE | O_EXIT,
1008      /* S_ELECTION           ==> */ O_RELEASE | O_EXIT,
1009      /* S_INTEGRATION        ==> */ A_WARN | O_RELEASE | O_EXIT,
1010      /* S_FINALIZE_JOIN      ==> */ A_ERROR | O_RELEASE | O_EXIT,
1011      /* S_NOT_DC             ==> */ O_EXIT,
1012      /* S_POLICY_ENGINE      ==> */ A_WARN | O_RELEASE | O_EXIT,
1013      /* S_RECOVERY           ==> */ A_ERROR | O_RELEASE | O_EXIT,
1014      /* S_RELEASE_DC         ==> */ A_ERROR | O_RELEASE | O_EXIT,
1015      /* S_STARTING           ==> */ O_EXIT,
1016      /* S_PENDING            ==> */ O_EXIT,
1017      /* S_STOPPING           ==> */ O_EXIT,
1018      /* S_TERMINATE          ==> */ A_ERROR | A_EXIT_1,
1019      /* S_TRANSITION_ENGINE  ==> */ A_LOG | O_RELEASE | O_EXIT,
1020      /* S_HALT               ==> */ O_RELEASE | O_EXIT | A_WARN,
1021      },
1022 
1023 /* Got an I_TERMINATE */
1024     {
1025      /* S_IDLE               ==> */ A_ERROR | O_EXIT,
1026      /* S_ELECTION           ==> */ A_ERROR | O_EXIT,
1027      /* S_INTEGRATION        ==> */ A_ERROR | O_EXIT,
1028      /* S_FINALIZE_JOIN      ==> */ A_ERROR | O_EXIT,
1029      /* S_NOT_DC             ==> */ A_ERROR | O_EXIT,
1030      /* S_POLICY_ENGINE      ==> */ A_ERROR | O_EXIT,
1031      /* S_RECOVERY           ==> */ A_ERROR | O_EXIT,
1032      /* S_RELEASE_DC         ==> */ A_ERROR | O_EXIT,
1033      /* S_STARTING           ==> */ O_EXIT,
1034      /* S_PENDING            ==> */ A_ERROR | O_EXIT,
1035      /* S_STOPPING           ==> */ O_EXIT,
1036      /* S_TERMINATE          ==> */ O_EXIT,
1037      /* S_TRANSITION_ENGINE  ==> */ A_ERROR | O_EXIT,
1038      /* S_HALT               ==> */ A_ERROR | O_EXIT,
1039      },
1040 
1041 /* Got an I_STARTUP */
1042     {
1043      /* S_IDLE               ==> */ A_WARN,
1044      /* S_ELECTION           ==> */ A_WARN,
1045      /* S_INTEGRATION        ==> */ A_WARN,
1046      /* S_FINALIZE_JOIN      ==> */ A_WARN,
1047      /* S_NOT_DC             ==> */ A_WARN,
1048      /* S_POLICY_ENGINE      ==> */ A_WARN,
1049      /* S_RECOVERY           ==> */ A_WARN,
1050      /* S_RELEASE_DC         ==> */ A_WARN,
1051      /* S_STARTING           ==> */
1052      A_LOG | A_STARTUP | A_CIB_START | A_LRM_CONNECT | A_HA_CONNECT | A_READCONFIG | A_STARTED,
1053      /* S_PENDING            ==> */ A_LOG,
1054      /* S_STOPPING           ==> */ A_WARN,
1055      /* S_TERMINATE          ==> */ A_WARN,
1056      /* S_TRANSITION_ENGINE  ==> */ A_WARN,
1057      /* S_HALT               ==> */ A_WARN,
1058      },
1059 
1060 /* Got an I_PE_SUCCESS */
1061     {
1062      /* S_IDLE               ==> */ A_LOG,
1063      /* S_ELECTION           ==> */ A_WARN,
1064      /* S_INTEGRATION        ==> */ A_WARN,
1065      /* S_FINALIZE_JOIN      ==> */ A_WARN,
1066      /* S_NOT_DC             ==> */ A_NOTHING,
1067      /* S_POLICY_ENGINE      ==> */ A_TE_INVOKE,
1068      /* S_RECOVERY           ==> */ A_RECOVER | A_LOG,
1069      /* S_RELEASE_DC         ==> */ A_LOG,
1070      /* S_STARTING           ==> */ A_ERROR,
1071      /* S_PENDING            ==> */ A_LOG,
1072      /* S_STOPPING           ==> */ A_ERROR,
1073      /* S_TERMINATE          ==> */ A_ERROR,
1074      /* S_TRANSITION_ENGINE  ==> */ A_LOG,
1075      /* S_HALT               ==> */ A_WARN,
1076      },
1077 
1078 /* Got an I_JOIN_OFFER */
1079     {
1080      /* S_IDLE               ==> */ A_WARN | A_CL_JOIN_REQUEST,
1081      /* S_ELECTION           ==> */ A_WARN | A_ELECTION_VOTE,
1082      /* S_INTEGRATION        ==> */ A_CL_JOIN_REQUEST,
1083      /* S_FINALIZE_JOIN      ==> */ A_CL_JOIN_REQUEST,
1084      /* S_NOT_DC             ==> */ A_CL_JOIN_REQUEST | A_DC_TIMER_STOP,
1085      /* S_POLICY_ENGINE      ==> */ A_WARN | A_CL_JOIN_REQUEST,
1086      /* S_RECOVERY           ==> */ A_WARN | A_CL_JOIN_REQUEST | A_DC_TIMER_STOP,
1087      /* S_RELEASE_DC         ==> */ A_WARN | A_CL_JOIN_REQUEST | A_DC_TIMER_STOP,
1088      /* S_STARTING           ==> */ A_LOG,
1089      /* S_PENDING            ==> */ A_CL_JOIN_REQUEST | A_DC_TIMER_STOP,
1090      /* S_STOPPING           ==> */ A_LOG,
1091      /* S_TERMINATE          ==> */ A_LOG,
1092      /* S_TRANSITION_ENGINE  ==> */ A_WARN | A_CL_JOIN_REQUEST,
1093      /* S_HALT               ==> */ A_WARN,
1094      },
1095 
1096 /* Got an I_JOIN_REQUEST */
1097     {
1098      /* S_IDLE               ==> */ A_DC_JOIN_OFFER_ONE,
1099      /* S_ELECTION           ==> */ A_WARN,
1100      /* S_INTEGRATION        ==> */ A_DC_JOIN_PROCESS_REQ,
1101      /* S_FINALIZE_JOIN      ==> */ A_DC_JOIN_OFFER_ONE,
1102      /* S_NOT_DC             ==> */ A_WARN,
1103      /* S_POLICY_ENGINE      ==> */ A_DC_JOIN_OFFER_ONE,
1104      /* S_RECOVERY           ==> */ A_WARN,
1105      /* S_RELEASE_DC         ==> */ A_WARN,
1106      /* S_STARTING           ==> */ A_WARN,
1107      /* S_PENDING            ==> */ A_WARN,
1108      /* S_STOPPING           ==> */ A_WARN,
1109      /* S_TERMINATE          ==> */ A_WARN,
1110      /* S_TRANSITION_ENGINE  ==> */ A_DC_JOIN_OFFER_ONE,
1111      /* S_HALT               ==> */ A_WARN,
1112      },
1113 
1114 /* Got an I_JOIN_RESULT */
1115     {
1116      /* S_IDLE               ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL,
1117      /* S_ELECTION           ==> */ A_LOG,
1118      /* S_INTEGRATION        ==> */ A_LOG | A_CL_JOIN_RESULT  | A_DC_JOIN_PROCESS_ACK,
1119      /* S_FINALIZE_JOIN      ==> */ A_CL_JOIN_RESULT | A_DC_JOIN_PROCESS_ACK,
1120      /* S_NOT_DC             ==> */ A_ERROR | A_CL_JOIN_ANNOUNCE,
1121      /* S_POLICY_ENGINE      ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL,
1122      /* S_RECOVERY           ==> */ A_LOG,
1123      /* S_RELEASE_DC         ==> */ A_LOG,
1124      /* S_STARTING           ==> */ A_ERROR,
1125      /* S_PENDING            ==> */ A_CL_JOIN_RESULT,
1126      /* S_STOPPING           ==> */ A_ERROR,
1127      /* S_TERMINATE          ==> */ A_ERROR,
1128      /* S_TRANSITION_ENGINE  ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL,
1129      /* S_HALT               ==> */ A_WARN,
1130      },
1131 
1132 /* Got an I_WAIT_FOR_EVENT */
1133     {
1134      /* S_IDLE               ==> */ A_LOG,
1135      /* S_ELECTION           ==> */ A_LOG,
1136      /* S_INTEGRATION        ==> */ A_LOG,
1137      /* S_FINALIZE_JOIN      ==> */ A_LOG,
1138      /* S_NOT_DC             ==> */ A_LOG,
1139      /* S_POLICY_ENGINE      ==> */ A_LOG,
1140      /* S_RECOVERY           ==> */ A_LOG,
1141      /* S_RELEASE_DC         ==> */ A_LOG,
1142      /* S_STARTING           ==> */ A_LOG,
1143      /* S_PENDING            ==> */ A_LOG,
1144      /* S_STOPPING           ==> */ A_LOG,
1145      /* S_TERMINATE          ==> */ A_LOG,
1146      /* S_TRANSITION_ENGINE  ==> */ A_LOG,
1147      /* S_HALT               ==> */ A_WARN,
1148      },
1149 
1150 /* Got an I_DC_HEARTBEAT */
1151     {
1152      /* S_IDLE               ==> */ A_ERROR,
1153      /* S_ELECTION           ==> */ A_WARN | A_ELECTION_VOTE,
1154      /* S_INTEGRATION        ==> */ A_ERROR,
1155      /* S_FINALIZE_JOIN      ==> */ A_ERROR,
1156      /* S_NOT_DC             ==> */ A_NOTHING,
1157      /* S_POLICY_ENGINE      ==> */ A_ERROR,
1158      /* S_RECOVERY           ==> */ A_NOTHING,
1159      /* S_RELEASE_DC         ==> */ A_LOG,
1160      /* S_STARTING           ==> */ A_LOG,
1161      /* S_PENDING            ==> */ A_LOG | A_CL_JOIN_ANNOUNCE,
1162      /* S_STOPPING           ==> */ A_NOTHING,
1163      /* S_TERMINATE          ==> */ A_NOTHING,
1164      /* S_TRANSITION_ENGINE  ==> */ A_ERROR,
1165      /* S_HALT               ==> */ A_WARN,
1166      },
1167 
1168 /* Got an I_LRM_EVENT */
1169     {
1170      /* S_IDLE               ==> */ A_LRM_EVENT,
1171      /* S_ELECTION           ==> */ A_LRM_EVENT,
1172      /* S_INTEGRATION        ==> */ A_LRM_EVENT,
1173      /* S_FINALIZE_JOIN      ==> */ A_LRM_EVENT,
1174      /* S_NOT_DC             ==> */ A_LRM_EVENT,
1175      /* S_POLICY_ENGINE      ==> */ A_LRM_EVENT,
1176      /* S_RECOVERY           ==> */ A_LRM_EVENT,
1177      /* S_RELEASE_DC         ==> */ A_LRM_EVENT,
1178      /* S_STARTING           ==> */ A_LRM_EVENT,
1179      /* S_PENDING            ==> */ A_LRM_EVENT,
1180      /* S_STOPPING           ==> */ A_LRM_EVENT,
1181      /* S_TERMINATE          ==> */ A_LRM_EVENT,
1182      /* S_TRANSITION_ENGINE  ==> */ A_LRM_EVENT,
1183      /* S_HALT               ==> */ A_WARN,
1184      },
1185 
1186 /* For everyone ending up in S_PENDING, (re)start the DC timer and wait for I_JOIN_OFFER or I_NOT_DC */
1187 /* Got an I_PENDING */
1188     {
1189      /* S_IDLE               ==> */ O_RELEASE | O_DC_TIMER_RESTART,
1190      /* S_ELECTION           ==> */ O_RELEASE | O_DC_TIMER_RESTART,
1191      /* S_INTEGRATION        ==> */ O_RELEASE | O_DC_TIMER_RESTART,
1192      /* S_FINALIZE_JOIN      ==> */ O_RELEASE | O_DC_TIMER_RESTART,
1193      /* S_NOT_DC             ==> */ A_LOG | O_DC_TIMER_RESTART,
1194      /* S_POLICY_ENGINE      ==> */ O_RELEASE | O_DC_TIMER_RESTART,
1195      /* S_RECOVERY           ==> */ A_WARN,
1196      /* S_RELEASE_DC         ==> */ A_WARN | O_DC_TIMER_RESTART,
1197      /* S_STARTING           ==> */ A_LOG | A_DC_TIMER_START | A_CL_JOIN_QUERY,
1198      /* S_PENDING            ==> */ A_LOG | O_DC_TIMER_RESTART,
1199      /* S_STOPPING           ==> */ A_WARN,
1200      /* S_TERMINATE          ==> */ A_WARN,
1201      /* S_TRANSITION_ENGINE  ==> */ O_RELEASE | O_DC_TIMER_RESTART,
1202      /* S_HALT               ==> */ A_WARN,
1203      },
1204 
1205 /* Got an I_HALT */
1206     {
1207      /* S_IDLE               ==> */ A_WARN,
1208      /* S_ELECTION           ==> */ A_WARN,
1209      /* S_INTEGRATION        ==> */ A_WARN,
1210      /* S_FINALIZE_JOIN      ==> */ A_WARN,
1211      /* S_NOT_DC             ==> */ A_WARN,
1212      /* S_POLICY_ENGINE      ==> */ A_WARN,
1213      /* S_RECOVERY           ==> */ A_WARN,
1214      /* S_RELEASE_DC         ==> */ A_WARN,
1215      /* S_STARTING           ==> */ A_WARN,
1216      /* S_PENDING            ==> */ A_WARN,
1217      /* S_STOPPING           ==> */ A_WARN,
1218      /* S_TERMINATE          ==> */ A_WARN,
1219      /* S_TRANSITION_ENGINE  ==> */ A_WARN,
1220      /* S_HALT               ==> */ A_WARN,
1221      },
1222 };
1223 
1224 /*!
1225  * \internal
1226  * \brief Get the next FSA state given an input and the current state
1227  *
1228  * \param[in] input  FSA input
1229  *
1230  * \return The next FSA state
1231  */
1232 enum crmd_fsa_state
1233 controld_fsa_get_next_state(enum crmd_fsa_input input)
     /* [previous][next][first][last][top][bottom][index][help] */
1234 {
1235     return fsa_next_states[input][controld_globals.fsa_state];
1236 }
1237 
1238 /*!
1239  * \internal
1240  * \brief Get the appropriate FSA action given an input and the current state
1241  *
1242  * \param[in] input  FSA input
1243  *
1244  * \return The appropriate FSA action
1245  */
1246 uint64_t
1247 controld_fsa_get_action(enum crmd_fsa_input input)
     /* [previous][next][first][last][top][bottom][index][help] */
1248 {
1249     return fsa_actions[input][controld_globals.fsa_state];
1250 }

/* [previous][next][first][last][top][bottom][index][help] */