1 /* 2 * Copyright 2004-2025 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_UPDATE */ 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_RECOVERY, 46 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 47 /* S_RECOVERY ==> */ S_RECOVERY, 48 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 49 /* S_STARTING ==> */ S_RECOVERY, 50 /* S_PENDING ==> */ S_RECOVERY, 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_DC_TIMEOUT */ 58 { 59 /* S_IDLE ==> */ S_RECOVERY, 60 /* S_ELECTION ==> */ S_ELECTION, 61 /* S_INTEGRATION ==> */ S_RECOVERY, 62 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 63 /* S_NOT_DC ==> */ S_ELECTION, 64 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 65 /* S_RECOVERY ==> */ S_RECOVERY, 66 /* S_RELEASE_DC ==> */ S_RECOVERY, 67 /* S_STARTING ==> */ S_STARTING, 68 /* S_PENDING ==> */ S_ELECTION, 69 /* S_STOPPING ==> */ S_STOPPING, 70 /* S_TERMINATE ==> */ S_TERMINATE, 71 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 72 /* S_HALT ==> */ S_ELECTION, 73 }, 74 75 /* Got an I_ELECTION */ 76 { 77 /* S_IDLE ==> */ S_ELECTION, 78 /* S_ELECTION ==> */ S_ELECTION, 79 /* S_INTEGRATION ==> */ S_ELECTION, 80 /* S_FINALIZE_JOIN ==> */ S_ELECTION, 81 /* S_NOT_DC ==> */ S_ELECTION, 82 /* S_POLICY_ENGINE ==> */ S_ELECTION, 83 /* S_RECOVERY ==> */ S_RECOVERY, 84 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 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_ELECTION, 90 /* S_HALT ==> */ S_HALT, 91 }, 92 93 /* Got an I_PE_CALC */ 94 { 95 /* S_IDLE ==> */ S_POLICY_ENGINE, 96 /* S_ELECTION ==> */ S_ELECTION, 97 /* S_INTEGRATION ==> */ S_INTEGRATION, 98 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 99 /* S_NOT_DC ==> */ S_NOT_DC, 100 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 101 /* S_RECOVERY ==> */ S_RECOVERY, 102 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 103 /* S_STARTING ==> */ S_RECOVERY, 104 /* S_PENDING ==> */ S_PENDING, 105 /* S_STOPPING ==> */ S_STOPPING, 106 /* S_TERMINATE ==> */ S_TERMINATE, 107 /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, 108 /* S_HALT ==> */ S_HALT, 109 }, 110 111 /* Got an I_RELEASE_DC */ 112 { 113 /* S_IDLE ==> */ S_RELEASE_DC, 114 /* S_ELECTION ==> */ S_RELEASE_DC, 115 /* S_INTEGRATION ==> */ S_RELEASE_DC, 116 /* S_FINALIZE_JOIN ==> */ S_RELEASE_DC, 117 /* S_NOT_DC ==> */ S_NOT_DC, 118 /* S_POLICY_ENGINE ==> */ S_RELEASE_DC, 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_RELEASE_DC, 126 /* S_HALT ==> */ S_HALT, 127 }, 128 129 /* Got an I_ELECTION_DC */ 130 { 131 /* S_IDLE ==> */ S_INTEGRATION, 132 /* S_ELECTION ==> */ S_INTEGRATION, 133 /* S_INTEGRATION ==> */ S_INTEGRATION, 134 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 135 /* S_NOT_DC ==> */ S_INTEGRATION, 136 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 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_INTEGRATION, 144 /* S_HALT ==> */ S_HALT, 145 }, 146 147 /* Got an I_ERROR */ 148 { 149 /* S_IDLE ==> */ S_RECOVERY, 150 /* S_ELECTION ==> */ S_RECOVERY, 151 /* S_INTEGRATION ==> */ S_RECOVERY, 152 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 153 /* S_NOT_DC ==> */ S_RECOVERY, 154 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 155 /* S_RECOVERY ==> */ S_RECOVERY, 156 /* S_RELEASE_DC ==> */ S_RECOVERY, 157 /* S_STARTING ==> */ S_RECOVERY, 158 /* S_PENDING ==> */ S_RECOVERY, 159 /* S_STOPPING ==> */ S_TERMINATE, 160 /* S_TERMINATE ==> */ S_TERMINATE, 161 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 162 /* S_HALT ==> */ S_RECOVERY, 163 }, 164 165 /* Got an I_FAIL */ 166 { 167 /* S_IDLE ==> */ S_RECOVERY, 168 /* S_ELECTION ==> */ S_RELEASE_DC, 169 /* S_INTEGRATION ==> */ S_INTEGRATION, 170 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 171 /* S_NOT_DC ==> */ S_RECOVERY, 172 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 173 /* S_RECOVERY ==> */ S_RECOVERY, 174 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 175 /* S_STARTING ==> */ S_STOPPING, 176 /* S_PENDING ==> */ S_STOPPING, 177 /* S_STOPPING ==> */ S_STOPPING, 178 /* S_TERMINATE ==> */ S_TERMINATE, 179 /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, 180 /* S_HALT ==> */ S_RELEASE_DC, 181 }, 182 183 /* Got an I_INTEGRATED */ 184 { 185 /* S_IDLE ==> */ S_IDLE, 186 /* S_ELECTION ==> */ S_ELECTION, 187 /* S_INTEGRATION ==> */ S_FINALIZE_JOIN, 188 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 189 /* S_NOT_DC ==> */ S_NOT_DC, 190 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 191 /* S_RECOVERY ==> */ S_RECOVERY, 192 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 193 /* S_STARTING ==> */ S_RECOVERY, 194 /* S_PENDING ==> */ S_RECOVERY, 195 /* S_STOPPING ==> */ S_STOPPING, 196 /* S_TERMINATE ==> */ S_TERMINATE, 197 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 198 /* S_HALT ==> */ S_HALT, 199 }, 200 201 /* Got an I_FINALIZED */ 202 { 203 /* S_IDLE ==> */ S_IDLE, 204 /* S_ELECTION ==> */ S_ELECTION, 205 /* S_INTEGRATION ==> */ S_INTEGRATION, 206 /* S_FINALIZE_JOIN ==> */ S_POLICY_ENGINE, 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_NODE_JOIN */ 220 { 221 /* S_IDLE ==> */ S_INTEGRATION, 222 /* S_ELECTION ==> */ S_ELECTION, 223 /* S_INTEGRATION ==> */ S_INTEGRATION, 224 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 225 /* S_NOT_DC ==> */ S_NOT_DC, 226 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 227 /* S_RECOVERY ==> */ S_RECOVERY, 228 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 229 /* S_STARTING ==> */ S_RECOVERY, 230 /* S_PENDING ==> */ S_PENDING, 231 /* S_STOPPING ==> */ S_STOPPING, 232 /* S_TERMINATE ==> */ S_TERMINATE, 233 /* S_TRANSITION_ENGINE ==> */ S_INTEGRATION, 234 /* S_HALT ==> */ S_HALT, 235 }, 236 237 /* Got an I_NOT_DC */ 238 { 239 /* S_IDLE ==> */ S_RECOVERY, 240 /* S_ELECTION ==> */ S_ELECTION, 241 /* S_INTEGRATION ==> */ S_RECOVERY, 242 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 243 /* S_NOT_DC ==> */ S_NOT_DC, 244 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 245 /* S_RECOVERY ==> */ S_RECOVERY, 246 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 247 /* S_STARTING ==> */ S_RECOVERY, 248 /* S_PENDING ==> */ S_NOT_DC, 249 /* S_STOPPING ==> */ S_STOPPING, 250 /* S_TERMINATE ==> */ S_TERMINATE, 251 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 252 /* S_HALT ==> */ S_HALT, 253 }, 254 255 /* Got an I_RECOVERED */ 256 { 257 /* S_IDLE ==> */ S_IDLE, 258 /* S_ELECTION ==> */ S_ELECTION, 259 /* S_INTEGRATION ==> */ S_INTEGRATION, 260 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 261 /* S_NOT_DC ==> */ S_NOT_DC, 262 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 263 /* S_RECOVERY ==> */ S_PENDING, 264 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 265 /* S_STARTING ==> */ S_STARTING, 266 /* S_PENDING ==> */ S_PENDING, 267 /* S_STOPPING ==> */ S_STOPPING, 268 /* S_TERMINATE ==> */ S_TERMINATE, 269 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 270 /* S_HALT ==> */ S_HALT, 271 }, 272 273 /* Got an I_RELEASE_FAIL */ 274 { 275 /* S_IDLE ==> */ S_STOPPING, 276 /* S_ELECTION ==> */ S_STOPPING, 277 /* S_INTEGRATION ==> */ S_STOPPING, 278 /* S_FINALIZE_JOIN ==> */ S_STOPPING, 279 /* S_NOT_DC ==> */ S_NOT_DC, 280 /* S_POLICY_ENGINE ==> */ S_STOPPING, 281 /* S_RECOVERY ==> */ S_STOPPING, 282 /* S_RELEASE_DC ==> */ S_STOPPING, 283 /* S_STARTING ==> */ S_RECOVERY, 284 /* S_PENDING ==> */ S_PENDING, 285 /* S_STOPPING ==> */ S_STOPPING, 286 /* S_TERMINATE ==> */ S_TERMINATE, 287 /* S_TRANSITION_ENGINE ==> */ S_STOPPING, 288 /* S_HALT ==> */ S_HALT, 289 }, 290 291 /* Got an I_RELEASE_SUCCESS */ 292 { 293 /* S_IDLE ==> */ S_RECOVERY, 294 /* S_ELECTION ==> */ S_ELECTION, 295 /* S_INTEGRATION ==> */ S_RECOVERY, 296 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 297 /* S_NOT_DC ==> */ S_NOT_DC, 298 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 299 /* S_RECOVERY ==> */ S_RECOVERY, 300 /* S_RELEASE_DC ==> */ S_PENDING, 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_RECOVERY, 306 /* S_HALT ==> */ S_HALT, 307 }, 308 309 /* Got an I_RESTART */ 310 { 311 /* S_IDLE ==> */ S_IDLE, 312 /* S_ELECTION ==> */ S_ELECTION, 313 /* S_INTEGRATION ==> */ S_INTEGRATION, 314 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 315 /* S_NOT_DC ==> */ S_NOT_DC, 316 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 317 /* S_RECOVERY ==> */ S_RECOVERY, 318 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 319 /* S_STARTING ==> */ S_STARTING, 320 /* S_PENDING ==> */ S_PENDING, 321 /* S_STOPPING ==> */ S_STOPPING, 322 /* S_TERMINATE ==> */ S_TERMINATE, 323 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 324 /* S_HALT ==> */ S_HALT, 325 }, 326 327 /* Got an I_TE_SUCCESS */ 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_RECOVERY, 338 /* S_PENDING ==> */ S_PENDING, 339 /* S_STOPPING ==> */ S_STOPPING, 340 /* S_TERMINATE ==> */ S_TERMINATE, 341 /* S_TRANSITION_ENGINE ==> */ S_IDLE, 342 /* S_HALT ==> */ S_HALT, 343 }, 344 345 /* Got an I_ROUTER */ 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_STARTING, 356 /* S_PENDING ==> */ S_PENDING, 357 /* S_STOPPING ==> */ S_STOPPING, 358 /* S_TERMINATE ==> */ S_TERMINATE, 359 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 360 /* S_HALT ==> */ S_HALT, 361 }, 362 363 /* Got an I_SHUTDOWN */ 364 { 365 /* S_IDLE ==> */ S_POLICY_ENGINE, 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_STOPPING, 372 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 373 /* S_STARTING ==> */ S_STOPPING, 374 /* S_PENDING ==> */ S_PENDING, 375 /* S_STOPPING ==> */ S_STOPPING, 376 /* S_TERMINATE ==> */ S_TERMINATE, 377 /* S_TRANSITION_ENGINE ==> */ S_POLICY_ENGINE, 378 /* S_HALT ==> */ S_ELECTION, 379 }, 380 381 /* Got an I_STOP */ 382 { 383 /* S_IDLE ==> */ S_STOPPING, 384 /* S_ELECTION ==> */ S_STOPPING, 385 /* S_INTEGRATION ==> */ S_STOPPING, 386 /* S_FINALIZE_JOIN ==> */ S_STOPPING, 387 /* S_NOT_DC ==> */ S_STOPPING, 388 /* S_POLICY_ENGINE ==> */ S_STOPPING, 389 /* S_RECOVERY ==> */ S_STOPPING, 390 /* S_RELEASE_DC ==> */ S_STOPPING, 391 /* S_STARTING ==> */ S_STOPPING, 392 /* S_PENDING ==> */ S_STOPPING, 393 /* S_STOPPING ==> */ S_STOPPING, 394 /* S_TERMINATE ==> */ S_TERMINATE, 395 /* S_TRANSITION_ENGINE ==> */ S_STOPPING, 396 /* S_HALT ==> */ S_STOPPING, 397 }, 398 399 /* Got an I_TERMINATE */ 400 { 401 /* S_IDLE ==> */ S_TERMINATE, 402 /* S_ELECTION ==> */ S_TERMINATE, 403 /* S_INTEGRATION ==> */ S_TERMINATE, 404 /* S_FINALIZE_JOIN ==> */ S_TERMINATE, 405 /* S_NOT_DC ==> */ S_TERMINATE, 406 /* S_POLICY_ENGINE ==> */ S_TERMINATE, 407 /* S_RECOVERY ==> */ S_TERMINATE, 408 /* S_RELEASE_DC ==> */ S_TERMINATE, 409 /* S_STARTING ==> */ S_TERMINATE, 410 /* S_PENDING ==> */ S_TERMINATE, 411 /* S_STOPPING ==> */ S_TERMINATE, 412 /* S_TERMINATE ==> */ S_TERMINATE, 413 /* S_TRANSITION_ENGINE ==> */ S_TERMINATE, 414 /* S_HALT ==> */ S_TERMINATE, 415 }, 416 417 /* Got an I_STARTUP */ 418 { 419 /* S_IDLE ==> */ S_RECOVERY, 420 /* S_ELECTION ==> */ S_RECOVERY, 421 /* S_INTEGRATION ==> */ S_RECOVERY, 422 /* S_FINALIZE_JOIN ==> */ S_RECOVERY, 423 /* S_NOT_DC ==> */ S_RECOVERY, 424 /* S_POLICY_ENGINE ==> */ S_RECOVERY, 425 /* S_RECOVERY ==> */ S_RECOVERY, 426 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 427 /* S_STARTING ==> */ S_STARTING, 428 /* S_PENDING ==> */ S_PENDING, 429 /* S_STOPPING ==> */ S_STOPPING, 430 /* S_TERMINATE ==> */ S_TERMINATE, 431 /* S_TRANSITION_ENGINE ==> */ S_RECOVERY, 432 /* S_HALT ==> */ S_HALT, 433 }, 434 435 /* Got an I_PE_SUCCESS */ 436 { 437 /* S_IDLE ==> */ S_IDLE, 438 /* S_ELECTION ==> */ S_ELECTION, 439 /* S_INTEGRATION ==> */ S_INTEGRATION, 440 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 441 /* S_NOT_DC ==> */ S_NOT_DC, 442 /* S_POLICY_ENGINE ==> */ S_TRANSITION_ENGINE, 443 /* S_RECOVERY ==> */ S_RECOVERY, 444 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 445 /* S_STARTING ==> */ S_RECOVERY, 446 /* S_PENDING ==> */ S_PENDING, 447 /* S_STOPPING ==> */ S_STOPPING, 448 /* S_TERMINATE ==> */ S_TERMINATE, 449 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 450 /* S_HALT ==> */ S_HALT, 451 }, 452 453 /* Got an I_JOIN_OFFER */ 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_PENDING, 460 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 461 /* S_RECOVERY ==> */ S_RECOVERY, 462 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 463 /* S_STARTING ==> */ S_STARTING, 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_REQUEST */ 472 { 473 /* S_IDLE ==> */ S_INTEGRATION, 474 /* S_ELECTION ==> */ S_ELECTION, 475 /* S_INTEGRATION ==> */ S_INTEGRATION, 476 /* S_FINALIZE_JOIN ==> */ S_INTEGRATION, 477 /* S_NOT_DC ==> */ S_NOT_DC, 478 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 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_INTEGRATION, 486 /* S_HALT ==> */ S_HALT, 487 }, 488 489 /* Got an I_JOIN_RESULT */ 490 { 491 /* S_IDLE ==> */ S_INTEGRATION, 492 /* S_ELECTION ==> */ S_ELECTION, 493 /* S_INTEGRATION ==> */ S_INTEGRATION, 494 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 495 /* S_NOT_DC ==> */ S_PENDING, 496 /* S_POLICY_ENGINE ==> */ S_INTEGRATION, 497 /* S_RECOVERY ==> */ S_RECOVERY, 498 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 499 /* S_STARTING ==> */ S_RECOVERY, 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_WAIT_FOR_EVENT */ 508 { 509 /* S_IDLE ==> */ S_IDLE, 510 /* S_ELECTION ==> */ S_ELECTION, 511 /* S_INTEGRATION ==> */ S_INTEGRATION, 512 /* S_FINALIZE_JOIN ==> */ S_FINALIZE_JOIN, 513 /* S_NOT_DC ==> */ S_NOT_DC, 514 /* S_POLICY_ENGINE ==> */ S_POLICY_ENGINE, 515 /* S_RECOVERY ==> */ S_RECOVERY, 516 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 517 /* S_STARTING ==> */ S_STARTING, 518 /* S_PENDING ==> */ S_PENDING, 519 /* S_STOPPING ==> */ S_STOPPING, 520 /* S_TERMINATE ==> */ S_TERMINATE, 521 /* S_TRANSITION_ENGINE ==> */ S_TRANSITION_ENGINE, 522 /* S_HALT ==> */ S_HALT, 523 }, 524 525 /* Got an I_DC_HEARTBEAT */ 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_PENDING */ 544 { 545 /* S_IDLE ==> */ S_PENDING, 546 /* S_ELECTION ==> */ S_PENDING, 547 /* S_INTEGRATION ==> */ S_PENDING, 548 /* S_FINALIZE_JOIN ==> */ S_PENDING, 549 /* S_NOT_DC ==> */ S_PENDING, 550 /* S_POLICY_ENGINE ==> */ S_PENDING, 551 /* S_RECOVERY ==> */ S_RECOVERY, 552 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 553 /* S_STARTING ==> */ S_PENDING, 554 /* S_PENDING ==> */ S_PENDING, 555 /* S_STOPPING ==> */ S_STOPPING, 556 /* S_TERMINATE ==> */ S_TERMINATE, 557 /* S_TRANSITION_ENGINE ==> */ S_PENDING, 558 /* S_HALT ==> */ S_HALT, 559 }, 560 561 /* Got an I_HALT */ 562 { 563 /* S_IDLE ==> */ S_HALT, 564 /* S_ELECTION ==> */ S_HALT, 565 /* S_INTEGRATION ==> */ S_HALT, 566 /* S_FINALIZE_JOIN ==> */ S_HALT, 567 /* S_NOT_DC ==> */ S_HALT, 568 /* S_POLICY_ENGINE ==> */ S_HALT, 569 /* S_RECOVERY ==> */ S_RECOVERY, 570 /* S_RELEASE_DC ==> */ S_RELEASE_DC, 571 /* S_STARTING ==> */ S_STARTING, 572 /* S_PENDING ==> */ S_HALT, 573 /* S_STOPPING ==> */ S_STOPPING, 574 /* S_TERMINATE ==> */ S_TERMINATE, 575 /* S_TRANSITION_ENGINE ==> */ S_HALT, 576 /* S_HALT ==> */ S_HALT, 577 }, 578 }; 579 580 /* 581 * The action table. Each entry is a set of actions to take or-ed 582 * together. Like the state table, the rows are inputs, and 583 * the columns are states. 584 */ 585 586 /* NOTE: In the fsa, the actions are extracted then state is updated. */ 587 588 static const uint64_t fsa_actions[MAXINPUT][MAXSTATE] = { 589 590 /* Got an I_NULL */ 591 { 592 /* S_IDLE ==> */ A_NOTHING, 593 /* S_ELECTION ==> */ A_NOTHING, 594 /* S_INTEGRATION ==> */ A_NOTHING, 595 /* S_FINALIZE_JOIN ==> */ A_NOTHING, 596 /* S_NOT_DC ==> */ A_NOTHING, 597 /* S_POLICY_ENGINE ==> */ A_NOTHING, 598 /* S_RECOVERY ==> */ A_NOTHING, 599 /* S_RELEASE_DC ==> */ A_NOTHING, 600 /* S_STARTING ==> */ A_NOTHING, 601 /* S_PENDING ==> */ A_NOTHING, 602 /* S_STOPPING ==> */ A_NOTHING, 603 /* S_TERMINATE ==> */ A_NOTHING, 604 /* S_TRANSITION_ENGINE ==> */ A_NOTHING, 605 /* S_HALT ==> */ A_NOTHING, 606 }, 607 608 /* Got an I_CIB_UPDATE */ 609 { 610 /* S_IDLE ==> */ A_LOG, 611 /* S_ELECTION ==> */ A_LOG, 612 /* S_INTEGRATION ==> */ A_WARN, 613 /* S_FINALIZE_JOIN ==> */ A_WARN, 614 /* S_NOT_DC ==> */ A_WARN, 615 /* S_POLICY_ENGINE ==> */ A_LOG, 616 /* S_RECOVERY ==> */ A_WARN, 617 /* S_RELEASE_DC ==> */ A_WARN, 618 /* S_STARTING ==> */ A_WARN, 619 /* S_PENDING ==> */ A_WARN, 620 /* S_STOPPING ==> */ A_WARN, 621 /* S_TERMINATE ==> */ A_WARN, 622 /* S_TRANSITION_ENGINE ==> */ A_LOG, 623 /* S_HALT ==> */ A_WARN, 624 }, 625 626 /* Got an I_DC_TIMEOUT */ 627 { 628 /* S_IDLE ==> */ A_WARN, 629 /* S_ELECTION ==> */ A_ELECTION_VOTE, 630 /* S_INTEGRATION ==> */ A_WARN, 631 /* S_FINALIZE_JOIN ==> */ A_WARN, 632 /* S_NOT_DC ==> */ A_ELECTION_VOTE | A_WARN, 633 /* S_POLICY_ENGINE ==> */ A_WARN, 634 /* S_RECOVERY ==> */ A_NOTHING, 635 /* S_RELEASE_DC ==> */ A_WARN, 636 /* S_STARTING ==> */ A_WARN, 637 /* S_PENDING ==> */ A_ELECTION_VOTE | A_WARN, 638 /* S_STOPPING ==> */ A_NOTHING, 639 /* S_TERMINATE ==> */ A_NOTHING, 640 /* S_TRANSITION_ENGINE ==> */ A_TE_CANCEL | A_WARN, 641 /* S_HALT ==> */ A_WARN, 642 }, 643 644 /* Got an I_ELECTION */ 645 { 646 /* S_IDLE ==> */ A_ELECTION_VOTE, 647 /* S_ELECTION ==> */ A_ELECTION_VOTE, 648 /* S_INTEGRATION ==> */ A_ELECTION_VOTE, 649 /* S_FINALIZE_JOIN ==> */ A_ELECTION_VOTE, 650 /* S_NOT_DC ==> */ A_ELECTION_VOTE, 651 /* S_POLICY_ENGINE ==> */ A_ELECTION_VOTE, 652 /* S_RECOVERY ==> */ A_LOG, 653 /* S_RELEASE_DC ==> */ A_LOG, 654 /* S_STARTING ==> */ A_WARN, 655 /* S_PENDING ==> */ A_ELECTION_VOTE, 656 /* S_STOPPING ==> */ A_LOG, 657 /* S_TERMINATE ==> */ A_LOG, 658 /* S_TRANSITION_ENGINE ==> */ A_ELECTION_VOTE, 659 /* S_HALT ==> */ A_ELECTION_VOTE, 660 }, 661 662 /* Got an I_PE_CALC */ 663 { 664 /* S_IDLE ==> */ A_PE_INVOKE, 665 /* S_ELECTION ==> */ A_NOTHING, 666 /* S_INTEGRATION ==> */ A_NOTHING, 667 /* S_FINALIZE_JOIN ==> */ A_NOTHING, 668 /* S_NOT_DC ==> */ A_WARN, 669 /* S_POLICY_ENGINE ==> */ A_PE_INVOKE, 670 /* S_RECOVERY ==> */ A_NOTHING, 671 /* S_RELEASE_DC ==> */ A_NOTHING, 672 /* S_STARTING ==> */ A_ERROR, 673 /* S_PENDING ==> */ A_WARN, 674 /* S_STOPPING ==> */ A_WARN, 675 /* S_TERMINATE ==> */ A_ERROR, 676 /* S_TRANSITION_ENGINE ==> */ A_PE_INVOKE, 677 /* S_HALT ==> */ A_ERROR, 678 }, 679 680 /* Got an I_RELEASE_DC */ 681 { 682 /* S_IDLE ==> */ O_RELEASE, 683 /* S_ELECTION ==> */ O_RELEASE, 684 /* S_INTEGRATION ==> */ O_RELEASE | A_WARN, 685 /* S_FINALIZE_JOIN ==> */ O_RELEASE | A_WARN, 686 /* S_NOT_DC ==> */ A_WARN, 687 /* S_POLICY_ENGINE ==> */ O_RELEASE | A_WARN, 688 /* S_RECOVERY ==> */ O_RELEASE, 689 /* S_RELEASE_DC ==> */ O_RELEASE | A_WARN, 690 /* S_STARTING ==> */ A_ERROR, 691 /* S_PENDING ==> */ A_WARN, 692 /* S_STOPPING ==> */ A_WARN, 693 /* S_TERMINATE ==> */ A_WARN, 694 /* S_TRANSITION_ENGINE ==> */ O_RELEASE | A_WARN, 695 /* S_HALT ==> */ A_WARN, 696 }, 697 698 /* Got an I_ELECTION_DC */ 699 { 700 /* S_IDLE ==> */ A_WARN | A_ELECTION_VOTE, 701 /* S_ELECTION ==> */ 702 A_LOG | A_DC_TAKEOVER | A_PE_START | A_TE_START | A_DC_JOIN_OFFER_ALL | A_DC_TIMER_STOP, 703 /* S_INTEGRATION ==> */ A_WARN | A_ELECTION_VOTE | A_DC_JOIN_OFFER_ALL, 704 /* S_FINALIZE_JOIN ==> */ A_WARN | A_ELECTION_VOTE | A_DC_JOIN_OFFER_ALL, 705 /* S_NOT_DC ==> */ A_LOG | A_ELECTION_VOTE, 706 /* S_POLICY_ENGINE ==> */ A_WARN | A_ELECTION_VOTE, 707 /* S_RECOVERY ==> */ A_WARN, 708 /* S_RELEASE_DC ==> */ A_WARN | A_ELECTION_VOTE, 709 /* S_STARTING ==> */ A_LOG | A_WARN, 710 /* S_PENDING ==> */ A_LOG | A_WARN, 711 /* S_STOPPING ==> */ A_WARN, 712 /* S_TERMINATE ==> */ A_WARN, 713 /* S_TRANSITION_ENGINE ==> */ A_WARN | A_ELECTION_VOTE, 714 /* S_HALT ==> */ A_WARN, 715 }, 716 717 /* Got an I_ERROR */ 718 { 719 /* S_IDLE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 720 /* S_ELECTION ==> */ A_ERROR | A_RECOVER | O_RELEASE, 721 /* S_INTEGRATION ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 722 /* S_FINALIZE_JOIN ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 723 /* S_NOT_DC ==> */ A_ERROR | A_RECOVER, 724 /* S_POLICY_ENGINE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 725 /* S_RECOVERY ==> */ A_ERROR | O_RELEASE, 726 /* S_RELEASE_DC ==> */ A_ERROR | A_RECOVER, 727 /* S_STARTING ==> */ A_ERROR | A_RECOVER, 728 /* S_PENDING ==> */ A_ERROR | A_RECOVER, 729 /* S_STOPPING ==> */ A_ERROR | A_EXIT_1, 730 /* S_TERMINATE ==> */ A_ERROR | A_EXIT_1, 731 /* S_TRANSITION_ENGINE ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 732 /* S_HALT ==> */ A_ERROR | A_RECOVER | O_RELEASE | A_ELECTION_START, 733 }, 734 735 /* Got an I_FAIL */ 736 { 737 /* S_IDLE ==> */ A_WARN, 738 /* S_ELECTION ==> */ A_WARN, 739 /* S_INTEGRATION ==> */ A_WARN | A_DC_JOIN_OFFER_ALL, 740 /* S_FINALIZE_JOIN ==> */ A_WARN | A_DC_JOIN_OFFER_ALL, 741 /* S_NOT_DC ==> */ A_WARN, 742 /* S_POLICY_ENGINE ==> */ A_WARN | A_DC_JOIN_OFFER_ALL | A_TE_CANCEL, 743 /* S_RECOVERY ==> */ A_WARN | O_RELEASE, 744 /* S_RELEASE_DC ==> */ A_WARN, 745 /* S_STARTING ==> */ A_WARN, 746 /* S_PENDING ==> */ A_WARN, 747 /* S_STOPPING ==> */ A_WARN, 748 /* S_TERMINATE ==> */ A_WARN | A_EXIT_1, 749 /* S_TRANSITION_ENGINE ==> */ A_WARN | O_LRM_RECONNECT | A_PE_INVOKE | A_TE_CANCEL, 750 /* S_HALT ==> */ A_WARN, 751 }, 752 753 /* Got an I_INTEGRATED */ 754 { 755 /* S_IDLE ==> */ A_NOTHING, 756 /* S_ELECTION ==> */ A_WARN, 757 /* S_INTEGRATION ==> */ A_DC_JOIN_FINALIZE, 758 /* S_FINALIZE_JOIN ==> */ A_WARN, 759 /* S_NOT_DC ==> */ A_WARN, 760 /* S_POLICY_ENGINE ==> */ A_NOTHING, 761 /* S_RECOVERY ==> */ A_WARN, 762 /* S_RELEASE_DC ==> */ A_WARN, 763 /* S_STARTING ==> */ A_WARN, 764 /* S_PENDING ==> */ A_WARN, 765 /* S_STOPPING ==> */ A_WARN, 766 /* S_TERMINATE ==> */ A_WARN, 767 /* S_TRANSITION_ENGINE ==> */ A_NOTHING, 768 /* S_HALT ==> */ A_WARN, 769 }, 770 771 /* Got an I_FINALIZED */ 772 { 773 /* S_IDLE ==> */ A_NOTHING, 774 /* S_ELECTION ==> */ A_WARN, 775 /* S_INTEGRATION ==> */ A_WARN, 776 /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_FINAL | A_TE_CANCEL, 777 /* S_NOT_DC ==> */ A_WARN, 778 /* S_POLICY_ENGINE ==> */ A_NOTHING, 779 /* S_RECOVERY ==> */ A_WARN, 780 /* S_RELEASE_DC ==> */ A_WARN, 781 /* S_STARTING ==> */ A_WARN, 782 /* S_PENDING ==> */ A_WARN, 783 /* S_STOPPING ==> */ A_WARN, 784 /* S_TERMINATE ==> */ A_WARN, 785 /* S_TRANSITION_ENGINE ==> */ A_NOTHING, 786 /* S_HALT ==> */ A_WARN, 787 }, 788 789 /* Got an I_NODE_JOIN */ 790 { 791 /* S_IDLE ==> */ A_TE_HALT | A_DC_JOIN_OFFER_ONE, 792 /* S_ELECTION ==> */ A_WARN, 793 /* S_INTEGRATION ==> */ A_DC_JOIN_OFFER_ONE, 794 /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_OFFER_ONE, 795 /* S_NOT_DC ==> */ A_WARN, 796 /* S_POLICY_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, 797 /* S_RECOVERY ==> */ A_WARN, 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, 803 /* S_TRANSITION_ENGINE ==> */ A_TE_HALT | A_DC_JOIN_OFFER_ONE, 804 /* S_HALT ==> */ A_WARN, 805 }, 806 807 /* Got an I_NOT_DC */ 808 { 809 /* S_IDLE ==> */ A_WARN | O_RELEASE, 810 /* S_ELECTION ==> */ A_ERROR | A_ELECTION_START | A_DC_TIMER_STOP, 811 /* S_INTEGRATION ==> */ A_ERROR | O_RELEASE, 812 /* S_FINALIZE_JOIN ==> */ A_ERROR | O_RELEASE, 813 /* S_NOT_DC ==> */ A_LOG, 814 /* S_POLICY_ENGINE ==> */ A_ERROR | O_RELEASE, 815 /* S_RECOVERY ==> */ A_ERROR | O_RELEASE, 816 /* S_RELEASE_DC ==> */ A_ERROR | O_RELEASE, 817 /* S_STARTING ==> */ A_WARN, 818 /* S_PENDING ==> */ A_LOG | A_DC_TIMER_STOP, 819 /* S_STOPPING ==> */ A_WARN, 820 /* S_TERMINATE ==> */ A_WARN, 821 /* S_TRANSITION_ENGINE ==> */ A_ERROR | O_RELEASE, 822 /* S_HALT ==> */ A_WARN, 823 }, 824 825 /* Got an I_RECOVERED */ 826 { 827 /* S_IDLE ==> */ A_WARN, 828 /* S_ELECTION ==> */ A_ELECTION_VOTE, 829 /* S_INTEGRATION ==> */ A_WARN, 830 /* S_FINALIZE_JOIN ==> */ A_WARN, 831 /* S_NOT_DC ==> */ A_WARN, 832 /* S_POLICY_ENGINE ==> */ A_WARN, 833 /* S_RECOVERY ==> */ A_LOG, 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_WARN, 840 /* S_HALT ==> */ A_WARN, 841 }, 842 843 /* Got an I_RELEASE_FAIL */ 844 { 845 /* S_IDLE ==> */ A_WARN, 846 /* S_ELECTION ==> */ A_WARN, 847 /* S_INTEGRATION ==> */ A_WARN, 848 /* S_FINALIZE_JOIN ==> */ A_WARN, 849 /* S_NOT_DC ==> */ A_WARN, 850 /* S_POLICY_ENGINE ==> */ A_NOTHING, 851 /* S_RECOVERY ==> */ A_WARN | A_SHUTDOWN_REQ, 852 /* S_RELEASE_DC ==> */ A_NOTHING, 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_WARN, 858 /* S_HALT ==> */ A_WARN, 859 }, 860 861 /* Got an I_RELEASE_SUCCESS */ 862 { 863 /* S_IDLE ==> */ A_WARN, 864 /* S_ELECTION ==> */ A_WARN, 865 /* S_INTEGRATION ==> */ A_WARN, 866 /* S_FINALIZE_JOIN ==> */ A_WARN, 867 /* S_NOT_DC ==> */ A_WARN, 868 /* S_POLICY_ENGINE ==> */ A_WARN, 869 /* S_RECOVERY ==> */ A_WARN, 870 /* S_RELEASE_DC ==> */ A_LOG, 871 /* S_STARTING ==> */ A_WARN, 872 /* S_PENDING ==> */ A_LOG, 873 /* S_STOPPING ==> */ A_WARN, 874 /* S_TERMINATE ==> */ A_WARN, 875 /* S_TRANSITION_ENGINE ==> */ A_WARN, 876 /* S_HALT ==> */ A_WARN, 877 }, 878 879 /* Got an I_RESTART */ 880 { 881 /* S_IDLE ==> */ A_NOTHING, 882 /* S_ELECTION ==> */ A_LOG | A_ELECTION_VOTE, 883 /* S_INTEGRATION ==> */ A_LOG | A_DC_JOIN_OFFER_ALL, 884 /* S_FINALIZE_JOIN ==> */ A_LOG | A_DC_JOIN_FINALIZE, 885 /* S_NOT_DC ==> */ A_LOG | A_NOTHING, 886 /* S_POLICY_ENGINE ==> */ A_LOG | A_PE_INVOKE, 887 /* S_RECOVERY ==> */ A_LOG | A_RECOVER | O_RELEASE, 888 /* S_RELEASE_DC ==> */ A_LOG | O_RELEASE, 889 /* S_STARTING ==> */ A_LOG, 890 /* S_PENDING ==> */ A_LOG, 891 /* S_STOPPING ==> */ A_LOG, 892 /* S_TERMINATE ==> */ A_LOG, 893 /* S_TRANSITION_ENGINE ==> */ A_LOG | A_TE_INVOKE, 894 /* S_HALT ==> */ A_WARN, 895 }, 896 897 /* Got an I_TE_SUCCESS */ 898 { 899 /* S_IDLE ==> */ A_LOG, 900 /* S_ELECTION ==> */ A_WARN, 901 /* S_INTEGRATION ==> */ A_WARN, 902 /* S_FINALIZE_JOIN ==> */ A_WARN, 903 /* S_NOT_DC ==> */ A_ERROR, 904 /* S_POLICY_ENGINE ==> */ A_WARN, 905 /* S_RECOVERY ==> */ A_RECOVER | A_WARN, 906 /* S_RELEASE_DC ==> */ A_WARN, 907 /* S_STARTING ==> */ A_ERROR, 908 /* S_PENDING ==> */ A_ERROR, 909 /* S_STOPPING ==> */ A_WARN, 910 /* S_TERMINATE ==> */ A_WARN, 911 /* S_TRANSITION_ENGINE ==> */ A_LOG, 912 /* S_HALT ==> */ A_WARN, 913 }, 914 915 /* Got an I_ROUTER */ 916 { 917 /* S_IDLE ==> */ A_MSG_ROUTE, 918 /* S_ELECTION ==> */ A_MSG_ROUTE, 919 /* S_INTEGRATION ==> */ A_MSG_ROUTE, 920 /* S_FINALIZE_JOIN ==> */ A_MSG_ROUTE, 921 /* S_NOT_DC ==> */ A_MSG_ROUTE, 922 /* S_POLICY_ENGINE ==> */ A_MSG_ROUTE, 923 /* S_RECOVERY ==> */ A_MSG_ROUTE, 924 /* S_RELEASE_DC ==> */ A_MSG_ROUTE, 925 /* S_STARTING ==> */ A_MSG_ROUTE, 926 /* S_PENDING ==> */ A_MSG_ROUTE, 927 /* S_STOPPING ==> */ A_MSG_ROUTE, 928 /* S_TERMINATE ==> */ A_MSG_ROUTE, 929 /* S_TRANSITION_ENGINE ==> */ A_MSG_ROUTE, 930 /* S_HALT ==> */ A_WARN | A_MSG_ROUTE, 931 }, 932 933 /* Got an I_SHUTDOWN */ 934 { 935 /* S_IDLE ==> */ A_LOG | A_SHUTDOWN_REQ, 936 /* S_ELECTION ==> */ A_LOG | A_SHUTDOWN_REQ | A_ELECTION_VOTE, 937 /* S_INTEGRATION ==> */ A_LOG | A_SHUTDOWN_REQ, 938 /* S_FINALIZE_JOIN ==> */ A_LOG | A_SHUTDOWN_REQ, 939 /* S_NOT_DC ==> */ A_SHUTDOWN_REQ, 940 /* S_POLICY_ENGINE ==> */ A_LOG | A_SHUTDOWN_REQ, 941 /* S_RECOVERY ==> */ A_WARN | O_EXIT | O_RELEASE, 942 /* S_RELEASE_DC ==> */ A_WARN | A_SHUTDOWN_REQ, 943 /* S_STARTING ==> */ A_WARN | O_EXIT, 944 /* S_PENDING ==> */ A_SHUTDOWN_REQ, 945 /* S_STOPPING ==> */ A_LOG, 946 /* S_TERMINATE ==> */ A_LOG, 947 /* S_TRANSITION_ENGINE ==> */ A_WARN | A_SHUTDOWN_REQ, 948 /* S_HALT ==> */ A_WARN | A_ELECTION_START | A_SHUTDOWN_REQ, 949 }, 950 951 /* Got an I_STOP */ 952 { 953 /* S_IDLE ==> */ A_ERROR | O_RELEASE | O_EXIT, 954 /* S_ELECTION ==> */ O_RELEASE | O_EXIT, 955 /* S_INTEGRATION ==> */ A_WARN | O_RELEASE | O_EXIT, 956 /* S_FINALIZE_JOIN ==> */ A_ERROR | O_RELEASE | O_EXIT, 957 /* S_NOT_DC ==> */ O_EXIT, 958 /* S_POLICY_ENGINE ==> */ A_WARN | O_RELEASE | O_EXIT, 959 /* S_RECOVERY ==> */ A_ERROR | O_RELEASE | O_EXIT, 960 /* S_RELEASE_DC ==> */ A_ERROR | O_RELEASE | O_EXIT, 961 /* S_STARTING ==> */ O_EXIT, 962 /* S_PENDING ==> */ O_EXIT, 963 /* S_STOPPING ==> */ O_EXIT, 964 /* S_TERMINATE ==> */ A_ERROR | A_EXIT_1, 965 /* S_TRANSITION_ENGINE ==> */ A_LOG | O_RELEASE | O_EXIT, 966 /* S_HALT ==> */ O_RELEASE | O_EXIT | A_WARN, 967 }, 968 969 /* Got an I_TERMINATE */ 970 { 971 /* S_IDLE ==> */ A_ERROR | O_EXIT, 972 /* S_ELECTION ==> */ A_ERROR | O_EXIT, 973 /* S_INTEGRATION ==> */ A_ERROR | O_EXIT, 974 /* S_FINALIZE_JOIN ==> */ A_ERROR | O_EXIT, 975 /* S_NOT_DC ==> */ A_ERROR | O_EXIT, 976 /* S_POLICY_ENGINE ==> */ A_ERROR | O_EXIT, 977 /* S_RECOVERY ==> */ A_ERROR | O_EXIT, 978 /* S_RELEASE_DC ==> */ A_ERROR | O_EXIT, 979 /* S_STARTING ==> */ O_EXIT, 980 /* S_PENDING ==> */ A_ERROR | O_EXIT, 981 /* S_STOPPING ==> */ O_EXIT, 982 /* S_TERMINATE ==> */ O_EXIT, 983 /* S_TRANSITION_ENGINE ==> */ A_ERROR | O_EXIT, 984 /* S_HALT ==> */ A_ERROR | O_EXIT, 985 }, 986 987 /* Got an I_STARTUP */ 988 { 989 /* S_IDLE ==> */ A_WARN, 990 /* S_ELECTION ==> */ A_WARN, 991 /* S_INTEGRATION ==> */ A_WARN, 992 /* S_FINALIZE_JOIN ==> */ A_WARN, 993 /* S_NOT_DC ==> */ A_WARN, 994 /* S_POLICY_ENGINE ==> */ A_WARN, 995 /* S_RECOVERY ==> */ A_WARN, 996 /* S_RELEASE_DC ==> */ A_WARN, 997 /* S_STARTING ==> */ 998 A_LOG | A_STARTUP | A_CIB_START | A_LRM_CONNECT | A_HA_CONNECT | A_READCONFIG | A_STARTED, 999 /* S_PENDING ==> */ A_LOG, 1000 /* S_STOPPING ==> */ A_WARN, 1001 /* S_TERMINATE ==> */ A_WARN, 1002 /* S_TRANSITION_ENGINE ==> */ A_WARN, 1003 /* S_HALT ==> */ A_WARN, 1004 }, 1005 1006 /* Got an I_PE_SUCCESS */ 1007 { 1008 /* S_IDLE ==> */ A_LOG, 1009 /* S_ELECTION ==> */ A_WARN, 1010 /* S_INTEGRATION ==> */ A_WARN, 1011 /* S_FINALIZE_JOIN ==> */ A_WARN, 1012 /* S_NOT_DC ==> */ A_NOTHING, 1013 /* S_POLICY_ENGINE ==> */ A_TE_INVOKE, 1014 /* S_RECOVERY ==> */ A_RECOVER | A_LOG, 1015 /* S_RELEASE_DC ==> */ A_LOG, 1016 /* S_STARTING ==> */ A_ERROR, 1017 /* S_PENDING ==> */ A_LOG, 1018 /* S_STOPPING ==> */ A_ERROR, 1019 /* S_TERMINATE ==> */ A_ERROR, 1020 /* S_TRANSITION_ENGINE ==> */ A_LOG, 1021 /* S_HALT ==> */ A_WARN, 1022 }, 1023 1024 /* Got an I_JOIN_OFFER */ 1025 { 1026 /* S_IDLE ==> */ A_WARN | A_CL_JOIN_REQUEST, 1027 /* S_ELECTION ==> */ A_WARN | A_ELECTION_VOTE, 1028 /* S_INTEGRATION ==> */ A_CL_JOIN_REQUEST, 1029 /* S_FINALIZE_JOIN ==> */ A_CL_JOIN_REQUEST, 1030 /* S_NOT_DC ==> */ A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, 1031 /* S_POLICY_ENGINE ==> */ A_WARN | A_CL_JOIN_REQUEST, 1032 /* S_RECOVERY ==> */ A_WARN | A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, 1033 /* S_RELEASE_DC ==> */ A_WARN | A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, 1034 /* S_STARTING ==> */ A_LOG, 1035 /* S_PENDING ==> */ A_CL_JOIN_REQUEST | A_DC_TIMER_STOP, 1036 /* S_STOPPING ==> */ A_LOG, 1037 /* S_TERMINATE ==> */ A_LOG, 1038 /* S_TRANSITION_ENGINE ==> */ A_WARN | A_CL_JOIN_REQUEST, 1039 /* S_HALT ==> */ A_WARN, 1040 }, 1041 1042 /* Got an I_JOIN_REQUEST */ 1043 { 1044 /* S_IDLE ==> */ A_DC_JOIN_OFFER_ONE, 1045 /* S_ELECTION ==> */ A_WARN, 1046 /* S_INTEGRATION ==> */ A_DC_JOIN_PROCESS_REQ, 1047 /* S_FINALIZE_JOIN ==> */ A_DC_JOIN_OFFER_ONE, 1048 /* S_NOT_DC ==> */ A_WARN, 1049 /* S_POLICY_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, 1050 /* S_RECOVERY ==> */ A_WARN, 1051 /* S_RELEASE_DC ==> */ A_WARN, 1052 /* S_STARTING ==> */ A_WARN, 1053 /* S_PENDING ==> */ A_WARN, 1054 /* S_STOPPING ==> */ A_WARN, 1055 /* S_TERMINATE ==> */ A_WARN, 1056 /* S_TRANSITION_ENGINE ==> */ A_DC_JOIN_OFFER_ONE, 1057 /* S_HALT ==> */ A_WARN, 1058 }, 1059 1060 /* Got an I_JOIN_RESULT */ 1061 { 1062 /* S_IDLE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, 1063 /* S_ELECTION ==> */ A_LOG, 1064 /* S_INTEGRATION ==> */ A_LOG | A_CL_JOIN_RESULT | A_DC_JOIN_PROCESS_ACK, 1065 /* S_FINALIZE_JOIN ==> */ A_CL_JOIN_RESULT | A_DC_JOIN_PROCESS_ACK, 1066 /* S_NOT_DC ==> */ A_ERROR | A_CL_JOIN_ANNOUNCE, 1067 /* S_POLICY_ENGINE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, 1068 /* S_RECOVERY ==> */ A_LOG, 1069 /* S_RELEASE_DC ==> */ A_LOG, 1070 /* S_STARTING ==> */ A_ERROR, 1071 /* S_PENDING ==> */ A_CL_JOIN_RESULT, 1072 /* S_STOPPING ==> */ A_ERROR, 1073 /* S_TERMINATE ==> */ A_ERROR, 1074 /* S_TRANSITION_ENGINE ==> */ A_ERROR | A_TE_HALT | A_DC_JOIN_OFFER_ALL, 1075 /* S_HALT ==> */ A_WARN, 1076 }, 1077 1078 /* Got an I_WAIT_FOR_EVENT */ 1079 { 1080 /* S_IDLE ==> */ A_LOG, 1081 /* S_ELECTION ==> */ A_LOG, 1082 /* S_INTEGRATION ==> */ A_LOG, 1083 /* S_FINALIZE_JOIN ==> */ A_LOG, 1084 /* S_NOT_DC ==> */ A_LOG, 1085 /* S_POLICY_ENGINE ==> */ A_LOG, 1086 /* S_RECOVERY ==> */ A_LOG, 1087 /* S_RELEASE_DC ==> */ A_LOG, 1088 /* S_STARTING ==> */ A_LOG, 1089 /* S_PENDING ==> */ A_LOG, 1090 /* S_STOPPING ==> */ A_LOG, 1091 /* S_TERMINATE ==> */ A_LOG, 1092 /* S_TRANSITION_ENGINE ==> */ A_LOG, 1093 /* S_HALT ==> */ A_WARN, 1094 }, 1095 1096 /* Got an I_DC_HEARTBEAT */ 1097 { 1098 /* S_IDLE ==> */ A_ERROR, 1099 /* S_ELECTION ==> */ A_WARN | A_ELECTION_VOTE, 1100 /* S_INTEGRATION ==> */ A_ERROR, 1101 /* S_FINALIZE_JOIN ==> */ A_ERROR, 1102 /* S_NOT_DC ==> */ A_NOTHING, 1103 /* S_POLICY_ENGINE ==> */ A_ERROR, 1104 /* S_RECOVERY ==> */ A_NOTHING, 1105 /* S_RELEASE_DC ==> */ A_LOG, 1106 /* S_STARTING ==> */ A_LOG, 1107 /* S_PENDING ==> */ A_LOG | A_CL_JOIN_ANNOUNCE, 1108 /* S_STOPPING ==> */ A_NOTHING, 1109 /* S_TERMINATE ==> */ A_NOTHING, 1110 /* S_TRANSITION_ENGINE ==> */ A_ERROR, 1111 /* S_HALT ==> */ A_WARN, 1112 }, 1113 1114 /* For everyone ending up in S_PENDING, (re)start the DC timer and wait for I_JOIN_OFFER or I_NOT_DC */ 1115 /* Got an I_PENDING */ 1116 { 1117 /* S_IDLE ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1118 /* S_ELECTION ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1119 /* S_INTEGRATION ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1120 /* S_FINALIZE_JOIN ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1121 /* S_NOT_DC ==> */ A_LOG | O_DC_TIMER_RESTART, 1122 /* S_POLICY_ENGINE ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1123 /* S_RECOVERY ==> */ A_WARN, 1124 /* S_RELEASE_DC ==> */ A_WARN | O_DC_TIMER_RESTART, 1125 /* S_STARTING ==> */ A_LOG | A_DC_TIMER_START | A_CL_JOIN_QUERY, 1126 /* S_PENDING ==> */ A_LOG | O_DC_TIMER_RESTART, 1127 /* S_STOPPING ==> */ A_WARN, 1128 /* S_TERMINATE ==> */ A_WARN, 1129 /* S_TRANSITION_ENGINE ==> */ O_RELEASE | O_DC_TIMER_RESTART, 1130 /* S_HALT ==> */ A_WARN, 1131 }, 1132 1133 /* Got an I_HALT */ 1134 { 1135 /* S_IDLE ==> */ A_WARN, 1136 /* S_ELECTION ==> */ A_WARN, 1137 /* S_INTEGRATION ==> */ A_WARN, 1138 /* S_FINALIZE_JOIN ==> */ A_WARN, 1139 /* S_NOT_DC ==> */ A_WARN, 1140 /* S_POLICY_ENGINE ==> */ A_WARN, 1141 /* S_RECOVERY ==> */ A_WARN, 1142 /* S_RELEASE_DC ==> */ A_WARN, 1143 /* S_STARTING ==> */ A_WARN, 1144 /* S_PENDING ==> */ A_WARN, 1145 /* S_STOPPING ==> */ A_WARN, 1146 /* S_TERMINATE ==> */ A_WARN, 1147 /* S_TRANSITION_ENGINE ==> */ A_WARN, 1148 /* S_HALT ==> */ A_WARN, 1149 }, 1150 }; 1151 1152 /*! 1153 * \internal 1154 * \brief Get the next FSA state given an input and the current state 1155 * 1156 * \param[in] input FSA input 1157 * 1158 * \return The next FSA state 1159 */ 1160 enum crmd_fsa_state 1161 controld_fsa_get_next_state(enum crmd_fsa_input input) /**/ 1162 { 1163 return fsa_next_states[input][controld_globals.fsa_state]; 1164 } 1165 1166 /*! 1167 * \internal 1168 * \brief Get the appropriate FSA action given an input and the current state 1169 * 1170 * \param[in] input FSA input 1171 * 1172 * \return The appropriate FSA action 1173 */ 1174 uint64_t 1175 controld_fsa_get_action(enum crmd_fsa_input input) /*
*/ 1176 { 1177 return fsa_actions[input][controld_globals.fsa_state]; 1178 }