<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
    There has to be one entity for each item to be referenced. 
    An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-xu-idr-neighbor-autodiscovery-07"
     ipr="trust200902">
  <front>
    <title abbrev="">BGP Neighbor Autodiscovery</title>

    <author fullname="Xiaohu Xu" initials="X.X." surname="Xu">
      <organization>Alibaba Inc</organization>

      <address>
        <!--
       <postal>
         <street></street>
-->

        <!-- Reorder these if your country does things differently -->

        <!--
         <city>Soham</city>

         <region></region>

         <code></code>

         <country>UK</country>
       </postal>

       <phone>+44 7889 488 335</phone>
-->

        <email>xiaohu.xxh@alibaba-inc.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Kunyang Bi" initials="K.B." surname="Bi">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone/>

        <facsimile/>

        <email>bikunyang@huawei.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Jeff Tantsura" initials="J.T." surname="Tantsura">
      <organization>Nuage Networks</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone/>

        <facsimile/>

        <email>jefftant.ietf@gmail.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Nikos Triantafillis" initials="N. T."
            surname="Triantafillis">
      <organization>LinkedIn</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone/>

        <facsimile/>

        <email>nikos@linkedin.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Ketan Talaulikar" initials="K. T" surname="Talaulikar">
      <organization>Cisco</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone/>

        <facsimile/>

        <email>ketant@cisco.com</email>

        <uri/>
      </address>
    </author>

    <!--

