]> git.puffer.fish Git - mirror/frr.git/commitdiff
[bgpd] Allow accepted peers to progress even if realpeer is in Connect
authorPaul Jakma <paul.jakma@sun.com>
Tue, 9 Sep 2008 16:14:33 +0000 (17:14 +0100)
committerPaul Jakma <paul@quagga.net>
Tue, 9 Sep 2008 16:14:33 +0000 (17:14 +0100)
* bgpd/bgp_packet.c: (bgp_open_receive) Try fix the little race in the FSM,
  where a accept-peer that progress faster than realpeer gets closed down if
  realpeer is still just in Connect, by allowing the realpeer to be
  bgp_stop'ed and doing the regular swapping-of-FSM state.

bgpd/bgp_packet.c

index 271a21a0f48bf369acbbd7b7b0a8a37dd9bee031..1422bad672be201f9774b2be3eaa64e58b24e737 100644 (file)
@@ -1304,8 +1304,8 @@ bgp_open_receive (struct peer *peer, bgp_size_t size)
        }
        else if (ret == 0 && realpeer->status != Active
                 && realpeer->status != OpenSent
-                && realpeer->status != OpenConfirm)
-
+                && realpeer->status != OpenConfirm
+                && realpeer->status != Connect)
        {
          /* XXX: This is an awful problem.. 
           *
@@ -1363,8 +1363,9 @@ bgp_open_receive (struct peer *peer, bgp_size_t size)
        }
 
       if (BGP_DEBUG (events, EVENTS))
-       zlog_debug ("%s [Event] Transfer temporary BGP peer to existing one",
-                  peer->host);
+       zlog_debug ("%s [Event] Transfer accept BGP peer to real (state %s)",
+                  peer->host, 
+                  LOOKUP (bgp_status_msg, realpeer->status));
 
       bgp_stop (realpeer);