tipc: fix failover problem
We see the following scenario: 1) Link endpoint B on node 1 discovers that its peer endpoint is gone. Since there is a second working link, failover procedure is started. 2) Link endpoint A on node 1 sends a FAILOVER message to peer endpoint A on node 2. The node item 1->2 goes to state FAILINGOVER. 3) Linke endpoint A/2 receives the failover, and is supposed to take down its parallell link endpoint B/2, while producing a FAILOVER message to send back to A/1. 4) However, B/2 has already been deleted, so no FAILOVER message can created. 5) Node 1->2 remains in state FAILINGOVER forever, refusing to receive any messages that can bring B/1 up again. We are left with a non- redundant link between node 1 and 2. We fix this with letting endpoint A/2 build a dummy FAILOVER message to send to back to A/1, so that the situation can be resolved. Signed-off-by: LUU Duc Canh <canh.d.luu@dektech.com.au> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
418b9a353a
commit
c140eb166d
@@ -88,6 +88,8 @@ bool tipc_link_bc_create(struct net *net, u32 ownnode, u32 peer,
|
||||
struct tipc_link **link);
|
||||
void tipc_link_tnl_prepare(struct tipc_link *l, struct tipc_link *tnl,
|
||||
int mtyp, struct sk_buff_head *xmitq);
|
||||
void tipc_link_create_dummy_tnl_msg(struct tipc_link *tnl,
|
||||
struct sk_buff_head *xmitq);
|
||||
void tipc_link_build_reset_msg(struct tipc_link *l, struct sk_buff_head *xmitq);
|
||||
int tipc_link_fsm_evt(struct tipc_link *l, int evt);
|
||||
bool tipc_link_is_up(struct tipc_link *l);
|
||||
@@ -107,6 +109,7 @@ u16 tipc_link_rcv_nxt(struct tipc_link *l);
|
||||
u16 tipc_link_acked(struct tipc_link *l);
|
||||
u32 tipc_link_id(struct tipc_link *l);
|
||||
char *tipc_link_name(struct tipc_link *l);
|
||||
u32 tipc_link_state(struct tipc_link *l);
|
||||
char tipc_link_plane(struct tipc_link *l);
|
||||
int tipc_link_prio(struct tipc_link *l);
|
||||
int tipc_link_window(struct tipc_link *l);
|
||||
|
Reference in New Issue
Block a user