draft-ietf-idr-bgp-model-04.txt   draft-ietf-idr-bgp-model-05.txt 
Interdomain Routing K. Patel Interdomain Routing M. Jethanandani
Internet-Draft Arrcus Internet-Draft VMware
Intended status: Standards Track M. Jethanandani Intended status: Standards Track K. Patel
Expires: August 29, 2019 VMware Expires: September 26, 2019 Arrcus
S. Hares S. Hares
Huawei Huawei
February 25, 2019 March 25, 2019
BGP YANG Model for Service Provider Networks BGP YANG Model for Service Provider Networks
draft-ietf-idr-bgp-model-04 draft-ietf-idr-bgp-model-05
Abstract Abstract
This document defines a YANG data model for configuring and managing This document defines a YANG data model for configuring and managing
BGP, including protocol, policy, and operational aspects based on BGP, including protocol, policy, and operational aspects, such as
data center, carrier and content provider operational requirements. RIB, based on data center, carrier and content provider operational
requirements.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
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 August 29, 2019. This Internet-Draft will expire on September 26, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 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
skipping to change at page 2, line 12 skipping to change at page 2, line 12
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 . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Goals and approach . . . . . . . . . . . . . . . . . . . 3 1.1. Goals and approach . . . . . . . . . . . . . . . . . . . 3
1.2. Note to RFC Editor . . . . . . . . . . . . . . . . . . . 4 1.2. Note to RFC Editor . . . . . . . . . . . . . . . . . . . 4
2. Model overview . . . . . . . . . . . . . . . . . . . . . . . 4 1.3. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 4
2.1. BGP protocol configuration . . . . . . . . . . . . . . . 5 2. Model overview . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Policy configuration overview . . . . . . . . . . . . . . 7 2.1. BGP protocol configuration . . . . . . . . . . . . . . . 6
2.3. BGP RIB overview . . . . . . . . . . . . . . . . . . . . 8 2.2. Policy configuration overview . . . . . . . . . . . . . . 9
2.3.1. Local Routing . . . . . . . . . . . . . . . . . . . . 20 2.3. BGP RIB overview . . . . . . . . . . . . . . . . . . . . 10
2.3.2. Pre updates per-neighbor . . . . . . . . . . . . . . 20 2.3.1. Local Routing . . . . . . . . . . . . . . . . . . . . 12
2.3.3. Post updates per-neighbor . . . . . . . . . . . . . . 20 2.3.2. Pre updates per-neighbor . . . . . . . . . . . . . . 12
2.3.4. Pre route advertisements per-neighbor . . . . . . . . 20 2.3.3. Post updates per-neighbor . . . . . . . . . . . . . . 12
2.3.5. Post route advertisements per-neighbor . . . . . . . 20 2.3.4. Pre route advertisements per-neighbor . . . . . . . . 12
3. Relation to other YANG data models . . . . . . . . . . . . . 21 2.3.5. Post route advertisements per-neighbor . . . . . . . 12
4. Security Considerations . . . . . . . . . . . . . . . . . . . 21 3. Relation to other YANG data models . . . . . . . . . . . . . 13
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 4. Security Considerations . . . . . . . . . . . . . . . . . . . 13
5.1. URI Registration . . . . . . . . . . . . . . . . . . . . 21 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13
5.2. YANG Module Name Registration . . . . . . . . . . . . . . 22 5.1. URI Registration . . . . . . . . . . . . . . . . . . . . 13
6. YANG modules . . . . . . . . . . . . . . . . . . . . . . . . 23 5.2. YANG Module Name Registration . . . . . . . . . . . . . . 14
7. Structure of the YANG modules . . . . . . . . . . . . . . . . 23 6. YANG modules . . . . . . . . . . . . . . . . . . . . . . . . 14
7.1. Main module and submodules for base items . . . . . . . . 23 7. Structure of the YANG modules . . . . . . . . . . . . . . . . 15
7.2. BGP types . . . . . . . . . . . . . . . . . . . . . . . . 60 7.1. Main module and submodules for base items . . . . . . . . 15
7.3. BGP policy data . . . . . . . . . . . . . . . . . . . . . 70 7.2. BGP types . . . . . . . . . . . . . . . . . . . . . . . . 55
7.4. RIB modules . . . . . . . . . . . . . . . . . . . . . . . 81 7.3. BGP policy data . . . . . . . . . . . . . . . . . . . . . 66
8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 132 7.4. RIB modules . . . . . . . . . . . . . . . . . . . . . . . 77
8.1. Creating BGP Instance . . . . . . . . . . . . . . . . . . 132 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8.2. Neighbor Address Family Configuration . . . . . . . . . . 133 8.1. Creating BGP Instance . . . . . . . . . . . . . . . . . . 126
9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 135 8.2. Neighbor Address Family Configuration . . . . . . . . . . 127
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 135 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 129
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 135 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 129
11.1. Normative references . . . . . . . . . . . . . . . . . . 135 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 129
11.2. Informative references . . . . . . . . . . . . . . . . . 137 11.1. Normative references . . . . . . . . . . . . . . . . . . 129
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 137 11.2. Informative references . . . . . . . . . . . . . . . . . 131
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 131
1. Introduction 1. Introduction
This document describes a YANG [RFC7950] data model for the BGP This document describes a YANG [RFC7950] data model for the BGP
[RFC4271] protocol, including various protocol extensions, policy [RFC4271] protocol, including various protocol extensions, policy
configuration, as well as defining key operational state data, configuration, as well as defining key operational state data,
including Routing Information Base (RIB). The model is intended to including Routing Information Base (RIB). The model is intended to
be vendor-neutral, in order to allow operators to manage BGP be vendor-neutral, in order to allow operators to manage BGP
configuration in heterogeneous environments with routers supplied by configuration in heterogeneous environments with routers supplied by
multiple vendors. The model is also intended to be readily mapped to multiple vendors. The model is also intended to be readily mapped to
skipping to change at page 3, line 25 skipping to change at page 3, line 25
Confederations for BGP [RFC5065], BGP Route Flap Damping [RFC2439], Confederations for BGP [RFC5065], BGP Route Flap Damping [RFC2439],
Graceful Restart Mechanism for BGP [RFC4724], and BGP Prefix Origin Graceful Restart Mechanism for BGP [RFC4724], and BGP Prefix Origin
Validation [RFC6811]. Validation [RFC6811].
Along with configuration of base BGP features, this model also Along with configuration of base BGP features, this model also
addresses policy configuration, by providing "hooks" for applying addresses policy configuration, by providing "hooks" for applying
policies, and also defining BGP-specific policy features. The BGP policies, and also defining BGP-specific policy features. The BGP
policy features are intended to be used with the general routing policy features are intended to be used with the general routing
policy model defined in A YANG Data Model for Routing Policy policy model defined in A YANG Data Model for Routing Policy
Management [I-D.ietf-rtgwg-policy-model]. The model conforms to the Management [I-D.ietf-rtgwg-policy-model]. The model conforms to the
NMDA [RFC8342] architecture. NMDA [RFC8342] architecture and has support for configuring
Bidirectional Forward Detection (BFD) [RFC5880] for fast next hop
liveliness check.
For the base BGP features, the focus of the model described in this For the base BGP features, the focus of the model described in this
document is on providing configuration and operational state document is on providing configuration and operational state
information relating to: information relating to:
o The global BGP instance, and neighbors whose configuration is o The global BGP instance, and neighbors whose configuration is
specified individually, or templated with the use of peer-groups. specified individually, or templated with the use of peer-groups.
o The address families that are supported by peers, and the global o The address families that are supported by peers, and the global
configuration which relates to them. configuration which relates to them.
skipping to change at page 4, line 25 skipping to change at page 4, line 27
1.2. Note to RFC Editor 1.2. Note to RFC Editor
This document uses several placeholder values throughout the This document uses several placeholder values throughout the
document. Please replace them as follows and remove this note before document. Please replace them as follows and remove this note before
publication. publication.
RFC XXXX, where XXXX is the number assigned to this document at the RFC XXXX, where XXXX is the number assigned to this document at the
time of publication. time of publication.
2019-02-25 with the actual date of the publication of this document. 2019-03-21 with the actual date of the publication of this document.
RFC ZZZZ, where ZZZZ is the number assigned to A YANG Data Model for RFC ZZZZ, where ZZZZ is the number assigned to A YANG Data Model for
Routing Policy Management [I-D.ietf-rtgwg-policy-model]. Routing Policy Management [I-D.ietf-rtgwg-policy-model].
RFC AAAA, where AAAA is the number assigned to BGP Monitoring
Protocol [I-D.ietf-grow-bmp].
RFC BBBB, where BBBB is the number assigned to YANG Data Model for
Bidirectional Forward Detection [I-D.ietf-bfd-yang].
1.3. Abbreviations
+--------------+-------------------------------------------+
| Abbreviation | |
+--------------+-------------------------------------------+
| AFI | Address Family Identifier |
| | |
| BFD | Bidirectional Forward Detection |
| | |
| NLRI | Network Layer Reachability Information |
| | |
| NMDA | Network Management Datastore Architecture |
| | |
| RIB | Routing Information Base |
| | |
| SAFI | Subsequent Address Family Identifier |
+--------------+-------------------------------------------+
2. Model overview 2. Model overview
The BGP model is defined across several YANG modules and submodules, The BGP model is defined across several YANG modules and submodules,
but at a high level is organized into six elements: but at a high level is organized into six elements:
o base protocol configuration -- configuration affecting BGP o base protocol configuration -- configuration affecting BGP
protocol-related operations, defined at various levels of protocol-related operations, defined at various levels of
hierarchy. hierarchy.
o multiprotocol configuration -- configuration affecting individual o multiprotocol configuration -- configuration affecting individual
skipping to change at page 5, line 21 skipping to change at page 7, line 5
addresses and prefixes, autonomous system numbers, etc., defined in addresses and prefixes, autonomous system numbers, etc., defined in
Common YANG Data Types [RFC6991]. Common YANG Data Types [RFC6991].
2.1. BGP protocol configuration 2.1. BGP protocol configuration
The BGP protocol configuration model is organized hierarchically, The BGP protocol configuration model is organized hierarchically,
much like the majority of router implementations. That is, much like the majority of router implementations. That is,
configuration items can be specified at multiple levels, as shown configuration items can be specified at multiple levels, as shown
below. below.
+--rw bgp module: ietf-bgp
+--rw global! augment /rt:routing/rt:control-plane-protocols
| +-- (global-configuration-options) /rt:control-plane-protocol:
+--rw neighbors +--rw bgp
| +--rw neighbor* [neighbor-address] +--rw global!
| +-- (neighbor-configuration-options) | +--rw as inet:as-number
+--rw peer-groups | +--rw router-id? yang:dotted-quad
+--rw peer-group* [peer-group-name] | +--ro total-paths? uint32
+-- (neighbor-configuration-options) | +--ro total-prefixes? uint32
| +--rw default-route-distance
| | ...
| +--rw confederation
| | ...
| +--rw graceful-restart
| | ...
| +--rw use-multiple-paths
| | ...
| +--rw route-selection-options
| | ...
| +--rw afi-safis
| | ...
| +--rw apply-policy
| ...
+--rw neighbors
| +--rw neighbor* [neighbor-address]
| ...
+--rw peer-groups
| +--rw peer-group* [peer-group-name]
| ...
+--rw interfaces
| +--rw interface* [name]
| ...
+--ro rib
+--ro attr-sets
| ...
+--ro communities
| ...
+--ro ext-communities
| ...
+--ro afi-safis
...
Users may specify configuration at a higher level and have it apply Users may specify configuration at a higher level and have it apply
to all lower-level items, or provide overriding configuration at a to all lower-level items, or provide overriding configuration at a
lower level of the hierarchy. Overriding configuration items are lower level of the hierarchy. Overriding configuration items are
optional, with neighbor specific configuration being the most optional, with neighbor specific configuration being the most
specific or lowest level, followed by peer-group, and finally global. specific or lowest level, followed by peer-group, and finally global.
Global configuration options reflect a subset of the peer-group or Global configuration options reflect a subset of the peer-group or
neighbor specific configuration options which are relevant to the neighbor specific configuration options which are relevant to the
entire BGP instance. entire BGP instance.
The model makes the simplifying assumption that most of the The model makes the simplifying assumption that most of the
configuration items are available at all levels of the hierarchy. configuration items are available at all levels of the hierarchy.
That is, very little configuration is specific to a particular level That is, very little configuration is specific to a particular level
in the hierarchy, other than obvious items such as "group-name" only in the hierarchy, other than obvious items such as "group-name" only
being available for the peer group-level config. A notable exception being available for the peer group-level config. A notable exception
is for sub-address family configuration where some items are only is for sub-address family configuration where some items are only
skipping to change at page 7, line 32 skipping to change at page 10, line 13
a particular address-family. a particular address-family.
o on a per-peer-group or per-neighbor basis - where the policy o on a per-peer-group or per-neighbor basis - where the policy
applies to all address-families for the particular group or applies to all address-families for the particular group or
neighbor. neighbor.
o on a per-afi-safi basis within a neighbor or peer-group context, o on a per-afi-safi basis within a neighbor or peer-group context,
where the policy is specific to the AFI-SAFI for a a specific where the policy is specific to the AFI-SAFI for a a specific
neighbor or group. neighbor or group.
+--rw bgp module: ietf-bgp-policy
+--rw global! augment /rpol:routing-policy/rpol:defined-sets:
| +--rw afi-safis +--rw bgp-defined-sets
| +--rw afi-safi ...
| | +--rw afi-safi* [afi-safi-name] augment /rpol:routing-policy/rpol:policy-definitions
| | +--rw apply-policy /rpol:policy-definition/rpol:statements/rpol:statement
| +--rw apply-policy /rpol:conditions:
+--rw neighbors +--rw bgp-conditions
| +--rw neighbor* [neighbor-address] ...
| +--rw afi-safi augment /rpol:routing-policy/rpol:policy-definitions
| | +--rw afi-safi* [afi-safi-name] /rpol:policy-definition/rpol:statements/rpol:statement
| | +--rw apply-policy /rpol:actions:
| +--rw apply-policy +--rw bgp-actions
+--rw peer-groups ...
+--rw peer-group* [peer-group-name]
+--rw afi-safi
| +--rw afi-safi* [afi-safi-name]
| +--rw apply-policy
+--rw apply-policy
2.3. BGP RIB overview 2.3. BGP RIB overview
The RIB data model represents the BGP RIB contents. The model The RIB data model represents the BGP RIB contents. The model
supports five logical RIBs per address family. supports five logical RIBs per address family.
A version of the tree showing the five logical RIBs is shown below. A abridged version of the tree shows the RIB portion of the tree
diagram.
module: ietf-bgp-rib module: ietf-bgp
augment /rt:routing/rt:ribs: augment /rt:routing/rt:control-plane-protocols
+--ro rib /rt:control-plane-protocol:
+--ro attr-sets +--rw bgp
| +--ro attr-set* [index] +--ro rib
| +--ro index uint64 +--ro afi-safis
| +--ro origin? bgpt:bgp-origin-attr-type +--ro afi-safi* [afi-safi-name]
| +--ro atomic-aggregate? boolean +--ro afi-safi-name identityref
| +--ro next-hop? inet:ip-address +--ro ipv4-unicast
| +--ro med? uint32 | +--ro loc-rib
| +--ro local-pref? uint32 | | +--ro routes
| +--ro originator-id? inet:ipv4-address | | +--ro route* [prefix origin path-id]
| +--ro cluster-list* inet:ipv4-address | | ...
| +--ro aigp? uint64 | +--ro neighbors
| +--ro aggregator | +--ro neighbor* [neighbor-address]
| | +--ro as? inet:as-number | +--ro neighbor-address inet:ip-address
| | +--ro as4? inet:as-number | +--ro adj-rib-in-pre
| | +--ro address? inet:ipv4-address | | ...
| +--ro as-path | +--ro adj-rib-in-post
| | +--ro segment* [type] | | ...
| | +--ro type identityref | +--ro adj-rib-out-pre
| | +--ro member* inet:as-number | | ...
| +--ro as4-path | +--ro adj-rib-out-post
| | +--ro segment* [type] | ...
| | +--ro type identityref +--ro ipv6-unicast
| | +--ro member* inet:as-number | +--ro loc-rib
| +--ro tunnel-encapsulation | | +--ro routes
| +--ro tunnels | | +--ro route* [prefix origin path-id]
| +--ro tunnel* [type] | | ...
| +--ro type identityref | +--ro neighbors
| +--ro subtlvs | +--ro neighbor* [neighbor-address]
| +--ro subtlv* [type] | +--ro neighbor-address inet:ip-address
| +--ro type identityref | +--ro adj-rib-in-pre
| +--ro colors* uint32 | | ...
| +--ro preference? uint32 | +--ro adj-rib-in-post
| +--ro binding-sid? string | | ...
| +--ro remote-endpoints | +--ro adj-rib-out-pre
| | +--ro remote-endpoint* [endpoint] | | ...
| | +--ro as? inet:as-number | +--ro adj-rib-out-post
| | +--ro endpoint inet:ip-address | ...
| +--ro segment-lists +--ro ipv4-srte-policy
| +--ro segment-list* [instance-id] | +--ro loc-rib
| +--ro instance-id uint64 | | +--ro routes
| +--ro weight? uint32 | | +--ro route* [path-id endpoint color]
| +--ro segments | | ...
| +--ro segment* [index] | +--ro neighbors
| +--ro index | +--ro neighbor* [neighbor-address]
| | uint64 | +--ro neighbor-address inet:ip-address
| +--ro type? | +--ro adj-rib-in-pre
| | enumeration | | ...
| +--ro sid? | +--ro adj-rib-in-post
| | string | | ...
| +--ro mpls-tc? | +--ro adj-rib-out-pre
| | uint8 | | ...
| +--ro mpls-bos? | +--ro adj-rib-out-post
| | boolean | ...
| +--ro mpls-ttl? +--ro ipv6-srte-policy
| | uint8 +--ro loc-rib
| +--ro remote-ipv4-address? | +--ro routes
| | inet:ipv4-address | +--ro route* [path-id endpoint color]
| +--ro local-ipv4-address? | ...
| | inet:ipv4-address +--ro neighbors
| +--ro remote-ipv6-address? +--ro neighbor* [neighbor-address]
| | inet:ipv6-address +--ro neighbor-address inet:ip-address
| +--ro local-ipv6-address? +--ro adj-rib-in-pre
| | inet:ipv6-address | ...
| +--ro local-interface-id? +--ro adj-rib-in-post
| uint32 | ...
+--ro communities +--ro adj-rib-out-pre
| +--ro community* [index] | ...
| +--ro index uint64 +--ro adj-rib-out-post
| +--ro community* union ...
+--ro ext-communities
| +--ro ext-community* [index]
| +--ro index uint64
| +--ro ext-community* bgpt:bgp-ext-community-type
+--ro afi-safis
+--ro afi-safi* [afi-safi-name]
+--ro afi-safi-name identityref
+--ro ipv4-unicast
| +--ro loc-rib
| | +--ro routes
| | +--ro route* [prefix origin path-id]
| | +--ro prefix
| | | inet:ipv4-prefix
| | +--ro origin union
| | +--ro path-id uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified? types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason? identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute* [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro neighbors
| +--ro neighbor* [neighbor-address]
| +--ro neighbor-address inet:ip-address
| +--ro adj-rib-in-pre
| | +--ro routes
| | +--ro route* [prefix path-id]
| | +--ro prefix
| | | inet:ipv4-prefix
| | +--ro path-id uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-in-post
| | +--ro routes
| | +--ro route* [prefix path-id]
| | +--ro prefix
| | | inet:ipv4-prefix
| | +--ro path-id uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro best-path? boolean
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-out-pre
| | +--ro routes
| | +--ro route* [prefix path-id]
| | +--ro prefix
| | | inet:ipv4-prefix
| | +--ro path-id uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-out-post
| +--ro routes
| +--ro route* [prefix path-id]
| +--ro prefix
| | inet:ipv4-prefix
| +--ro path-id uint32
| +--ro attr-index? leafref
| +--ro community-index? leafref
| +--ro ext-community-index? leafref
| +--ro last-modified?
| | types:timeticks
| +--ro valid-route? boolean
| +--ro invalid-reason?
| | identityref
| +--ro unknown-attributes
| +--ro unknown-attribute*
| [attr-type]
| +--ro optional? boolean
| +--ro transitive? boolean
| +--ro partial? boolean
| +--ro extended? boolean
| +--ro attr-type uint8
| +--ro attr-len? uint16
| +--ro attr-value? binary
+--ro ipv6-unicast
| +--ro loc-rib
| | +--ro routes
| | +--ro route* [prefix origin path-id]
| | +--ro prefix
| | | inet:ipv6-prefix
| | +--ro origin union
| | +--ro path-id uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified? types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason? identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute* [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro neighbors
| +--ro neighbor* [neighbor-address]
| +--ro neighbor-address inet:ip-address
| +--ro adj-rib-in-pre
| | +--ro routes
| | +--ro route* [prefix path-id]
| | +--ro prefix
| | | inet:ipv6-prefix
| | +--ro path-id uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-in-post
| | +--ro routes
| | +--ro route* [prefix path-id]
| | +--ro prefix
| | | inet:ipv6-prefix
| | +--ro path-id uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro best-path? boolean
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-out-pre
| | +--ro routes
| | +--ro route* [prefix path-id]
| | +--ro prefix
| | | inet:ipv6-prefix
| | +--ro path-id uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-out-post
| +--ro routes
| +--ro route* [prefix path-id]
| +--ro prefix
| | inet:ipv6-prefix
| +--ro path-id uint32
| +--ro attr-index? leafref
| +--ro community-index? leafref
| +--ro ext-community-index? leafref
| +--ro last-modified?
| | types:timeticks
| +--ro valid-route? boolean
| +--ro invalid-reason?
| | identityref
| +--ro unknown-attributes
| +--ro unknown-attribute*
| [attr-type]
| +--ro optional? boolean
| +--ro transitive? boolean
| +--ro partial? boolean
| +--ro extended? boolean
| +--ro attr-type uint8
| +--ro attr-len? uint16
| +--ro attr-value? binary
+--ro ipv4-srte-policy
| +--ro loc-rib
| | +--ro routes
| | +--ro route* [path-id endpoint color]
| | +--ro path-id uint32
| | +--ro endpoint inet:ip-address
| | +--ro color uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified? types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason? identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute* [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro neighbors
| +--ro neighbor* [neighbor-address]
| +--ro neighbor-address inet:ip-address
| +--ro adj-rib-in-pre
| | +--ro routes
| | +--ro route* [path-id endpoint color]
| | +--ro path-id uint32
| | +--ro endpoint
| | | inet:ip-address
| | +--ro color uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-in-post
| | +--ro routes
| | +--ro route* [path-id endpoint color]
| | +--ro path-id uint32
| | +--ro endpoint
| | | inet:ip-address
| | +--ro color uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro best-path? boolean
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-out-pre
| | +--ro routes
| | +--ro route* [path-id endpoint color]
| | +--ro path-id uint32
| | +--ro endpoint
| | | inet:ip-address
| | +--ro color uint32
| | +--ro attr-index? leafref
| | +--ro community-index? leafref
| | +--ro ext-community-index? leafref
| | +--ro last-modified?
| | | types:timeticks
| | +--ro valid-route? boolean
| | +--ro invalid-reason?
| | | identityref
| | +--ro unknown-attributes
| | +--ro unknown-attribute*
| | [attr-type]
| | +--ro optional? boolean
| | +--ro transitive? boolean
| | +--ro partial? boolean
| | +--ro extended? boolean
| | +--ro attr-type uint8
| | +--ro attr-len? uint16
| | +--ro attr-value? binary
| +--ro adj-rib-out-post
| +--ro routes
| +--ro route* [path-id endpoint color]
| +--ro path-id uint32
| +--ro endpoint
| | inet:ip-address
| +--ro color uint32
| +--ro attr-index? leafref
| +--ro community-index? leafref
| +--ro ext-community-index? leafref
| +--ro last-modified?
| | types:timeticks
| +--ro valid-route? boolean
| +--ro invalid-reason?
| | identityref
| +--ro unknown-attributes
| +--ro unknown-attribute*
| [attr-type]
| +--ro optional? boolean
| +--ro transitive? boolean
| +--ro partial? boolean
| +--ro extended? boolean
| +--ro attr-type uint8
| +--ro attr-len? uint16
| +--ro attr-value? binary
+--ro ipv6-srte-policy
+--ro loc-rib
| +--ro routes
| +--ro route* [path-id endpoint color]
| +--ro path-id uint32
| +--ro endpoint inet:ip-address
| +--ro color uint32
| +--ro attr-index? leafref
| +--ro community-index? leafref
| +--ro ext-community-index? leafref
| +--ro last-modified? types:timeticks
| +--ro valid-route? boolean
| +--ro invalid-reason? identityref
| +--ro unknown-attributes
| +--ro unknown-attribute* [attr-type]
| +--ro optional? boolean
| +--ro transitive? boolean
| +--ro partial? boolean
| +--ro extended? boolean
| +--ro attr-type uint8
| +--ro attr-len? uint16
| +--ro attr-value? binary
+--ro neighbors
+--ro neighbor* [neighbor-address]
+--ro neighbor-address inet:ip-address
+--ro adj-rib-in-pre
| +--ro routes
| +--ro route* [path-id endpoint color]
| +--ro path-id uint32
| +--ro endpoint
| | inet:ip-address
| +--ro color uint32
| +--ro attr-index? leafref
| +--ro community-index? leafref
| +--ro ext-community-index? leafref
| +--ro last-modified?
| | types:timeticks
| +--ro valid-route? boolean
| +--ro invalid-reason?
| | identityref
| +--ro unknown-attributes
| +--ro unknown-attribute*
| [attr-type]
| +--ro optional? boolean
| +--ro transitive? boolean
| +--ro partial? boolean
| +--ro extended? boolean
| +--ro attr-type uint8
| +--ro attr-len? uint16
| +--ro attr-value? binary
+--ro adj-rib-in-post
| +--ro routes
| +--ro route* [path-id endpoint color]
| +--ro path-id uint32
| +--ro endpoint
| | inet:ip-address
| +--ro color uint32
| +--ro attr-index? leafref
| +--ro community-index? leafref
| +--ro ext-community-index? leafref
| +--ro last-modified?
| | types:timeticks
| +--ro valid-route? boolean
| +--ro invalid-reason?
| | identityref
| +--ro best-path? boolean
| +--ro unknown-attributes
| +--ro unknown-attribute*
| [attr-type]
| +--ro optional? boolean
| +--ro transitive? boolean
| +--ro partial? boolean
| +--ro extended? boolean
| +--ro attr-type uint8
| +--ro attr-len? uint16
| +--ro attr-value? binary
+--ro adj-rib-out-pre
| +--ro routes
| +--ro route* [path-id endpoint color]
| +--ro path-id uint32
| +--ro endpoint
| | inet:ip-address
| +--ro color uint32
| +--ro attr-index? leafref
| +--ro community-index? leafref
| +--ro ext-community-index? leafref
| +--ro last-modified?
| | types:timeticks
| +--ro valid-route? boolean
| +--ro invalid-reason?
| | identityref
| +--ro unknown-attributes
| +--ro unknown-attribute*
| [attr-type]
| +--ro optional? boolean
| +--ro transitive? boolean
| +--ro partial? boolean
| +--ro extended? boolean
| +--ro attr-type uint8
| +--ro attr-len? uint16
| +--ro attr-value? binary
+--ro adj-rib-out-post
+--ro routes
+--ro route* [path-id endpoint color]
+--ro path-id uint32
+--ro endpoint
| inet:ip-address
+--ro color uint32
+--ro attr-index? leafref
+--ro community-index? leafref
+--ro ext-community-index? leafref
+--ro last-modified?
| types:timeticks
+--ro valid-route? boolean
+--ro invalid-reason?
| identityref
+--ro unknown-attributes
+--ro unknown-attribute*
[attr-type]
+--ro optional? boolean
+--ro transitive? boolean
+--ro partial? boolean
+--ro extended? boolean
+--ro attr-type uint8
+--ro attr-len? uint16
+--ro attr-value? binary
2.3.1. Local Routing 2.3.1. Local Routing
The loc-rib is the main BGP routing table for the local routing The loc-rib is the main BGP routing table for the local routing
instance, containing best-path selections for each prefix. The loc- instance, containing best-path selections for each prefix. The loc-
rib table may contain multiple routes for a given prefix, with an rib table may contain multiple routes for a given prefix, with an
attribute to indicate which was selected as the best path. Note that attribute to indicate which was selected as the best path. Note that
multiple paths may be used or advertised even if only one path is multiple paths may be used or advertised even if only one path is
marked as best, e.g., when using BGP add-paths. An implementation marked as best, e.g., when using BGP add-paths. An implementation
may choose to mark multiple paths in the RIB as best path by setting may choose to mark multiple paths in the RIB as best path by setting
skipping to change at page 21, line 45 skipping to change at page 13, line 45
notification) to these data nodes. These are the subtrees and data notification) to these data nodes. These are the subtrees and data
nodes and their sensitivity/vulnerability: nodes and their sensitivity/vulnerability:
Some of the RPC operations in this YANG module may be considered Some of the RPC operations in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. These are the important to control access to these operations. These are the
operations and their sensitivity/vulnerability: operations and their sensitivity/vulnerability:
5. IANA Considerations 5. IANA Considerations
This document registers six URIs and six YANG modules. This document registers three URIs and three YANG modules.
5.1. URI Registration 5.1. URI Registration
in the IETF XML registry [RFC3688] [RFC3688]. Following the format in the IETF XML registry [RFC3688] [RFC3688]. Following the format
in RFC 3688, the following registration is requested to be made: in RFC 3688, the following registration is requested to be made:
URI: urn:ietf:params:xml:ns:yang:ietf-bgp URI: urn:ietf:params:xml:ns:yang:ietf-bgp
URI: urn:ietf:params:xml:ns:yang:ietf-bgp-policy URI: urn:ietf:params:xml:ns:yang:ietf-bgp-policy
URI: urn:ietf:params:xml:ns:yang:ietf-bgp-types URI: urn:ietf:params:xml:ns:yang:ietf-bgp-types
URI: urn:ietf:params:xml:ns:yang:ietf-bgp-rib
URI: urn:ietf:params:xml:ns:yang:ietf-bgp-rib-ext
URI: urn:ietf:params:xml:ns:yang:ietf-bgp-rib-types
Registrant Contact: The IESG. XML: N/A, the requested URI is an XML Registrant Contact: The IESG. XML: N/A, the requested URI is an XML
namespace. namespace.
5.2. YANG Module Name Registration 5.2. YANG Module Name Registration
This document registers three YANG module in the YANG Module Names This document registers three YANG module in the YANG Module Names
registry YANG [RFC6020]. registry YANG [RFC6020].
name: ietf-bgp name: ietf-bgp
skipping to change at page 22, line 35 skipping to change at page 14, line 32
name: ietf-bgp-policy name: ietf-bgp-policy
namespace: urn:ietf:params:xml:ns:yang:ietf-bgp-policy namespace: urn:ietf:params:xml:ns:yang:ietf-bgp-policy
prefix: bp prefix: bp
reference: RFC XXXX reference: RFC XXXX
name: ietf-bgp-types name: ietf-bgp-types
namespace: urn:ietf:params:xml:ns:yang:ietf-bgp-types namespace: urn:ietf:params:xml:ns:yang:ietf-bgp-types
prefix: bt prefix: bt
reference: RFC XXXX reference: RFC XXXX
name: ietf-bgp-rib
namespace: urn:ietf:params:xml:ns:yang:ietf-bgp-rib
prefix: br
reference: RFC XXXX
name: ietf-bgp-rib-ext
namespace: urn:ietf:params:xml:ns:yang:ietf-bgp-rib-ext
prefix: bre
reference: RFC XXXX
name: ietf-bgp-rib-types
namespace: urn:ietf:params:xml:ns:yang:ietf-bgp-rib-types
prefix: brt
reference: RFC XXXX
6. YANG modules 6. YANG modules
The modules comprising the BGP configuration and operational model The modules comprising the BGP configuration and operational model
are described by the YANG modules and submodules in the sections are described by the YANG modules and submodules in the sections
below. below.
The main module, ietf-bgp.yang, includes the following submodules: The main module, ietf-bgp.yang, includes the following submodules:
o ietf-bgp-common - defines the groupings that are common across o ietf-bgp-common - defines the groupings that are common across
more than one context (where contexts are neighbor, group, global) more than one context (where contexts are neighbor, group, global)
skipping to change at page 23, line 34 skipping to change at page 15, line 14
o ietf-bgp-global - groupings with data specific to the global o ietf-bgp-global - groupings with data specific to the global
context context
o ietf-bgp-peer-group - groupings with data specific to the peer o ietf-bgp-peer-group - groupings with data specific to the peer
group context group context
o ietf-bgp-neighbor - groupings with data specific to the neighbor o ietf-bgp-neighbor - groupings with data specific to the neighbor
context context
Additional modules include: o ietf-bgp-rib - grouping for representing BGP RIB.
Additionally, modules include:
o ietf-bgp-types - common type and identity definitions for BGP, o ietf-bgp-types - common type and identity definitions for BGP,
including BGP policy including BGP policy
o ietf-bgp-policy - BGP-specific policy data definitions for use o ietf-bgp-policy - BGP-specific policy data definitions for use
with [I-D.ietf-rtgwg-policy-model] (described in more detail with [I-D.ietf-rtgwg-policy-model] (described in more detail
Section 2.2) Section 2.2)
7. Structure of the YANG modules 7. Structure of the YANG modules
The YANG model can be subdivided between the main module for base The YANG model can be subdivided between the main module for base
items, types, policy data, and the RIB module. items, types, policy data, and the RIB module.
7.1. Main module and submodules for base items 7.1. Main module and submodules for base items
<CODE BEGINS> file "ietf-bgp-common@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp@2019-03-21.yang"
module ietf-bgp {
yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-bgp";
prefix "bgp";
/*
* Import and Include
*/
import ietf-routing {
prefix "rt";
reference
"RFC 8349, A YANG Data Model for Routing Management
(NMDA Version)";
}
import ietf-routing-policy {
prefix rpol;
reference
"RFC ZZZZ, A YANG Data Model for Routing Policy Management";
}
import ietf-interfaces {
prefix if;
reference
"RFC 8343, A YANG Data Model for Interface Management.";
}
import ietf-bgp-types {
prefix bt;
reference
"RFC XXXX, BGP YANG Model for Service Provider Network.";
}
import ietf-bfd-types {
prefix bfd;
reference
"RFC BBBB, YANG Data Model for Bidirectional Forward Detection.";
}
include ietf-bgp-common;
include ietf-bgp-common-multiprotocol;
include ietf-bgp-common-structure;
include ietf-bgp-neighbor;
include ietf-bgp-global;
include ietf-bgp-peer-group;
include ietf-bgp-rib-types;
include ietf-bgp-rib;
include ietf-bgp-rib-ext;
include ietf-bgp-rib-shared-attributes;
include ietf-bgp-rib-attributes;
include ietf-bgp-rib-table-attributes;
include ietf-bgp-rib-tables;
organization
"IETF IDR Working Group";
contact
"WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com";
description
"This module describes a YANG model for BGP protocol
configuration. It is a limited subset of all of the configuration
parameters available in the variety of vendor implementations,
hence it is expected that it would be augmented with vendor-
specific configuration data as needed. Additional modules or
submodules to handle other aspects of BGP configuration,
including policy, VRFs, VPNs, and additional address families
are also expected.
This model supports the following BGP configuration level
hierarchy:
BGP
|
+-> [ global BGP configuration ]
+-> AFI / SAFI global
+-> peer group
+-> [ peer group config ]
+-> AFI / SAFI [ per-AFI overrides ]
+-> neighbor
+-> [ neighbor config ]
+-> [ optional pointer to peer-group ]
+-> AFI / SAFI [ per-AFI overrides ]";
revision "2019-03-21" {
description
"Initial Version";
reference
"RFC XXXX, BGP Model for Service Provider Network ";
}
/*
* Identity
*/
identity bgp {
base "rt:routing-protocol";
description
"BGP protocol.";
}
/*
* Containers
*/
augment "/rt:routing/rt:control-plane-protocols/" +
"rt:control-plane-protocol" {
when "derived-from-or-self(rt:type, 'bgp')" {
description
"This augmentation is valid for a routing protocol
instance of BGP.";
}
description
"BGP protocol augmentation of ietf-routing module
control-plane-protocol.";
container bgp {
description
"Top-level configuration for the BGP router";
container global {
presence "Enables global configuration of BGP";
description
"Global configuration for the BGP router";
uses bgp-global-base;
uses rpol:apply-policy-group;
}
container neighbors {
description
"Configuration for BGP neighbors";
uses bgp-neighbor-list;
}
container peer-groups {
description
"Configuration for BGP peer-groups";
uses bgp-peer-group-list;
}
container interfaces {
list interface {
key "name";
leaf name {
type if:interface-ref;
description
"Reference to the interface within the routing instance.";
}
container bfd {
if-feature bt:bfd;
uses bfd:client-cfg-parms;
description
"BFD client configuration.";
reference
"RFC BBBB - YANG Data Model for Bidirectional Forwarding
Detection.";
}
description
"List of interfaces within the routing instance.";
}
description
"Interface specific parameters.";
}
uses rib;
}
}
}
<CODE ENDS>
<CODE BEGINS> file "ietf-bgp-common@2019-03-21.yang"
submodule ietf-bgp-common { submodule ietf-bgp-common {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp { belongs-to ietf-bgp {
prefix "bgp"; prefix "bgp";
} }
import ietf-bgp-types { import ietf-bgp-types {
prefix bt; prefix bt;
} }
import ietf-inet-types { import ietf-inet-types {
skipping to change at page 24, line 32 skipping to change at page 19, line 44
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This sub-module contains common groupings that are common across "This sub-module contains common groupings that are common across
multiple contexts within the BGP module. That is to say that multiple contexts within the BGP module. That is to say that
they may be application to a subset of global, peer-group or they may be application to a subset of global, peer-group or
neighbor contexts."; neighbor contexts.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXXX, BGP Model for Service Provider Network."; "RFC XXXX, BGP Model for Service Provider Network.";
} }
grouping neighbor-group-timers-config { grouping neighbor-group-timers-config {
description description
"Config parameters related to timers associated with the BGP "Config parameters related to timers associated with the BGP
peer"; peer";
leaf connect-retry { leaf connect-retry {
type decimal64 { type decimal64 {
fraction-digits 2; fraction-digits 2;
} }
default 30; default 30;
skipping to change at page 27, line 50 skipping to change at page 23, line 15
type boolean; type boolean;
default false; default false;
description description
"Wait for peers to issue requests to open a BGP session, "Wait for peers to issue requests to open a BGP session,
rather than initiating sessions from the local router."; rather than initiating sessions from the local router.";
} }
leaf local-address { leaf local-address {
type union { type union {
type inet:ip-address; type inet:ip-address;
type string; type leafref {
path "../../../../interfaces/interface/name";
}
} }
//TODO: the string should be converted to a leafref type
//to point to an interface when YANG 1.1 is available with
//leafrefs in union types.
description description
"Set the local IP (either IPv4 or IPv6) address to use for "Set the local IP (either IPv4 or IPv6) address to use for
the session when sending BGP update messages. This may be the session when sending BGP update messages. This may be
expressed as either an IP address or reference to the name expressed as either an IP address or reference to the name
of an interface."; of an interface.";
} }
} }
grouping neighbor-group-error-handling-config { grouping neighbor-group-error-handling-config {
description description
skipping to change at page 32, line 49 skipping to change at page 28, line 13
leaf total-prefixes { leaf total-prefixes {
type uint32; type uint32;
config false; config false;
description description
"Total number of BGP prefixes received within the context"; "Total number of BGP prefixes received within the context";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-common-multiprotocol@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-common-multiprotocol@2019-03-21.yang"
submodule ietf-bgp-common-multiprotocol { submodule ietf-bgp-common-multiprotocol {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp { belongs-to ietf-bgp {
prefix "bgp"; prefix "bgp";
} }
import ietf-bgp-types { import ietf-bgp-types {
prefix bt; prefix bt;
} }
import ietf-routing-policy { import ietf-routing-policy {
skipping to change at page 33, line 35 skipping to change at page 28, line 46
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This sub-module contains groupings that are related to support "This sub-module contains groupings that are related to support
for multiple protocols in BGP. The groupings are common across for multiple protocols in BGP. The groupings are common across
multiple contexts."; multiple contexts.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXX, BGP Model for Service Provider Network."; "RFC XXX, BGP Model for Service Provider Network.";
} }
grouping mp-afi-safi-graceful-restart-config { grouping mp-afi-safi-graceful-restart-config {
description description
"BGP graceful restart parameters that apply on a per-AFI-SAFI "BGP graceful restart parameters that apply on a per-AFI-SAFI
basis"; basis";
leaf enabled { leaf enabled {
type boolean; type boolean;
default false; default false;
skipping to change at page 34, line 31 skipping to change at page 29, line 44
default false; default false;
description description
"This leaf indicates whether the IPv4 Unicast AFI,SAFI is "This leaf indicates whether the IPv4 Unicast AFI,SAFI is
enabled for the neighbour or group"; enabled for the neighbour or group";
} }
} }
grouping mp-all-afi-safi-list-contents { grouping mp-all-afi-safi-list-contents {
description description
"A common grouping used for contents of the list that is used "A common grouping used for contents of the list that is used
for AFI-SAFI entries"; for AFI-SAFI entries";
// import and export policy included for the afi/safi // import and export policy included for the afi/safi
uses rpol:apply-policy-group; uses rpol:apply-policy-group;
container ipv4-unicast { container ipv4-unicast {
when "../afi-safi-name = 'bt:IPV4_UNICAST'" { when "../afi-safi-name = 'bt:IPV4_UNICAST'" {
description description
"Include this container for IPv4 Unicast specific "Include this container for IPv4 Unicast specific
configuration"; configuration";
} }
skipping to change at page 40, line 4 skipping to change at page 35, line 16
// Config groupings for common groups // Config groupings for common groups
grouping mp-all-afi-safi-common-prefix-limit-config { grouping mp-all-afi-safi-common-prefix-limit-config {
description description
"Configuration parameters relating to prefix-limits for an "Configuration parameters relating to prefix-limits for an
AFI-SAFI"; AFI-SAFI";
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-common-structure@2019-02-25.yang"
<CODE BEGINS> file "ietf-bgp-common-structure@2019-03-21.yang"
submodule ietf-bgp-common-structure { submodule ietf-bgp-common-structure {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp { belongs-to ietf-bgp {
prefix "bgp"; prefix "bgp";
} }
import ietf-bgp-types { prefix bt; } import ietf-bgp-types { prefix bt; }
import ietf-routing-policy { prefix rpol; } import ietf-routing-policy { prefix rpol; }
include ietf-bgp-common-multiprotocol; include ietf-bgp-common-multiprotocol;
include ietf-bgp-common; include ietf-bgp-common;
skipping to change at page 40, line 33 skipping to change at page 35, line 46
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This sub-module contains groupings that are common across "This sub-module contains groupings that are common across
multiple BGP contexts and provide structure around other multiple BGP contexts and provide structure around other
primitive groupings."; primitive groupings.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXX, BGP Model for Service Provider Network."; "RFC XXX, BGP Model for Service Provider Network.";
} }
grouping structure-neighbor-group-logging-options { grouping structure-neighbor-group-logging-options {
description description
"Structural grouping used to include error handling "Structural grouping used to include error handling
configuration and state for both BGP neighbors and groups"; configuration and state for both BGP neighbors and groups";
skipping to change at page 43, line 40 skipping to change at page 39, line 6
} }
description description
"A reference to a routing policy which can be used to "A reference to a routing policy which can be used to
restrict the prefixes for which add-paths is enabled"; restrict the prefixes for which add-paths is enabled";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-peer-group@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-peer-group@2019-03-21.yang"
submodule ietf-bgp-peer-group { submodule ietf-bgp-peer-group {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp { belongs-to ietf-bgp {
prefix "bgp"; prefix "bgp";
} }
import ietf-routing-policy { import ietf-routing-policy {
prefix rpol; prefix rpol;
} }
// Include the common submodule // Include the common submodule
include ietf-bgp-common; include ietf-bgp-common;
include ietf-bgp-common-multiprotocol; include ietf-bgp-common-multiprotocol;
include ietf-bgp-common-structure; include ietf-bgp-common-structure;
// meta // meta
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
skipping to change at page 44, line 25 skipping to change at page 39, line 38
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This sub-module contains groupings that are specific to the "This sub-module contains groupings that are specific to the
peer-group context of the OpenConfig BGP module."; peer-group context of the OpenConfig BGP module.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXX, BGP Model for Service Provider Network."; "RFC XXX, BGP Model for Service Provider Network.";
} }
grouping bgp-peer-group-config { grouping bgp-peer-group-config {
description description
"Configuration parameters relating to a base BGP peer group "Configuration parameters relating to a base BGP peer group
that are not also applicable to any other context (e.g., that are not also applicable to any other context (e.g.,
skipping to change at page 46, line 38 skipping to change at page 42, line 4
description description
"The list of BGP peer groups"; "The list of BGP peer groups";
list peer-group { list peer-group {
key "peer-group-name"; key "peer-group-name";
description description
"List of BGP peer-groups configured on the local system - "List of BGP peer-groups configured on the local system -
uniquely identified by peer-group name"; uniquely identified by peer-group name";
uses bgp-peer-group-base; uses bgp-peer-group-base;
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-neighbor@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-neighbor@2019-03-21.yang"
submodule ietf-bgp-neighbor { submodule ietf-bgp-neighbor {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp { belongs-to ietf-bgp {
prefix "bgp"; prefix "bgp";
} }
import ietf-routing-policy { import ietf-routing-policy {
prefix rpol; prefix rpol;
} }
import ietf-bgp-types { import ietf-bgp-types {
skipping to change at page 47, line 38 skipping to change at page 43, line 5
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This sub-module contains groupings that are specific to the "This sub-module contains groupings that are specific to the
neighbor context of the OpenConfig BGP module."; neighbor context of the OpenConfig BGP module.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXX, BGP Model for Service Provider Network."; "RFC XXX, BGP Model for Service Provider Network.";
} }
grouping bgp-neighbor-use-multiple-paths { grouping bgp-neighbor-use-multiple-paths {
description description
"Multi-path configuration and state applicable to a BGP "Multi-path configuration and state applicable to a BGP
neighbor"; neighbor";
skipping to change at page 56, line 33 skipping to change at page 51, line 46
description description
"List of BGP neighbors configured on the local system, "List of BGP neighbors configured on the local system,
uniquely identified by peer IPv[46] address"; uniquely identified by peer IPv[46] address";
uses bgp-neighbor-base; uses bgp-neighbor-base;
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-global@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-global@2019-03-21.yang"
submodule ietf-bgp-global { submodule ietf-bgp-global {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp { belongs-to ietf-bgp {
prefix bgp; prefix bgp;
} }
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
} }
include ietf-bgp-common; include ietf-bgp-common;
skipping to change at page 57, line 18 skipping to change at page 52, line 32
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This sub-module contains groupings that are specific to the "This sub-module contains groupings that are specific to the
global context of the BGP module"; global context of the BGP module";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXX, BGP Model for Service Provider Network."; "RFC XXX, BGP Model for Service Provider Network.";
} }
grouping bgp-global-config { grouping bgp-global-config {
description description
"Global configuration options for the BGP router."; "Global configuration options for the BGP router.";
skipping to change at page 60, line 36 skipping to change at page 55, line 48
"Address family specific configuration"; "Address family specific configuration";
uses bgp-global-afi-safi-list; uses bgp-global-afi-safi-list;
} }
} }
} }
<CODE ENDS> <CODE ENDS>
7.2. BGP types 7.2. BGP types
<CODE BEGINS> file "ietf-bgp-types@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-types@2019-03-21.yang"
module ietf-bgp-types { module ietf-bgp-types {
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-types"; namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-types";
prefix "bt"; prefix "bt";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
skipping to change at page 61, line 16 skipping to change at page 56, line 29
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This module contains general data definitions for use in BGP "This module contains general data definitions for use in BGP
policy. It can be imported by modules that make use of BGP policy. It can be imported by modules that make use of BGP
attributes"; attributes";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXX, BGP Model for Service Provider Network."; "RFC XXX, BGP Model for Service Provider Network.";
} }
identity BGP_CAPABILITY { identity BGP_CAPABILITY {
description "Base identity for a BGP capability"; description "Base identity for a BGP capability";
} }
skipping to change at page 64, line 39 skipping to change at page 60, line 4
identity NOPEER { identity NOPEER {
base BGP_WELL_KNOWN_STD_COMMUNITY; base BGP_WELL_KNOWN_STD_COMMUNITY;
description description
"An autonomous system receiving NLRI tagged with this community "An autonomous system receiving NLRI tagged with this community
is advised not to re-advertise the NLRI to external bi-lateral is advised not to re-advertise the NLRI to external bi-lateral
peer autonomous systems. An AS may also filter received NLRI peer autonomous systems. An AS may also filter received NLRI
from bilateral peer sessions when they are tagged with this from bilateral peer sessions when they are tagged with this
community value"; community value";
reference "RFC3765"; reference "RFC3765";
} }
identity as-path-segment-type { identity as-path-segment-type {
description description
"Base AS Path Segment Type. In [BGP-4], the path segment type "Base AS Path Segment Type. In [BGP-4], the path segment type
is a 1-octet field with the following values defined."; is a 1-octet field with the following values defined.";
reference reference
"RFC 5065"; "RFC 5065, Autonomous System Configuration for BGP.";
} }
identity as-set { identity as-set {
base as-path-segment-type; base as-path-segment-type;
description description
"Unordered set of autonomous systems that a route in the UPDATE "Unordered set of autonomous systems that a route in the UPDATE
message has traversed."; message has traversed.";
reference reference
"RFC 5065"; "RFC 5065, Autonomous System Configuration for BGP.";
} }
identity as-sequence { identity as-sequence {
base as-path-segment-type; base as-path-segment-type;
description description
"Ordered set of autonomous systems that a route in the UPDATE "Ordered set of autonomous systems that a route in the UPDATE
message has traversed."; message has traversed.";
reference reference
"RFC 5065"; "RFC 5065, Autonomous System Configuration for BGP.";
} }
identity as-confed-sequence { identity as-confed-sequence {
base as-path-segment-type; base as-path-segment-type;
description description
"Ordered set of Member Autonomous Systems in the local "Ordered set of Member Autonomous Systems in the local
confederation that the UPDATE message has traversed."; confederation that the UPDATE message has traversed.";
reference reference
"RFC 5065"; "RFC 5065, Autonomous System Configuration for BGP.";
} }
identity as-confed-set { identity as-confed-set {
base as-path-segment-type; base as-path-segment-type;
description description
"Unordered set of Member Autonomous Systems in the local "Unordered set of Member Autonomous Systems in the local
confederation that the UPDATE message has traversed."; confederation that the UPDATE message has traversed.";
reference reference
"RFC 5065"; "RFC 5065, Autonomous System Configuration for BGP.";
}
/*
* Features.
*/
feature ttl-security {
description
"BGP Time To Live (TTL) security check support.";
reference
"RFC 5082, The Generalized TTL Security Mechanism (GTSM)";
}
feature bfd {
description
"Support for BFD detection of BGP neighbor reachability.";
reference
"RFC 5880, Bidirectional Forward Detection (BFD),
RFC 5881, Bidirectional Forward Detection for IPv4 and IPv6
(Single Hop).";
} }
typedef bgp-session-direction { typedef bgp-session-direction {
type enumeration { type enumeration {
enum INBOUND { enum INBOUND {
description description
"Refers to all NLRI received from the BGP peer"; "Refers to all NLRI received from the BGP peer";
} }
enum OUTBOUND { enum OUTBOUND {
description description
skipping to change at page 66, line 31 skipping to change at page 62, line 15
// per RFC 1997, 0x00000000 - 0x0000FFFF and 0xFFFF0000 - // per RFC 1997, 0x00000000 - 0x0000FFFF and 0xFFFF0000 -
// 0xFFFFFFFF are reserved // 0xFFFFFFFF are reserved
range "65536..4294901759"; // 0x00010000..0xFFFEFFFF range "65536..4294901759"; // 0x00010000..0xFFFEFFFF
} }
type string { type string {
pattern '([0-9]+:[0-9]+)'; pattern '([0-9]+:[0-9]+)';
} }
} }
description description
"Type definition for standard community attributes"; "Type definition for standard community attributes";
reference "RFC 1997 - BGP Communities Attribute"; reference
"RFC 1997 - BGP Communities Attribute";
} }
typedef bgp-ext-community-type { typedef bgp-ext-community-type {
// TODO: needs more work to make this more precise given the // TODO: needs more work to make this more precise given the
// variability of extended community attribute specifications // variability of extended community attribute specifications
// 8-octet value: // 8-octet value:
// <type> 2 octects // <type> 2 octects
// <value> 6 octets // <value> 6 octets
type union { type union {
skipping to change at page 67, line 49 skipping to change at page 63, line 33
pattern 'route\-origin:' + pattern 'route\-origin:' +
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' +
'25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' +
'2[0-4][0-9]|25[0-5]):' + '2[0-4][0-9]|25[0-5]):' +
'(6[0-5][0-5][0-3][0-5]|[1-5][0-9]{4}|' + '(6[0-5][0-5][0-3][0-5]|[1-5][0-9]{4}|' +
'[1-9][0-9]{1,4}|[0-9])'; '[1-9][0-9]{1,4}|[0-9])';
} }
} }
description description
"Type definition for extended community attributes"; "Type definition for extended community attributes";
reference "RFC 4360 - BGP Extended Communities Attribute"; reference
"RFC 4360 - BGP Extended Communities Attribute";
} }
typedef bgp-community-regexp-type { typedef bgp-community-regexp-type {
// TODO: needs more work to decide what format these regexps can // TODO: needs more work to decide what format these regexps can
// take. // take.
//type oc-types:std-regexp;
type string; type string;
description description
"Type definition for communities specified as regular "Type definition for communities specified as regular
expression patterns"; expression patterns";
} }
typedef bgp-origin-attr-type { typedef bgp-origin-attr-type {
type enumeration { type enumeration {
enum IGP { enum IGP {
description "Origin of the NLRI is internal"; description "Origin of the NLRI is internal";
} }
enum EGP { enum EGP {
description "Origin of the NLRI is EGP"; description "Origin of the NLRI is EGP";
} }
enum INCOMPLETE { enum INCOMPLETE {
description "Origin of the NLRI is neither IGP or EGP"; description "Origin of the NLRI is neither IGP or EGP";
} }
} }
description description
"Type definition for standard BGP origin attribute"; "Type definition for standard BGP origin attribute";
reference "RFC 4271 - A Border Gateway Protocol 4 (BGP-4), reference
Sec 4.3"; "RFC 4271 - A Border Gateway Protocol 4 (BGP-4), Sec 4.3";
} }
typedef peer-type { typedef peer-type {
type enumeration { type enumeration {
enum INTERNAL { enum INTERNAL {
description "internal (iBGP) peer"; description "internal (iBGP) peer";
} }
enum EXTERNAL { enum EXTERNAL {
description "external (eBGP) peer"; description "external (eBGP) peer";
} }
skipping to change at page 70, line 20 skipping to change at page 66, line 4
} }
enum BOTH { enum BOTH {
description "send both standard and extended communities"; description "send both standard and extended communities";
} }
enum NONE { enum NONE {
description "do not send any community attribute"; description "do not send any community attribute";
} }
} }
description description
"type describing variations of community attributes: "type describing variations of community attributes:
STANDARD: standard BGP community [rfc1997] STANDARD: standard BGP community [rfc1997]
EXTENDED: extended BGP community [rfc4360] EXTENDED: extended BGP community [rfc4360]
BOTH: both standard and extended community"; BOTH: both standard and extended community";
} }
} }
<CODE ENDS> <CODE ENDS>
7.3. BGP policy data 7.3. BGP policy data
<CODE BEGINS> file "ietf-bgp-policy@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-policy@2019-03-21.yang"
module ietf-bgp-policy { module ietf-bgp-policy {
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-policy"; namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-policy";
prefix "bp"; prefix "bp";
// import some basic types // import some basic types
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-routing-policy { import ietf-routing-policy {
skipping to change at page 71, line 19 skipping to change at page 66, line 51
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This module contains data definitions for BGP routing policy. "This module contains data definitions for BGP routing policy.
It augments the base routing-policy module with BGP-specific It augments the base routing-policy module with BGP-specific
options for conditions and actions."; options for conditions and actions.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXX, BGP Model for Service Provider Network."; "RFC XXX, BGP Model for Service Provider Network.";
} }
// typedef statements // typedef statements
typedef bgp-set-community-option-type { typedef bgp-set-community-option-type {
type enumeration { type enumeration {
skipping to change at page 81, line 31 skipping to change at page 77, line 16
} }
// rpc statements // rpc statements
// notification statements // notification statements
} }
<CODE ENDS> <CODE ENDS>
7.4. RIB modules 7.4. RIB modules
<CODE BEGINS> file "ietf-bgp-rib@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-rib@2019-03-21.yang"
module ietf-bgp-rib { submodule ietf-bgp-rib {
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-rib"; belongs-to ietf-bgp {
prefix "br"; prefix "br";
}
/* /*
* Import and Include * Import and Include
*/ */
import ietf-routing {
prefix "rt";
reference
"RFC 8349: YANG Route Management.";
}
import ietf-bgp-types { import ietf-bgp-types {
prefix "bt"; prefix "bt";
reference reference
"RFC XXXX: BGP YANG Model for Service Provider Networks."; "RFC XXXX: BGP YANG Model for Service Provider Networks.";
} }
include ietf-bgp-rib-types;
include ietf-bgp-rib-tables; include ietf-bgp-rib-tables;
include ietf-bgp-rib-shared-attributes; include ietf-bgp-rib-shared-attributes;
// groupings of attributes in three categories: // groupings of attributes in three categories:
// - shared across multiple routes // - shared across multiple routes
// - common to LOC-RIB and Adj-RIB, but not shared across routes // - common to LOC-RIB and Adj-RIB, but not shared across routes
// - specific to LOC-RIB or Adj-RIB // - specific to LOC-RIB or Adj-RIB
include ietf-bgp-rib-attributes; include ietf-bgp-rib-attributes;
// groupings of annotations for each route or table // groupings of annotations for each route or table
skipping to change at page 82, line 28 skipping to change at page 78, line 8
contact contact
"WG Web: <http://tools.ietf.org/wg/idr> "WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"Defines a data model for representing BGP routing table (RIB) "Defines a submodule for representing BGP routing table (RIB)
contents. The model supports 5 logical RIBs per address family: contents. The submodule supports 5 logical RIBs per address
family:
loc-rib: This is the main BGP routing table for the local routing loc-rib: This is the main BGP routing table for the local routing
instance, containing best-path selections for each prefix. The instance, containing best-path selections for each prefix. The
loc-rib table may contain multiple routes for a given prefix, loc-rib table may contain multiple routes for a given prefix,
with an attribute to indicate which was selected as the best with an attribute to indicate which was selected as the best
path. Note that multiple paths may be used or advertised even if path. Note that multiple paths may be used or advertised even if
only one path is marked as best, e.g., when using BGP only one path is marked as best, e.g., when using BGP
add-paths. An implementation may choose to mark multiple add-paths. An implementation may choose to mark multiple
paths in the RIB as best path by setting the flag to true for paths in the RIB as best path by setting the flag to true for
multiple entries. multiple entries.
skipping to change at page 83, line 11 skipping to change at page 78, line 40
applied. applied.
adj-rib-out-pre: This is a per-neighbor table containing routes adj-rib-out-pre: This is a per-neighbor table containing routes
eligible for sending (advertising) to the neighbor before output eligible for sending (advertising) to the neighbor before output
policy rules have been applied. policy rules have been applied.
adj-rib-out-post: This is a per-neighbor table containing routes adj-rib-out-post: This is a per-neighbor table containing routes
eligible for sending (advertising) to the neighbor after output eligible for sending (advertising) to the neighbor after output
policy rules have been applied."; policy rules have been applied.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXXX, BGP YANG Model for Service Provider Network."; "RFC XXXX, BGP YANG Model for Service Provider Network.";
} }
augment "/rt:routing/rt:ribs" { grouping rib {
when "derived-from-or-self(../rt:control-plane-protocols/" +
"rt:control-plane-protocol/rt:type, 'bgp')" {
description
"This augmentation is only valid for routes whose control
plane protocol is BGP.";
}
description description
"Support for RIBS."; "Grouping for rib.";
container rib { container rib {
config false; config false;
description description
"Top level container for BGP RIB"; "Top level container for BGP RIB";
uses attribute-sets; uses attribute-sets;
uses community-sets; uses community-sets;
uses ext-community-sets; uses ext-community-sets;
skipping to change at page 84, line 34 skipping to change at page 80, line 8
} }
description description
"Routing tables for IPv6 unicast -- active when the "Routing tables for IPv6 unicast -- active when the
afi-safi name is ipv6-unicast"; afi-safi name is ipv6-unicast";
uses ipv6-loc-rib; uses ipv6-loc-rib;
uses ipv6-adj-rib; uses ipv6-adj-rib;
} }
container ipv4-srte-policy { container ipv4-srte-policy {
when "../afi-safi-name = 'bt:srte-policy-ipv4'" { when "../afi-safi-name = 'srte-policy-ipv4'" {
description description
"Include this container only for the IPv4 AFI, SR-TE "Include this container only for the IPv4 AFI, SR-TE
Policy SAFI."; Policy SAFI.";
} }
description description
"Routing tables for the IPv4 Unicast, SR-TE Policy "Routing tables for the IPv4 Unicast, SR-TE Policy
SAFI."; SAFI.";
uses ipvX-srte-policy-locrib; uses ipvX-srte-policy-locrib;
uses ipvX-srte-policy-adjrib; uses ipvX-srte-policy-adjrib;
} }
container ipv6-srte-policy { container ipv6-srte-policy {
when "../afi-safi-name = 'bt:srte-policy-ipv6'" { when "../afi-safi-name = 'srte-policy-ipv6'" {
description description
"Include this container only for the IPv6 AFI, "Include this container only for the IPv6 AFI,
SR-TE Policy SAFI."; SR-TE Policy SAFI.";
} }
description description
"Routing tables for the IPv6 Unicast, SR-TE Policy "Routing tables for the IPv6 Unicast, SR-TE Policy
SAFI."; SAFI.";
uses ipvX-srte-policy-locrib; uses ipvX-srte-policy-locrib;
uses ipvX-srte-policy-adjrib; uses ipvX-srte-policy-adjrib;
} }
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-rib-ext@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-rib-ext@2019-03-21.yang"
module ietf-bgp-rib-ext { submodule ietf-bgp-rib-ext {
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-rib-ext"; belongs-to ietf-bgp {
prefix "bre";
prefix "bre";
import ietf-routing {
prefix "rt";
reference
"RFC 8349: YANG Routing Management.";
}
import ietf-bgp-rib {
prefix bgprib;
}
import ietf-bgp-rib-types {
prefix bgpribt;
} }
include ietf-bgp-rib-types;
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/idr> "WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"Defines additional data nodes for the OpenConfig BGP RIB model. "Defines additional data nodes for the OpenConfig BGP RIB model.
These items reflect extensions that are desirable features but These items reflect extensions that are desirable features but
are not currently supported in a majority of BGP are not currently supported in a majority of BGP
implementations."; implementations.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Revision."; "Initial Revision.";
reference reference
"RFC XXXX: BGP YANG Model for Service Providers."; "RFC XXXX: BGP YANG Model for Service Providers.";
} }
grouping rib-ext-route-annotations { grouping rib-ext-route-annotations {
description description
"Extended annotations for routes in the routing tables"; "Extended annotations for routes in the routing tables";
leaf reject-reason { leaf reject-reason {
type union { type union {
type identityref { type identityref {
base bgpribt:bgp-not-selected-bestpath; base bgp-not-selected-bestpath;
} }
type identityref { type identityref {
base bgpribt:bgp-not-selected-policy; base bgp-not-selected-policy;
} }
} }
description description
"Indicates the reason the route is not used, either due to "Indicates the reason the route is not used, either due to
policy filtering or bestpath selection"; policy filtering or bestpath selection";
} }
} }
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv4-unicast/bgprib:loc-rib/" +
"bgprib:routes/bgprib:route" {
description
"Add extended annotations to the Loc-RIB for IPv4";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv6-unicast/bgprib:loc-rib/" +
"bgprib:routes/bgprib:route" {
description
"Add extended annotations to the Loc-RIB for IPv6";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv4-unicast/" +
"bgprib:neighbors/bgprib:neighbor/" +
"bgprib:adj-rib-in-pre/bgprib:routes/bgprib:route" {
description
"Add extended annotations to Adj-RIB for IPv4";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv4-unicast/" +
"bgprib:neighbors/bgprib:neighbor/" +
"bgprib:adj-rib-in-post/bgprib:routes/bgprib:route" {
description
"Add extended annotations to Adj-RIB for IPv4";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv4-unicast/" +
"bgprib:neighbors/bgprib:neighbor/" +
"bgprib:adj-rib-out-pre/bgprib:routes/bgprib:route" {
description
"Add extended annotations to Adj-RIB for IPv4";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv4-unicast/" +
"bgprib:neighbors/bgprib:neighbor/" +
"bgprib:adj-rib-out-post/bgprib:routes/bgprib:route" {
description
"Add extended annotations to Adj-RIB for IPv4";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv6-unicast/" +
"bgprib:neighbors/bgprib:neighbor/" +
"bgprib:adj-rib-in-pre/bgprib:routes/bgprib:route" {
description
"Add extended annotations to Adj-RIB for IPv6";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv6-unicast/" +
"bgprib:neighbors/bgprib:neighbor/" +
"bgprib:adj-rib-in-post/bgprib:routes/bgprib:route" {
description
"Add extended annotations to Adj-RIB for IPv6";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv6-unicast/" +
"bgprib:neighbors/bgprib:neighbor/" +
"bgprib:adj-rib-out-pre/bgprib:routes/bgprib:route" {
description
"Add extended annotations to Adj-RIB for IPv6";
uses rib-ext-route-annotations;
}
augment "/rt:routing/rt:ribs/bgprib:rib/bgprib:afi-safis/" +
"bgprib:afi-safi/bgprib:ipv6-unicast/" +
"bgprib:neighbors/bgprib:neighbor/" +
"bgprib:adj-rib-out-post/bgprib:routes/bgprib:route" {
description
"Add extended annotations to Adj-RIB for IPv6";
uses rib-ext-route-annotations;
}
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-rib-types@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-rib-types@2019-03-21.yang"
module ietf-bgp-rib-types { submodule ietf-bgp-rib-types {
yang-version "1.1"; yang-version "1.1";
namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-rib-types"; belongs-to ietf-bgp {
prefix "brt"; prefix "br";
}
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/idr> "WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"Defines identity and type definitions associated with "Defines identity and type definitions associated with
the BGP RIB modules"; the BGP RIB modules";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXX, BGP Model for Service Provider Network."; "RFC XXXX, BGP Model for Service Provider Network.";
} }
identity invalid-route-reason { identity invalid-route-reason {
description description
"Base identity for reason code for routes that are rejected as "Base identity for reason code for routes that are rejected as
invalid. Some derived entities are based on BMP v3"; invalid. Some derived entities are based on BMP v3";
reference reference
"BGP Monitoring Protocol (draft-ietf-grow-bmp-07)"; "BGP Monitoring Protocol (draft-ietf-grow-bmp-07)";
} }
skipping to change at page 94, line 11 skipping to change at page 87, line 24
identity srte-segment-list-segment { identity srte-segment-list-segment {
base srte-segment-list-subtlv; base srte-segment-list-subtlv;
description description
"An individual element within the SR-TE Policy Segment "An individual element within the SR-TE Policy Segment
List."; List.";
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-rib-attributes@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-rib-attributes@2019-03-21.yang"
submodule ietf-bgp-rib-attributes { submodule ietf-bgp-rib-attributes {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp-rib { belongs-to ietf-bgp {
prefix "br"; prefix "br";
} }
// import some basic types // import some basic types
import ietf-bgp-types { import ietf-bgp-types {
prefix bgpt; prefix bgpt;
} }
import ietf-bgp-rib-types {
prefix bgprt;
}
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
include ietf-bgp-rib-types;
// meta // meta
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/idr> "WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This submodule contains common data definitions for BGP "This submodule contains common data definitions for BGP
attributes for use in BGP RIB tables."; attributes for use in BGP RIB tables.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXXX: BGP YANG Model for Service Provider Network"; "RFC XXXX: BGP YANG Model for Service Provider Network";
} }
grouping bgp-as-path-attr { grouping bgp-as-path-attr {
description description
"Data for representing BGP AS-PATH attribute"; "Data for representing BGP AS-PATH attribute";
leaf type { leaf type {
type identityref { type identityref {
skipping to change at page 103, line 16 skipping to change at page 96, line 28
list tunnel { list tunnel {
key "type"; key "type";
description description
"List of the tunnels that are specified within the "List of the tunnels that are specified within the
attribute. Keyed on the type of tunnel that the attribute. Keyed on the type of tunnel that the
TLV describes."; TLV describes.";
leaf type { leaf type {
type identityref { type identityref {
base "bgprt:tunnel-encapsulation-type"; base "tunnel-encapsulation-type";
} }
description description
"Type of the tunnel described within the tunnel "Type of the tunnel described within the tunnel
encapsulation attribute."; encapsulation attribute.";
} }
container subtlvs { container subtlvs {
description description
"Surrounding container for the list of sub-TLVs within "Surrounding container for the list of sub-TLVs within
the tunnel encapsulation attribute."; the tunnel encapsulation attribute.";
list subtlv { list subtlv {
key "type"; key "type";
description description
"List of the subTLVs that are specified within the "List of the subTLVs that are specified within the
TLV instance inside the tunnel encapsulation TLV instance inside the tunnel encapsulation
attribute."; attribute.";
leaf type { leaf type {
type identityref { type identityref {
base "bgprt:tunnel-encapsulation-subtlv-type"; base "tunnel-encapsulation-subtlv-type";
} }
description description
"Type of the sub-TLV within the tunnel encapsulation "Type of the sub-TLV within the tunnel encapsulation
attribute"; attribute";
} }
leaf-list colors { leaf-list colors {
when "../type = 'bgprt:tunnel-color'" { when "../type = 'tunnel-color'" {
description description
"Only allow list of colors to be specified when "Only allow list of colors to be specified when
the sub-TLV specifies colors associated with the the sub-TLV specifies colors associated with the
tunnel encapsulation attribute."; tunnel encapsulation attribute.";
} }
type uint32; type uint32;
description description
"The colors associated with the tunnel encapsulation "The colors associated with the tunnel encapsulation
attribute, as described by RFC5512."; attribute, as described by RFC5512.";
} }
leaf preference { leaf preference {
when "../type = 'bgprt:srte-preference'" { when "../type = 'srte-preference'" {
description description
"Only allow the preference to be specified when the "Only allow the preference to be specified when the
sub-TLV specifies the preference associated with sub-TLV specifies the preference associated with
the tunnel encapsulation attribute."; the tunnel encapsulation attribute.";
} }
type uint32; type uint32;
default 100; default 100;
description description
"The preference of the SR-TE policy described by the "The preference of the SR-TE policy described by the
tunnel encapsulation attribute. If unspecified, the tunnel encapsulation attribute. If unspecified, the
preference defaults to 100."; preference defaults to 100.";
} }
leaf binding-sid { leaf binding-sid {
when "../type = 'bgprt:srte-binding-sid'" { when "../type = 'srte-binding-sid'" {
description description
"Only allow the binding SID to be specified when the "Only allow the binding SID to be specified when the
sub-TLV is specified to be the of the relevant sub-TLV is specified to be the of the relevant
type."; type.";
} }
// type sr:sr-sid-type; // type sr:sr-sid-type;
// defining it as string, till we figure what this // defining it as string, till we figure what this
// should be. // should be.
type string; type string;
description description
"Binding SID associated with the SR-TE policy"; "Binding SID associated with the SR-TE policy";
} }
container remote-endpoints { container remote-endpoints {
when "../type = 'bgprt:tunnel-remote-endpoint'" { when "../type = 'tunnel-remote-endpoint'" {
description description
"Only allow the remote endpoint to be specified "Only allow the remote endpoint to be specified
when the subTLV is specified to describe remote when the subTLV is specified to describe remote
endpoints."; endpoints.";
} }
description description
"The remote endpoints associated with the tunnel "The remote endpoints associated with the tunnel
described by the attribute."; described by the attribute.";
skipping to change at page 105, line 26 skipping to change at page 98, line 38
leaf endpoint { leaf endpoint {
type inet:ip-address; type inet:ip-address;
description description
"IP address of the remote endpoint."; "IP address of the remote endpoint.";
} }
} }
} }
container segment-lists { container segment-lists {
when "../type = 'bgprt:srte-segment-list'" { when "../type = 'srte-segment-list'" {
description description
"Only allow the segment lists to be specified when "Only allow the segment lists to be specified when
the sub-TLV is of the relevant type."; the sub-TLV is of the relevant type.";
} }
description description
"Surrounding container for the list of segment lists "Surrounding container for the list of segment lists
that are associated with a SR-TE Policy tunnel."; that are associated with a SR-TE Policy tunnel.";
list segment-list { list segment-list {
skipping to change at page 111, line 4 skipping to change at page 104, line 18
} }
} }
} }
} }
} }
} }
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-rib-shared-attributes@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-rib-shared-attributes@2019-03-21.yang"
submodule ietf-bgp-rib-shared-attributes { submodule ietf-bgp-rib-shared-attributes {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp-rib { belongs-to ietf-bgp {
prefix "br"; prefix "br";
} }
// import some basic types // import some basic types
include ietf-bgp-rib-attributes; include ietf-bgp-rib-attributes;
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
skipping to change at page 111, line 33 skipping to change at page 104, line 46
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This submodule contains structural data definitions for "This submodule contains structural data definitions for
attribute sets shared across routes."; attribute sets shared across routes.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXXX: BGP YANG Model for Service Provider Network."; "RFC XXXX: BGP YANG Model for Service Provider Network.";
} }
grouping attribute-sets { grouping attribute-sets {
description description
"Top level grouping for list of common attribute sets"; "Top level grouping for list of common attribute sets";
container attr-sets { container attr-sets {
description description
"Enclosing container for the list of path attribute sets"; "Enclosing container for the list of path attribute sets";
list attr-set { list attr-set {
key "index"; key "index";
skipping to change at page 113, line 40 skipping to change at page 107, line 4
"System generated index for each attribute set. The "System generated index for each attribute set. The
index is used to reference an attribute set from a index is used to reference an attribute set from a
specific path. Multiple paths may reference the same specific path. Multiple paths may reference the same
attribute set."; attribute set.";
} }
uses bgp-extended-community-attr-state; uses bgp-extended-community-attr-state;
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-rib-table-attributes@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-rib-table-attributes@2019-03-21.yang"
submodule ietf-bgp-rib-table-attributes { submodule ietf-bgp-rib-table-attributes {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp-rib { belongs-to ietf-bgp {
prefix "br"; prefix "br";
} }
// import some basic types // import some basic types
import ietf-yang-types { prefix types; } import ietf-yang-types {
import ietf-bgp-rib-types { prefix bgpribt; } prefix types;
reference
"RFC 6991, Common YANG Data Types.";
}
include ietf-bgp-rib-types;
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/idr> "WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This submodule contains common data definitions for data "This submodule contains common data definitions for data
related to a RIB entry, or RIB table."; related to a RIB entry, or RIB table.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial version."; "Initial version.";
reference reference
"RFC XXXX: BGP YANG Model for Service Provider Network."; "RFC XXXX: BGP YANG Model for Service Provider Network.";
} }
grouping bgp-common-route-annotations-state { grouping bgp-common-route-annotations-state {
description description
"Data definitions for flags and other information attached "Data definitions for flags and other information attached
to routes in both LOC-RIB and Adj-RIB"; to routes in both LOC-RIB and Adj-RIB";
leaf last-modified { leaf last-modified {
type types:timeticks; type types:timeticks;
description description
"Timestamp when this path was last modified. "Timestamp when this path was last modified.
The value is the timestamp in seconds relative to The value is the timestamp in seconds relative to
the Unix Epoch (Jan 1, 1970 00:00:00 UTC)."; the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
} }
leaf valid-route { leaf valid-route {
type boolean; type boolean;
description description
"Indicates that the route is considered valid by the "Indicates that the route is considered valid by the
local router"; local router";
} }
leaf invalid-reason { leaf invalid-reason {
type identityref { type identityref {
base bgpribt:invalid-route-reason; base invalid-route-reason;
} }
description description
"If the route is rejected as invalid, this indicates the "If the route is rejected as invalid, this indicates the
reason."; reason.";
} }
} }
grouping bgp-loc-rib-route-annotations-state { grouping bgp-loc-rib-route-annotations-state {
description description
"Data definitions for information attached to routes in the "Data definitions for information attached to routes in the
LOC-RIB"; LOC-RIB";
// placeholder for route metadata specific to the LOC-RIB
// placeholder for route metadata specific to the LOC-RIB
} }
grouping bgp-adj-rib-in-post-route-annotations-state { grouping bgp-adj-rib-in-post-route-annotations-state {
description description
"Data definitions for information attached to routes in the "Data definitions for information attached to routes in the
Adj-RIB-in post-policy table"; Adj-RIB-in post-policy table";
leaf best-path { leaf best-path {
type boolean; type boolean;
description description
"Current path was selected as the best path."; "Current path was selected as the best path.";
} }
} }
grouping bgp-common-table-attrs-state { grouping bgp-common-table-attrs-state {
description description
"Common attributes attached to all routing tables"; "Common attributes attached to all routing tables";
// placeholder for metadata associated with all tables // placeholder for metadata associated with all tables
} }
grouping bgp-common-table-attrs-top { grouping bgp-common-table-attrs-top {
// no enclosing container as this data will fit under an // no enclosing container as this data will fit under an
// existing LOC-RIB container // existing LOC-RIB container
uses bgp-common-table-attrs-state; uses bgp-common-table-attrs-state;
description description
"Operational state data for data related to the entire "Operational state data for data related to the entire
LOC-RIB"; LOC-RIB";
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-rib-tables@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-rib-tables@2019-03-21.yang"
submodule ietf-bgp-rib-tables { submodule ietf-bgp-rib-tables {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp-rib { belongs-to ietf-bgp {
prefix "br"; prefix "br";
} }
// import some basic types // import some basic types
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
reference reference
"RFC 8022: A YANG Data Model for Routing Management"; "RFC 8022: A YANG Data Model for Routing Management";
} }
include ietf-bgp-rib-ext;
include ietf-bgp-rib-attributes; include ietf-bgp-rib-attributes;
include ietf-bgp-rib-shared-attributes; include ietf-bgp-rib-shared-attributes;
include ietf-bgp-rib-table-attributes; include ietf-bgp-rib-table-attributes;
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/idr> "WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
skipping to change at page 116, line 34 skipping to change at page 110, line 4
include ietf-bgp-rib-attributes; include ietf-bgp-rib-attributes;
include ietf-bgp-rib-shared-attributes; include ietf-bgp-rib-shared-attributes;
include ietf-bgp-rib-table-attributes; include ietf-bgp-rib-table-attributes;
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/idr> "WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Editor: Mahesh Jethanandani (mjethanandani@gmail.com) Editor: Mahesh Jethanandani (mjethanandani@gmail.com)
Authors: Keyur Patel, Authors: Keyur Patel,
Mahesh Jethanandani, Mahesh Jethanandani,
Susan Hares"; Susan Hares";
description description
"This submodule contains structural data definitions for "This submodule contains structural data definitions for
BGP routing tables."; BGP routing tables.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial Version"; "Initial Version";
reference reference
"RFC XXXX, BGP YANG Model for Service Provider Network."; "RFC XXXX, BGP YANG Model for Service Provider Network.";
} }
grouping bgp-adj-rib-common-attr-refs { grouping bgp-adj-rib-common-attr-refs {
description description
"Definitions of common references to attribute sets for "Definitions of common references to attribute sets for
multiple AFI-SAFIs for Adj-RIB tables"; multiple AFI-SAFIs for Adj-RIB tables";
leaf attr-index { leaf attr-index {
type leafref { type leafref {
path "../../../../../../../../../attr-sets/attr-set/" + path "../../../../../../../../../attr-sets/attr-set/" +
"index"; "index";
} }
skipping to change at page 120, line 4 skipping to change at page 113, line 21
description description
"The IPv4 prefix corresponding to the route"; "The IPv4 prefix corresponding to the route";
} }
uses bgp-loc-rib-common-keys; uses bgp-loc-rib-common-keys;
uses bgp-loc-rib-common-attr-refs; uses bgp-loc-rib-common-attr-refs;
uses bgp-loc-rib-attr-state; uses bgp-loc-rib-attr-state;
uses bgp-common-route-annotations-state; uses bgp-common-route-annotations-state;
uses bgp-loc-rib-route-annotations-state; uses bgp-loc-rib-route-annotations-state;
uses bgp-unknown-attr-top; uses bgp-unknown-attr-top;
uses rib-ext-route-annotations;
} }
} }
} }
} }
grouping ipv6-loc-rib { grouping ipv6-loc-rib {
description description
"Top-level grouping for IPv6 routing tables"; "Top-level grouping for IPv6 routing tables";
container loc-rib { container loc-rib {
skipping to change at page 120, line 50 skipping to change at page 114, line 19
description description
"The IPv6 prefix corresponding to the route"; "The IPv6 prefix corresponding to the route";
} }
uses bgp-loc-rib-common-keys; uses bgp-loc-rib-common-keys;
uses bgp-loc-rib-common-attr-refs; uses bgp-loc-rib-common-attr-refs;
uses bgp-loc-rib-attr-state; uses bgp-loc-rib-attr-state;
uses bgp-common-route-annotations-state; uses bgp-common-route-annotations-state;
uses bgp-loc-rib-route-annotations-state; uses bgp-loc-rib-route-annotations-state;
uses bgp-unknown-attr-top; uses bgp-unknown-attr-top;
uses rib-ext-route-annotations;
} }
} }
} }
} }
grouping ipv4-adj-rib-common { grouping ipv4-adj-rib-common {
description description
"Common structural grouping for each IPv4 adj-RIB table"; "Common structural grouping for each IPv4 adj-RIB table";
uses bgp-common-table-attrs-top; uses bgp-common-table-attrs-top;
container routes { container routes {
config false; config false;
skipping to change at page 121, line 33 skipping to change at page 115, line 4
"List of routes in the table, keyed by a combination of "List of routes in the table, keyed by a combination of
the route prefix and path-id to distinguish multiple the route prefix and path-id to distinguish multiple
routes received from a neighbor for the same prefix, routes received from a neighbor for the same prefix,
e.g., when BGP add-paths is enabled."; e.g., when BGP add-paths is enabled.";
leaf prefix { leaf prefix {
type inet:ipv4-prefix; type inet:ipv4-prefix;
description description
"Prefix for the route"; "Prefix for the route";
} }
uses bgp-adj-rib-attr-state; uses bgp-adj-rib-attr-state;
uses bgp-adj-rib-common-attr-refs; uses bgp-adj-rib-common-attr-refs;
uses bgp-common-route-annotations-state; uses bgp-common-route-annotations-state;
uses bgp-unknown-attr-top; uses bgp-unknown-attr-top;
uses rib-ext-route-annotations;
} }
} }
} }
grouping ipv4-adj-rib-in-post { grouping ipv4-adj-rib-in-post {
description description
"Common structural grouping for the IPv4 adj-rib-in "Common structural grouping for the IPv4 adj-rib-in
post-policy table"; post-policy table";
uses bgp-common-table-attrs-top; uses bgp-common-table-attrs-top;
skipping to change at page 122, line 27 skipping to change at page 115, line 46
type inet:ipv4-prefix; type inet:ipv4-prefix;
description description
"Prefix for the route"; "Prefix for the route";
} }
uses bgp-adj-rib-attr-state; uses bgp-adj-rib-attr-state;
uses bgp-adj-rib-common-attr-refs; uses bgp-adj-rib-common-attr-refs;
uses bgp-common-route-annotations-state; uses bgp-common-route-annotations-state;
uses bgp-adj-rib-in-post-route-annotations-state; uses bgp-adj-rib-in-post-route-annotations-state;
uses bgp-unknown-attr-top; uses bgp-unknown-attr-top;
uses rib-ext-route-annotations;
} }
} }
} }
grouping ipv4-adj-rib { grouping ipv4-adj-rib {
description description
"Top-level grouping for Adj-RIB table"; "Top-level grouping for Adj-RIB table";
container neighbors { container neighbors {
config false; config false;
description description
"Enclosing container for neighbor list"; "Enclosing container for neighbor list";
list neighbor { list neighbor {
skipping to change at page 124, line 26 skipping to change at page 117, line 48
leaf prefix { leaf prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"Prefix for the route"; "Prefix for the route";
} }
uses bgp-adj-rib-attr-state; uses bgp-adj-rib-attr-state;
uses bgp-adj-rib-common-attr-refs; uses bgp-adj-rib-common-attr-refs;
uses bgp-common-route-annotations-state; uses bgp-common-route-annotations-state;
uses bgp-unknown-attr-top; uses bgp-unknown-attr-top;
uses rib-ext-route-annotations;
} }
} }
} }
grouping ipv6-adj-rib-in-post { grouping ipv6-adj-rib-in-post {
description description
"Common structural grouping for the IPv6 adj-rib-in "Common structural grouping for the IPv6 adj-rib-in
post-policy table"; post-policy table";
uses bgp-common-table-attrs-state; uses bgp-common-table-attrs-state;
container routes { container routes {
config false; config false;
description description
skipping to change at page 125, line 12 skipping to change at page 118, line 34
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"Prefix for the route"; "Prefix for the route";
} }
uses bgp-adj-rib-attr-state; uses bgp-adj-rib-attr-state;
uses bgp-adj-rib-common-attr-refs; uses bgp-adj-rib-common-attr-refs;
uses bgp-common-route-annotations-state; uses bgp-common-route-annotations-state;
uses bgp-adj-rib-in-post-route-annotations-state; uses bgp-adj-rib-in-post-route-annotations-state;
uses bgp-unknown-attr-top; uses bgp-unknown-attr-top;
uses rib-ext-route-annotations;
} }
} }
} }
grouping ipv6-adj-rib { grouping ipv6-adj-rib {
description description
"Top-level grouping for Adj-RIB table"; "Top-level grouping for Adj-RIB table";
container neighbors { container neighbors {
config false; config false;
skipping to change at page 130, line 24 skipping to change at page 123, line 47
uses bgp-loc-rib-common-attr-refs; uses bgp-loc-rib-common-attr-refs;
uses bgp-common-route-annotations-state; uses bgp-common-route-annotations-state;
uses bgp-unknown-attr-top; uses bgp-unknown-attr-top;
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-bgp-rib-table-attributes@2019-02-25.yang" <CODE BEGINS> file "ietf-bgp-rib-table-attributes@2019-03-21.yang"
submodule ietf-bgp-rib-table-attributes { submodule ietf-bgp-rib-table-attributes {
yang-version "1.1"; yang-version "1.1";
belongs-to ietf-bgp-rib { belongs-to ietf-bgp {
prefix "br"; prefix "br";
} }
// import some basic types // import some basic types
import ietf-yang-types { prefix types; } import ietf-yang-types {
import ietf-bgp-rib-types { prefix bgpribt; } prefix types;
reference
"RFC 6991, Common YANG Data Types.";
}
include ietf-bgp-rib-types;
organization organization
"IETF IDR Working Group"; "IETF IDR Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/idr> "WG Web: <http://tools.ietf.org/wg/idr>
WG List: <idr@ietf.org> WG List: <idr@ietf.org>
Authors: Mahesh Jethanandani (mjethanandani at gmail.com), Authors: Mahesh Jethanandani (mjethanandani at gmail.com),
Keyur Patel (keyur at arrcus.com), Keyur Patel (keyur at arrcus.com),
Susan Hares (shares at ndzh.com"; Susan Hares (shares at ndzh.com";
description description
"This submodule contains common data definitions for data "This submodule contains common data definitions for data
related to a RIB entry, or RIB table."; related to a RIB entry, or RIB table.";
revision "2019-02-25" { revision "2019-03-21" {
description description
"Initial version."; "Initial version.";
reference reference
"RFC XXXX: BGP YANG Model for Service Provider Network."; "RFC XXXX: BGP YANG Model for Service Provider Network.";
} }
grouping bgp-common-route-annotations-state { grouping bgp-common-route-annotations-state {
description description
"Data definitions for flags and other information attached "Data definitions for flags and other information attached
to routes in both LOC-RIB and Adj-RIB"; to routes in both LOC-RIB and Adj-RIB";
leaf last-modified { leaf last-modified {
type types:timeticks; type types:timeticks;
description description
"Timestamp when this path was last modified. "Timestamp when this path was last modified.
The value is the timestamp in seconds relative to The value is the timestamp in seconds relative to
the Unix Epoch (Jan 1, 1970 00:00:00 UTC)."; the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
} }
leaf valid-route { leaf valid-route {
type boolean; type boolean;
description description
"Indicates that the route is considered valid by the "Indicates that the route is considered valid by the
local router"; local router";
} }
leaf invalid-reason { leaf invalid-reason {
type identityref { type identityref {
base bgpribt:invalid-route-reason; base invalid-route-reason;
} }
description description
"If the route is rejected as invalid, this indicates the "If the route is rejected as invalid, this indicates the
reason."; reason.";
} }
} }
grouping bgp-loc-rib-route-annotations-state { grouping bgp-loc-rib-route-annotations-state {
description description
"Data definitions for information attached to routes in the "Data definitions for information attached to routes in the
LOC-RIB"; LOC-RIB";
// placeholder for route metadata specific to the LOC-RIB
// placeholder for route metadata specific to the LOC-RIB
} }
grouping bgp-adj-rib-in-post-route-annotations-state { grouping bgp-adj-rib-in-post-route-annotations-state {
description description
"Data definitions for information attached to routes in the "Data definitions for information attached to routes in the
Adj-RIB-in post-policy table"; Adj-RIB-in post-policy table";
leaf best-path { leaf best-path {
type boolean; type boolean;
description description
"Current path was selected as the best path."; "Current path was selected as the best path.";
} }
} }
grouping bgp-common-table-attrs-state { grouping bgp-common-table-attrs-state {
description description
"Common attributes attached to all routing tables"; "Common attributes attached to all routing tables";
// placeholder for metadata associated with all tables // placeholder for metadata associated with all tables
} }
grouping bgp-common-table-attrs-top { grouping bgp-common-table-attrs-top {
// no enclosing container as this data will fit under an // no enclosing container as this data will fit under an
// existing LOC-RIB container // existing LOC-RIB container
uses bgp-common-table-attrs-state; uses bgp-common-table-attrs-state;
description description
"Operational state data for data related to the entire "Operational state data for data related to the entire
LOC-RIB"; LOC-RIB";
} }
} }
<CODE ENDS> <CODE ENDS>
8. Examples 8. Examples
skipping to change at page 137, line 21 skipping to change at page 131, line 21
Routing Management (NMDA Version)", RFC 8349, Routing Management (NMDA Version)", RFC 8349,
DOI 10.17487/RFC8349, March 2018, DOI 10.17487/RFC8349, March 2018,
<https://www.rfc-editor.org/info/rfc8349>. <https://www.rfc-editor.org/info/rfc8349>.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>. <https://www.rfc-editor.org/info/rfc8446>.
11.2. Informative references 11.2. Informative references
[I-D.ietf-bfd-yang]
Rahman, R., Zheng, L., Jethanandani, M., Networks, J., and
G. Mirsky, "YANG Data Model for Bidirectional Forwarding
Detection (BFD)", draft-ietf-bfd-yang-17 (work in
progress), August 2018.
[I-D.ietf-grow-bmp]
Scudder, J., Fernando, R., and S. Stuart, "BGP Monitoring
Protocol", draft-ietf-grow-bmp-17 (work in progress),
January 2016.
[I-D.ietf-rtgwg-policy-model] [I-D.ietf-rtgwg-policy-model]
Qu, Y., Tantsura, J., Lindem, A., and X. Liu, "A YANG Data Qu, Y., Tantsura, J., Lindem, A., and X. Liu, "A YANG Data
Model for Routing Policy Management", draft-ietf-rtgwg- Model for Routing Policy Management", draft-ietf-rtgwg-
policy-model-05 (work in progress), January 2019. policy-model-06 (work in progress), March 2019.
[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>.
[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
and R. Wilton, "Network Management Datastore Architecture and R. Wilton, "Network Management Datastore Architecture
(NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018,
<https://www.rfc-editor.org/info/rfc8342>. <https://www.rfc-editor.org/info/rfc8342>.
Authors' Addresses Authors' Addresses
Mahesh Jethanandani
VMware
Email: mjethanandani@gmail.com
Keyur Patel Keyur Patel
Arrcus Arrcus
CA CA
USA USA
Email: keyur@arrcus.com Email: keyur@arrcus.com
Mahesh Jethanandani
VMware
Email: mjethanandani@gmail.com
Susan Hares Susan Hares
Huawei Huawei
7453 Hickory Hill 7453 Hickory Hill
Saline, MI 48176 Saline, MI 48176
USA USA
Email: shares@ndzh.com Email: shares@ndzh.com
 End of changes. 147 change blocks. 
916 lines changed or deleted 553 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/