[bgpd] bug #368: Fix possible loop between peers going Idle<->OpenSent

2007-06-22 Paul Jakma <paul.jakma@sun.com>

	* bgp_fsm.c: (struct FSM) Bug #368. TCP Errors during OpenSent
	  should cycle to Active, not to Idle or else peer bringup can
	  race and cycle Idle<->Active. Reported and fix tested by
	  Mukesh Agrawal.
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index b2191d4..a871f42 100644
--- a/bgpd/ChangeLog
+++ b/bgpd/ChangeLog
@@ -1,3 +1,10 @@
+2007-06-22 Paul Jakma <paul.jakma@sun.com>
+
+	* bgp_fsm.c: (struct FSM) Bug #368. TCP Errors during OpenSent
+	  should cycle to Active, not to Idle or else peer bringup can
+	  race and cycle Idle<->Active. Reported and fix tested by
+	  Mukesh Agrawal.
+
 2007-05-25 Paul Jakma <paul.jakma@sun.com>
 
 	* bgp_route.c: (bgp_default_originate) Sanity check added
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index db7e69a..15bd8a6 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -963,10 +963,10 @@
     /* OpenSent, */
     {bgp_ignore,  OpenSent},	/* BGP_Start                    */
     {bgp_stop,    Idle},	/* BGP_Stop                     */
-    {bgp_stop,    Idle},	/* TCP_connection_open          */
+    {bgp_stop,    Active},	/* TCP_connection_open          */
     {bgp_stop,    Active},	/* TCP_connection_closed        */
-    {bgp_ignore,  Idle},	/* TCP_connection_open_failed   */
-    {bgp_stop,    Idle},	/* TCP_fatal_error              */
+    {bgp_stop,    Active},	/* TCP_connection_open_failed   */
+    {bgp_stop,    Active},	/* TCP_fatal_error              */
     {bgp_ignore,  Idle},	/* ConnectRetry_timer_expired   */
     {bgp_fsm_holdtime_expire, Idle},	/* Hold_Timer_expired           */
     {bgp_ignore,  Idle},	/* KeepAlive_timer_expired      */