aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r--net/tipc/node.c89
1 files changed, 82 insertions, 7 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c
index 65c2c80cffe7..6b18d73830ca 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -494,8 +494,12 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
494 case SELF_LOST_CONTACT_EVT: 494 case SELF_LOST_CONTACT_EVT:
495 case PEER_LOST_CONTACT_EVT: 495 case PEER_LOST_CONTACT_EVT:
496 break; 496 break;
497 case NODE_SYNCH_END_EVT:
498 case NODE_SYNCH_BEGIN_EVT:
499 case NODE_FAILOVER_BEGIN_EVT:
500 case NODE_FAILOVER_END_EVT:
497 default: 501 default:
498 pr_err("Unknown node fsm evt %x/%x\n", state, evt); 502 goto illegal_evt;
499 } 503 }
500 break; 504 break;
501 case SELF_UP_PEER_UP: 505 case SELF_UP_PEER_UP:
@@ -506,11 +510,19 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
506 case PEER_LOST_CONTACT_EVT: 510 case PEER_LOST_CONTACT_EVT:
507 state = SELF_LEAVING_PEER_DOWN; 511 state = SELF_LEAVING_PEER_DOWN;
508 break; 512 break;
513 case NODE_SYNCH_BEGIN_EVT:
514 state = NODE_SYNCHING;
515 break;
516 case NODE_FAILOVER_BEGIN_EVT:
517 state = NODE_FAILINGOVER;
518 break;
509 case SELF_ESTABL_CONTACT_EVT: 519 case SELF_ESTABL_CONTACT_EVT:
510 case PEER_ESTABL_CONTACT_EVT: 520 case PEER_ESTABL_CONTACT_EVT:
521 case NODE_SYNCH_END_EVT:
522 case NODE_FAILOVER_END_EVT:
511 break; 523 break;
512 default: 524 default:
513 pr_err("Unknown node fsm evt %x/%x\n", state, evt); 525 goto illegal_evt;
514 } 526 }
515 break; 527 break;
516 case SELF_DOWN_PEER_LEAVING: 528 case SELF_DOWN_PEER_LEAVING:
@@ -522,8 +534,12 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
522 case PEER_ESTABL_CONTACT_EVT: 534 case PEER_ESTABL_CONTACT_EVT:
523 case SELF_LOST_CONTACT_EVT: 535 case SELF_LOST_CONTACT_EVT:
524 break; 536 break;
537 case NODE_SYNCH_END_EVT:
538 case NODE_SYNCH_BEGIN_EVT:
539 case NODE_FAILOVER_BEGIN_EVT:
540 case NODE_FAILOVER_END_EVT:
525 default: 541 default:
526 pr_err("Unknown node fsm evt %x/%x\n", state, evt); 542 goto illegal_evt;
527 } 543 }
528 break; 544 break;
529 case SELF_UP_PEER_COMING: 545 case SELF_UP_PEER_COMING:
@@ -537,8 +553,12 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
537 case SELF_ESTABL_CONTACT_EVT: 553 case SELF_ESTABL_CONTACT_EVT:
538 case PEER_LOST_CONTACT_EVT: 554 case PEER_LOST_CONTACT_EVT:
539 break; 555 break;
556 case NODE_SYNCH_END_EVT:
557 case NODE_SYNCH_BEGIN_EVT:
558 case NODE_FAILOVER_BEGIN_EVT:
559 case NODE_FAILOVER_END_EVT:
540 default: 560 default:
541 pr_err("Unknown node fsm evt %x/%x\n", state, evt); 561 goto illegal_evt;
542 } 562 }
543 break; 563 break;
544 case SELF_COMING_PEER_UP: 564 case SELF_COMING_PEER_UP:
@@ -552,8 +572,12 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
552 case SELF_LOST_CONTACT_EVT: 572 case SELF_LOST_CONTACT_EVT:
553 case PEER_ESTABL_CONTACT_EVT: 573 case PEER_ESTABL_CONTACT_EVT:
554 break; 574 break;
575 case NODE_SYNCH_END_EVT:
576 case NODE_SYNCH_BEGIN_EVT:
577 case NODE_FAILOVER_BEGIN_EVT:
578 case NODE_FAILOVER_END_EVT:
555 default: 579 default:
556 pr_err("Unknown node fsm evt %x/%x\n", state, evt); 580 goto illegal_evt;
557 } 581 }
558 break; 582 break;
559 case SELF_LEAVING_PEER_DOWN: 583 case SELF_LEAVING_PEER_DOWN:
@@ -565,16 +589,67 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
565 case PEER_ESTABL_CONTACT_EVT: 589 case PEER_ESTABL_CONTACT_EVT:
566 case PEER_LOST_CONTACT_EVT: 590 case PEER_LOST_CONTACT_EVT:
567 break; 591 break;
592 case NODE_SYNCH_END_EVT:
593 case NODE_SYNCH_BEGIN_EVT:
594 case NODE_FAILOVER_BEGIN_EVT:
595 case NODE_FAILOVER_END_EVT:
596 default:
597 goto illegal_evt;
598 }
599 break;
600 case NODE_FAILINGOVER:
601 switch (evt) {
602 case SELF_LOST_CONTACT_EVT:
603 state = SELF_DOWN_PEER_LEAVING;
604 break;
605 case PEER_LOST_CONTACT_EVT:
606 state = SELF_LEAVING_PEER_DOWN;
607 break;
608 case NODE_FAILOVER_END_EVT:
609 state = SELF_UP_PEER_UP;
610 break;
611 case NODE_FAILOVER_BEGIN_EVT:
612 case SELF_ESTABL_CONTACT_EVT:
613 case PEER_ESTABL_CONTACT_EVT:
614 break;
615 case NODE_SYNCH_BEGIN_EVT:
616 case NODE_SYNCH_END_EVT:
568 default: 617 default:
569 pr_err("Unknown node fsm evt %x/%x\n", state, evt); 618 goto illegal_evt;
619 }
620 break;
621 case NODE_SYNCHING:
622 switch (evt) {
623 case SELF_LOST_CONTACT_EVT:
624 state = SELF_DOWN_PEER_LEAVING;
625 break;
626 case PEER_LOST_CONTACT_EVT:
627 state = SELF_LEAVING_PEER_DOWN;
628 break;
629 case NODE_SYNCH_END_EVT:
630 state = SELF_UP_PEER_UP;
631 break;
632 case NODE_FAILOVER_BEGIN_EVT:
633 state = NODE_FAILINGOVER;
634 break;
635 case NODE_SYNCH_BEGIN_EVT:
636 case SELF_ESTABL_CONTACT_EVT:
637 case PEER_ESTABL_CONTACT_EVT:
638 break;
639 case NODE_FAILOVER_END_EVT:
640 default:
641 goto illegal_evt;
570 } 642 }
571 break; 643 break;
572 default: 644 default:
573 pr_err("Unknown node fsm state %x\n", state); 645 pr_err("Unknown node fsm state %x\n", state);
574 break; 646 break;
575 } 647 }
576
577 n->state = state; 648 n->state = state;
649 return;
650
651illegal_evt:
652 pr_err("Illegal node fsm evt %x in state %x\n", evt, state);
578} 653}
579 654
580bool tipc_node_filter_skb(struct tipc_node *n, struct tipc_link *l, 655bool tipc_node_filter_skb(struct tipc_node *n, struct tipc_link *l,