| < draft-xu-idr-neighbor-autodiscovery-09.txt | draft-xu-idr-neighbor-autodiscovery-10.txt > | |||
|---|---|---|---|---|
| Network Working Group X. Xu | Network Working Group X. Xu | |||
| Internet-Draft Alibaba Inc | Internet-Draft Alibaba Inc | |||
| Intended status: Standards Track K. Talaulikar | Intended status: Standards Track K. Talaulikar | |||
| Expires: January 17, 2019 Cisco Systems | Expires: April 25, 2019 Cisco Systems | |||
| K. Bi | K. Bi | |||
| Huawei | Huawei | |||
| J. Tantsura | J. Tantsura | |||
| Nuage Networks | ||||
| N. Triantafillis | N. Triantafillis | |||
| July 16, 2018 | Apstra | |||
| October 22, 2018 | ||||
| BGP Neighbor Auto-Discovery | BGP Neighbor Discovery | |||
| draft-xu-idr-neighbor-autodiscovery-09 | draft-xu-idr-neighbor-autodiscovery-10 | |||
| Abstract | Abstract | |||
| BGP is being used as the underlay routing protocol in some large- | BGP is being used as the underlay routing protocol in some large- | |||
| scaled data centers (DCs). Most popular design followed is to do | scaled data centers (DCs). Most popular design followed is to do | |||
| hop-by-hop external BGP (eBGP) session configurations between | hop-by-hop external BGP (EBGP) session configurations between | |||
| neighboring routers on a per link basis. The provisioning of BGP | neighboring routers on a per link basis. The provisioning of BGP | |||
| neighbors in routers across such a DC brings its own operational | neighbors in routers across such a DC brings its own operational | |||
| complexity. | complexity. | |||
| This document introduces a BGP neighbor discovery mechanism that | This document introduces a BGP neighbor discovery mechanism that | |||
| greatly simplifies BGP operations in such DC and other networks by | greatly simplifies BGP operations in such DC and other networks by | |||
| automatic setup of BGP sessions between neighbor routers using this | automatic setup of BGP sessions between neighbor routers using this | |||
| mechanism. | mechanism. | |||
| Requirements Language | Requirements Language | |||
| skipping to change at page 2, line 7 ¶ | skipping to change at page 2, line 7 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 17, 2019. | This Internet-Draft will expire on April 25, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Applicability . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4. UDP Message Header . . . . . . . . . . . . . . . . . . . . . 5 | 4. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. Hello Message Format . . . . . . . . . . . . . . . . . . . . 6 | 5. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6. Hello Message TLVs . . . . . . . . . . . . . . . . . . . . . 8 | 6. UDP Message Header . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 6.1. Accepted ASN List TLV . . . . . . . . . . . . . . . . . . 8 | 7. Hello Message Format . . . . . . . . . . . . . . . . . . . . 8 | |||
| 6.2. Peering Address TLV . . . . . . . . . . . . . . . . . . . 9 | 8. Hello Message TLVs . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.3. Local Prefix TLV . . . . . . . . . . . . . . . . . . . . 10 | 8.1. Accepted ASN List TLV . . . . . . . . . . . . . . . . . . 10 | |||
| 6.4. Link Attributes TLV . . . . . . . . . . . . . . . . . . . 12 | 8.2. Peering Address TLV . . . . . . . . . . . . . . . . . . . 11 | |||
| 6.5. Neighbor TLV . . . . . . . . . . . . . . . . . . . . . . 14 | 8.3. Local Prefix TLV . . . . . . . . . . . . . . . . . . . . 13 | |||
| 6.6. Cryptographic Authentication TLV . . . . . . . . . . . . 15 | 8.4. Link Attributes TLV . . . . . . . . . . . . . . . . . . . 14 | |||
| 7. Neighbor Discovery Procedure . . . . . . . . . . . . . . . . 17 | 8.5. Neighbor TLV . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7.1. Interface State . . . . . . . . . . . . . . . . . . . . . 17 | 8.6. Cryptographic Authentication TLV . . . . . . . . . . . . 18 | |||
| 7.2. Adjacency State Machine . . . . . . . . . . . . . . . . . 18 | 9. Neighbor Discovery Procedure . . . . . . . . . . . . . . . . 20 | |||
| 7.3. Peering Route . . . . . . . . . . . . . . . . . . . . . . 19 | 9.1. Interface Procedures . . . . . . . . . . . . . . . . . . 20 | |||
| 8. Interactions with Base BGP Protocol . . . . . . . . . . . . . 20 | 9.2. Adjacency State Machine . . . . . . . . . . . . . . . . . 21 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | 9.2.1. Down State . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 10. Manageability Considerations . . . . . . . . . . . . . . . . 22 | 9.2.2. Initial State . . . . . . . . . . . . . . . . . . . . 22 | |||
| 10.1. Operational Considerations . . . . . . . . . . . . . . . 22 | 9.2.3. 1-Way State . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 10.2. Management Considerations . . . . . . . . . . . . . . . 23 | 9.2.4. 2-Way State . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 9.2.5. Adj-Reject State . . . . . . . . . . . . . . . . . . 23 | |||
| 11.1. BGP Hello Message . . . . . . . . . . . . . . . . . . . 24 | 9.2.6. Adj-OK State . . . . . . . . . . . . . . . . . . . . 24 | |||
| 11.2. TLVs of BGP Hello Message . . . . . . . . . . . . . . . 24 | 9.2.7. Accepted State . . . . . . . . . . . . . . . . . . . 24 | |||
| 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 24 | 9.3. Adjacency Route . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 24 | 10. Interactions with Base BGP Protocol . . . . . . . . . . . . . 26 | |||
| 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 27 | |||
| 14.1. Normative References . . . . . . . . . . . . . . . . . . 25 | 12. Manageability Considerations . . . . . . . . . . . . . . . . 28 | |||
| 14.2. Informative References . . . . . . . . . . . . . . . . . 26 | 12.1. Operational Considerations . . . . . . . . . . . . . . . 28 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | 12.2. Management Considerations . . . . . . . . . . . . . . . 29 | |||
| 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 | ||||
| 13.1. BGP Hello Message . . . . . . . . . . . . . . . . . . . 29 | ||||
| 13.2. TLVs of BGP Hello Message . . . . . . . . . . . . . . . 30 | ||||
| 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
| 15. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
| 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
| 16.1. Normative References . . . . . . . . . . . . . . . . . . 31 | ||||
| 16.2. Informative References . . . . . . . . . . . . . . . . . 32 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
| 1. Introduction | 1. Introduction | |||
| BGP is being used as the underlay routing protocol instead of link- | BGP is being used as the underlay routing protocol instead of link- | |||
| state routing protocols like IS-IS and OSPF in some large-scale data | state routing protocols like IS-IS and OSPF in some large-scale data | |||
| centers (DCs). [RFC7938] describes the design, configuration and | centers (DCs). [RFC7938] describes the design, configuration and | |||
| operational aspects of using BGP in such networks. The most popular | operational aspects of using BGP in such networks. The most popular | |||
| design scheme involves the setup of external BGP (eBGP) sessions over | design scheme involves the setup of external BGP (EBGP) sessions over | |||
| individual links between directly connected routers using their | individual links between directly connected routers using their | |||
| interface addresses. Such BGP neighbor provisioning requires | interface addresses. Such BGP neighbor provisioning requires | |||
| provisioning of the neighbor IP address and Autonomous System (AS) | configuration of the neighbor IP address and Autonomous System (AS) | |||
| Number (ASN) for each and every BGP neighbor on every link address. | Number (ASN) for BGP neighbor on each and every link of every BGP | |||
| As a DC fabric comprising of topology described in [RFC7938] grows | router. As a DC fabric comprising of topology described in [RFC7938] | |||
| with addition of new leafs, spines and links between them, the BGP | grows with addition of new leafs, spines, and links between them, the | |||
| provisioning needs to be carefully setup. Unlike with the link-state | BGP provisioning needs to be carefully updated. Unlike with the | |||
| protocols, there is no automatic discovery of neighbors simply by | link-state protocols, in the case of BGP, there is no automatic | |||
| adding links and nodes in the fabric and route exchange over them | discovery of neighbors and route exchange between them by simply | |||
| getting enabled seamlessly in the case of BGP. | adding links and nodes of the fabric into the routing protocol | |||
| operation. | ||||
| In some DC designs with BGP, multiple links are added between a leaf | In some DC designs with BGP, multiple links are added between a leaf | |||
| and spine to add additional bandwidth. Use of link-aggregation at | and spine to add additional bandwidth. Use of link-aggregation at | |||
| Layer 2 level may not be desirable in such cases due to the risk of | Layer 2 level may not be always desirable in such cases due to the | |||
| flow polarization on account of a mix of ECMP at Layer 2 and Layer 3 | risk of flow polarization on account of a mix of ECMP at Layer 2 and | |||
| levels. In such cases, one option is for a eBGP sessions to be setup | Layer 3 levels. In such cases, one option is for EBGP sessions to be | |||
| between two BGP neighbors over each of the links between them. In | setup between two BGP neighbors over each of the links between them. | |||
| such a case, the BGP session scale and the resultant increase in | In such a case, the BGP session scale and the resultant increase in | |||
| update processing may pose scalability challenges. A second option | update processing may pose scalability challenges. A second option | |||
| is for a single eBGP session to be setup between the loopback IP | is for a single EBGP session to be setup between the loopback IP | |||
| addresses between the neighbor and then configure some static routes | addresses between the neighbor and then configure some static routes | |||
| for it pointing over the underlying links as ECMP. In this option | for loopback reachability over the underlying links. This option | |||
| there is an additional provisioning task introduced in the form of | introduces an additional provisioning task for the static routes. | |||
| static routing. | ||||
| Furthermore, there is also a need for BGP to be able to describe its | Furthermore, there is also a need for BGP to be able to describe its | |||
| links and its neighbors on its directly connected links and export | links and its neighbors on its directly connected links and export | |||
| this information via BGP-LS [RFC7752] to provide a detail link-level | this information via BGP-LS [RFC7752] to provide a detail link-level | |||
| topology view using a standards based mechanism of a data center | topology view of a data center running BGP. The ability of BGP in | |||
| running only BGP. The ability of BGP in discovering its neighbors | discovering its neighbors over its links, monitoring their liveliness | |||
| over its links, monitoring their liveliness and learning the link | and learning the link attributes (such as addresses) is required for | |||
| attributes (such as addresses) is required for the conveying the | the conveying the link-state topology in such a BGP network. This | |||
| link-state topology in a BGP network. This information can be | information can be leveraged by the BGP-SPF proposal | |||
| leveraged by the BGP-SPF proposal [I-D.ietf-lsvr-bgp-spf] which | [I-D.ietf-lsvr-bgp-spf] which introduces link-state routing | |||
| introduces link-state routing capabilities in BGP. This information | capabilities in BGP. This information can also be leveraged to | |||
| can also be leveraged to convey the link-state topology in a network | convey the link-state topology in a network running traditional BGP | |||
| running traditional BGP routing using BGP-LS as described in | routing using BGP-LS as described in | |||
| [I-D.ketant-idr-bgp-ls-bgp-only-fabric] and to enabled end to end | [I-D.ketant-idr-bgp-ls-bgp-only-fabric] and to enabled end to end | |||
| traffic engineering use-cases spanning across DCs and the core/access | traffic engineering use-cases spanning across DCs and the core/access | |||
| networks. | networks. | |||
| 2. Terminology | 2. Terminology | |||
| This memo makes use of the terms defined in [RFC4271] and [RFC7938] . | This document makes use of the terms defined in [RFC4271] and | |||
| [RFC7938] . | ||||
| 3. Overview | 3. Applicability | |||
| The applicability of the BGP Neighbor Discovery mechanism described | ||||
| in this document is limited to deployments where BGP is used as | ||||
| routing protocol between directly connected routers and when there is | ||||
| a requirement for automatic setup of BGP peering between them. | ||||
| o In DC networks where BGP is used as a hop-by-hop routing protocol | ||||
| [RFC7938]. | ||||
| o In metro networks where access aggregation topologies are | ||||
| architected as a CLOS topology (or similar other networks) and BGP | ||||
| is used as a hop-by-hop routing protocol. | ||||
| While this document uses EBGP examples, the mechanism is equally | ||||
| applicable in designs that use IBGP similarly for hop-by-hop routing. | ||||
| The applicability of the BGP Neighbor Discovery mechanism to any | ||||
| other BGP protocol deployment is outside the scope of this document. | ||||
| 4. Requirements | ||||
| This section describe the requirements for the BGP hop-by-hop routing | ||||
| deployments that were considered for the definition of the BGP | ||||
| Neighbor Discovery extensions proposed in this document.. | ||||
| Following are the key requirements related for the BGP neighbor | ||||
| discovery process: | ||||
| 1. It should perform discovery of directly connected BGP routers. | ||||
| Mechanism should support either IPv4 or IPv6 or a dual stack | ||||
| design and it should be generic for any link-layer. | ||||
| 2. It should include exchange of BGP peering addresses (IPv4 or IPv6 | ||||
| or both) that routers can use to automatically setup BGP TCP | ||||
| peering between themselves. The mechanism should leverage the | ||||
| existing capability negotiation process performed as part of the | ||||
| BGP TCP session establishment. | ||||
| 3. When BGP peering is desired to be performed over loopback | ||||
| addresses of the routers, then the mechanism should automatically | ||||
| setup reachability to the loopback over one or more underlying | ||||
| directly connected links between them. In this scenario, the | ||||
| mechanism should also provide resolution for the BGP next-hop | ||||
| address (i.e. the loopback address) for the BGP routes exchanged | ||||
| over these sessions between the loopback addresses. | ||||
| 4. Mechanism should enable exchange of link-level information such | ||||
| as IP addresses and link attributes between the directly | ||||
| connected BGP routers. It should be extensible to include other | ||||
| information in the future. | ||||
| 5. Mechanism should be limited to link scope for security and use | ||||
| link-local addressing only. Cryptographic mechanisms should be | ||||
| also provided for additional security. | ||||
| 6. Mechanism should support capabilities for performing optional | ||||
| validation of parameters to detect misconfiguration (e.g. link | ||||
| address subnet mismatch, peering between incorrect AS, etc.) in | ||||
| an extensible manner before going on to use the link and the | ||||
| setup of the BGP TCP peering session over it. | ||||
| 7. The mechanism should not affect or change the BGP TCP session | ||||
| establishment procedures and the BGP routing exchange over the | ||||
| TCP session other than the interactions for triggering the setup/ | ||||
| removal of peer session that is based on discovery mechanism. | ||||
| 8. The mechanism should leverage existing fast-detection techniques | ||||
| for failures that are used currently for EBGP sessions over | ||||
| directly connected links like fast-external-failover and BFD. | ||||
| 9. The mechanism should focus on the discovery process and exchange | ||||
| of status as a control plane procedure and be sufficiently | ||||
| loosely coupled with the base BGP operations to enable | ||||
| implementations to ensure scalability of BGP operations when | ||||
| using the discovery procedures. | ||||
| 5. Overview | ||||
| At a high level, this specification introduces the use of UDP based | At a high level, this specification introduces the use of UDP based | |||
| BGP Hello messages to be exchanged between directly connected BGP | BGP Hello messages to be exchanged between directly connected BGP | |||
| routers for neighbor discovery. | routers for neighbor discovery. | |||
| 1. Information is exchanged between BGP routers on a per link basis | 1. Information is exchanged between BGP routers on a per link basis | |||
| leading to discovery of each others peering address and other | leading to discovery of each others peering address and other | |||
| information. | information. | |||
| 2. The TCP session establishment for the BGP protocol operation and | 2. The TCP session establishment for the BGP protocol operation and | |||
| skipping to change at page 4, line 37 ¶ | skipping to change at page 6, line 29 ¶ | |||
| 3. As part of the neighbor information exchange the route to a | 3. As part of the neighbor information exchange the route to a | |||
| neighbor's peering address is also automatically setup pointing | neighbor's peering address is also automatically setup pointing | |||
| over the links over which the neighbor is discovered. | over the links over which the neighbor is discovered. | |||
| 4. This route is used for both the BGP TCP session establishment as | 4. This route is used for both the BGP TCP session establishment as | |||
| well as for resolution of the BGP next-hop (NH) for the routes | well as for resolution of the BGP next-hop (NH) for the routes | |||
| learnt via the neighbor instead of an underlying IGP or static | learnt via the neighbor instead of an underlying IGP or static | |||
| route. | route. | |||
| Auto-discovery of BGP neighbors and their liveness detection may be | This document prefers the use of an extension to BGP protocol since | |||
| performed via different mechanisms. This document prefers the use of | the deployments and use-cases targeted (i.e. large-scale DCs) are | |||
| an extension to BGP protocol since the deployments and use-cases | already running BGP as their routing protocol. Extending BGP with | |||
| targeted (i.e. large-scale DCs) are already running BGP as their | neighbor discovery capabilities is operationally and implementation | |||
| routing protocol. Extending BGP with neighbor discovery capabilities | wise a simpler approach than requiring a new or an additional | |||
| is operationally and implementation wise a simpler approach than | protocol to be first extended to do this functionality (to exchange | |||
| requiring a new or an additional protocol to be first extended to do | BGP-specific parameters) and then also integrated its operations with | |||
| this functionality (to exchange BGP-specific parameters) and then | BGP protocol operations. | |||
| also integrated its operations with BGP protocol operations. | ||||
| Following are the key objectives and goals of the BGP neighbor | ||||
| discovery mechanism proposed in this document: | ||||
| o Existing BGP update processing is unchanged | ||||
| o Minimal changes for integration of the neighbor discovery state | ||||
| machine with the existing BGP Peer state machine for auto- | ||||
| discovered neighbors only | ||||
| o Auto-discovery mechanism is restricted to directly connected BGP | ||||
| speakers only and uses link-local multicast addresses only for the | ||||
| hello messaging | ||||
| o Liveness detection is used for monitoring the BGP adjacency status | The BGP Neighbor discovery mechanism is a control plane mechanism | |||
| for directly connected BGP routers over individual links and is | intended to discovery and maintain the BGP router's adjacencies with | |||
| BGP specific. It is not intended to replace the functionality for | its neighbors over directly connected links. Maintaining an | |||
| existing generic mechanisms like BFD and LLDP. | adjacency also involves detecting any changes in parameters using | |||
| periodic messages and triggering corresponding actions based on the | ||||
| change. Such actions also include removal of the BGP TCP peering for | ||||
| an auto discovered peering session based on the neighbor discovery. | ||||
| However, the mechanism is not intended for a fast liveness detection | ||||
| of neighbor and existing mechanisms for this purpose such as BFD | ||||
| [RFC5880] may be leveraged. | ||||
| o Hello processing is separate from the core BGP protocol operations | The BGP Neighbor discovery mechanism is scoped to a link and works | |||
| such that BGP route processing scale and performance is not | using link-local addressing. In a BGP DC network that is using IPv6 | |||
| impacted | in the fabric underlay, it is possible that no IPv6 global addresses | |||
| are assigned to the interfaces between the nodes and the IPv6 Global | ||||
| address(es) are assigned only to the loopback interfaces of these | ||||
| nodes. The Neighbor discovery mechanism enables the setup of BGP | ||||
| peering using the IPv6 Global addresses on the loopback interfaces | ||||
| and hop by hop routing with just IPv6 link-local addresses on the | ||||
| interfaces. Such a design eases introduction of nodes in the fabric | ||||
| and links between them from a provisioning aspect. In a deployment | ||||
| with IPv4 addressing, IP unnumbered could be similarly used for all | ||||
| the links between the nodes using the IPv4 address assigned to the | ||||
| loopback interfaces on those nodes. | ||||
| The BGP neighbor discovery mechanism defined in this document borrows | The BGP neighbor discovery mechanism defined in this document borrows | |||
| ideas from the Label Distribution Protocol (LDP) [RFC5036]. However, | ideas from the Label Distribution Protocol (LDP) [RFC5036]. However, | |||
| most importantly, only the concept of link-local signaling based | most importantly, only the concept of link-local signaling based | |||
| neighbor discovery is borrow while the discovery aspect for targeted | neighbor discovery is borrowed while the discovery aspect for | |||
| LDP sessions does not apply to this BGP neighbor discovery mechanism. | targeted LDP sessions does not apply to this BGP neighbor discovery | |||
| mechanism. | ||||
| The further sections in this document first describe the newly | The further sections in this document first describe the newly | |||
| introduced message formats and TLVs and then go on to describe the | introduced message formats and TLVs and then go on to describe the | |||
| procedures of the BGP neighbor discovery mechanism and its | procedures of BGP neighbor discovery and its integration with the | |||
| integration with the base BGP protocol mechanism as specified in | base BGP protocol mechanism as specified in [RFC4271]. | |||
| [RFC4271]. | ||||
| The operational and management aspects of the BGP neighbor discovery | The operational and management aspects of the BGP neighbor discovery | |||
| mechanism are described in Section 10. | mechanism are described in Section 12. | |||
| 4. UDP Message Header | 6. UDP Message Header | |||
| The BGP neighbor discovery mechanism will operate using UDP messages. | The BGP neighbor discovery mechanism will operate using UDP messages. | |||
| The UDP port of TBD (179 is the preferred port number to be assigned | The UDP port of TBD (179 is the preferred port number to be assigned | |||
| as specified in Section 11) is used which is same as the TCP port 179 | as specified in Section 13) is used which is same as the TCP port 179 | |||
| used by BGP. The BGP UDP message common header format is specified | used by BGP. The BGP UDP message common header format is specified | |||
| as follows: | as follows: | |||
| 0 1 2 3 | 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 | 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 | | | Version | Type | Message Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | AS number | | | AS number | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| skipping to change at page 6, line 34 ¶ | skipping to change at page 8, line 18 ¶ | |||
| in octets of the entire BGP UDP message including the header. | in octets of the entire BGP UDP message including the header. | |||
| AS number: AS Number of the UDP message sender. | AS number: AS Number of the UDP message sender. | |||
| BGP Identifier: BGP Identifier of the UDP message sender. | BGP Identifier: BGP Identifier of the UDP message sender. | |||
| BGP UDP messages can be sent using either IPv4 or IPv6 depending on | BGP UDP messages can be sent using either IPv4 or IPv6 depending on | |||
| the address used for session establishment and provisioned on the | the address used for session establishment and provisioned on the | |||
| interfaces over which these messages are sent. | interfaces over which these messages are sent. | |||
| 5. Hello Message Format | 7. Hello Message Format | |||
| A BGP router uses UDP based Hello messages to automatically discover | A BGP router uses UDP based Hello messages to discover directly | |||
| directly connected BGP neighbors and to check their liveliness. The | connected BGP neighbors over those interfaces enabled for Neighbor | |||
| Hello messages and the BGP neighbor discovery mechanism operates only | Discovery. The BGP Hello messages for the Neighbor Discovery | |||
| on those interfaces where it is specifically enabled on. The BGP | procedure are used for link-locally signaling and hence MUST be | |||
| neighbor discovery mechanism is intend for link-local signaling | addressed to the "all routers on this subnet" group multicast address | |||
| between directly connected BGP nodes and hence the BGP Hello messages | (i.e., 224.0.0.2 in the IPv4 case and FF02::2 in the IPv6 case) and | |||
| MUST be addressed to the "all routers on this subnet" group multicast | the TTL for the IP packets SHOULD be set to 1. The IP source address | |||
| address (i.e., 224.0.0.2 in the IPv4 case and FF02::2 in the IPv6 | MUST be set to the address of the interface over which the message is | |||
| case) and the TTL for the IP packets SHOULD be set to 1. The IP | sent out which would be the primary interface address or unnumbered | |||
| source address MUST be set to the address of the interface over which | address in the IPv4 case and the IPv6 link-local address on the | |||
| the message is sent out which would be the primary interface address | interface in the IPv6 case. | |||
| or unnumbered address in the IPv4 case and the IPv6 link-local | ||||
| address on the interface in the IPv6 case. | ||||
| The Hello message format is as follows: | The Hello message format is as follows: | |||
| 0 1 2 3 | 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 | 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 | | | Version | Type | Message Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | AS number | | | AS number | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | BGP Identifier | | | BGP Identifier | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Adjacency Hold Time | Reserved | | | Adjacency Hold Time | Flags | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | TLVs | | | TLVs | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 2: BGP Hello Message | Figure 2: BGP Hello Message | |||
| Version: This 1-octet unsigned integer indicates the protocol | Version: This 1-octet unsigned integer indicates the protocol | |||
| version number of the message. The current BGP version number is | version number of the message. The current BGP version number is | |||
| 4. | 4. | |||
| Type: The type of BGP message (Hello - TBD value from BGP Message | Type: The type of BGP message (Hello - TBD value from BGP Message | |||
| Types Registry) | Types Registry) | |||
| Message Length: This 2-octet unsigned integer specifies the length | Message Length: This 2-octet unsigned integer specifies the length | |||
| in octets of the TLVs field. | in octets of the TLVs field. | |||
| AS number: AS Number of the Hello message sender. | AS number: AS Number of the BGP router sending the Hello message. | |||
| BGP Identifier: BGP Identifier of the Hello message sender. | BGP Identifier: BGP Identifier of the BGP router sending the Hello | |||
| message. | ||||
| Adjacency Hold Time: Hello adjacency hold timer in seconds. | Adjacency Hold Time: Hello adjacency hold timer in seconds. | |||
| Adjacency Hold Time specifies the time the receiving BGP neighbor | Adjacency Hold Time specifies the time, for which the receiving | |||
| router SHOULD maintain its neighbor adjacency state without | BGP neighbor router SHOULD maintain adjacency state for it, | |||
| receipt of another Hello. A value of 0 means that the receiving | without receipt of another Hello. A value of 0 means that the | |||
| BGP peer should immediately mark that the sender is going down. | receiving BGP peer should immediately mark that the adjacency to | |||
| the sender is going down. | ||||
| Flags : Current defined bits are as follows. All other bits | ||||
| SHOULD be cleared by sender and MUST be ignored by receiver. | ||||
| 0 1 2 3 4 5 6 7 | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| |S| | | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| where: | ||||
| S bit - indicates that this is a State Change Hello message | ||||
| when SET and normal periodic Hello message when CLEAR | ||||
| Reserved: SHOULD be set to 0 by sender and MUST be ignored by | Reserved: SHOULD be set to 0 by sender and MUST be ignored by | |||
| receiver. | receiver. | |||
| TLVs: This field contains one or more TLVs as described below. | TLVs: This field contains one or more TLVs as described below. | |||
| BGP HELLO messages can be sent using either IPv4 or IPv6 addresses | BGP HELLO messages can be sent using either IPv4 or IPv6 addresses | |||
| depending on the addressing used for session establishment and | depending on the addressing used for session establishment and | |||
| provisioned on the interfaces over which these messages are sent. | provisioned on the interfaces over which these messages are sent. | |||
| Either IPv4 or IPv6 address (but never both on the same link) are | When both IPv4 and IPv6 is enabled on the interface, then IPv6 | |||
| used for the BGP Hello message exchange and the neighbor discovery | address SHOULD be used. Implementations MAY provide an option to | |||
| mechanism based on the local configuration policy. | override the choice of address family to be used. The choice of | |||
| address family to be used MUST be consistent on all BGP routers on a | ||||
| given link for neighbor discovery. | ||||
| In a BGP DC network that is using IPv6 only in the fabric underlay, | Based on the setting of the S flag, there are two variants of the | |||
| it is possible that no IPv6 global addresses are assigned to the | Hello message: | |||
| interfaces between the nodes and the IPv6 Global address(es) are | ||||
| assigned only to the loopback interfaces of these nodes. Such a | 1. State Change Hello Message : these Hello messages include TLVs | |||
| design could ease introducing of nodes in the fabric and links | which convey the state and parameters of the local interface and | |||
| between them from a provisioning aspect. The BGP neighbor discovery | adjacency to other routers on the link. They are generated only | |||
| mechanism described in this document works on links between routers | when there is a change in state of the adjacency or some | |||
| having only IPv6 link-local addresses and setting up BGP sessions | parameter at the interface level. | |||
| between them using their loopback IPv6 Global addresses in an | ||||
| automatic manner. | 2. Periodic Hello Message : these are the normal periodic Hello | |||
| messages which do not include TLVs and are used to maintain the | ||||
| adjacency on the link during steady state conditions. | ||||
| These Hello message variants are intended to limit the exchange of | ||||
| information and state via TLVs to only those periods where necessary | ||||
| while using lightweight Hello messages during steady state. This | ||||
| simplifies the Hello message processing and improves scalability of | ||||
| the discovery mechanism. | ||||
| The neighbor discovery procedure using the Hello message is described | The neighbor discovery procedure using the Hello message is described | |||
| in Section 7 and its relation with the BGP Keepalives and Hold Timer | in Section 9 and its relation with the BGP Keepalives and Hold Timer | |||
| for the TCP session is described in Section 8. | for the TCP session is described in Section 10. | |||
| 6. Hello Message TLVs | 8. Hello Message TLVs | |||
| The BGP Hello message carries TLVs as described in this section that | The BGP Hello message carries TLVs as described in this section that | |||
| enable exchange of information on a per interface basis between | enable exchange of information on a per interface basis between | |||
| directly connected BGP neighbors. These messages enable the neighbor | directly connected BGP neighbors. These messages enable the neighbor | |||
| discovery process. | discovery process. | |||
| 6.1. Accepted ASN List TLV | 8.1. Accepted ASN List TLV | |||
| The Accepted ASN List TLV is an optional TLV that is used to signal | The Accepted ASN List TLV is an optional TLV that is used to signal | |||
| the AS numbers from which the BGP router would accept BGP sessions. | an unordered list of AS numbers from which the BGP router would | |||
| When not signaled, it indicates that the router will accept BGP | accept BGP sessions. When not signaled, it indicates that the router | |||
| peering from any ASN from its neighbors. Indicating the list of ASNs | will accept BGP peering from any ASN from its neighbors. Indicating | |||
| from which a router will accept BGP sessions helps avoid the neighbor | the list of ASNs, helps avoid the neighbor discovery process getting | |||
| discovery process getting stuck in a 1-way state where one side keeps | stuck in a 1-way state where one side keeps attempting to setup | |||
| attempting to setup adjacency while the other does not accept it due | adjacency while the other does not accept it due to incorrect ASN. | |||
| to incorrect ASN. | ||||
| The operational and management aspects of this ASN based policy | The operational and management aspects of this ASN based policy | |||
| control for BGP neighbor discovery are described further in | control for BGP neighbor discovery are described further in | |||
| Section 10. | Section 12. | |||
| Only a single instance of this TLV is included and its format is | This TLV SHOULD NOT be included in a Hello message with the S bit | |||
| shown below. | CLEAR. More than a single instance of this TLV MUST NOT be included | |||
| in a Hello message. If a router receives multiple instances of this | ||||
| TLV then it should only consider the first instance in the sequence | ||||
| and ignore the rest. | ||||
| The format of this TLV is shown below | ||||
| 0 1 2 3 | 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 | 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 | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Accepted ASN List(variable) | | | Accepted ASN List(variable) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 3: Accepted ASN List TLV | Figure 3: Accepted ASN List TLV | |||
| Type: TBD1 | Type: TBD1 | |||
| Length:Specifies the length of the Value field in octets (in | Length: Specifies the length of the Value field in octets (in | |||
| multiple of 4) | multiple of 4) | |||
| Accepted ASN-List: This variable-length field contains one or more | Accepted ASN-List: This variable-length field contains one or more | |||
| accepted 4-octet ASNs. | accepted 4-octet ASNs. | |||
| 6.2. Peering Address TLV | 8.2. Peering Address TLV | |||
| The Peering Address TLV is used to indicate to the neighbor the | The Peering Address TLV is used to indicate to the neighbor the | |||
| address to which they should establish the BGP TCP session. For each | address to be used for setting up the BGP TCP session. Along with | |||
| peering address, the router can specify its supported AFI/SAFI(s). | the peering address, the router can specify its supported AFI/ | |||
| When the AFI/SAFI values are specified as 0/0, then it indicates that | SAFI(s). When the AFI/SAFI values are specified as 0/0, then it | |||
| the neighbor can attempt for negotiation of any AFI/SAFIs. The | indicates that the neighbor can attempt for negotiation of any AFI/ | |||
| indication of AFI/SAFI(s) in the Peering Address TLV is not intended | SAFIs. The indication of AFI/SAFI(s) in the Peering Address TLV is | |||
| as an alternative for the MP capabilities negotiation mechanism done | not intended as an alternative for the MP capabilities negotiation | |||
| as part of the BGP TCP session establishment. | mechanism done as part of the BGP TCP session establishment. | |||
| This is a mandatory TLV and at least one instance of this TLV MUST be | Multiple instances of this TLV MAY be included in the Hello message, | |||
| present. Multiple instances of this TLV MAY be present one for each | one for each peering address (e.g. IPv4 and IPv6 or multiple IPv4 | |||
| peering address (e.g. IPv4 and IPv6 or multiple IPv4 addresses for | addresses for different AFI/SAFI sessions). When multiple peering | |||
| different AFI/SAFI sessions). | addresses are provisioned, then the indication helps the router | |||
| select the appropriate peer address of the neighbor based on its | ||||
| local peering address profile by matching the supported AFI/SAFIs. | ||||
| This TLV is essential for the setting up of the TCP peering between | ||||
| BGP neighbors using the neighbor discovery mechanism. When a BGP | ||||
| router stops including a Peer Address in its State Change Hello | ||||
| messages, then it is no longer accepting TCP peering sessions to that | ||||
| address and the neighbor SHOULD clean up any peering session that was | ||||
| setup to that address via the discovery mechanism. | ||||
| Implementations SHOULD support the signaling of an interface IP | ||||
| address in the Peering Address TLV and perform the BGP TCP session | ||||
| establishment using interface addresses (i.e. the neighbor discovery | ||||
| mechanism is not limited to the use of loopback addresses for the | ||||
| peering session establishment). Implementations MAY support the | ||||
| signaling of IPv6 Link Local addresses using the Peering Address TLV | ||||
| and using the same for the BGP TCP session setup. | ||||
| This TLV SHOULD NOT be included in a Hello message with the S bit | ||||
| CLEAR. | ||||
| The Peering Address TLV format is shown below. | The Peering Address TLV format is shown below. | |||
| 0 1 2 3 | 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 | 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 | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Flags | No. AFI/SAFI | Reserved | | | Flags | No. AFI/SAFI | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| skipping to change at page 10, line 27 ¶ | skipping to change at page 12, line 34 ¶ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | sub-TLVs ... | | sub-TLVs ... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 4: Peering Address TLV | Figure 4: Peering Address TLV | |||
| Type: TBD2 | Type: TBD2 | |||
| Length:Specifies the length of the Value field in octets. | Length: Specifies the length of the Value field in octets. | |||
| Flags : Current defined bits are as follows. All other bits | Flags : Current defined bits are as follows. All other bits | |||
| SHOULD be cleared by sender and MUST be ignored by receiver. | SHOULD be cleared by sender and MUST be ignored by receiver. | |||
| Bit 0x1 - address is IPv6 when set and IPv4 when clear | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | ||||
| |A| | | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| where: | ||||
| A bit - address is IPv6 when SET and IPv4 when CLEAR | ||||
| Number of AFI/SAFI: indicates the number of AFI/SAFI pairs that | Number of AFI/SAFI: indicates the number of AFI/SAFI pairs that | |||
| the router supports on the given peering address. | the router supports on the given peering address. | |||
| Reserved: sender SHOULD set to 0 and receiver MUST ignore. | Reserved: sender SHOULD set to 0 and receiver MUST ignore. | |||
| Address: This 4 or 16 octet field indicates the IPv4 or IPv6 | Address: This 4 or 16 octet field indicates the IPv4 or IPv6 | |||
| address which is used for establishing BGP sessions. | address which is used for establishing BGP sessions. | |||
| AFI/SAFI : one or more pairs of these values that indicate the | AFI/SAFI : one or more pairs of these values that indicate the | |||
| supported capabilities on the peering address. | supported capabilities on the peering address. | |||
| Sub-TLVs : currently none defined | Sub-TLVs : optional and currently none defined | |||
| 6.3. Local Prefix TLV | 8.3. Local Prefix TLV | |||
| When the Peering Address to be used for the BGP TCP session | BGP neighbor discovery mechanism, in certain scenarios, requires a | |||
| establishment is not the directly connected interface address (e.g. | BGP router to program a route in its local routing table for a prefix | |||
| when using loopback address) then local prefix(es) that cover its | belonging to its neighbor router. On such scenario is when the BGP | |||
| peering address(es) MUST be signaled by a BGP router to its neighbor | TCP peering is to be setup between the loopback addresses on the | |||
| as part of the Hello message. This allows the neighbor to learn | neighboring routers. This requires that the routers have | |||
| these local prefix(es) and to program routes for them over the | reachability to their each other's loopback addresses before the TCP | |||
| directly connected interfaces over which they are being signaled. | session can be brought up. | |||
| The Local Prefix TLV is this an optional TLV and it MUST be used to | ||||
| only signal prefixes that are locally configured on the router. The | The Local Prefix TLV is an optional TLV which enables a BGP router to | |||
| procedure for resolving the peering address signaled via the Peering | explicitly signal its local prefix to its neighbor for setting up of | |||
| Address TLV over the local prefixes signaled is described in | such a local routing entry pointing over the underlying link over | |||
| Section 7.3. | which it is being signaled. This enables the BGP router to have | |||
| control over the specific links over which its neighbor that may | ||||
| reach it for the specific local prefix. The details of the procedure | ||||
| for programming of the route corresponding to the prefix signaled | ||||
| using the Local Prefix TLV is described in Section 9.3.. | ||||
| Multiple instances of the Local Prefix TLV MAY be included in the | ||||
| Hello message with each carrying a specific prefix in it. This TLV | ||||
| SHOULD NOT be included in a Hello message with the S bit CLEAR. | ||||
| The Local Prefix TLV format is as shown below. | The Local Prefix TLV format is as shown below. | |||
| 0 1 2 3 | 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 | 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 | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | No. of IPv4 Prefixes | No. of IPv6 Prefixes | | | Flags | Prefix Length | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | IPv4 Prefix | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Prefix Mask | ... | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | IPv6 Prefix | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Prefix Mask | ... | | Prefix Address (4-octet or 16-octet) | | |||
| +-+-+-+-+-+-+-+-+ | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | sub-TLVs ... | | sub-TLVs ... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 5: Local Prefix TLV | Figure 5: Local Prefix TLV | |||
| Type: TBD3 | Type: TBD3 | |||
| Length: Specifies the length of the Value field in octets | Length: Specifies the length of the Value field in octets | |||
| No. of IPv4 Prefixes : specifies the number of IPv4 prefixes. | Flags : Current defined bits are as follows. All other bits | |||
| When value is 0, then it indicates no IPv4 Prefixes are present. | SHOULD be cleared by sender and MUST be ignored by receiver. | |||
| No. of IPv6 Prefixes : specifies the number of IPv6 prefixes. | 0 1 2 3 4 5 6 7 | |||
| When value is 0, then it indicates no IPv6 Prefixes are present. | +-+-+-+-+-+-+-+-+ | |||
| |A| | | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| IPv4 Prefix Address & Prefix Mask: Zero or more pairs of IPv4 | where: | |||
| prefix address and their mask. | ||||
| IPv6 Prefix Address & Prefix Mask: Zero or more pairs of IPv6 | A bit - address is IPv6 when SET and IPv4 when CLEAR | |||
| prefix address and their mask. | ||||
| Sub-TLVs : currently none defined | Prefix Length: specifies the Prefix length | |||
| 6.4. Link Attributes TLV | Reserved: sender SHOULD set to 0 and receiver MUST ignore. | |||
| The Link Attributes TLV is a mandatory TLV that signals to the | Prefix Address: This 4 or 16 octet field indicates the IPv4 or | |||
| neighbor the link attributes of the interface on the local router. A | IPv6 prefix address. | |||
| single instance of this TLV MUST be present in the message. This TLV | ||||
| enables a BGP router to learn all its neighbors IP addresses on the | ||||
| specific link as well as its link identifiers. All the IPv4 | ||||
| addresses configured on the interface are signaled to the neighbor. | ||||
| When the interface has IPv4 unnumbered address then that is not | ||||
| included in this TLV. Only the IPv6 global addresses configured on | ||||
| the interface are signaled to the neighbor. In case of an interface | ||||
| running dual stack, both IPv4 and IPv6 addresses are signaled in a | ||||
| single TLV irrespective of which one is used for UDP message | ||||
| exchange. | ||||
| More sub-TLVs may be defined in the future to exchange other link | Sub-TLVs : optional and currently none defined | |||
| attributes between BGP neighbors. | ||||
| 8.4. Link Attributes TLV | ||||
| The Link Attributes TLV is a mandatory TLV in a State Change Hello | ||||
| message that signals to the neighbor the link attributes of the | ||||
| interface on the local router. One and only one instance of this TLV | ||||
| MUST be included in the State Change Hello message. A State Change | ||||
| Hello message without this TLV included MUST be discarded and an | ||||
| error logged for the same. | ||||
| This TLV enables a BGP router to learn all its neighbors IP addresses | ||||
| on the specific link as well as it's link identifier. When the | ||||
| interface is IPv4 enabled, all the IPv4 addresses configured on it | ||||
| are included in this TLV. IPv4 unnumbered address is not included in | ||||
| this TLV and no IPv4 address would be included for the interface in | ||||
| such cases. When the interface is IPv6 enabled, all the IPv6 global | ||||
| addresses configured on the interface are included in this TLV. IPv6 | ||||
| link-local addresses are not included in this TLV. In case of an | ||||
| interface running dual stack, both IPv4 and IPv6 addresses are | ||||
| included in this TLV irrespective of the address family that is used | ||||
| for UDP message exchange. | ||||
| Additional sub-TLVs may be defined in the future to exchange other | ||||
| link attributes between BGP neighbors. This TLV SHOULD NOT be | ||||
| included in a Hello message with the S bit CLEAR. | ||||
| The Link Attributes TLV format is as shown below. | The Link Attributes TLV format is as shown below. | |||
| 0 1 2 3 | 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 | 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 | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Local Interface ID | Flags | Reserved | | | Local Interface ID | Flags | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| skipping to change at page 13, line 37 ¶ | skipping to change at page 15, line 39 ¶ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | sub-TLVs ... | | sub-TLVs ... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 6: Link Attributes TLV | Figure 6: Link Attributes TLV | |||
| Type: TBD4 | Type: TBD4 | |||
| Length: Specifies the length of the Value field in octets | Length: Specifies the length of the Value field in octets | |||
| Local Interface ID : the local interface ID of the interface (e.g. | Local Interface ID : the local interface ID of the interface | |||
| the MIB-2 ifIndex). This helps uniquely identify the link even | (refer unnumbered link section of [RFC2104] e.g. the MIB-2 | |||
| when there are multiple links between two neighbors using IPv4 | ifIndex). This helps uniquely identify the link even when there | |||
| unnumbered address or only having IPv6 link-local addresses. | are multiple links between two neighbors using IPv4 unnumbered | |||
| address or only having IPv6 link-local addresses. | ||||
| Flags : Currently defined bits are as follows. Other bits SHOULD | Flags : Currently defined bits are as follows. Other bits SHOULD | |||
| be cleared by sender and MUST be ignored by receiver. | be cleared by sender and MUST be ignored by receiver. | |||
| Bit 0x1 - indicates link is enabled for IPv4 | 0 1 2 3 4 5 6 7 | |||
| +-+-+-+-+-+-+-+-+ | ||||
| |I|V|B| | | ||||
| +-+-+-+-+-+-+-+-+ | ||||
| Bit 0x2 - indicates link is enabled for IPv6 | where: | |||
| I bit - indicates link is enabled for IPv4 | ||||
| V bit - indicates link is enabled for IPv6 | ||||
| B bit - indicates support for BFD monitoring [RFC5880] over the | ||||
| link | ||||
| Reserved: SHOULD be set to 0 by sender and MUST be ignored by | Reserved: SHOULD be set to 0 by sender and MUST be ignored by | |||
| receiver. | receiver. | |||
| No. of IPv4 Addresses : specifies the number of IPv4 addresses on | No. of IPv4 Addresses : specifies the number of IPv4 addresses on | |||
| the interface. When value is 0, then it indicates no IPv4 | the interface. When value is 0, then it indicates no IPv4 | |||
| Prefixes are present or the interface is IPv4 unnumbered if it is | Prefixes are present or the interface is IPv4 unnumbered if it is | |||
| enabled for IPv4 | enabled for IPv4 | |||
| No. of IPv6 Addresses : specifies the number of IPv6 global | No. of IPv6 Addresses : specifies the number of IPv6 global | |||
| skipping to change at page 14, line 22 ¶ | skipping to change at page 16, line 39 ¶ | |||
| IPv6 Global Prefixes are present and the interface is only | IPv6 Global Prefixes are present and the interface is only | |||
| configured with IPv6 link-local addresses if it is enabled for | configured with IPv6 link-local addresses if it is enabled for | |||
| IPv6. | IPv6. | |||
| IPv4 Address & Mask: Zero or more pairs of IPv4 address and their | IPv4 Address & Mask: Zero or more pairs of IPv4 address and their | |||
| mask. | mask. | |||
| IPv6 Address & Mask: Zero or more pairs of IPv6 address and their | IPv6 Address & Mask: Zero or more pairs of IPv6 address and their | |||
| mask. | mask. | |||
| Sub-TLVs : currently none defined | Sub-TLVs : optional and currently none defined | |||
| 6.5. Neighbor TLV | 8.5. Neighbor TLV | |||
| The Neighbor TLV is used by a BGP router to indicate its hello | The Neighbor TLV is used by a BGP router to indicate its Hello | |||
| adjacency status with its neighboring router(s) on the specific link. | adjacency state with its neighboring router(s) on the specific link. | |||
| The neighbor is identified by its Peering Address which has been | The neighbor is identified by its AS Number and BGP Identifier. The | |||
| accepted. The BGP TCP session establishment process begins when the | router MUST include the Neighbor TLV for each of its discovered | |||
| hello adjacency is formed between the two neighbors over at least one | neighbors on that link irrespective of its status. | |||
| directly connected link between them. Multiple instances of this TLV | ||||
| MAY be present in a Hello message - one for each peering address of | The usage of the Neighbor TLV is described in detail in Section 9. | |||
| each of its neighbor on that particular interface. | This TLV SHOULD NOT be included in a Hello message with the S bit | |||
| CLEAR. | ||||
| The Neighbor TLV format is as shown below. | The Neighbor TLV format is as shown below. | |||
| 0 1 2 3 | 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 | 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 | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Flags | Status | Reserved | | | Flags | State | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Neighbor Peering Address (4-octet or 16-octet) | | | Neighbor AS number | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Neighbor BGP Identifier | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | sub-TLVs ... | | sub-TLVs ... | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 7: Neighbor TLV | Figure 7: Neighbor TLV | |||
| Type: TBD5 | Type: TBD5 | |||
| Length: Specifies the length of the Value field in octets | Length: Specifies the length of the Value field in octets | |||
| Flags : Currently defined 0x1 bit is clear when Peering Address is | Flags : Current defined bits are as follows. All other bits | |||
| IPv4 and set when IPv6. Other bits SHOULD be clear by sender and | SHOULD be cleared by sender and MUST be ignored by receiver. | |||
| MUST be ignored by receiver. | ||||
| Status : Indicates the status code of the peering for the | 0 1 2 3 4 5 6 7 | |||
| particular session over this link. The following codes are | +-+-+-+-+-+-+-+-+ | |||
| currently defined | |B| | | |||
| +-+-+-+-+-+-+-+-+ | ||||
| 0 - Indicates 1-way detection of the peer | where: | |||
| 1 - Indicates rejection of the peer due to local policy reasons | B bit - When SET with the adjacency state not in Accepted state | |||
| (i.e. local router would not be initiating or accepting session | indicates that the adjacency is not accepted due to BFD down. | |||
| to this neighbor). | ||||
| 2 - Indicates 2-way detection of the peering by both neighbors | State : Indicates the state code of the adjacency state machine | |||
| (refer to Section 9.2 for details) for the neighbor over this | ||||
| link. The following codes are currently defined | ||||
| 3 - Indicates that the BGP TCP peering session has been | 0 - Down (not to be used as state in this TLV | |||
| established between the neighbors | ||||
| 1 - Initial (not to be used as state in this TLV) | ||||
| 2 - 1-way | ||||
| 3 - 2-way | ||||
| 4 - Adj-Reject | ||||
| 5 - Adj-OK | ||||
| 6 - Accepted | ||||
| Reserved: SHOULD be set to 0 by sender and MUST be ignored by | Reserved: SHOULD be set to 0 by sender and MUST be ignored by | |||
| receiver. | receiver. | |||
| Neighbor Peering Address: This 4 or 16 octet field indicates the | Neighbor AS number: AS Number of the neighbor BGP router as | |||
| IPv4 or IPv6 peering address of the neighbor for which peering | signaled in its Hello message. | |||
| status is being reported. | ||||
| Neighbor BGP Identifier: BGP Identifier of the neighbor BGP router | ||||
| as signaled in its Hello message. | ||||
| Sub-TLVs : currently none defined | Sub-TLVs : currently none defined | |||
| 6.6. Cryptographic Authentication TLV | 8.6. Cryptographic Authentication TLV | |||
| The Cryptographic Authentication TLV is an optional TLV that is used | The Cryptographic Authentication TLV is an optional TLV that is used | |||
| to introduce an authentication mechanism for BGP Hello message by | as part of an authentication mechanism for BGP Hello message by | |||
| securing against spoofing attacks. It also introduces a | securing against spoofing attacks. It also introduces a | |||
| cryptographic sequence number carried in the Hello messages that can | cryptographic sequence number carried in the Hello messages that can | |||
| be used to protect against replay attacks. Using this Cryptographic | be used to protect against replay attacks. Using this Cryptographic | |||
| Authentication TLV, one or more secret keys (with corresponding | Authentication TLV, one or more secret keys (with corresponding | |||
| Security Association (SA) IDs) are configured on each BGP router. | Security Association (SA) IDs) are configured on each BGP router. | |||
| For each BGP Hello message, the key is used to generate and verify an | For each BGP Hello message, the key is used to generate and verify an | |||
| HMAC Hash that is stored in the BGP Hello message. For the | HMAC Hash that is stored in the Cryptographic Authentication TLV. | |||
| cryptographic hash function, this document proposes to use SHA-1, | For the cryptographic hash function, this document proposes to use | |||
| SHA-256, SHA-384, and SHA-512 defined in US NIST Secure Hash Standard | SHA-1, SHA-256, SHA-384, and SHA-512 defined in US NIST Secure Hash | |||
| (SHS) [FIPS-180-4]. The HMAC authentication mode defined in | Standard (SHS) [FIPS-180-4]. The HMAC authentication mode defined in | |||
| [RFC2104] is used. Of the above, implementations MUST include | [RFC2104] is used. Of the above, implementations MUST include | |||
| support for at least HMAC-SHA-256, SHOULD include support for HMAC- | support for at least HMAC-SHA-256, SHOULD include support for HMAC- | |||
| SHA-1, and MAY include support for HMAC-SHA-384 and HMAC-SHA-512. | SHA-1, and MAY include support for HMAC-SHA-384 and HMAC-SHA-512. | |||
| Further details for ensuring the security of the BGP Hello UDP | Further details for ensuring the security of the BGP Hello UDP | |||
| messages are described in Section 9. | messages are described in Section 11. | |||
| The Cryptographic Authentication TLV format is as shown below. | The Cryptographic Authentication TLV format is as shown below. | |||
| 0 1 2 3 | 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 | 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 | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Security Association ID | | | Security Association ID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| skipping to change at page 17, line 13 ¶ | skipping to change at page 20, line 5 ¶ | |||
| use, which is shown below: | use, which is shown below: | |||
| HMAC-SHA1 20 bytes | HMAC-SHA1 20 bytes | |||
| HMAC-SHA-256 32 bytes | HMAC-SHA-256 32 bytes | |||
| HMAC-SHA-384 48 bytes | HMAC-SHA-384 48 bytes | |||
| HMAC-SHA-512 64 bytes | HMAC-SHA-512 64 bytes | |||
| 7. Neighbor Discovery Procedure | 9. Neighbor Discovery Procedure | |||
| The neighbor discovery mechanism in BGP is implemented with the | The neighbor discovery mechanism in BGP is implemented with the | |||
| introduction of an Interface state in BGP and an Adjacency Finite | introduction of an Interface state in BGP and an Adjacency Finite | |||
| State Machine (FSM). This section describes the states, FSM and | State Machine (FSM). This section describes the states, FSM and | |||
| procedures involved. | procedures involved. | |||
| 7.1. Interface State | 9.1. Interface Procedures | |||
| In order to perform neighbor discovery over its connected interfaces, | In order to perform neighbor discovery, BGP needs to maintain state | |||
| BGP needs to maintain state for all its connected interfaces over | for the subset of its connected interfaces over which neighbor | |||
| which neighbor discovery is enabled. Once the neighbor discovery is | discovery is enabled. For these interfaces, BGP sends its Hello | |||
| enabled and the link is UP, then BGP starts sending its Hello | messages, including the TLVs described in Section 8, as long as its | |||
| messages with the TLVs listed in Section 6. The Neighbor TLV | link is UP. The Neighbor TLV described in Section 8.5 is, included | |||
| described in Section 6.5 is, however, not included until after a | once a neighbor is discovered as described in Section 9.2 . | |||
| neighbor is learnt as part of the discovery process described in | ||||
| further sections. | ||||
| These Hello messages are originated periodically at an interval which | The Hello messages MUST be originated periodically at an interval | |||
| is less than or equal to one third of the Adjacency Hold Time | which is less than or equal to one third of the Adjacency Hold Time | |||
| specified in the message. The RECOMMENDED default value for the | indicated by the router in its Hello message. The RECOMMENDED | |||
| Adjacency Hold Time is 45 seconds and this makes the hello message | default value for the Adjacency Hold Time is 45 seconds which makes | |||
| interval to be 15 seconds. A Hello message SHOULD also be generated | the hello message interval to be 15 seconds. Period Hello messages | |||
| in a triggered manner during the neighbor discovery process as a | ensure robustness of the neighbor discovery mechanism against | |||
| change in the router's own or neighbor's Hello message is detected | transient loss of hello messages that are sent over unreliable UDP | |||
| which results in change in adjacency state or parameters. | messaging channel and also enable detection of neighbor down events | |||
| over specific links. Periodic Hello messages that do not convey any | ||||
| change in state SHOULD exclude TLVs that signal the local interface | ||||
| or adjacency state and have the S bit CLEAR as specified in | ||||
| Section 7. | ||||
| A State Change Hello message MUST be triggered, without waiting for | ||||
| the periodic timer expiry, whenever there is a change in the router's | ||||
| Hello TLVs' content that needs to be signaled to its neighbor over | ||||
| the specific link. A State Change Hello message MUST also be | ||||
| triggered when a new neighbor's Hello message is first received or | ||||
| change is detected in the neighbor's Hello TLV's that results in | ||||
| change in it's adjacency state. Once a State Change Hello message is | ||||
| triggered on a specific interface, the router MUST continue to | ||||
| generate State Change Hello messages on it with the necessary TLVs | ||||
| included at periodic hello message intervals for a period of time | ||||
| that is at least equal to the Adjacency Hold Time. This ensures that | ||||
| messages carrying the updated information and local state changes are | ||||
| not lost. The router can switch back to Periodic Hello messages | ||||
| after it has transmitted State Change Hello messages with the latest | ||||
| TLV contents for the Adjacency Hold Time period. | ||||
| When a router receives a Hello message from its neighbor, it MUST | ||||
| restart the Adjacency Hold timer that it is maintaining for the | ||||
| neighbor adjacency using the value indicated in the Hello message. | ||||
| When the message is of type State Change (i.e. with S bit SET), it | ||||
| additionally needs to process all the TLVs included and verify the | ||||
| signaled state against what was conveyed in the previous State Change | ||||
| Hello message from the same neighbor. Any changed identified would | ||||
| trigger the adjacency FSM change as described in Section 9.2. | ||||
| When a router does not receive a Hello message from its neighbor for | When a router does not receive a Hello message from its neighbor for | |||
| a period equal to Adjacency Hold Time, then it MUST clean up its | a period equal to Adjacency Hold Time, then it MUST treat this as an | |||
| adjacency to this neighbor. The relationship of the Adjacency Hold | adjacency down event and clean up its adjacency state to this | |||
| Timer with the BGP Hold Timer at the TCP session level is described | neighbor as described in Section 9.2. | |||
| further in Section 8. | ||||
| Before the interface is shut or the neighbor discovery is disabled on | Before the interface is shut or the neighbor discovery mechanism is | |||
| it, the router SHOULD attempt to send out triggered Hello messages | disabled on it, the router SHOULD attempt to send out immediate Hello | |||
| with Adjacency Hold Time set to 0 and without including any Neighbor | messages, with the S bit CLEAR (i.e. not including state related | |||
| TLV in it to indicate that the neighbor discovery is being turned OFF | TLVs) and with Adjacency Hold Time set to 0, to trigger the adjacency | |||
| on that router's interface. A router receiving a Hello message with | down event on its neighbors. It MUST then clean up its own adjacency | |||
| Adjacency Hold Time set to 0 MUST clean up its adjacency to the | states on that specific link. | |||
| originating router. | ||||
| 7.2. Adjacency State Machine | When either the BGP Identifier or the AS number are modified, then | |||
| the router MUST send out a triggered Hello message, with the S bit | ||||
| CLEAR and with Adjacency Hold Time set to 0 using the old BGP | ||||
| Identifier and AS number values, over all the links enabled for BGP | ||||
| neighbor discovery. | ||||
| A router receiving a Hello message with Adjacency Hold Time set to 0 | ||||
| MUST treat this event as if the adjacency hold timer has expired for | ||||
| the specific neighbor and proceed to bring down the adjacency. | ||||
| An interface going down (e.g. due to link failure or loss of signal) | ||||
| MUST immediately trigger the adjacency down event for all adjacencies | ||||
| over it as if the adjacency hold timer expired for all neighbors on | ||||
| that link. | ||||
| 9.2. Adjacency State Machine | ||||
| On a per interface basis, BGP needs to maintain an adjacency state | On a per interface basis, BGP needs to maintain an adjacency state | |||
| for each neighbor that it discovers. The adjacency state is | for each neighbor that it discovers. The adjacency state is | |||
| maintained as a FSM and it has the following states: | maintained as a FSM and it has states as described in the following | |||
| sections. | ||||
| 1. Init : This is the initial state that is setup when the router | 9.2.1. Down State | |||
| detects a hello message from a new neighbor that it has not seen | ||||
| previously. This is also the state to which the adjacency | ||||
| transitions to when the router no longer sees itself in a | ||||
| Neighbor TLV in the hello message from a neighbor. | ||||
| 2. 1-way : This is the state immediately after the Init when the | This is the transient terminal state after which an adjacency is | |||
| router sends its Hello message with inclusion of the neighbor's | deleted. | |||
| Peering Address in a Neighbor TLV with the status set to 1-way. | ||||
| 3. Reject : This is the state (generally after Init) when the router | When transitioning to the Down state from Accepted, the router | |||
| detects that the neighbor cannot be accepted due to subnet | removes the path corresponding to this adjacency from any Adjacency | |||
| mismatch on the addresses on either end of the link or a | Route that it had setup to the neighbor's prefixes. If no other | |||
| discrepancy in its Accepted ASN List TLV or due to some other | adjacency exists in Accepted state to the neighbor, then it also | |||
| local policy. The router then sends its Hello message with | deletes the BGP TCP peering session(s) setup to the neighbor based on | |||
| inclusion of this neighbor's Peering Address in a Neighbor TLV | the neighbor discovery mechanism. | |||
| with the status set to rejection. | ||||
| 4. 2-way : This is the state after 1-way when the router detects its | 9.2.2. Initial State | |||
| own Peering Address in a Neighbor TLV in the neighbor's hello | ||||
| message with the status set to 1-way or 2-way. It then updates | ||||
| the neighbor's status to 2-way in the Neighbor TLV in its own | ||||
| Hello message and sends it out. At this stage, both neighbors | ||||
| have accepted each other. On transition to this state, the | ||||
| router also installs peering route(s) in its own routing table | ||||
| corresponding to the prefix(es) received from the neighbor in its | ||||
| Local Prefix TLV so that reachability is established for the TCP | ||||
| session formation. Next the TCP session formation can be | ||||
| initialized via the BGP Peer FSM. If there is already a peering | ||||
| route to the same address on another interfaces, then this new | ||||
| interface is added as an ECMP path to it. If the BGP TCP session | ||||
| is already initialized (established or connection in progress) | ||||
| towards the same peering address then no further action is | ||||
| required on this BGP Peer FSM. | ||||
| 5. Established : This is the state after 2-way when the router has | This is the transient initial state from which an adjacency starts, | |||
| successfully setup its BGP TCP session with the neighbor's | when the router detects a hello message from a new neighbor on the | |||
| Peering Address. It then updates the neighbor's status to | link, and immediately transitions to the 1-way state. | |||
| established in the Neighbor TLV in its own Hello message and | ||||
| sends it out. | ||||
| Any downward transition from Established or 2-way state to a lower | 9.2.3. 1-Way State | |||
| state results in removal of that interface from the peering route(s) | ||||
| for that neighbor and the deletion of the route itself when the last | ||||
| path is deleted. The deletion of the route may bring down the BGP | ||||
| TCP session. | ||||
| A BGP TCP session with an auto-discovered neighbor may have one or | While in the 1-way state (or when entering it), the adjacency | |||
| more Hello adjacencies corresponding to it - one over each | transitions from 1-way to 2-way state when the router detects a | |||
| interconnecting link between them. | Neighbor TLV corresponding to itself in the neighbor's Hello message. | |||
| If the state does not immediately transition on to 2-way after | ||||
| entering 1-way, the the router MUST immediately trigger a State | ||||
| Change Hello message with the inclusion of the neighbor in a Neighbor | ||||
| TLV with the state set to 1-way. | ||||
| 7.3. Peering Route | When transitioning to the 1-way state from Accepted, the router | |||
| removes the path corresponding to this adjacency from any Adjacency | ||||
| Route that it had setup to the neighbor's prefixes. If no other | ||||
| adjacency exists in Accepted state to the neighbor, then it also | ||||
| deletes the BGP TCP peering session(s) setup to the neighbor based on | ||||
| the neighbor discovery mechanism. | ||||
| BGP auto-discovered neighbors MAY setup their BGP TCP session over a | Adjacency transitions to Down state for any of the following events: | |||
| loopback address instead of using the directly connected interface | ||||
| address between them. When this is desired, the neighbors also | ||||
| advertise the loopback address host prefix (or optionally a prefix | ||||
| which covers more than a single loopback address when multiple are | ||||
| used for different peering sessions) in their Local Prefix TLV. | ||||
| Before the TCP session can be established, the reachability needs to | ||||
| be setup in both direction by each neighbor by programming their | ||||
| local prefixes in their forwarding plane. These routes that are | ||||
| programmed by BGP automatically using the prefixes advertised via the | ||||
| Local Prefix TLV are called Peering Routes. | ||||
| Peering Routes serve two purposes. First, they enable reachability | o Link goes down operationally or is administratively shut | |||
| between the Peering Addresses (generally loopbacks) of the two | ||||
| neighbors so that the BGP TCP session may come up between them. | o Adjacency Hold Timer expires | |||
| Second, for the BGP routes learnt over the TCP session, where the | ||||
| next-hop is the neighbor, they also provide the BGP NH resolution. | o Router receives a Hello message from its neighbor with Adjacency | |||
| Hold Time value set to 0 | ||||
| o Neighbor discovery is disabled on the link | ||||
| o Change in BGP Identifier or AS number on the local router | ||||
| 9.2.4. 2-Way State | ||||
| Upon transitioning into this state, the router triggers a State | ||||
| Change Hello message with the neighbor's status set to 2-way in the | ||||
| Neighbor TLV. At this stage, both neighbors have received each | ||||
| other's Hello messages and thus discovered each other. | ||||
| When the router, in this adjacency state, detects that the neighbor's | ||||
| state for itself is 2-way or higher, then it performs the validation | ||||
| checks based on local policy and information exchanged in the Hello | ||||
| TLVs. Following are some of the validation checks that may be | ||||
| performed on the adjacency: | ||||
| o Verify subnet matching between the local and remote interface | ||||
| addresses. | ||||
| o Verify AS numbers based on local policy as well as against the | ||||
| Allowed ASN TLV when one is being exchanged. | ||||
| o Verify that BFD monitoring (when enabled) is indicating UP state. | ||||
| When the adjacency passes the validation checks, it transitions to | ||||
| the Adj-OK state and transitions to the Adj-Reject state otherwise. | ||||
| The adjacency transitions to Down state for any of the adjacency down | ||||
| events described in Section 9.2.3 . | ||||
| The adjacency transitions to 1-way state when the router stops seeing | ||||
| itself in a Neighbor TLV of its Neighbor's State Change Hello | ||||
| messages. | ||||
| 9.2.5. Adj-Reject State | ||||
| Upon transitioning into this state, the router triggers a State | ||||
| Change Hello message with the neighbor's status set to Adj-Reject in | ||||
| the Neighbor TLV. | ||||
| The adjacency remains in the Adj-Reject state as long as the | ||||
| parameters being exchanged via the State Change Hello messages do not | ||||
| pass validation checks. The neighbors continue to include each other | ||||
| in their respective State Change Hello messages. | ||||
| The adjacency transitions to the Adj-OK state once the validation | ||||
| checks pass (e.g. due to update in any parameters or local policy). | ||||
| The adjacency transitions to Down state for any of the adjacency down | ||||
| events described in Section 9.2.3 . | ||||
| The adjacency transitions to 1-way state when the router stops seeing | ||||
| itself in a Neighbor TLV of its Neighbor's State Change Hello | ||||
| messages. | ||||
| When transitioning to an Adj-Reject state from Accepted state, the | ||||
| router removes the path corresponding to this adjacency from any | ||||
| Adjacency Route that it had setup to the neighbor's prefixes. If no | ||||
| other adjacency exists in Accepted state to the neighbor, then it | ||||
| also deletes the BGP TCP peering session(s) setup to the neighbor | ||||
| based on the neighbor discovery mechanism. | ||||
| 9.2.6. Adj-OK State | ||||
| Upon transitioning into this state, the router triggers a State | ||||
| Change Hello message with the neighbor's status set to Adj-OK in the | ||||
| Neighbor TLV. | ||||
| The adjacency transition to Adj-OK state indicates that the router | ||||
| has accepted its neighbor. However, it is possible that the neighbor | ||||
| has not accept it and is signaling Adj-Reject state for the adjacency | ||||
| from it's end. | ||||
| The adjacency transitions to the Accepted state from Adj-OK once it | ||||
| detects that its neighbor is also signaling the Adj-OK or Accepted | ||||
| state for it. | ||||
| The adjacency transitions to Down state for any of the adjacency down | ||||
| events described in Section 9.2.3 . | ||||
| The adjacency transitions to 1-way state when the router stops seeing | ||||
| itself in a Neighbor TLV of its Neighbor's State Change Hello | ||||
| messages. | ||||
| The adjacency transitions to Adj-Reject state when any of the | ||||
| validation checks listed in Section 9.2.4 fail. | ||||
| When transitioning to an Adj-OK state from Accepted state, the router | ||||
| removes the path corresponding to this adjacency from any Adjacency | ||||
| Route that it had setup to the neighbor's prefixes. If no other | ||||
| adjacency exists in Accepted state to the neighbor, then it also | ||||
| deletes the BGP TCP peering session(s) setup to the neighbor based on | ||||
| the neighbor discovery mechanism. | ||||
| 9.2.7. Accepted State | ||||
| The adjacency transition to Accepted state indicates that both the | ||||
| neighboring routers have accepted the adjacency to each other. | ||||
| On this transition, the router triggers a State Change Hello message | ||||
| with the neighbor's status set to Accepted in the Neighbor TLV. It | ||||
| then installs the Adjacency Route(s) for the Prefix(es) signaled by | ||||
| the neighbor via the Local Prefix TLV via this adjacency link using | ||||
| the neighbor's address on that link. If this is the first Accepted | ||||
| adjacency to the neighbor then the Adjacency Route gets added to the | ||||
| local routing table, otherwise an additional path corresponding to | ||||
| this adjacency link and neighbor address on it gets added to the | ||||
| existing Adjacency Route. The details are described in Section 9.3. | ||||
| When this is the first Accepted adjacency to the neighbor, then the | ||||
| setup of the BGP TCP session to the Peering Address(es) signaled by | ||||
| the neighbor is also triggered. | ||||
| The adjacency transitions to Down state for any of the adjacency down | ||||
| events described in Section 9.2.3. | ||||
| The adjacency transitions to 1-way state when the router stops seeing | ||||
| itself in a Neighbor TLV of its Neighbor's State Change Hello | ||||
| messages. | ||||
| The adjacency transitions to Adj-Reject state when any of the | ||||
| validation checks listed in Section 9.2.4 fail. | ||||
| 9.3. Adjacency Route | ||||
| The Adjacency Route programming is an optional part of the BGP | ||||
| Neighbor Discovery mechanism for setting up reachability for the | ||||
| neighbor's prefixes signaled via the Local Prefix TLV corresponding | ||||
| to adjacencies in Accepted state. | ||||
| Adjacency Routes establish reachability between local prefixes on | ||||
| directly connected BGP routers. They enable reachability between the | ||||
| Peering Addresses (generally loopbacks) of the two neighbors so that | ||||
| the BGP TCP session may come up between them. Then, for the BGP | ||||
| routes learnt over the TCP session, where the next-hop is the | ||||
| neighbor, they also provide the BGP NH resolution. | ||||
| Unlike other BGP routes, these are not recursive routes as in they | Unlike other BGP routes, these are not recursive routes as in they | |||
| point to the neighbor's interface and IP address. These routes that | point to the neighbor's interface and IP address. These routes that | |||
| are setup as part of the neighbor discovery procedure are hence | are setup as part of the neighbor discovery procedure are hence | |||
| different from the regular iBGP and eBGP routes. These routes also | different from the regular IBGP and EBGP routes. These routes also | |||
| MUST have a better administrative distance as compared to the iBGP | MUST have a better administrative distance as compared to the IBGP | |||
| and eBGP routes to ensure that they do not get displaced from the | and EBGP routes to ensure that they do not get displaced from the | |||
| forwarding by BGP routes learnt over the same session that was | forwarding by BGP routes learnt over the very session(s) established | |||
| established over these peering routes. | using these peering routes. | |||
| The Adjacency Routes SHOULD NOT be stored in any of BGP RIBs | ||||
| [RFC4271] since they are not computed based on the BGP decision | ||||
| process. It is RECOMMENDED that these routes be managed in a | ||||
| separate routing table within the BGP Neighbor Discovery function to | ||||
| ensure that none of the processing and validation for BGP RIB affects | ||||
| them and in turn they do not influence the BGP decision process and | ||||
| route calculation. | ||||
| When there are multiple interconnecting links between two BGP | When there are multiple interconnecting links between two BGP | |||
| neighbors, a single BGP TCP session may be setup between them over | neighbors, a single BGP TCP session may be setup between them over | |||
| which routes are then exchanged. However, in the forwarding, the | which routes are then exchanged. However, in the forwarding, the | |||
| peering route will have multiple paths - one for each of these | Adjacency route will have multiple paths - one for each of these | |||
| interconnecting links. So the BGP routes learnt over the session | interconnecting links. So the BGP routes learnt over the session | |||
| actually end up getting resolved over the peering route and in turn | actually end up getting resolved over this Adjacency route and in | |||
| get the ECMP load balancing even with a single BGP session. | turn gets the ECMP load balancing even with a single BGP session. | |||
| 8. Interactions with Base BGP Protocol | 10. Interactions with Base BGP Protocol | |||
| The BGP Finite State Machine (FSM) as specified in [RFC4271] is | The BGP Finite State Machine (FSM) as specified in [RFC4271] is | |||
| unchanged and the BGP TCP session establishment, route updates and | unchanged and the BGP TCP session establishment, route updates and | |||
| processing continues to follow the BGP protocol specifications. | processing continues to follow the BGP protocol specifications. | |||
| BGP peering addresses along with their respective ASNs have | BGP peering addresses along with their respective ASNs have | |||
| traditionally been explicitly provisioned on both the BGP neighbors. | traditionally been explicitly provisioned on both BGP neighbors. The | |||
| The difference that neighbor discovery mechanism brings about is in | difference that neighbor discovery mechanism brings about is in | |||
| elimination of this configuration as these parameters are learnt via | elimination of this configuration as these parameters are learnt via | |||
| the neighbor discovery procedure. Once BGP router learns its | the neighbor discovery procedure. Once BGP router learns its | |||
| neighbor's peering address and ASN and has accepted it for peering | neighbor's peering address and ASN, then its initializes the BGP Peer | |||
| based on its local policy configuration, then its initializes the BGP | FSM for this neighbor in the Idle State - just as if this neighbor | |||
| Peer FSM for this neighbor in the Idle State - just as if this | was configured. From thereon, the BGP Peer FSM actions follows. | |||
| neighbor was configured. From thereon, the BGP Peer FSM actions | ||||
| follows. | ||||
| The BGP Keepalives and Hold Timer for the session over TCP apply | The BGP Keepalives and Hold Timer for the session over TCP apply | |||
| unchanged and they govern the operations of the BGP TCP session and | unchanged and they govern the operations of the BGP TCP session. | |||
| when it is brought down. While the BGP Keepalive works at the TCP | While the BGP Keepalive works at the TCP session level, the BGP | |||
| session level, the BGP Adjacency Hold Timer monitors the liveliness | Adjacency Hold Timer monitors one or more underlying interconnecting | |||
| on one or more underlying interconnecting link between the neighbors. | link adjacencies between the neighbors. The reachability for the BGP | |||
| The reachability for the BGP TCP session may be over more than one | TCP session may also be over the some BGP routes learnt via routing | |||
| adjacency. The loss of BGP Hello messages on the UDP transport or | updates over the sessions setup via neighbor discovery. It is likely | |||
| some link failure can result in the expiry of the Adjacency Hold | that even after all the underlying interconnecting link adjacencies | |||
| Timer. However, this does not result in bringing down of the BGP TCP | between two neighbors are down that the neighbor's peering address is | |||
| session for an auto-discovered BGP neighbor by default. An | reachable via BGP routing over some other path in the network. In | |||
| implementation MAY provide an option to bring a BGP TCP session down | order to avoid this, it is RECOMMENDED that the BGP TCP sessions | |||
| when the Adjacency Hold Timer expiry brings down the last adjacency | setup via neighbor discovery mechanism use TTL set to 1 to ensure | |||
| between neighbors very similar to how BFD down brings the session | they are setup only over directly attached links to the neighbors. | |||
| down. | ||||
| When the BGP Peer FSM for an auto-discovered neighbor (i.e. one that | Since the BGP TCP session setup via neighbor discovery was meant for | |||
| is not provisioned explicitly), is in the Idle or Connect state then | hop-by-hop routing, it would be necessary to bring down the session | |||
| the adjacency state for that neighbor needs to be monitored to check | even while its BGP Hold Timer has not expired for faster convergence. | |||
| if its BGP TCP session context needs to be cleaned-up. When there is | Therefore, when all the underlying link adjacencies between two BGP | |||
| no adjacency state for an auto-discovered neighbor in 2-way or | neighbors move out of the Accepted state (or go down), then the BGP | |||
| Established state, then the BGP TCP session FSM state for such a | TCP peering session that was setup using BGP Neighbor Discovery | |||
| neighbor MUST be cleaned-up when in Idle or Connect state. This is | mechanism between these two neighbors is also deleted as if it was | |||
| similar to when the configuration for a provisioned BGP neighbor is | un-configured. | |||
| deleted from a BGP router. | ||||
| Since the BGP neighbor discovery mechanism runs over a UDP socket, it | Since the BGP neighbor discovery mechanism runs over a UDP socket, it | |||
| is isolated from the core BGP protocol working which is TCP based. | is isolated from the core BGP protocol working which is TCP based. | |||
| Implementations SHOULD ensure that the hello processing does not | Implementations SHOULD ensure that the hello processing does not | |||
| affect the base BGP operations and scalability. One option may be to | affect the base BGP operations and scalability. One option may be to | |||
| run the BGP neighbor discovery mechanism in a separate thread from | run the BGP neighbor discovery mechanism in a separate thread from | |||
| the rest of BGP processing. These implementation details, however, | the rest of BGP processing. These implementation details, however, | |||
| are outside the scope of this document. | are outside the scope of this document. | |||
| It is not generally expected that BGP sessions are explicitly | It is not generally expected that BGP sessions are explicitly | |||
| provisioned along with the neighbor discovery mechanism. However, in | provisioned along with the neighbor discovery mechanism. However, in | |||
| such an event, the neighbor discovery mechanism MUST NOT affect or | such an event, the neighbor discovery mechanism MUST NOT affect or | |||
| result in any changes to provisioned BGP neighbors and their | result in any changes to provisioned BGP neighbors and their | |||
| operations. Specifically, BGP peering to auto-discovered neighbors | operations. Specifically, BGP peering to auto-discovered neighbors | |||
| MUST NOT be instantiated using the procedures described in this | MUST NOT be instantiated using the procedures described in this | |||
| document when the same BGP neighbor is already provisioned. The | document when the same BGP neighbor is already provisioned. The | |||
| configured BGP neighbor parameters take precedence and the auto- | configured BGP neighbor parameters take precedence and the auto- | |||
| discovered values and parameters are not used for such configured BGP | discovered values and parameters are not used for such configured BGP | |||
| sessions. | sessions. | |||
| Mechanisms like BFD monitoring and Fast External Failover that are | 11. Security Considerations | |||
| currently used for eBGP sessions may still continue to be used where | ||||
| necessary and are not affected by the neighbor discovery mechanism. | ||||
| 9. Security Considerations | ||||
| BGP routers accept TCP connection attempts to port 179 only from the | BGP routers accept TCP connection attempts to port 179 only from the | |||
| provisioned BGP neighbors or, in some implementations, those from | provisioned BGP neighbors or, in some implementations, those from | |||
| within a configured address range. With the BGP neighbor auto- | within a configured address range. With the BGP neighbor auto- | |||
| discovery mechanism, it is now possible for BGP to automatically | discovery mechanism, it is now possible for BGP to automatically | |||
| learn neighbors and initiate/receive TCP connections from them. This | learn neighbors and initiate/receive TCP connections from them. This | |||
| introduces the need for specific considerations to be taken care of | introduces the need for specific considerations to be taken care of | |||
| to ensure security of the BGP protocol operations. | to ensure security of the BGP protocol operations. | |||
| This document introduces UDP messages in BGP for the neighbor | This document introduces UDP messages in BGP for the neighbor | |||
| skipping to change at page 21, line 45 ¶ | skipping to change at page 27, line 45 ¶ | |||
| interfaces specifically enabled for neighbor discovery. Hello | interfaces specifically enabled for neighbor discovery. Hello | |||
| messages MUST NOT be accepted on other than the 224.0.0.2 or FF02::2 | messages MUST NOT be accepted on other than the 224.0.0.2 or FF02::2 | |||
| addresses. Optionally, implementations MAY set TTL to 255 when | addresses. Optionally, implementations MAY set TTL to 255 when | |||
| originating the Hello messages and receivers check specifically for | originating the Hello messages and receivers check specifically for | |||
| the TLV to be 254 and discard the packet when this is not the case. | the TLV to be 254 and discard the packet when this is not the case. | |||
| This ensures that the Hello packets signaling happens between | This ensures that the Hello packets signaling happens between | |||
| directly connected BGP routers only. | directly connected BGP routers only. | |||
| The BGP neighbor discovery mechanism is expected to be run typically | The BGP neighbor discovery mechanism is expected to be run typically | |||
| in DCs and between physically connected routers that are trustworthy. | in DCs and between physically connected routers that are trustworthy. | |||
| The Cryptographic Authentication TLV (as described in Section 6.6) | The Cryptographic Authentication TLV (as described in Section 8.6) | |||
| SHOULD be used in deployments where this assumption of | SHOULD be used in deployments where this assumption of | |||
| trustworthiness is not valid. This mechanism is similar to one | trustworthiness is not valid. This mechanism is similar to one | |||
| defined for LDP Hello messages that are also UDP based as specified | defined for LDP Hello messages that are also UDP based as specified | |||
| in [RFC7349]. An updated future version of this document will | in [RFC7349]. An updated future version of this document will | |||
| describe similar procedures for BGP hello in more details. | describe similar procedures for BGP hello in more details. | |||
| Once the BGP hello messages and the neighbor discovery mechanism is | Once the BGP hello messages and the neighbor discovery mechanism is | |||
| secured, then the security considerations for BGP protocol operations | secured, then the security considerations for BGP protocol operations | |||
| apply for the auto-discovered neighbor sessions. Specifically, for | apply for the auto-discovered neighbor sessions. | |||
| the BGP TCP sessions with the automatically discovered directly | ||||
| connected neighbors, the TTL of the BGP TCP messages (dest port=179) | ||||
| MUST be set to 255. Any received BGP TCP message with TTL being less | ||||
| than 254 MUST be dropped according to [RFC5082]. | ||||
| 10. Manageability Considerations | 12. Manageability Considerations | |||
| This section is structured as recommended in [RFC5706]. | This section is structured as recommended in [RFC5706]. | |||
| 10.1. Operational Considerations | 12.1. Operational Considerations | |||
| The BGP neighbor discovery mechanism introduced by this document is | The BGP neighbor discovery mechanism introduced by this document is | |||
| not applicable to general BGP deployments and is specifically meant | not applicable to general BGP deployments as discussed in Section 3. | |||
| for DC networks where BGP is used as a hop-by-hop routing protocol as | The mechanism is specifically meant for networks where BGP is used as | |||
| described in [RFC7938]. The neighbor discovery mechanism hence | a hop-by-hop routing protocol E.g. as described in [RFC7938]. The | |||
| SHOULD NOT be enabled by default in BGP. | neighbor discovery mechanism hence SHOULD NOT be enabled by default | |||
| in BGP. | ||||
| Implementations SHOULD provide configuration methods that allow | Implementations SHOULD provide configuration methods that allow | |||
| enablement of BGP neighbor discovery on specific local interfaces. | enablement of BGP neighbor discovery on specific local interfaces. | |||
| In a DC network, it is expected that the operator selects the | In a DC network, it is expected that the operator selects the | |||
| appropriate links on which to enable this e.g. on a Tier 2 node it is | appropriate links on which to enable this e.g. on a Tier 2 node it is | |||
| enabled on all links towards the Tier 1 and Tier 3 nodes while on a | enabled on all links towards the Tier 1 and Tier 3 nodes while on a | |||
| Tier 3 node, it may be only enabled on the links towards the Tier 2 | Tier 1 node, it may be only enabled on the links towards the Tier 2 | |||
| node. The details of this enablement are outside the scope of this | node. The details of this enablement are outside the scope of this | |||
| document since it varies based on the DC design and may be | document since it varies based on the DC design and may be | |||
| implementation specific. | implementation specific. | |||
| Implementations SHOULD provide configuration methods that enable the | Implementations SHOULD provide configuration methods that enable the | |||
| setup of BGP neighbor templates that enables operator to setup BGP | setup of BGP neighbor templates that enables operator to setup BGP | |||
| neighbor discovery parameters on the BGP router. Some of the aspects | neighbor discovery parameters on the BGP router. Some of the aspects | |||
| to be considered in such a template are: | to be considered in such a template are: | |||
| o Local address to be used for the BGP TCP session peering along | o Local address to be used for the BGP TCP session peering along | |||
| skipping to change at page 23, line 31 ¶ | skipping to change at page 29, line 28 ¶ | |||
| operations of the auto-discovered BGP TCP peering sessions similar to | operations of the auto-discovered BGP TCP peering sessions similar to | |||
| the provisioned BGP neighbors. | the provisioned BGP neighbors. | |||
| Implementations SHOULD support logging of events like discovery of an | Implementations SHOULD support logging of events like discovery of an | |||
| adjacency using neighbor discovery including peering route updates | adjacency using neighbor discovery including peering route updates | |||
| and events like triggering of BGP TCP session establishment for them. | and events like triggering of BGP TCP session establishment for them. | |||
| Errors and alarms related to loss of adjacencies and tear down of BGP | Errors and alarms related to loss of adjacencies and tear down of BGP | |||
| TCP peering sessions SHOULD also be generated so they could be | TCP peering sessions SHOULD also be generated so they could be | |||
| monitored. | monitored. | |||
| 10.2. Management Considerations | 12.2. Management Considerations | |||
| This document introduces UDP based messaging in BGP protocol and | This document introduces UDP based messaging in BGP protocol and | |||
| therefore the necessary fault management mechanisms are required to | therefore the necessary fault management mechanisms are required to | |||
| be implemented for the same. Implementations MUST discard | be implemented for the same. Implementations MUST discard | |||
| unsupported message types or version types other than 4 received over | unsupported message types or version types other than 4 received over | |||
| a UDP session. Such messages MUST NOT affect the neighbor discovery | a UDP session. Such messages MUST NOT affect the neighbor discovery | |||
| mechanism in operation using the Hello messages. Unknown TLVs | mechanism in operation using the Hello messages. Unknown TLVs | |||
| received via the Hello messages MUST be ignored and the rest of the | received via the Hello messages MUST be ignored and the rest of the | |||
| Hello message MUST be processed. Implementations SHOULD discard | Hello message MUST be processed. Implementations SHOULD discard | |||
| Hello messages with malformed TLVs and this should be logged as an | Hello messages with malformed TLVs and this should be logged as an | |||
| error. | error. | |||
| 11. IANA Considerations | 13. IANA Considerations | |||
| This documents requests IANA for updates to the BGP Parameters | This documents requests IANA for updates to the BGP Parameters | |||
| registry as described in this section. | registry as described in this section. | |||
| 11.1. BGP Hello Message | 13.1. BGP Hello Message | |||
| This document requests IANA to allocate a new UDP port (179 is the | 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. | preferred number ) and a BGP message type code for BGP Hello message. | |||
| Value TLV Name Reference | Value TLV Name Reference | |||
| ----- ------------------------------------ ------------- | ----- ------------------------------------ ------------- | |||
| Service Name: BGP-HELLO | Service Name: BGP-HELLO | |||
| Transport Protocol(s): UDP | Transport Protocol(s): UDP | |||
| Assignee: IESG <iesg@ietf.org> | Assignee: IESG <iesg@ietf.org> | |||
| Contact: IETF Chair <chair@ietf.org>. | Contact: IETF Chair <chair@ietf.org>. | |||
| Description: BGP Hello Message. | Description: BGP Hello Message. | |||
| Reference: This document -- draft-xu-idr-neighbor-autodiscovery. | Reference: This document -- draft-xu-idr-neighbor-autodiscovery. | |||
| Port Number: 179 (preferred value) -- To be assigned by IANA. | Port Number: 179 (preferred value) -- To be assigned by IANA. | |||
| 11.2. TLVs of BGP Hello Message | 13.2. TLVs of BGP Hello Message | |||
| This document requests IANA to create a new registry "TLVs of BGP | This document requests IANA to create a new registry "TLVs of BGP | |||
| Hello Message" with the following registration procedure: | Hello Message" with the following registration procedure: | |||
| Registry Name: TLVs of BGP Hello Message. | Registry Name: TLVs of BGP Hello Message. | |||
| Value TLV Name Reference | Value TLV Name Reference | |||
| ------- ---------------------------------- ------------- | ------- ---------------------------------- ------------- | |||
| 0 Reserved This document | 0 Reserved This document | |||
| 1 Accepted ASN List This document | 1 Accepted ASN List This document | |||
| 2 Peering Address This document | 2 Peering Address This document | |||
| 3 Local Prefix This document | 3 Local Prefix This document | |||
| 4 Link Attributes This document | 4 Link Attributes This document | |||
| 5 Neighbor This document | 5 Neighbor This document | |||
| 6 Cryptographic Authentication This document | 6 Cryptographic Authentication This document | |||
| 7-65500 Unassigned | 7-65500 Unassigned | |||
| 65501-65534 Experimental This document | 65501-65534 Experimental This document | |||
| 65535 Reserved This document | 65535 Reserved This document | |||
| 12. Acknowledgements | 14. Acknowledgements | |||
| The authors would like to thank Enke Chen for his valuable comments | The authors would like to thank Enke Chen, Krishna Swamy and Ramesh | |||
| and suggestions on this document. | Yakkala for their valuable comments and suggestions on this document. | |||
| 13. Contributors | 15. Contributors | |||
| Satya Mohanty | Satya Mohanty | |||
| Cisco | Cisco | |||
| Email: satyamoh@cisco.com | Email: satyamoh@cisco.com | |||
| Shunwan Zhuang | Shunwan Zhuang | |||
| Huawei | Huawei | |||
| Email: zhuangshunwan@huawei.com | Email: zhuangshunwan@huawei.com | |||
| Chao Huang | Chao Huang | |||
| Alibaba Inc | Alibaba Inc | |||
| skipping to change at page 25, line 32 ¶ | skipping to change at page 31, line 32 ¶ | |||
| Email: liujh@ruijie.com.cn | Email: liujh@ruijie.com.cn | |||
| Zhichun Jiang | Zhichun Jiang | |||
| Tencent | Tencent | |||
| Email: zcjiang@tencent.com | Email: zcjiang@tencent.com | |||
| Shaowen Ma | Shaowen Ma | |||
| Juniper Networks | Juniper Networks | |||
| mashaowen@gmail.com | mashaowen@gmail.com | |||
| 14. References | 16. References | |||
| 14.1. Normative References | 16.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | |||
| Border Gateway Protocol 4 (BGP-4)", RFC 4271, | Border Gateway Protocol 4 (BGP-4)", RFC 4271, | |||
| DOI 10.17487/RFC4271, January 2006, | DOI 10.17487/RFC4271, January 2006, | |||
| <https://www.rfc-editor.org/info/rfc4271>. | <https://www.rfc-editor.org/info/rfc4271>. | |||
| [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., | [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., | |||
| "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, | "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, | |||
| October 2007, <https://www.rfc-editor.org/info/rfc5036>. | October 2007, <https://www.rfc-editor.org/info/rfc5036>. | |||
| [RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C. | [RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C. | |||
| Pignataro, "The Generalized TTL Security Mechanism | Pignataro, "The Generalized TTL Security Mechanism | |||
| (GTSM)", RFC 5082, DOI 10.17487/RFC5082, October 2007, | (GTSM)", RFC 5082, DOI 10.17487/RFC5082, October 2007, | |||
| <https://www.rfc-editor.org/info/rfc5082>. | <https://www.rfc-editor.org/info/rfc5082>. | |||
| 14.2. Informative References | 16.2. Informative References | |||
| [FIPS-180-4] | [FIPS-180-4] | |||
| "Secure Hash Standard (SHS), FIPS PUB 180-4", March 2012. | "Secure Hash Standard (SHS), FIPS PUB 180-4", March 2012. | |||
| [I-D.ietf-lsvr-bgp-spf] | [I-D.ietf-lsvr-bgp-spf] | |||
| Patel, K., Lindem, A., Zandi, S., and W. Henderickx, | Patel, K., Lindem, A., Zandi, S., and W. Henderickx, | |||
| "Shortest Path Routing Extensions for BGP Protocol", | "Shortest Path Routing Extensions for BGP Protocol", | |||
| draft-ietf-lsvr-bgp-spf-01 (work in progress), May 2018. | draft-ietf-lsvr-bgp-spf-03 (work in progress), September | |||
| 2018. | ||||
| [I-D.ketant-idr-bgp-ls-bgp-only-fabric] | [I-D.ketant-idr-bgp-ls-bgp-only-fabric] | |||
| Talaulikar, K., Filsfils, C., ananthamurthy, k., and S. | Talaulikar, K., Filsfils, C., ananthamurthy, k., Zandi, | |||
| Zandi, "BGP Link-State Extensions for BGP-only Fabric", | S., Dawra, G., and M. Durrani, "BGP Link-State Extensions | |||
| draft-ketant-idr-bgp-ls-bgp-only-fabric-00 (work in | for BGP-only Fabric", draft-ketant-idr-bgp-ls-bgp-only- | |||
| progress), March 2018. | fabric-01 (work in progress), September 2018. | |||
| [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | |||
| Hashing for Message Authentication", RFC 2104, | Hashing for Message Authentication", RFC 2104, | |||
| DOI 10.17487/RFC2104, February 1997, | DOI 10.17487/RFC2104, February 1997, | |||
| <https://www.rfc-editor.org/info/rfc2104>. | <https://www.rfc-editor.org/info/rfc2104>. | |||
| [RFC4202] Kompella, K., Ed. and Y. Rekhter, Ed., "Routing Extensions | ||||
| in Support of Generalized Multi-Protocol Label Switching | ||||
| (GMPLS)", RFC 4202, DOI 10.17487/RFC4202, October 2005, | ||||
| <https://www.rfc-editor.org/info/rfc4202>. | ||||
| [RFC5706] Harrington, D., "Guidelines for Considering Operations and | [RFC5706] Harrington, D., "Guidelines for Considering Operations and | |||
| Management of New Protocols and Protocol Extensions", | Management of New Protocols and Protocol Extensions", | |||
| RFC 5706, DOI 10.17487/RFC5706, November 2009, | RFC 5706, DOI 10.17487/RFC5706, November 2009, | |||
| <https://www.rfc-editor.org/info/rfc5706>. | <https://www.rfc-editor.org/info/rfc5706>. | |||
| [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | ||||
| (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, | ||||
| <https://www.rfc-editor.org/info/rfc5880>. | ||||
| [RFC7349] Zheng, L., Chen, M., and M. Bhatia, "LDP Hello | [RFC7349] Zheng, L., Chen, M., and M. Bhatia, "LDP Hello | |||
| Cryptographic Authentication", RFC 7349, | Cryptographic Authentication", RFC 7349, | |||
| DOI 10.17487/RFC7349, August 2014, | DOI 10.17487/RFC7349, August 2014, | |||
| <https://www.rfc-editor.org/info/rfc7349>. | <https://www.rfc-editor.org/info/rfc7349>. | |||
| [RFC7752] Gredler, H., Ed., Medved, J., Previdi, S., Farrel, A., and | [RFC7752] Gredler, H., Ed., Medved, J., Previdi, S., Farrel, A., and | |||
| S. Ray, "North-Bound Distribution of Link-State and | S. Ray, "North-Bound Distribution of Link-State and | |||
| Traffic Engineering (TE) Information Using BGP", RFC 7752, | Traffic Engineering (TE) Information Using BGP", RFC 7752, | |||
| DOI 10.17487/RFC7752, March 2016, | DOI 10.17487/RFC7752, March 2016, | |||
| <https://www.rfc-editor.org/info/rfc7752>. | <https://www.rfc-editor.org/info/rfc7752>. | |||
| skipping to change at page 27, line 23 ¶ | skipping to change at page 33, line 34 ¶ | |||
| Cisco Systems | Cisco Systems | |||
| Email: ketant@cisco.com | Email: ketant@cisco.com | |||
| Kunyang Bi | Kunyang Bi | |||
| Huawei | Huawei | |||
| Email: bikunyang@huawei.com | Email: bikunyang@huawei.com | |||
| Jeff Tantsura | Jeff Tantsura | |||
| Nuage Networks | Apstra | |||
| Email: jefftant.ietf@gmail.com | Email: jefftant.ietf@gmail.com | |||
| Nikos Triantafillis | Nikos Triantafillis | |||
| Apstra | ||||
| Email: ntriantafillis@gmail.com | Email: nikos@apstra.com | |||
| End of changes. 129 change blocks. | ||||
| 422 lines changed or deleted | 764 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||