]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fix race condition that breaks BGP connections after reconfigure.
authorOndrej Zajicek <santiago@crfreenet.org>
Wed, 29 Oct 2008 13:16:34 +0000 (14:16 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Wed, 29 Oct 2008 13:16:34 +0000 (14:16 +0100)
RFC says that only connections in OpenConfirm and Established state
should participate in connection collision detection.

The current implementation leads to race condition when both sides
are trying to connect at the almost same time, then both sides
receive OPEN message by different connections at the almost same
time and close the other connection. Both connections are
closed and the both sides end in  start/idle or start/active
state.

proto/bgp/packets.c

index c18c6e42427a74b54ffaa470923a8842527929d3..84e6ffd5ebc6ef33901599ed8f9964f1b30c3dc3 100644 (file)
@@ -510,12 +510,9 @@ bgp_rx_open(struct bgp_conn *conn, byte *pkt, int len)
   switch (other->state)
     {
     case BS_IDLE:
-      break;
     case BS_CONNECT:
     case BS_ACTIVE:
     case BS_OPENSENT:
-      BGP_TRACE(D_EVENTS, "Connection collision, giving up the other connection");
-      bgp_close_conn(other);
       break;
     case BS_OPENCONFIRM:
       if ((p->local_id < id) == (conn == &p->incoming_conn))