-->

    <date day="15" month="May" year="2018"/>

    <abstract>
      <t>BGP has been used as the underlay routing protocol in many
      hyper-scale data centers. This document proposes a BGP neighbor
      autodiscovery mechanism that greatly simplifies BGP deployments. This
      mechanism is very useful for those hyper-scale data centers where BGP is
      used as the underlay routing protocol.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>BGP has been used as the underlay routing protocol instead of IGP in
      many hyper-scale data centers <xref target="RFC7938"/>. Furthermore,
      there is an ongoing effort to leverage BGP link-state distribution
      mechanism to achieve BGP-SPF <xref target="I-D.keyupate-lsvr-bgp-spf"/>.
      However, BGP is not good as an IGP from the perspective of deployment
      automation and simplicity. For instance, the IP address and the
      Autonomous System Number (ASN) of each and every BGP neighbor have to be
      manually configured on BGP routers although these BGP peers are directly
      connected. Furthermore, for those BGP routers with multiple physical
      links being connected, it's usually not ideal to establish BGP sessions
      over their directly connected interface addresses because the BGP update
      volume would be unnecessarily increased, meanwhile, it may not be
      suitable to configure those links as a Link Aggregation Group (LAG) due
      to some reasons. As a result, it's more common that loopback interface
      addresses of those directly connected BGP peers are used for BGP session
      establishment purpose. To make those loopback addresses of directly
      connected BGP peers reachable from one another, either static routes
      have to be configured or some kind of IGP has to be enabled. The former
      is not good from the network automation perspective while the latter is
      not good from the network simplification perspective (i.e., running less
      routing protocols).</t>

      <t>This draft specifies a BGP neighbor autodiscovery mechanism by
      borrowing some ideas from the Label Distribution Protocol (LDP) <xref
      target="RFC5036"/> . More specifically, directly connected BGP routers
      could automatically discovery each other through the exchange of the
      to-be-defined BGP Hello messages. The BGP session establishment process
      as defined in <xref target="RFC4271"/> could be triggered once directly
      connected BGP neighbors are discovered from one another. Note that the
      BGP session should be established over the discovered the peering
      address of the BGP neighbor and in most cases the peering address is a
      loopback address. In addition, to eliminate the need of configuring
      static routes or enabling IGP for the loopback addresses, a certain type
      of routes towards the BGP neighbor's loopback addresses as advertised as
      peering addresses are dynamically instantiated once the BGP neighbor has
      been discovered. The administrative distance of such type of routes MUST
      be smaller than their equivalents that are learnt by the regular BGP
      update messages . Otherwise, circular dependency would occur once these
      loopback addresses are advertised via the regular BGP updates.</t>
    </section>

    <section anchor="Terminology" title="Terminology">
      <t>This memo makes use of the terms defined in <xref
      target="RFC4271"/>.</t>
    </section>

    <section anchor="Advertising" title="BGP Hello Message Format">
      <t>To automatically discover directly connected BGP neighbors, a BGP
      router periodically sends BGP HELLO messages out those interfaces on
      which BGP neighbor autodiscovery are enabled. The BGP HELLO message MUST
      sent as a UDP packet with a destination port of TBD (179 is the
      preferred port number value) addressed for the "all routers on this
      subnet" group multicast address (i.e., 224.0.0.2 in the IPv4 case and
      FF02::2 in the IPv6 case). The IP source address is set to the address
      of the interface over which the message is sent out.</t>

      <t>The HELLO message contains the following fields:</t>

      <t><figure>
          <artwork><![CDATA[         0                   1                   2                   3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |     Version   |     Type      |      Message Length           |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                           AS number                           |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                         BGP Identifier                        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |           Hold Time           |         Reserved              |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                             TLVs                              |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               
                       Figure 1: BGP Hello Message]]></artwork>
        </figure><list>
          <t>Version: This 1-octet unsigned integer indicates the protocol
          version number of the message. The current BGP version number is
          4.</t>

          <t>Type: The type of BGP message (Hello - TBD value from BGP Message
          Types Registry)</t>

          <t>Message Length: This 2-octet unsigned integer specifies the
          length in octets of the TLVs field.</t>

          <t>AS number: AS Number of the Hello message sender.</t>

          <t>BGP Identifier: BGP Identifier of the Hello message sender.</t>

          <t>Hold Time: Hello hold timer in seconds. Hello Hold Time specifies
          the time the receiving BGP peer will maintain its record of Hellos
          from the sending BGP peer without receipt of another Hello. The
          RECOMMENDED default value is 15 seconds. A value of 0 means that the
          receiving BGP peer should maintain its record until the link is
          UP.</t>

          <t>Reserved: SHOULD be set to 0 by sender and MUST be ignored by
          receiver.</t>

          <t>TLVs: This field contains one or more TLVs as described
          below.</t>
        </list></t>

      <t>The Accepted ASN List TLV is an optional TLV that is used to signal
      the AS numbers from which the router would accept BGP sessions. When not
      signaled, it indicates that the router will accept BGP peering from any
      ASN from its neighbors. Only a single instance of this TLV is included
      and its format is shown below.<figure>
          <artwork><![CDATA[       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Type                 |      Length                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                 Accepted ASN List(variable)                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                   Figure 2: Accepted ASN List TLV]]></artwork>
        </figure><list>
          <t>Type: TBD1</t>

          <t>Length:Specifies the length of the Value field in octets.</t>

          <t>Accepted ASN-List: This variable-length field contains one or
          more accepted 4-octet ASNs.</t>
        </list></t>

      <t>The Peering Address TLV is used to indicate to the neighbor the
      address to which they should establish BGP session. For each peering
      address, the router can specify its supported AFI/SAFI(s). When the
      AFI/SAFI values are specified as 0/0, then it indicates that the
      neighbor can attempt for negotiation of any AFI/SAFIs. The indication of
      AFI/SAFI(s) in the Peering Address TLV is not intended as an alternative
      for the MP capabilities negotiation mechanism.</t>

      <t>The Peering Address TLV format is shown below and at least one
      instance of this TLV MUST be present.</t>

      <figure>
        <artwork><![CDATA[       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Type                 |      Length                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Flags       | No. AFI/SAFI  |      Reserved                 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Address (4-octet or 16-octet)                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            AFI                |   SAFI        |  ...      
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      sub-TLVs ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                   Figure 3: Peering Address TLV]]></artwork>
      </figure>

      <t><list>
          <t>Type: TBD2</t>

          <t>Length:Specifies the length of the Value field in octets.</t>

          <t>Flags : Current defined bits are as follows. All other bits
          SHOULD be cleared by sender and MUST be ignored by receiver.<list
              style="hanging">
              <t>Bit 0x1 - address is IPv6 when set and IPv4 when clear</t>
            </list></t>

          <t>Number of AFI/SAFI: indicates the number of AFI/SAFI pairs that
          the router supports on the given peering address.</t>

          <t>Reserved: sender SHOULD set to 0 and receiver MUST ignore.</t>

          <t>Address: This 4 or 16 octect field indicates the IPv4 or IPv6
          address which is used for establishing BGP sessions.</t>

          <t>AFI/SAFI : one or more pairs of these values that indicate the
          supported capabilities on the peering address.</t>

          <t>Sub-TLVs : currently none defined</t>
        </list></t>

      <t>When the Peering Address used is not the directly connected interface
      address (e.g. when it is a loopback address) then local prefix(es) that
      cover the peering address(es) MUST be signaled by the router. This
      allows the neighbor to learn these local prefix(es) and to program
      routes for them over the directly connected interfaces over which they
      are being signalled. The Local Prefixes TLV is used to only signal
      prefixes that are locally configured on the router and its format is as
      shown below.</t>

      <figure>
        <artwork><![CDATA[       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Type                 |      Length                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    No. of IPv4 Prefixes       |      No. of IPv6 Prefixes     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                    IPv4 Prefix                                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Prefix Mask  | ...
      +-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                    IPv6 Prefix                                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Prefix Mask  | ...
      +-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  sub-TLVs ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
                   Figure 4: Local Prefixes TLV]]></artwork>
      </figure>

      <t><list>
          <t>Type: TBD3</t>

          <t>Length:Specifies the length of the Value field in octets</t>

          <t>No. of IPv4 Prefixes : specifies the number of IPv4 prefixes.
          When value is 0, then it indicates no IPv4 Prefixes are present.</t>

          <t>No. of IPv6 Prefixes : specifies the number of IPv6 prefixes.
          When value is 0, then it indicates no IPv6 Prefixes are present.</t>

          <t>IPv4 Prefix Address &amp; Prefix Mask: Zero or more pairs of IPv4
          prefix address and their mask.</t>

          <t>IPv6 Prefix Address &amp; Prefix Mask: Zero or more pairs of IPv6
          prefix address and their mask.</t>

          <t>Sub-TLVs : currently none defined</t>
        </list></t>

      <t>The Link Attributes TLV is a mandatory TLV that signals to the
      neighbor the link attributes of the interface on the local router. A
      single instance of this TLV MUST be present in the message. The Link
      Attributes TLV is as shown below.</t>

      <figure>
        <artwork><![CDATA[       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Type                 |      Length                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Local Interface ID       |      Flags    |    Reserved   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    No. of IPv4 Addresses      |      No. of IPv6 Addresses    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                    IPv4 Local Address                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Prefix Mask  | ...
      +-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                    IPv6 Local Address                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Prefix Mask  | ...
      +-+-+-+-+-+-+-+-+

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  sub-TLVs ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
                   Figure 5: Link Attributes TLV]]></artwork>
      </figure>

      <t><list>
          <t>Type: TBD4</t>

          <t>Length:Specifies the length of the Value field in octets</t>

          <t>Local Interface ID : the local interface ID of the interface
          (e.g. the MIB-2 ifIndex)</t>

          <t>Flags : Currently defined bits are as follows. Other bits SHOULD
          be cleared by sender and MUST be ignored by receiver.<list
              style="hanging">
              <t>Bit 0x1 - indicates link is enabled for IPv4</t>

              <t>Bit 0x2 - indicates link is enabled for IPv6</t>
            </list></t>

          <t>Reserved: SHOULD be set to 0 by sender and MUST be ignored by
          receiver.</t>

          <t>No. of IPv4 Addresses : specifies the number of IPv4 local
          addresses on the interface. When value is 0, then it indicates no
          IPv4 Prefixes are present or the interface is IP unnumbered.</t>

          <t>No. of IPv6 Addresses : specifies the number of IPv6 Global
          addresses on the interface. When value is 0, then it indicates no
          IPv6 Global Prefixes are present or the interface is only configured
          with IPv6 link-local addresses</t>

          <t>IPv4 Address &amp; Mask: Zero or more pairs of IPv4 address and
          their mask.</t>

          <t>IPv6 Address &amp; Mask: Zero or more pairs of IPv6 address and
          their mask.</t>

          <t>Sub-TLVs : currently none defined</t>
        </list></t>

      <t>The Neighbor TLV is used by a BGP router to indicate the peering
      address and information about the neighbors that have been discovered by
      the router on the specific link and their status. The BGP session
      establishment process begins when both the neighbors accept each other
      over at least one underlying inter-connecting link between them. The
      Neighbor TLV format is as shown below.</t>

      <figure>
        <artwork><![CDATA[       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |          Type                 |      Length                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Flags       |   Status      |      Reserved                 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Neighbor Peering Address (4-octet or 16-octet)           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  sub-TLVs ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
                   Figure 6: Neighbor TLV]]></artwork>
      </figure>

      <t><list>
          <t>Type: TBD5</t>

          <t>Length:Specifies the length of the Value field in octets</t>

          <t>Flags : Currently defined 0x1 bit is clear when Peering Address
          is IPv4 and set when IPv6. Other bits SHOULD be clear by sender and
          MUST be ignored by receiver.</t>

          <t>Status : Indicates the status code of the peering for the
          particular session over this link. The following codes are currently
          defined</t>

          <t><list style="hanging">
              <t>0 - Indicates 1-way detection of the peer</t>

              <t>1 - Indicates rejection of the peer due to local policy
              reasons (i.e. local router would not be initiating or accepting
              session to this neighbor)</t>

              <t>2 - Indicates 2-way detection of the peering by both
              neighbors</t>

              <t>3 - Indicates that the BGP peering session has been
              established between the neighbors and that this link would be
              utilized for forwarding to the peer BGP nexthop</t>
            </list></t>

          <t>Reserved: SHOULD be set to 0 by sender and MUST be ignored by
          receiver.</t>

          <t>Neighbor Peering Address: This 4 or 16 octect field indicates the
          IPv4 or IPv6 peering address of the neighbor for which peering
          status is being reported.</t>

          <t>Sub-TLVs : currently none defined</t>
        </list></t>
    </section>

    <section title="Hello Message Procedure">
      <t>A BGP peer receiving Hellos from another peer maintains a Hello
      adjacency corresponding to the Hellos. The peer maintains a hold timer
      with the Hello adjacency, which it restarts whenever it receives a Hello
      that matches the Hello adjacency. If the hold timer for a Hello
      adjacency expires the peer discards the Hello adjacency.</t>

      <t>We recommend that the interval between Hello transmissions be at most
      one third of the Hello hold time.</t>

      <t>A BGP session with a peer has one or more Hello adjacencies.</t>

      <t>A BGP session has multiple Hello adjacencies when a pair of BGP peers
      is connected by multiple links that have the same connection address
      (e.g., multiple point-to-point links between a pair of routers). In this
      situation, the Hellos a BGP peer sends on each such link carry the same
      Peering Address. In addition, to eliminate the need of configuring
      static routes or enabling IGP for advertising the loopback addresses, a
      certain type of routes towards the BGP neighbor's loopback addresses
      (i.e. carried in the Local Prefixes TLV) could be dynamically created
      once the BGP neighbor has been discovered. The administrative distance
      of such type of routes MUST be smaller than their equivalents which are
      learnt via the normal BGP update messages. Otherwise, circular
      dependency problem would occur once these loopback addresses are
      advertised via the normal BGP update messages as well.</t>

      <t>BGP uses the regular receipt of BGP Hellos to indicate a peer's
      intent to keep BGP session identified by the Hello. A BGP peer maintains
      a hold timer with each Hello adjacency that it restarts when it receives
      a Hello that matches the adjacency. If the timer expires without receipt
      of a matching Hello from the peer, BGP concludes that the peer no longer
      wishes to keep BGP session for that link or that the peer has failed.
      The BGP peer then deletes the Hello adjacency. The route towards the BGP
      neighbor's loopback address that had been dynamically created due to
      that BGP Hello adjacency SHOULD be deleted accordingly. When the last
      Hello adjacency for an BGP session is deleted, the BGP peer terminates
      the BGP session and closing the transport connection.</t>
    </section>

    <section title="Contributors">
      <figure>
        <artwork><![CDATA[Satya Mohanty
Cisco
Email: satyamoh@cisco.com

Shunwan Zhuang
Huawei
Email: zhuangshunwan@huawei.com

Chao Huang
Alibaba Inc
Email: jingtan.hc@alibaba-inc.com


Guixin Bao
Alibaba Inc
Email: guixin.bgx@alibaba-inc.com

Jinghui Liu
Ruijie Networks
Email: liujh@ruijie.com.cn]]></artwork>
      </figure>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to thank Enke Chen for his valuable comments
      and suggestions on this document.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t/>

      <section title="BGP Hello Message">
        <t>This document requests IANA to allocate a new UDP port (179 is the
        preferred number ) and a BGP message type code for BGP Hello
        message.</t>

        <t><figure>
            <artwork><![CDATA[    Value   TLV Name                               Reference
    -----   ------------------------------------   -------------
    Service Name: BGP-HELLO 
    Transport Protocol(s): UDP 
    Assignee: IESG <iesg@ietf.org> 
    Contact: IETF Chair <chair@ietf.org>. 
    Description: BGP Hello Message. 
    Reference: This document -- draft-xu-idr-neighbor-autodiscovery. 
    Port Number: TBD1 (179 is the preferred value) -- To be assigned by IANA.]]></artwork>
          </figure></t>
      </section>

      <section title="TLVs of BGP Hello Message">
        <t>This document requests IANA to create a new registry "TLVs of BGP
        Hello Message" with the following registration procedure:</t>

        <t><figure>
            <artwork><![CDATA[              Registry Name: TLVs of BGP Hello Message.

    Value      TLV Name                                     Reference
    -------    ------------------------------------------   -------------
          0    Reserved                                     This document
          1    Accepted ASN List                            This document
          2    Peering Address                              This document
          3    Local Prefixes                               This document
          4    Link Attributes                              This document
          5    Neighbor                                     This document
    6-65500    Unassigned
65501-65534    Experimental                                 This document
      65535    Reserved                                     This document
]]></artwork>
          </figure></t>
      </section>

      <!---->
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>For security purposes, BGP speakers usually only accept TCP
      connection attempts to port 179 from the specified BGP peers or those
      within the configured address range. With the BGP neighbor
      auto-discovery mechanism, it's configurable to enable or disable
      sending/receiving BGP hello messages on the per-interface basis and BGP
      hello messages are only exchanged between physically connected peers
      that are trustworthy. Therefore, the BGP neighbor auto-discovery
      mechanism doesn't introduce additional security risks associated with
      BGP.</t>

      <t>In addition, for the BGP sessions with the automatically discovered
      peers via the BGP hello messages, the TTL of the TCP/BGP messages (dest
      port=179) MUST be set to 255. Any received TCP/BGP message with TTL
      being less than 254 MUST be dropped according to <xref
      target="RFC5082"/>.</t>

      <!---->
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.2119'?>

      <?rfc include='reference.RFC.4271'?>

      <?rfc include='reference.RFC.5082'?>

      <?rfc include='reference.RFC.5036'?>

      <?rfc include='reference.RFC.8279'?>

      <!---->
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.7938'?>

      <?rfc include='reference.I-D.keyupate-lsvr-bgp-spf'?>

      <?rfc ?>

      <!---->
    </references>
  </back>
</rfc>
