Re: bgp4-17 Cease subcode

Kunihiro Ishiguro <kunihiro@zebra.org> Fri, 18 January 2002 03:46 UTC

Received: from trapdoor.merit.edu (postfix@trapdoor.merit.edu [198.108.1.26]) by nic.merit.edu (8.9.3/8.9.1) with ESMTP id WAA03385 for <idr-archive@nic.merit.edu>; Thu, 17 Jan 2002 22:46:38 -0500 (EST)
Received: by trapdoor.merit.edu (Postfix) id 0C14291303; Thu, 17 Jan 2002 22:45:29 -0500 (EST)
Delivered-To: idr-outgoing@trapdoor.merit.edu
Received: by trapdoor.merit.edu (Postfix, from userid 56) id 0723C91304; Thu, 17 Jan 2002 22:45:26 -0500 (EST)
Delivered-To: idr@trapdoor.merit.edu
Received: from segue.merit.edu (segue.merit.edu [198.108.1.41]) by trapdoor.merit.edu (Postfix) with ESMTP id DB43B91303 for <idr@trapdoor.merit.edu>; Thu, 17 Jan 2002 22:45:25 -0500 (EST)
Received: by segue.merit.edu (Postfix) id A82F15DDCD; Thu, 17 Jan 2002 22:45:25 -0500 (EST)
Delivered-To: idr@merit.edu
Received: from titanium.zebra.org (unknown [209.11.132.18]) by segue.merit.edu (Postfix) with ESMTP id 1CEC85DDB9 for <idr@merit.edu>; Thu, 17 Jan 2002 22:45:25 -0500 (EST)
Received: from titanium.zebra.org (IDENT:kunihiro@localhost [127.0.0.1]) by titanium.zebra.org (8.9.3/8.9.3) with ESMTP id VAA01193; Thu, 17 Jan 2002 21:46:46 -0500
Date: Thu, 17 Jan 2002 18:46:46 -0800
Message-ID: <m28zawbckp.wl@titanium.zebra.org>
From: Kunihiro Ishiguro <kunihiro@zebra.org>
To: Susan Hares <skh@nexthop.com>
Cc: Vincent Gillet <vgi@zoreil.com>, Yakov Rekhter <yakov@juniper.net>, Jeffrey Haas <jhaas@nexthop.com>, idr@merit.edu
Subject: Re: bgp4-17 Cease subcode
In-Reply-To: <5.0.0.25.0.20020116181115.03ea46f8@mail.nexthop.com>
References: <5.0.0.25.0.20020116090028.039d2fa8@mail.nexthop.com> <20020115140711.GA23937@opentransit.net> <20020114123700.C7761@nexthop.com> <200201141750.g0EHo3634958@merlot.juniper.net> <87advfjcqi.wl@vaio.zebra.org> <m28zay2d7u.wl@titanium.zebra.org> <5.0.0.25.0.20020116181115.03ea46f8@mail.nexthop.com>
User-Agent: Wanderlust/2.6.0 (Twist And Shout) SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/21.1 (powerpc-unknown-linux-gnu) MULE/5.0 (SAKAKI)
MIME-Version: 1.0 (generated by SEMI 1.14.3 - "Ushinoya")
Content-Type: text/plain; charset="US-ASCII"
Sender: owner-idr@merit.edu
Precedence: bulk

>Here's the state machine diagram and event plan that
>matches the state machine.   You could
>look at the state machine diagram to easily walk through
>the words.

Thanks Sue.  It's very helpful to understand the whole picture.  Here
is a draft of FSM section based upon bgp4-16 description and your FSM
chart.  I tried:

 o Create a new sub-section 8.1 for Exponential Back-off.
 o Do not add IdelHold status.
 o Use new bgp4-17 like action description format (I use bullet for
   each action).

Any comments are welcome.

---------------------------------------------------------------------------

8. BGP Finite State machine.

   This section specifies BGP operation in terms of a Finite State
   Machine (FSM). Following is a brief summary and overview of BGP
   operations by state as determined by this FSM.

      Initially BGP is in the Idle state.

      Idle state:

         In this state BGP refuses all incoming BGP connections. No
         resources are allocated to the peer. In response to the Start
         event initiated by either system or operator (see Section
         8.1) the local system:

            o Initializes all BGP resources.

            o Starts the ConnectRetry timer.

            o Initiates a transport connection to other BGP peer.

            o Changes its state to Connect.

         The exact value of the ConnectRetry timer is a local matter,
         but should be sufficiently large to allow TCP initialization.

         Any other event received in the Idle state is ignored.

      Connect state:

         In this state BGP is waiting for the transport protocol
         connection to be completed.

         If the transport protocol connection succeeds, the local
         system:

            o Clears the ConnectRetry timer.

            o Completes initialization.

	    o Sends an OPEN message to its peer.

	    o Changes its state to OpenSent.

         If the transport protocol connect fails (e.g., retransmission
         timeout), the local system:

            o Restarts the ConnectRetry timer.

            o Continues to listen for a connection that may be
              initiated by the remote BGP peer.

            o Changes its state to Active state.

         In response to the ConnectRetry timer expired event, the local
         system:

	    o Restarts the ConnectRetry timer.

            o Initiates a transport connection to other BGP peer.

            o Continues to listen for a connection that may be
              initiated by the remote BGP peer.

            o Stays in the Connect state.

         The Start event is ignored in the Connect state.

         In response to any other event (initiated by either system or
         operator), the local system releases all BGP resources
         associated with this connection and changes its state to Idle.

      Active state:

         In this state BGP is trying to acquire a peer by listening for
         and accepting a transport protocol connection.

         If the transport protocol connection succeeds, the local
         system:

            o Clears the ConnectRetry timer.

            o Completes initialization.

            o Sends an OPEN message to its peer.

            o Sets its Hold Timer to a large value.

            o Changes its state to OpenSent.

         A Hold Timer value of 4 minutes is suggested.

         In response to the ConnectRetry timer expired event, the local
         system:

	    o Restarts the ConnectRetry timer.

            o Initiates a transport connection to the other BGP peer.

	    o Continues to listen for a connection that may be
	      initiated by the remote BGP peer.

	    o Changes its state to Connect.

         If the local system does not allow BGP connections with
         unconfigured peers, then the local system:

	    o Rejects connections from IP addresses that are not
              configured peers.

	    o Remains in the Active state.

         The Start event is ignored in the Active state.

         In response to any other event (initiated by either system or
         operator), the local system releases all BGP resources
         associated with this connection and changes its state to Idle.

      OpenSent state:

         In this state BGP waits for an OPEN message from its peer.
         When an OPEN message is received, all fields are checked for
         correctness. If the BGP message header checking or OPEN message
         checking detects an error (see Section 6.2), or a connection
         collision (see Section 6.8) the local system sends a
         NOTIFICATION message and changes its state to Idle.

         If there are no errors in the OPEN message, the local system:

	    o Sends a KEEPALIVE message.

            o Sets a KeepAlive timer.

            o Sets a Hold timer according to the negotiated Hold time
              value (see section 4.2).

            o Changes its state to OpenConfirm.

         If the negotiated Hold time value is zero, then the Hold
         timer and KeepAlive timers are not started.  If the value of
         the Autonomous System field is the same as the local
         Autonomous System number, then the connection is an
         "internal" connection; otherwise, it is an "external"
         connection.  (This will impact UPDATE processing as described
         below.)

         If a disconnect notification is received from the underlying
         transport protocol, the local system:

	    o Closes the BGP connection.

            o Restarts the ConnectRetry timer.

            o Continue listening for connection that may be initiated
              by the remote BGP peer.

	    o Changes its state to Active.

         If the Hold Timer expires, the local system:

            o Sends NOTIFICATION message with error code Hold Timer
              Expired.

            o Changes its state to Idle.

         In response to the Stop event (initiated by either system or
         operator) the local system:

	    o Sends NOTIFICATION message with Error Code Cease.

            o Changes its state to Idle.

         The Start event is ignored in the OpenSent state.

         In response to any other event the local system:

	    o Sends NOTIFICATION message with Error Code Finite State
	      Machine Error

            o Changes its state to Idle.

         Whenever BGP changes its state from OpenSent to Idle, it closes
         the BGP (and transport-level) connection and releases all
         resources associated with that connection.

      OpenConfirm state:

         In this state BGP waits for a KEEPALIVE or NOTIFICATION
         message.

         If the local system receives a KEEPALIVE message, the local
         system:

            o Changes its state to Established.

         If the Hold Timer expires before a KEEPALIVE message is
         received, the local system:

	    o Sends NOTIFICATION message with error code Hold Timer
	      Expired.

            o Changes its state to Idle.

         If the local system receives a NOTIFICATION message, the
         local system:

            o Changes its state to Idle.

         If the KeepAlive timer expires, the local system:

	    o Sends a KEEPALIVE message.

	    o Restarts its KeepAlive timer.

         If a disconnect notification is received from the underlying
         transport protocol, the local system:

            o Changes its state to Idle.

         In response to the Stop event (initiated by either system or
         operator) the local system:

	    o Sends NOTIFICATION message with Error Code Cease.

	    o Changes its state to Idle.

         The Start event is ignored in the OpenConfirm state.

         In response to any other event the local system:

	    o Sends NOTIFICATION message with Error Code Finite State
	      Machine Error.

            o Changes its state to Idle.

         Whenever BGP changes its state from OpenConfirm to Idle, it
         closes the BGP (and transport-level) connection and releases
         all resources associated with that connection.

      Established state:

         In the Established state BGP can exchange UPDATE, NOTIFICATION,
         and KEEPALIVE messages with its peer.

         If the local system receives an UPDATE or KEEPALIVE message,
         the local system: 

            o Restarts its Hold Timer, if the negotiated Hold Time
              value is non-zero.

         If the local system receives a NOTIFICATION message, the
	 local system: 

	    o Changes its state to Idle.

         If the local system receives an UPDATE message and the UPDATE
         message error handling procedure (see Section 6.3) detects an
         error, the local system:

	    o Sends a NOTIFICATION message.

	    o Changes its state to Idle.

         If a disconnect notification is received from the underlying
         transport protocol, the local system:

	    o Changes its state to Idle.

         If the Hold Timer expires, the local system:

	    o Sends a NOTIFICATION message with Error Code Hold Timer
              Expired.

	    o Changes its state to Idle.

         If the KeepAlive timer expires, the local system:

	    o Sends a KEEPALIVE message.

	    o Restarts its KeepAlive timer. if the negotiated Hold
	      time value is non-zero.

         Each time the local system sends a KEEPALIVE or UPDATE
         message, it restarts its KeepAlive timer, if the negotiated
         Hold Time value is non-zero.

         In response to the Stop event (initiated by either system or
         operator), the local system sends a NOTIFICATION message with
         Error Code Cease and changes its state to Idle.

         The Start event is ignored in the Established state.

         In response to any other event, the local system:

	    o Sends NOTIFICATION message with Error Code Finite State
	      Machine Error.

            o Changes its state to Idle.

         Whenever BGP changes its state from Established to Idle, it
         closes the BGP (and transport-level) connection, releases all
         resources associated with that connection, and deletes all
         routes derived from that connection.

8.1 Exponential Back-off.

   If a BGP speaker detects an error, it shuts down the connection and
   changes its state to Idle.  Getting out of the Idle state requires
   generation of the Start event.  If such an event is generated
   automatically, then persistent BGP errors may result in persistent
   flapping of the speaker.  To avoid such a condition it is
   recommended that Start events should not be generated immediately
   for a peer that was previously transitioned to Idle due to an
   error.  For a peer that was previously transitioned to Idle due to
   an error, the time between consecutive generation of Start events,
   if such events are generated automatically, shall exponentially
   increase. The value of the initial timer shall be 60 seconds. The
   time shall be doubled for each consecutive retry.  Suggested value
   for this timer is:

   2**(consecutive retry count)*60

   An implementation MAY impose a configurable upper bound on that
   timer value. Once the upper bound is reached, the speaker shall
   stop the timer then no longer automatically generate the Start
   event for the peer.