| < draft-zheng-bfd-yang-03.txt | draft-zheng-bfd-yang-04.txt > | |||
|---|---|---|---|---|
| Network Working Group L. Zheng, Ed. | Network Working Group L. Zheng, Ed. | |||
| Internet-Draft Huawei Technologies | Internet-Draft Huawei Technologies | |||
| Intended status: Standards Track R. Rahman, Ed. | Intended status: Standards Track R. Rahman, Ed. | |||
| Expires: December 11, 2015 Cisco Systems | Expires: January 6, 2016 Cisco Systems | |||
| S. Pallagatti | S. Pallagatti | |||
| Juniper Networks | Juniper Networks | |||
| M. Jethanandani | M. Jethanandani | |||
| Cisco Systems | Cisco Systems | |||
| G. Mirsky | G. Mirsky | |||
| Ericsson | Ericsson | |||
| June 9, 2015 | July 05, 2015 | |||
| Yang Data Model for Bidirectional Forwarding Detection (BFD) | Yang Data Model for Bidirectional Forwarding Detection (BFD) | |||
| draft-zheng-bfd-yang-03.txt | draft-zheng-bfd-yang-04.txt | |||
| Abstract | Abstract | |||
| This document defines a YANG data model that can be used to configure | This document defines a YANG data model that can be used to configure | |||
| and manage Bidirectional Forwarding Detection (BFD). | and manage Bidirectional Forwarding Detection (BFD). | |||
| Requirements Language | Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| skipping to change at page 1, line 44 ¶ | skipping to change at page 1, line 44 ¶ | |||
| 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 http://datatracker.ietf.org/drafts/current/. | Drafts is at http://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 December 11, 2015. | This Internet-Draft will expire on January 6, 2016. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 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 | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://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 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Contributors . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Contributors . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 | 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Design of configuration model . . . . . . . . . . . . . . 4 | 2.1. Design of Configuration Model . . . . . . . . . . . . . . 4 | |||
| 2.1.1. Centralized BFD configuration . . . . . . . . . . . . 4 | 2.1.1. Single-hop IP . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1.1.1. Common BFD configuration . . . . . . . . . . . . 4 | 2.1.2. Multi-hop IP . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.1.1.2. Single-hop IP . . . . . . . . . . . . . . . . . . 5 | 2.1.3. Traffic Engineering Tunnels . . . . . . . . . . . . . 6 | |||
| 2.1.1.3. Multi-hop IP . . . . . . . . . . . . . . . . . . 5 | 2.1.4. LDP Label Switched Paths . . . . . . . . . . . . . . 6 | |||
| 2.1.1.4. MPLS LSP . . . . . . . . . . . . . . . . . . . . 6 | 2.1.5. Link Aggregation Groups . . . . . . . . . . . . . . . 6 | |||
| 2.1.1.5. Link Aggregation Group . . . . . . . . . . . . . 6 | 2.1.6. Per-interface Configuration . . . . . . . . . . . . . 7 | |||
| 2.1.1.6. Per-interface configuration . . . . . . . . . . . 6 | 2.2. Design of Operational Model . . . . . . . . . . . . . . . 7 | |||
| 2.1.2. Configuration in BFD clients . . . . . . . . . . . . 6 | 2.3. Notifications . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.2. Design of operational model . . . . . . . . . . . . . . . 7 | ||||
| 2.3. Notifications . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| 2.4. RPC Operations . . . . . . . . . . . . . . . . . . . . . 8 | 2.4. RPC Operations . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.5. BFD Configuration Data Hierarchy . . . . . . . . . . . . 8 | 2.5. BFD Configuration Data Hierarchy . . . . . . . . . . . . 8 | |||
| 2.5.1. Centralized BFD configuration . . . . . . . . . . . . 8 | 2.5.1. Centralized BFD Configuration . . . . . . . . . . . . 8 | |||
| 2.5.2. Configuration in BFD clients . . . . . . . . . . . . 10 | 2.5.2. Configuration in BFD clients . . . . . . . . . . . . 9 | |||
| 2.6. Operational Data Hierarchy . . . . . . . . . . . . . . . 10 | 2.6. Operational Data Hierarchy . . . . . . . . . . . . . . . 11 | |||
| 2.7. Notifications . . . . . . . . . . . . . . . . . . . . . . 12 | 2.7. Notifications . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 2.8. Examples . . . . . . . . . . . . . . . . . . . . . . . . 13 | 2.8. Examples . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 2.9. Interaction with other YANG modules . . . . . . . . . . . 13 | 2.9. Interaction with other YANG modules . . . . . . . . . . . 16 | |||
| 2.10. BFD Yang Module . . . . . . . . . . . . . . . . . . . . . 13 | 2.10. BFD Yang Module . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 2.11. BFD Client Example Configuration Yang Module . . . . . . 27 | 2.11. BFD Client Example Configuration Yang Module . . . . . . 33 | |||
| 2.12. Security Considerations . . . . . . . . . . . . . . . . . 28 | 2.12. Security Considerations . . . . . . . . . . . . . . . . . 34 | |||
| 2.13. IANA Considerations . . . . . . . . . . . . . . . . . . . 29 | 2.13. IANA Considerations . . . . . . . . . . . . . . . . . . . 34 | |||
| 2.14. Acknowledgements . . . . . . . . . . . . . . . . . . . . 29 | 2.14. Acknowledgements . . . . . . . . . . . . . . . . . . . . 35 | |||
| 3. References . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 3. References . . . . . . . . . . . . . . . . . . . . . . . . . 35 | |||
| 3.1. Normative References . . . . . . . . . . . . . . . . . . 29 | 3.1. Normative References . . . . . . . . . . . . . . . . . . 35 | |||
| 3.2. Informative References . . . . . . . . . . . . . . . . . 30 | 3.2. Informative References . . . . . . . . . . . . . . . . . 35 | |||
| Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 30 | Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 36 | |||
| A.1. Changes between versions -02 and -03 . . . . . . . . . . 30 | A.1. Changes between versions -03 and -04 . . . . . . . . . . 36 | |||
| A.2. Changes between versions -01 and -02 . . . . . . . . . . 30 | A.2. Changes between versions -02 and -03 . . . . . . . . . . 36 | |||
| A.3. Changes between versions -00 and -01 . . . . . . . . . . 30 | A.3. Changes between versions -01 and -02 . . . . . . . . . . 36 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | A.4. Changes between versions -00 and -01 . . . . . . . . . . 36 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36 | ||||
| 1. Introduction | 1. Introduction | |||
| YANG [RFC6020] is a data definition language that was introduced to | YANG [RFC6020] is a data definition language that was introduced to | |||
| define the contents of a conceptual data store that allows networked | define the contents of a conceptual data store that allows networked | |||
| devices to be managed using NETCONF [RFC6241]. YANG is proving | devices to be managed using NETCONF [RFC6241]. YANG is proving | |||
| relevant beyond its initial confines, as bindings to other interfaces | relevant beyond its initial confines, as bindings to other interfaces | |||
| (e.g RESTCONF [I-D.ietf-netconf-restconf]) and encodings other than | (e.g RESTCONF [I-D.ietf-netconf-restconf]) and encodings other than | |||
| XML (e.g JSON) are being defined. Furthermore, YANG data models can | XML (e.g JSON) are being defined. Furthermore, YANG data models can | |||
| be used as the basis of implementation for other interfaces, such as | be used as the basis of implementation for other interfaces, such as | |||
| skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 37 ¶ | |||
| 2) Two systems connected via multiple hops [RFC5883] | 2) Two systems connected via multiple hops [RFC5883] | |||
| 3) Two systems connected via MPLS Label Switched Paths (LSPs) | 3) Two systems connected via MPLS Label Switched Paths (LSPs) | |||
| [RFC5884] | [RFC5884] | |||
| 4) Two systems connected via a Link Aggregation Group (LAG) interface | 4) Two systems connected via a Link Aggregation Group (LAG) interface | |||
| [RFC7130] | [RFC7130] | |||
| BFD typically does not operate on its own. Various control | BFD typically does not operate on its own. Various control | |||
| protocols, aka BFD clients, use the services provided by BFD for | protocols, also known as BFD clients, use the services provided by | |||
| their own operation [RFC5882]. The obvious candidates which use BFD | BFD for their own operation [RFC5882]. The obvious candidates which | |||
| are those which do not have Hellos to detect failures (e.g. static | use BFD are those which do not have Hellos to detect failures, e.g. | |||
| routes) and routing protocols whose Hellos do not suport sub-second | static routes, and routing protocols whose Hellos do not suport sub- | |||
| failure detection, e.g OSPF and IS-IS. | second failure detection, e.g. OSPF and IS-IS. | |||
| 1.1. Contributors | 1.1. Contributors | |||
| 2. Design of the Data Model | 2. Design of the Data Model | |||
| 2.1. Design of configuration model | ||||
| The BFD YANG data model follows a VRF-centric model by augmenting the | ||||
| "routing-protocol" data node in [I-D.ietf-netmod-routing-cfg]. | ||||
| 2.1. Design of Configuration Model | ||||
| The configuration model consists mainly of the parameters specified | The configuration model consists mainly of the parameters specified | |||
| in [RFC5880]. Some examples are desired minimum transmit interval, | in [RFC5880]. Some examples are desired minimum transmit interval, | |||
| required minimum receive interval, detection multiplier etc | required minimum receive interval, detection multiplier, etc | |||
| Some implementations have BFD configuration under the BFD client, | Some implementations have BFD session configuration under the BFD | |||
| e.g. BFD configuration is under routing applications such as OSPF, | clients. For example, BFD session configuration is under routing | |||
| IS-IS, BGP etc. Other implementations have BFD configuration | applications such as OSPF, IS-IS, BGP etc. Other implementations | |||
| centralized, i.e outside the multiple BFD clients. In the sections | have BFD session configuration centralized under BFD, i.e. outside | |||
| below we address both approaches. | the multiple BFD clients. | |||
| 2.1.1. Centralized BFD configuration | The BFD parameters of interest to a BFD client are mainly the | |||
| multiplier and interval(s) since those parameters impact the | ||||
| convergence time of the BFD clients when a failure occurs. So the | ||||
| configuration model has groupings, containing multiplier and | ||||
| interval(s), which are to be used by BFD clients. Other parameters | ||||
| which remain under BFD control, e.g. demand mode and authentication, | ||||
| are configured under BFD. | ||||
| The BFD data model consists of configuring BFD sessions of different | We provide groupings, which contain the basic BFD session parameters, | |||
| types (e.g. single-hop IP, multi-hop IP etc). Since the different | for applications to use. This ensures consistency of BFD parameters | |||
| session types have different keys we have a list per session type, | across applications. | |||
| but we use a grouping to share the common configuration data between | ||||
| the different session types. | ||||
| 2.1.1.1. Common BFD configuration | Although [RFC5880] allows for different values for transmit and | |||
| receive intervals, many implementations allow users to specify just | ||||
| one interval which is used for both transmit and receive intervals or | ||||
| separate values for transmit and receive intervals. Our YANG model | ||||
| supports this: there is a choice between "min-interval", used for | ||||
| both transmit and receive intervals, and "desired-min-tx-interval" | ||||
| and "required-min-rx-interval". | ||||
| The common BFD session configuration items are put in a grouping to | 2.1.1. Single-hop IP | |||
| be used in multiple places, these items are: | ||||
| For single-hop IP, the BFD multiplier and interval(s) are configured | ||||
| in BFD clients. It is highly desirable to have the BFD configuration | ||||
| consistent between those clients. Therefore, we have a grouping for | ||||
| BFD configuration that applications can import in their YANG module: | ||||
| - This provides consistency since the same grouping is being used in | ||||
| all applications making use of BFD. | ||||
| - Not all implementations of those BFD clients have support for BFD, | ||||
| we must use if-feature in the respective YANG modules. | ||||
| An application importing the BFD configuration grouping could do so | ||||
| in a hierarchical manner if it has multiple levels at which BFD | ||||
| configuration can be applied. In a subsequent section, we provide an | ||||
| example of how a BFD client would use the grouping in such a way. | ||||
| The configuration items are: | ||||
| enabled | ||||
| Set to true to enable BFD. | ||||
| local-multiplier | local-multiplier | |||
| This is the detection time multiplier as defined in | This is the detection time multiplier as defined in | |||
| [RFC5880]. | [RFC5880]. | |||
| min-interval | ||||
| This is the Desired Min TX Interval and Required Min RX | ||||
| Interval as defined in [RFC5880]. | ||||
| OR | ||||
| desired-min-tx-interval | desired-min-tx-interval | |||
| This is the Desired Min TX Interval as defined in [RFC5880]. | This is the Desired Min TX Interval as defined in [RFC5880]. | |||
| required-min-rx-interval | required-min-rx-interval | |||
| This is the Required Min RX Interval as defined in [RFC5880]. | This is the Required Min RX Interval as defined in [RFC5880]. | |||
| demand-enabled | 2.1.2. Multi-hop IP | |||
| Set to True to enable demand mode as defined in [RFC5880]. | ||||
| enable-authentication | ||||
| Set to True to enable BFD authentication. | ||||
| authentication-algorithm | ||||
| Authentication algorithm to use (if enabled). | ||||
| key-chain-name | ||||
| Key-chain to be used for authentication (if enabled). | ||||
| 2.1.1.2. Single-hop IP | ||||
| We have a list for BFD sessions over single-hop IP. The key consists | We have a list for BFD sessions over multi-hop IP. The key consists | |||
| of: | of: | |||
| interface | source address | |||
| This is the interface on which the BFD packets for this | Address belonging to the local system as per [RFC5883] | |||
| session are transmitted and received. Examples of an | ||||
| interface are physical media, virtual circuit, tunnel etc. | ||||
| destination address | destination address | |||
| Address belonging to the peer system as per [RFC5881] | Address belonging to the remote system as per [RFC5883] | |||
| The common configuration data in Section 2.1.1.1 is used for single- | Since we are following a VRF-centric model we do not need a VRF field | |||
| hop IP. On top of that common data, we also need configuration data | in the key. | |||
| for echo: | ||||
| desired-min-echo-tx-interval | Here is the list of parameters: | |||
| This is the minimum interval that the local system would like | ||||
| to use when transmitting BFD echo packets. If 0 the echo | ||||
| function as defined in [RFC5880] is disabled. | ||||
| required-min-echo-rx-interval | local-multiplier | |||
| The is the Required Min Echo RX Interval as defined in | This is the detection time multiplier as defined in | |||
| [RFC5880]. | [RFC5880]. | |||
| 2.1.1.3. Multi-hop IP | desired-min-tx-interval | |||
| This is the Desired Min TX Interval as defined in [RFC5880]. | ||||
| We have a list for BFD sessions over multi-hop IP. The key consists | required-min-rx-interval | |||
| of: | This is the Required Min RX Interval as defined in [RFC5880]. | |||
| source address | demand-enabled | |||
| Address belonging to the local system as per [RFC5883] | Set to true to enable demand mode as defined in [RFC5880]. | |||
| destination address | enable-authentication | |||
| Address belonging to the remote system as per [RFC5883] | Set to true to enable BFD authentication. | |||
| VRF name | authentication-algorithm | |||
| VRF in which the BFD multi-hop session is running | Authentication algorithm to use, if enabled. | |||
| The common configuration data in Section 2.1.1.1 is used for multi- | key-chain-name | |||
| hop IP.On top of that common data, we also need TTL: | Key-chain to be used for authentication, if enabled. | |||
| ttl | tx-ttl | |||
| TTL of outgoing BFD control packets. | TTL of outgoing BFD control packets. | |||
| 2.1.1.4. MPLS LSP | rx-ttl | |||
| Minimum TTL of incoming BFD control packets. | ||||
| TBD | ||||
| 2.1.1.5. Link Aggregation Group | ||||
| TBD | ||||
| 2.1.1.6. Per-interface configuration | 2.1.3. Traffic Engineering Tunnels | |||
| For implementations which have multiplier and intervals configured | For Traffic Engineering (TE) tunnels, BFD is configured under the TE | |||
| under the BFD clients we still need a central location to configure | tunnel since it is the Traffic Enginnering application which knows | |||
| authentication, demand mode etc. This can be done by configuring the | the desired failure detection parameters. The grouping for BFD | |||
| following parameters per interface: | clients in Section 2.1.1 can be used by the TE application for the | |||
| basic BFD parameters. For BFD parameters which are specific to the | ||||
| TE application, e.g. whether to tear down the tunnel in the event of | ||||
| a BFD session failure, these parameters will be defined in the YANG | ||||
| model of the TE application. | ||||
| Common parameters | 2.1.4. LDP Label Switched Paths | |||
| The common BFD parameters listed in Section 2.1.1.1 | ||||
| Echo parameters | For LDP LSPs, BFD is configured under the LDP FEC. The grouping for | |||
| The echo parameters listed in Section 2.1.1.2 | BFD clients in Section 2.1.1 can be used by the LDP application for | |||
| the basic BFD parameters. For BFD parameters which are specific to | ||||
| the LDP application, if any, these parameters will be defined in the | ||||
| YANG model of the LDP application. | ||||
| 2.1.2. Configuration in BFD clients | 2.1.5. Link Aggregation Groups | |||
| When BFD is configured in BFD clients, it is highly desirable to have | Per [RFC7130], configuring BFD on LAG consists of having micro-BFD | |||
| BFD configuration consistency between those clients. In this | sessions on each LAG member link. The grouping for BFD clients in | |||
| approach we have a grouping for BFD configuration which applications | Section 2.1.1 can be used by the LAG application for the basic BFD | |||
| can import in their YANG module: | parameters. This grouping can be used per-LAG or per member-link. | |||
| For BFD parameters which are specific to the LAG application, e.g. | ||||
| the IP address of the peer system which can be reached by the LAG, | ||||
| the parameters will be defined in the YANG model of the LAG | ||||
| application. | ||||
| - This provides consistency since the same grouping is being used in | 2.1.6. Per-interface Configuration | |||
| all applications making use of BFD | ||||
| - Since not all implementations of those BFD clients have support for | With multiplier and intervals configured under the BFD clients, we | |||
| BFD, we must use if-feature in the respective YANG modules | still need a central location to configure authentication, demand | |||
| mode, etc. This can be done by configuring the following parameters | ||||
| per interface: | ||||
| An application importing the BFD configuration grouping could do so | demand-enabled | |||
| in a hierarchical manner if it has multiple levels at which BFD | Set to true to enable demand mode as defined in [RFC5880]. | |||
| configuration can be applied. In a subsequent section we provide an | ||||
| example of how a BFD client would use the grouping in such a way. | ||||
| The configuration items are: | enable-authentication | |||
| Set to true to enable BFD authentication. | ||||
| enabled | authentication-algorithm | |||
| Set to True to enable BFD. | Authentication algorithm to use, if enabled. | |||
| local-multiplier | key-chain-name | |||
| This the detection time multiplier as defined in [RFC5880]. | Key-chain to be used for authentication, if enabled. | |||
| desired-min-tx-interval | desired-min-echo-tx-interval | |||
| This the Desired Min TX Interval as defined in [RFC5880]. | This is the minimum interval that the local system would like | |||
| to use when transmitting BFD echo packets. If 0, the echo | ||||
| function as defined in [RFC5880] is disabled. | ||||
| required-min-rx-interval | required-min-echo-rx-interval | |||
| This the Required Min RX Interval as defined in [RFC5880]. | This is the Required Min Echo RX Interval as defined in | |||
| [RFC5880]. | ||||
| 2.2. Design of operational model | 2.2. Design of Operational Model | |||
| The operational model contains both the overall statistics of BFD | The operational model contains both the overall statistics of BFD | |||
| sessions running on the device and the per session operational | sessions running on the device and the per session operational | |||
| statistics. Since BFD is used for liveness detection of arbitrary | statistics. Since BFD is used for liveness detection of arbitrary | |||
| paths, there is no uniform key to identify a BFD session. e.g. a BFD | paths, there is no uniform key to identify a BFD session. E.g. a BFD | |||
| single-hop IP session is uniquely identified by the combination of | single-hop IP session is uniquely identified by the combination of | |||
| destination IP address and interface whereas a multihop IP session is | destination IP address and interface whereas a multihop IP session is | |||
| uniquely identified by the combination of source IP address, | uniquely identified by the combination of source IP address and | |||
| destination IP address and VRF. For this reason, for per session | destination IP address (in the context of a VRF). For this reason, | |||
| operational statistics, we do not have a single list with different | for per-session operational statistics, we do not have a single list | |||
| type BFD sessions. Instead we have a container in which we have | with different type BFD sessions. Instead, we have a container where | |||
| multiple lists, where each list corresponds to one specific path type | we have multiple lists, where each list corresponds to one specific | |||
| for BFD. For example we have one operational list for BFD single-hop | path type for BFD. For example, we have one operational list for BFD | |||
| IP, another list for BFD multi-hop IP etc. In each list, mainly | single-hop IP, another list for BFD multi-hop IP, etc. In each list, | |||
| three categories of operational items are shown. The fundamental | mainly three categories of operational items are shown. The | |||
| information of a BFD session such as the local discriminator, remote | fundamental information of a BFD session such as the local | |||
| discriminator and the capability of supporting demand detect mode are | discriminator, remote discriminator and the capability of supporting | |||
| shown in the first category. A second category includes a BFD | demand detect mode are shown in the first category. The second | |||
| session running information, e.g. the FSM the device in and | category includes a BFD session running information, e.g. the FSM the | |||
| diagnostic code received. Another example is the actual transmit | device in and diagnostic code received. Another example is the | |||
| interval between the control packets, which may be different from the | actual transmit interval between the control packets, which may be | |||
| desired minimum transmit interval configured, is shown in this | different from the desired minimum transmit interval configured, is | |||
| category. Similar examples are actual received interval between the | shown in this category. Similar examples are actual received | |||
| control packets and the actual transmit interval between the echo | interval between the control packets and the actual transmit interval | |||
| packets. The third category contains the detailed statistics of this | between the echo packets. The third category contains the detailed | |||
| session, e.g. when the session went to up/down, how long it has been | statistics of the session, e.g. when the session transitioned up/down | |||
| since the session is up/down. | and how long it has been in that state. | |||
| For some session types, there may be more than 1 session on the | ||||
| virtual path to the destination. For example, with IP multi-hop | ||||
| there could be multiple BFD sessions from the source to the same | ||||
| destination to test the various paths (ECMP) to the destination. | ||||
| Each of the BFD sessions on the same virtual path is uniquely | ||||
| identified by the source UDP port | ||||
| 2.3. Notifications | 2.3. Notifications | |||
| This YANG model defines a list of notifications to inform clients of | This YANG model defines a list of notifications to inform clients of | |||
| BFD with important events detected during the protocol operation. | BFD of important events detected during the protocol operation. Pair | |||
| Pair of local and remote discriminator identifies a BFD session on | of local and remote discriminator identifies a BFD session on local | |||
| local system. Notification also give more important details about | system. Notifications also give more important details about BFD | |||
| BFD sessions e.g. new state, time in previous state, VRF and reason | sessions; e.g. new state, time in previous state, routing-instance | |||
| for BFD session state changed. | and the reason that the BFD session state changed. | |||
| 2.4. RPC Operations | 2.4. RPC Operations | |||
| TBD | TBD | |||
| 2.5. BFD Configuration Data Hierarchy | 2.5. BFD Configuration Data Hierarchy | |||
| 2.5.1. Centralized BFD configuration | 2.5.1. Centralized BFD Configuration | |||
| The following is the centralized configuration data hierarchy: | The following is the centralized configuration data hierarchy: | |||
| We have a container which contains a list for each session type | We have a container which contains a list for each session type. | |||
| This contains session configuration for only IP multi-hop sessions. | ||||
| We have per-interface configuration | We have per-interface configuration for authentication, demand-mode, | |||
| etc. This is used e.g. for IP single-hop sessions whose base BFD | ||||
| configuration belongs to the BFD clients. | ||||
| module: ietf-bfd | module: ietf-bfd | |||
| +--rw bfd | augment /rt:routing/rt:routing-instance/rt:routing-protocols/ | |||
| +--rw bfd-cfg | rt:routing-protocol: | |||
| | +--rw bfd-session-cfg {bfd-centralized-session-config}? | +--rw bfd | |||
| | | +--rw session-ip-sh* [interface dest-addr] | +--rw bfd-cfg | |||
| | | | +--rw interface if:interface-ref | | +--rw bfd-session-cfg | |||
| | | | +--rw dest-addr inet:ip-address | | | +--rw session-ip-mh* [source-addr dest-addr] | |||
| | | | +--rw admin-down? boolean | | | +--rw source-addr inet:ip-address | |||
| | | | +--rw local-multiplier? multiplier | | | +--rw dest-addr inet:ip-address | |||
| | | | +--rw desired-min-tx-interval uint32 | | | +--rw admin-down? boolean | |||
| | | | +--rw required-min-rx-interval uint32 | | | +--rw local-multiplier? multiplier | |||
| | | | +--rw demand-enabled? boolean | | | +--rw (interval-config-type)? | |||
| | | | +--rw enable-authentication? boolean | | | | +--:(tx-rx-intervals) | |||
| | | | +--rw authentication-parms {bfd-authentication}? | | | | | +--rw desired-min-tx-interval uint32 | |||
| | | | | +--rw key-chain-name? string | | | | | +--rw required-min-rx-interval uint32 | |||
| | | | | +--rw algorithm? bfd-auth-algorithm | | | | +--:(single-interval) | |||
| | | | +--rw desired-min-echo-tx-interval? uint32 | | | | +--rw min-interval uint32 | |||
| | | | +--rw required-min-echo-rx-interval? uint32 | | | +--rw demand-enabled? boolean | |||
| | | +--rw session-ip-mh* [vrf-name source-addr dest-addr] | | | +--rw enable-authentication? boolean | |||
| | | +--rw vrf-name vrfName | | | +--rw authentication-parms {bfd-authentication}? | |||
| | | +--rw source-addr inet:ip-address | | | | +--rw key-chain-name? string | |||
| | | +--rw dest-addr inet:ip-address | | | | +--rw algorithm? bfd-auth-algorithm | |||
| | | +--rw admin-down? boolean | | | +--rw tx-ttl? ttl | |||
| | | +--rw local-multiplier? multiplier | | | +--rw rx-ttl ttl | |||
| | | +--rw desired-min-tx-interval uint32 | | +--rw bfd-interface-cfg* [interface] {bfd-interface-config}? | |||
| | | +--rw required-min-rx-interval uint32 | | +--rw interface if:interface-ref | |||
| | | +--rw demand-enabled? boolean | | +--rw local-multiplier? multiplier | |||
| | | +--rw enable-authentication? boolean | | +--rw (interval-config-type)? | |||
| | | +--rw authentication-parms {bfd-authentication}? | | | +--:(tx-rx-intervals) | |||
| | | | +--rw key-chain-name? string | | | | +--rw desired-min-tx-interval uint32 | |||
| | | | +--rw algorithm? bfd-auth-algorithm | | | | +--rw required-min-rx-interval uint32 | |||
| | | +--rw tx-ttl? TTL | | | +--:(single-interval) | |||
| | | +--rw rx-ttl TTL | | | +--rw min-interval uint32 | |||
| | +--rw bfd-interface-cfg* [interface] {bfd-interface-config}? | | +--rw demand-enabled? boolean | |||
| | +--rw interface if:interface-ref | | +--rw enable-authentication? boolean | |||
| | +--rw local-multiplier? multiplier | | +--rw authentication-parms {bfd-authentication}? | |||
| | +--rw desired-min-tx-interval uint32 | | | +--rw key-chain-name? string | |||
| | +--rw required-min-rx-interval uint32 | | | +--rw algorithm? bfd-auth-algorithm | |||
| | +--rw demand-enabled? boolean | | +--rw desired-min-echo-tx-interval? uint32 | |||
| | +--rw enable-authentication? boolean | | +--rw required-min-echo-rx-interval? uint32 | |||
| | +--rw authentication-parms {bfd-authentication}? | ||||
| | | +--rw key-chain-name? string | ||||
| | | +--rw algorithm? bfd-auth-algorithm | ||||
| | +--rw desired-min-echo-tx-interval? uint32 | ||||
| | +--rw required-min-echo-rx-interval? uint32 | ||||
| 2.5.2. Configuration in BFD clients | 2.5.2. Configuration in BFD clients | |||
| The following is the configuration data hierarchy for a hypothetical | The following is the configuration data hierarchy for a hypothetical | |||
| BFD client called bfd-routing-app, the BFD configuration is supported | BFD client called example-bfd-routing-app. The BFD configuration is | |||
| conditionally via use of if-feature. | supported conditionally via use of if-feature. | |||
| We have a list of areas and in each area we have a list of | We have a list of areas and in each area we have a list of | |||
| interfaces. The BFD configuration grouping is used in a hierarchical | interfaces. The BFD configuration grouping is used in a hierarchical | |||
| fashion, it can be applied in "area" and "interface": | fashion, it can be applied in "area" and "interface": | |||
| - If BFD configuration is applied under an interface, that | - If BFD configuration is applied under an interface, that | |||
| configuration takes precedence over any BFD configuration (if any) at | configuration takes precedence over any BFD configuration, if any, at | |||
| the area level | the area level | |||
| - If BFD configuration is applied under an "area" and none of the | - If BFD configuration is applied under an "area" and none of the | |||
| interfaces in that area has BFD configuration, then all interfaces | interfaces in that area has BFD configuration, then all interfaces | |||
| belong to the "area" in question inherit the BFD configuration for | belong to the "area" in question inherit the BFD configuration for | |||
| the area in question. | the area in question. | |||
| - If the BFD client implementation supports "interface all", then all | - If the BFD client implementation supports "interface all", then all | |||
| the interfaces belonging to that area will inherit the BFD | the interfaces belonging to that area will inherit the BFD | |||
| configuration under "interface all". Along with this if there are | configuration under "interface all". Additionally, if there is | |||
| specific interface configuration then specific interface will | specific interface configuration, then the specific interface will | |||
| override the "interface all" parameters. | override the "interface all" parameters. | |||
| module: bfd-routing-app | - The tx and rx intervals can be configured separately or a single | |||
| interval can be configured. | ||||
| module: example-bfd-routing-app | ||||
| +--rw area* [area-id] | +--rw area* [area-id] | |||
| +--rw area-id uint32 | +--rw area-id uint32 | |||
| +--rw bfd-cfg | +--rw bfd-cfg | |||
| | +--rw enabled? boolean | | +--rw enabled? boolean | |||
| | +--rw local-multiplier? multiplier | | +--rw local-multiplier? multiplier | |||
| | +--rw desired-min-tx-interval uint32 | | +--rw (interval-config-type)? | |||
| | +--rw required-min-rx-interval uint32 | | +--:(tx-rx-intervals) | |||
| | | +--rw desired-min-tx-interval uint32 | ||||
| | | +--rw required-min-rx-interval uint32 | ||||
| | +--:(single-interval) | ||||
| | +--rw min-interval uint32 | ||||
| +--rw interface* [interface] | +--rw interface* [interface] | |||
| +--rw interface if:interface-ref | +--rw interface if:interface-ref | |||
| +--rw bfd-cfg | +--rw bfd-cfg | |||
| +--rw enabled? boolean | +--rw enabled? boolean | |||
| +--rw local-multiplier? multiplier | +--rw local-multiplier? multiplier | |||
| +--rw desired-min-tx-interval uint32 | +--rw (interval-config-type)? | |||
| +--rw required-min-rx-interval uint32 | +--:(tx-rx-intervals) | |||
| | +--rw desired-min-tx-interval uint32 | ||||
| | +--rw required-min-rx-interval uint32 | ||||
| +--:(single-interval) | ||||
| +--rw min-interval uint32 | ||||
| 2.6. Operational Data Hierarchy | 2.6. Operational Data Hierarchy | |||
| The complete data hierarchy of BFD YANG operational model is | The complete data hierarchy of BFD YANG operational model is | |||
| presented below. | presented below. | |||
| module: ietf-bfd | module: ietf-bfd | |||
| augment /rt:routing/rt:routing-instance/rt:routing-protocols/ | ||||
| rt:routing-protocol: | ||||
| +--rw bfd | +--rw bfd | |||
| +--ro bfd-oper | +--ro bfd-oper | |||
| +--ro bfd-session-statistics | +--ro bfd-session-statistics | |||
| | +--ro ip-sh-session-num? uint32 | | +--ro ip-sh-session-num? uint32 | |||
| | +--ro ip-mh-session-num? uint32 | | +--ro ip-mh-session-num? uint32 | |||
| | +--ro total-session-num? uint32 | | +--ro total-session-num? uint32 | |||
| | +--ro session-up-num? uint32 | | +--ro session-up-num? uint32 | |||
| | +--ro sess-down-num? uint32 | | +--ro sess-down-num? uint32 | |||
| | +--ro sess-admin-down-num? uint32 | ||||
| +--ro bfd-session-lists | +--ro bfd-session-lists | |||
| +--ro session-ip-sh* [interface dest-addr] | +--ro session-ip-sh* [interface dest-addr] | |||
| | +--ro interface if:interface-ref | | +--ro interface if:interface-ref | |||
| | +--ro dest-addr inet:ip-address | | +--ro dest-addr inet:ip-address | |||
| | +--ro sesssion-type? enumeration | | +--ro source-addr? inet:ip-address | |||
| | +--ro session-type? bfd-session-type | ||||
| | +--ro local-discriminator? discriminator | | +--ro local-discriminator? discriminator | |||
| | +--ro remote-discriminator? discriminator | | +--ro remote-discriminator? discriminator | |||
| | +--ro remote-multiplier? multiplier | | +--ro remote-multiplier? multiplier | |||
| | +--ro out-interface? if:interface-ref | | +--ro out-interface? if:interface-ref | |||
| | +--ro demand-capability? boolean | | +--ro demand-capability? boolean | |||
| | +--ro source-port? inet:port-number | ||||
| | +--ro dest-port? inet:port-number | ||||
| | +--ro session-running* | | +--ro session-running* | |||
| | | +--ro local-state? state | | | +--ro session-index? uint32 | |||
| | | +--ro remote-state? state | | | +--ro local-state? state | |||
| | | +--ro local-diagnostic? diagnostic | | | +--ro remote-state? state | |||
| | | +--ro remote-diagnostic? diagnostic | | | +--ro local-diagnostic? diagnostic | |||
| | | +--ro detect-Mode? enumeration | | | +--ro remote-diagnostic? diagnostic | |||
| | | +--ro actual-tx-interval? uint32 | | | +--ro detection-mode? enumeration | |||
| | | +--ro actual-rx-interval? uint32 | | | +--ro negotiated-tx-interval? uint32 | |||
| | | +--ro actual-echo-tx-interval? uint32 | | | +--ro negotiated-rx-interval? uint32 | |||
| | | +--ro detect-time? uint32 | | | +--ro negotiated-echo-tx-interval? uint32 | |||
| | | +--ro detection-time? uint32 | ||||
| | +--ro sesssion-statistics* | | +--ro sesssion-statistics* | |||
| | +--ro create-time? yang:date-and-time | | +--ro create-time? yang:date-and-time | |||
| | +--ro last-down-time? yang:date-and-time | | +--ro last-down-time? yang:date-and-time | |||
| | +--ro last-up-time? yang:date-and-time | | +--ro last-up-time? yang:date-and-time | |||
| | +--ro receive-pkt? uint64 | | +--ro down-count? uint32 | |||
| | +--ro send-pkt? uint64 | | +--ro admin-down-count? uint32 | |||
| | +--ro down-count? uint32 | | +--ro receive-packet-count? uint64 | |||
| | +--ro receive-bad-pkt? uint64 | | +--ro send-packet-count? uint64 | |||
| | +--ro send-failed-pkt? uint64 | | +--ro receive-bad-packet? uint64 | |||
| | +--ro short-break-count? uint32 | | +--ro send-failed-packet? uint64 | |||
| +--ro session-ip-mh* [vrfName source-addr dest-addr] | +--ro session-ip-mh-group* [source-addr dest-addr] | |||
| +--ro vrfName vrfName | | +--ro source-addr inet:ip-address | |||
| +--ro source-addr inet:ip-address | | +--ro dest-addr inet:ip-address | |||
| +--ro dest-addr inet:ip-address | | +--ro session-ip-mh* [source-port] | |||
| +--ro ttl? TTL | | +--ro ttl? ttl | |||
| +--ro sesssion-type? enumeration | | +--ro session-type? bfd-session-type | |||
| +--ro local-discriminator? discriminator | | +--ro local-discriminator? discriminator | |||
| +--ro remote-discriminator? discriminator | | +--ro remote-discriminator? discriminator | |||
| +--ro remote-multiplier? multiplier | | +--ro remote-multiplier? multiplier | |||
| +--ro out-interface? if:interface-ref | | +--ro out-interface? if:interface-ref | |||
| +--ro demand-capability? boolean | | +--ro demand-capability? boolean | |||
| +--ro session-running* | | +--ro source-port inet:port-number | |||
| | +--ro local-state? state | | +--ro dest-port? inet:port-number | |||
| | +--ro remote-state? state | | +--ro session-running* | |||
| | +--ro local-diagnostic? diagnostic | | | +--ro session-index? uint32 | |||
| | +--ro remote-diagnostic? diagnostic | | | +--ro local-state? state | |||
| | +--ro detect-Mode? enumeration | | | +--ro remote-state? state | |||
| | +--ro actual-tx-interval? uint32 | | | +--ro local-diagnostic? diagnostic | |||
| | +--ro actual-rx-interval? uint32 | | | +--ro remote-diagnostic? diagnostic | |||
| | +--ro actual-echo-tx-interval? uint32 | | | +--ro detection-mode? enumeration | |||
| | +--ro detect-time? uint32 | | | +--ro negotiated-tx-interval? uint32 | |||
| +--ro sesssion-statistics* | | | +--ro negotiated-rx-interval? uint32 | |||
| +--ro create-time? yang:date-and-time | | | +--ro negotiated-echo-tx-interval? uint32 | |||
| +--ro last-down-time? yang:date-and-time | | | +--ro detection-time? uint32 | |||
| +--ro last-up-time? yang:date-and-time | | +--ro sesssion-statistics* | |||
| +--ro receive-pkt? uint64 | | +--ro create-time? yang:date-and-time | |||
| +--ro send-pkt? uint64 | | +--ro last-down-time? yang:date-and-time | |||
| +--ro down-count? uint32 | | +--ro last-up-time? yang:date-and-time | |||
| +--ro receive-bad-pkt? uint64 | | +--ro down-count? uint32 | |||
| +--ro send-failed-pkt? uint64 | | +--ro admin-down-count? uint32 | |||
| +--ro short-break-count? uint32 | | +--ro receive-packet-count? uint64 | |||
| | +--ro send-packet-count? uint64 | ||||
| | +--ro receive-bad-packet? uint64 | ||||
| | +--ro send-failed-packet? uint64 | ||||
| +--ro session-te-tunnel* [tunnel-name] | ||||
| | +--ro tunnel-name string | ||||
| | +--ro session-type? bfd-session-type | ||||
| | +--ro local-discriminator? discriminator | ||||
| | +--ro remote-discriminator? discriminator | ||||
| | +--ro remote-multiplier? multiplier | ||||
| | +--ro out-interface? if:interface-ref | ||||
| | +--ro demand-capability? boolean | ||||
| | +--ro source-port? inet:port-number | ||||
| | +--ro dest-port? inet:port-number | ||||
| | +--ro session-running* | ||||
| | | +--ro session-index? uint32 | ||||
| | | +--ro local-state? state | ||||
| | | +--ro remote-state? state | ||||
| | | +--ro local-diagnostic? diagnostic | ||||
| | | +--ro remote-diagnostic? diagnostic | ||||
| | | +--ro detection-mode? enumeration | ||||
| | | +--ro negotiated-tx-interval? uint32 | ||||
| | | +--ro negotiated-rx-interval? uint32 | ||||
| | | +--ro negotiated-echo-tx-interval? uint32 | ||||
| | | +--ro detection-time? uint32 | ||||
| | +--ro sesssion-statistics* | ||||
| | +--ro create-time? yang:date-and-time | ||||
| | +--ro last-down-time? yang:date-and-time | ||||
| | +--ro last-up-time? yang:date-and-time | ||||
| | +--ro down-count? uint32 | ||||
| | +--ro admin-down-count? uint32 | ||||
| | +--ro receive-packet-count? uint64 | ||||
| | +--ro send-packet-count? uint64 | ||||
| | +--ro receive-bad-packet? uint64 | ||||
| | +--ro send-failed-packet? uint64 | ||||
| +--ro session-ldp-lsp-group* [ldp-fec] | ||||
| | +--ro ldp-fec inet:ip-prefix | ||||
| | +--ro session-ldp-lsp* [source-port] | ||||
| | +--ro ttl? ttl | ||||
| | +--ro session-type? bfd-session-type | ||||
| | +--ro local-discriminator? discriminator | ||||
| | +--ro remote-discriminator? discriminator | ||||
| | +--ro remote-multiplier? multiplier | ||||
| | +--ro out-interface? if:interface-ref | ||||
| | +--ro demand-capability? boolean | ||||
| | +--ro source-port inet:port-number | ||||
| | +--ro dest-port? inet:port-number | ||||
| | +--ro session-running* | ||||
| | | +--ro session-index? uint32 | ||||
| | | +--ro local-state? state | ||||
| | | +--ro remote-state? state | ||||
| | | +--ro local-diagnostic? diagnostic | ||||
| | | +--ro remote-diagnostic? diagnostic | ||||
| | | +--ro detection-mode? enumeration | ||||
| | | +--ro negotiated-tx-interval? uint32 | ||||
| | | +--ro negotiated-rx-interval? uint32 | ||||
| | | +--ro negotiated-echo-tx-interval? uint32 | ||||
| | | +--ro detection-time? uint32 | ||||
| | +--ro sesssion-statistics* | ||||
| | +--ro create-time? yang:date-and-time | ||||
| | +--ro last-down-time? yang:date-and-time | ||||
| | +--ro last-up-time? yang:date-and-time | ||||
| | +--ro down-count? uint32 | ||||
| | +--ro admin-down-count? uint32 | ||||
| | +--ro receive-packet-count? uint64 | ||||
| | +--ro send-packet-count? uint64 | ||||
| | +--ro receive-bad-packet? uint64 | ||||
| | +--ro send-failed-packet? uint64 | ||||
| +--ro session-lag* [lag-name] | ||||
| +--ro lag-name if:interface-ref | ||||
| +--ro session-lag-micro* [member-link] | ||||
| +--ro member-link if:interface-ref | ||||
| +--ro session-type? bfd-session-type | ||||
| +--ro local-discriminator? discriminator | ||||
| +--ro remote-discriminator? discriminator | ||||
| +--ro remote-multiplier? multiplier | ||||
| +--ro out-interface? if:interface-ref | ||||
| +--ro demand-capability? boolean | ||||
| +--ro source-port? inet:port-number | ||||
| +--ro dest-port? inet:port-number | ||||
| +--ro session-running* | ||||
| | +--ro session-index? uint32 | ||||
| | +--ro local-state? state | ||||
| | +--ro remote-state? state | ||||
| | +--ro local-diagnostic? diagnostic | ||||
| | +--ro remote-diagnostic? diagnostic | ||||
| | +--ro detection-mode? enumeration | ||||
| | +--ro negotiated-tx-interval? uint32 | ||||
| | +--ro negotiated-rx-interval? uint32 | ||||
| | +--ro negotiated-echo-tx-interval? uint32 | ||||
| | +--ro detection-time? uint32 | ||||
| +--ro sesssion-statistics* | ||||
| +--ro create-time? yang:date-and-time | ||||
| +--ro last-down-time? yang:date-and-time | ||||
| +--ro last-up-time? yang:date-and-time | ||||
| +--ro down-count? uint32 | ||||
| +--ro admin-down-count? uint32 | ||||
| +--ro receive-packet-count? uint64 | ||||
| +--ro send-packet-count? uint64 | ||||
| +--ro receive-bad-packet? uint64 | ||||
| +--ro send-failed-packet? uint64 | ||||
| 2.7. Notifications | 2.7. Notifications | |||
| The BFD YANG data model defines notifications for BFD session state | The BFD YANG data model defines notifications for BFD session state | |||
| changes. | changes. | |||
| module: ietf-bfd | module: ietf-bfd | |||
| augment /rt:routing/rt:routing-instance/rt:routing-protocols/ | ||||
| rt:routing-protocol: | ||||
| notifications: | notifications: | |||
| +---n bfd-singlehop-notification | +---n bfd-singlehop-notification | |||
| | +--ro local-discr? discriminator | | +--ro local-discr? discriminator | |||
| | +--ro remote-discr? discriminator | | +--ro remote-discr? discriminator | |||
| | +--ro new-state? state | | +--ro new-state? state | |||
| | +--ro state-change-reason? string | | +--ro state-change-reason? string | |||
| | +--ro time-in-previous-state? string | | +--ro time-in-previous-state? string | |||
| | +--ro dest-addr? inet:ip-address | | +--ro dest-addr? inet:ip-address | |||
| | +--ro source-addr? inet:ip-address | ||||
| | +--ro session-index? uint32 | ||||
| | +--ro session-type? bfd-session-type | ||||
| | +--ro interface? if:interface-ref | | +--ro interface? if:interface-ref | |||
| | +--ro echo-enabled? boolean | | +--ro echo-enabled? boolean | |||
| +---n bfd-multihop-notification | +---n bfd-multihop-notification | |||
| | +--ro local-discr? discriminator | ||||
| | +--ro remote-discr? discriminator | ||||
| | +--ro new-state? state | ||||
| | +--ro state-change-reason? string | ||||
| | +--ro time-in-previous-state? string | ||||
| | +--ro dest-addr? inet:ip-address | ||||
| | +--ro source-addr? inet:ip-address | ||||
| | +--ro session-index? uint32 | ||||
| | +--ro session-type? bfd-session-type | ||||
| +---n bfd-te-tunnel-notification | ||||
| | +--ro local-discr? discriminator | ||||
| | +--ro remote-discr? discriminator | ||||
| | +--ro new-state? state | ||||
| | +--ro state-change-reason? string | ||||
| | +--ro time-in-previous-state? string | ||||
| | +--ro dest-addr? inet:ip-address | ||||
| | +--ro source-addr? inet:ip-address | ||||
| | +--ro session-index? uint32 | ||||
| | +--ro session-type? bfd-session-type | ||||
| | +--ro tunnel-name? string | ||||
| +---n bfd-ldp-lsp-notification | ||||
| | +--ro local-discr? discriminator | ||||
| | +--ro remote-discr? discriminator | ||||
| | +--ro new-state? state | ||||
| | +--ro state-change-reason? string | ||||
| | +--ro time-in-previous-state? string | ||||
| | +--ro dest-addr? inet:ip-address | ||||
| | +--ro source-addr? inet:ip-address | ||||
| | +--ro session-index? uint32 | ||||
| | +--ro session-type? bfd-session-type | ||||
| | +--ro ldp-fec? inet:ip-prefix | ||||
| | +--ro source-port? inet:port-number | ||||
| +---n bfd-lag-notification | ||||
| +--ro local-discr? discriminator | +--ro local-discr? discriminator | |||
| +--ro remote-discr? discriminator | +--ro remote-discr? discriminator | |||
| +--ro new-state? state | +--ro new-state? state | |||
| +--ro state-change-reason? string | +--ro state-change-reason? string | |||
| +--ro time-in-previous-state? string | +--ro time-in-previous-state? string | |||
| +--ro dest-addr? inet:ip-address | +--ro dest-addr? inet:ip-address | |||
| +--ro vrf-name? vrfName | ||||
| +--ro source-addr? inet:ip-address | +--ro source-addr? inet:ip-address | |||
| 2.8. Examples | 2.8. Examples | |||
| 2.9. Interaction with other YANG modules | 2.9. Interaction with other YANG modules | |||
| TBD. | TBD. | |||
| 2.10. BFD Yang Module | 2.10. BFD Yang Module | |||
| <CODE BEGINS> file "ietf-bfd@2015-06-09.yang" | <CODE BEGINS> file "ietf-bfd@2015-07-01.yang" | |||
| module ietf-bfd { | module ietf-bfd { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-bfd"; | namespace "urn:ietf:params:xml:ns:yang:ietf-bfd"; | |||
| // replace with IANA namespace when assigned | // replace with IANA namespace when assigned | |||
| prefix "bfd"; | prefix "bfd"; | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| } | } | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| } | } | |||
| import ietf-routing { | ||||
| prefix "rt"; | ||||
| } | ||||
| organization "IETF BFD Working Group"; | organization "IETF BFD Working Group"; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/bfd> | "WG Web: <http://tools.ietf.org/wg/bfd> | |||
| WG List: <rtg-bfd@ietf.org> | WG List: <rtg-bfd@ietf.org> | |||
| WG Chair: Jeff Haas | WG Chair: Jeff Haas | |||
| WG Chair: Nobo Akiya | WG Chair: Nobo Akiya | |||
| Editor: Lianshu Zheng and Reshad Rahman"; | Editor: Lianshu Zheng and Reshad Rahman"; | |||
| description | description | |||
| "This module contains the YANG definition for BFD parameters as | "This module contains the YANG definition for BFD parameters as | |||
| per RFC5880, RFC5881 and RFC5883"; | per RFC5880, RFC5881 and RFC5883"; | |||
| revision 2015-06-09 { | revision 2015-07-01 { | |||
| description "Initial revision."; | description "Initial revision."; | |||
| reference "RFC XXXX: A YANG data model for BFD"; | reference "RFC XXXX: A YANG data model for BFD"; | |||
| } | } | |||
| identity bfd { | ||||
| base "rt:routing-protocol"; | ||||
| description "BFD protocol"; | ||||
| } | ||||
| typedef discriminator { | typedef discriminator { | |||
| type uint32 { | type uint32 { | |||
| range 1..4294967295; | range 1..4294967295; | |||
| } | } | |||
| description "BFD discriminator"; | description "BFD discriminator"; | |||
| } | } | |||
| typedef diagnostic { | typedef diagnostic { | |||
| type enumeration { | type enumeration { | |||
| enum none { | enum none { | |||
| skipping to change at page 15, line 30 ¶ | skipping to change at page 18, line 48 ¶ | |||
| description "BFD state"; | description "BFD state"; | |||
| } | } | |||
| typedef multiplier { | typedef multiplier { | |||
| type uint8 { | type uint8 { | |||
| range 1..255; | range 1..255; | |||
| } | } | |||
| description "Multiplier"; | description "Multiplier"; | |||
| } | } | |||
| typedef TTL { | typedef ttl { | |||
| type uint8 { | type uint8 { | |||
| range 1..255; | range 1..255; | |||
| } | } | |||
| description "Time To Live"; | description "Time To Live"; | |||
| } | } | |||
| typedef bfd-session-type { | ||||
| type enumeration { | ||||
| enum ip-single-hop { | ||||
| description "IP single hop"; | ||||
| } | ||||
| enum ip-multi-hop { | ||||
| description "IP multi hop"; | ||||
| } | ||||
| enum te-tunnel { | ||||
| description "Traffic Engineering tunnes"; | ||||
| } | ||||
| enum ldp-lsp { | ||||
| description "LDP Label Switched Path"; | ||||
| } | ||||
| enum lag { | ||||
| description "Micro-BFD on LAG member links"; | ||||
| } | ||||
| } | ||||
| description | ||||
| "BFD session type, this indicates the path type that BFD is | ||||
| running on"; | ||||
| } | ||||
| typedef bfd-auth-algorithm { | typedef bfd-auth-algorithm { | |||
| type enumeration { | type enumeration { | |||
| enum simple-password { | enum simple-password { | |||
| description | description | |||
| "Simple password"; | "Simple password"; | |||
| } | } | |||
| enum keyed-md5 { | enum keyed-md5 { | |||
| description | description | |||
| "Keyed message Digest 5"; | "Keyed message Digest 5"; | |||
| skipping to change at page 16, line 4 ¶ | skipping to change at page 19, line 45 ¶ | |||
| } | } | |||
| enum keyed-md5 { | enum keyed-md5 { | |||
| description | description | |||
| "Keyed message Digest 5"; | "Keyed message Digest 5"; | |||
| } | } | |||
| enum meticulous-keyed-md5 { | enum meticulous-keyed-md5 { | |||
| description | description | |||
| "Meticulous keyed message Digest 5"; | "Meticulous keyed message Digest 5"; | |||
| } | } | |||
| enum keyed-sha-1 { | enum keyed-sha-1 { | |||
| description | description | |||
| "Keyed secure hash algorithm (SHA1) "; | "Keyed secure hash algorithm (SHA1) "; | |||
| } | } | |||
| enum meticulous-keyed-sha-1 { | enum meticulous-keyed-sha-1 { | |||
| description | description | |||
| "Meticulous keyed secure hash algorithm (SHA1) "; | "Meticulous keyed secure hash algorithm (SHA1) "; | |||
| } | } | |||
| } | } | |||
| description "Authentication algorithm"; | description "Authentication algorithm"; | |||
| } | } | |||
| typedef vrfName { | ||||
| type string; | ||||
| description "VRF Name"; | ||||
| } | ||||
| feature bfd-centralized-session-config { | ||||
| description "BFD session centralized config supported"; | ||||
| } | ||||
| feature bfd-interface-config { | feature bfd-interface-config { | |||
| description "BFD per-interface config supported"; | description "BFD per-interface config supported"; | |||
| } | } | |||
| feature bfd-authentication { | feature bfd-authentication { | |||
| description "BFD authentication supported"; | description "BFD authentication supported"; | |||
| } | } | |||
| grouping bfd-grouping-common-cfg-parms { | grouping bfd-grouping-base-cfg-parms { | |||
| description "BFD grouping for common config parameters"; | description "BFD grouping for base config parameters"; | |||
| leaf local-multiplier { | leaf local-multiplier { | |||
| type multiplier; | type multiplier; | |||
| default 3; | default 3; | |||
| description "Local multiplier"; | description "Multiplier transmitted by local system"; | |||
| } | } | |||
| leaf desired-min-tx-interval { | choice interval-config-type { | |||
| type uint32; | ||||
| units microseconds; | ||||
| mandatory true; | ||||
| description | description | |||
| "Desired minimum transmit interval of control packets"; | "Two interval values or 1 value used for both tx and rx"; | |||
| } | case tx-rx-intervals { | |||
| leaf desired-min-tx-interval { | ||||
| type uint32; | ||||
| units microseconds; | ||||
| mandatory true; | ||||
| description | ||||
| "Desired minimum transmit interval of control packets"; | ||||
| } | ||||
| leaf required-min-rx-interval { | leaf required-min-rx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Required minimum receive interval of control packets"; | "Required minimum receive interval of control packets"; | |||
| } | ||||
| } | ||||
| case single-interval { | ||||
| leaf min-interval { | ||||
| type uint32; | ||||
| units microseconds; | ||||
| mandatory true; | ||||
| description | ||||
| "Desired minimum transmit interval and required " + | ||||
| "minimum receive interval of control packets"; | ||||
| } | ||||
| } | ||||
| } | } | |||
| } | ||||
| grouping bfd-grouping-common-cfg-parms { | ||||
| description "BFD grouping for common config parameters"; | ||||
| uses bfd-grouping-base-cfg-parms; | ||||
| leaf demand-enabled { | leaf demand-enabled { | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description "To enbale demand mode"; | description "To enbale demand mode"; | |||
| } | } | |||
| leaf enable-authentication { | leaf enable-authentication { | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| skipping to change at page 18, line 33 ¶ | skipping to change at page 22, line 39 ¶ | |||
| by a protocol which is a client of BFD"; | by a protocol which is a client of BFD"; | |||
| container bfd-cfg { | container bfd-cfg { | |||
| description "BFD configuration"; | description "BFD configuration"; | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description "True if BFD is enabled"; | description "True if BFD is enabled"; | |||
| } | } | |||
| leaf local-multiplier { | uses bfd-grouping-base-cfg-parms; | |||
| type multiplier; | ||||
| default 3; | ||||
| description "Multiplier transmitted by local system"; | ||||
| } | ||||
| leaf desired-min-tx-interval { | ||||
| type uint32; | ||||
| units microseconds; | ||||
| mandatory true; | ||||
| description | ||||
| "Desired minimum transmit interval of control packets"; | ||||
| } | ||||
| leaf required-min-rx-interval { | ||||
| type uint32; | ||||
| units microseconds; | ||||
| mandatory true; | ||||
| description | ||||
| "Required minimum receive interval of control packets"; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping bfd-client-full-cfg-parms { | ||||
| description | ||||
| "BFD grouping for complete config parameters which could be | ||||
| used by a protocol which is a client of BFD."; | ||||
| container bfd-cfg { | ||||
| description "BFD configuration"; | ||||
| leaf enabled { | ||||
| type boolean; | ||||
| default false; | ||||
| description "True if BFD is enabled"; | ||||
| } | ||||
| uses bfd-grouping-common-cfg-parms; | ||||
| uses bfd-grouping-echo-cfg-parms; | ||||
| } | } | |||
| } | } | |||
| grouping bfd-all-session { | grouping bfd-all-session { | |||
| description "BFD session operational information"; | description "BFD session operational information"; | |||
| leaf sesssion-type { | leaf session-type { | |||
| type enumeration { | type bfd-session-type; | |||
| enum ip-single-hop { | ||||
| value "0"; | ||||
| description "IP single hop"; | ||||
| } | ||||
| enum ip-multi-hop { | ||||
| value "1"; | ||||
| description "IP multi hop"; | ||||
| } | ||||
| } | ||||
| description | description | |||
| "BFD session type, this indicates the path type that BFD is | "BFD session type, this indicates the path type that BFD is | |||
| running on"; | running on"; | |||
| } | } | |||
| leaf local-discriminator { | leaf local-discriminator { | |||
| type discriminator; | type discriminator; | |||
| description "Local discriminator"; | description "Local discriminator"; | |||
| } | } | |||
| leaf remote-discriminator { | leaf remote-discriminator { | |||
| type discriminator; | type discriminator; | |||
| skipping to change at page 20, line 4 ¶ | skipping to change at page 23, line 11 ¶ | |||
| "BFD session type, this indicates the path type that BFD is | "BFD session type, this indicates the path type that BFD is | |||
| running on"; | running on"; | |||
| } | } | |||
| leaf local-discriminator { | leaf local-discriminator { | |||
| type discriminator; | type discriminator; | |||
| description "Local discriminator"; | description "Local discriminator"; | |||
| } | } | |||
| leaf remote-discriminator { | leaf remote-discriminator { | |||
| type discriminator; | type discriminator; | |||
| description "Remote discriminator"; | description "Remote discriminator"; | |||
| } | } | |||
| leaf remote-multiplier { | leaf remote-multiplier { | |||
| type multiplier; | type multiplier; | |||
| description "Remote multiplier"; | description "Remote multiplier"; | |||
| } | } | |||
| leaf out-interface { | leaf out-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description "Outgoing physical interface name"; | description "Outgoing physical interface name"; | |||
| } | } | |||
| leaf demand-capability{ | leaf demand-capability { | |||
| type boolean; | type boolean; | |||
| description "Local demand mode capability"; | description "Local demand mode capability"; | |||
| } | } | |||
| leaf source-port { | ||||
| type inet:port-number; | ||||
| description "Source UDP port"; | ||||
| } | ||||
| leaf dest-port { | ||||
| type inet:port-number; | ||||
| description "Destination UDP port"; | ||||
| } | ||||
| list session-running { | list session-running { | |||
| description "BFD session running information"; | description "BFD session running information"; | |||
| leaf session-index { | ||||
| type uint32; | ||||
| description | ||||
| "An index used to uniquely identify BFD sessions"; | ||||
| } | ||||
| leaf local-state { | leaf local-state { | |||
| type state; | type state; | |||
| description "Local state"; | description "Local state"; | |||
| } | } | |||
| leaf remote-state { | leaf remote-state { | |||
| type state; | type state; | |||
| description "Remote state"; | description "Remote state"; | |||
| } | } | |||
| leaf local-diagnostic { | leaf local-diagnostic { | |||
| type diagnostic; | type diagnostic; | |||
| description "Local diagnostic"; | description "Local diagnostic"; | |||
| } | } | |||
| leaf remote-diagnostic { | leaf remote-diagnostic { | |||
| type diagnostic; | type diagnostic; | |||
| description "Remote diagnostic"; | description "Remote diagnostic"; | |||
| } | } | |||
| leaf detect-Mode { | leaf detection-mode { | |||
| type enumeration { | type enumeration { | |||
| enum async-with-echo { | enum async-with-echo { | |||
| value "0"; | value "1"; | |||
| description "Async with echo"; | description "Async with echo"; | |||
| } | } | |||
| enum async-without-echo { | enum async-without-echo { | |||
| value "1"; | value "2"; | |||
| description "Async without echo"; | description "Async without echo"; | |||
| } | } | |||
| enum demand-with-echo { | enum demand-with-echo { | |||
| value "2"; | value "3"; | |||
| description "Demand with echo"; | description "Demand with echo"; | |||
| } | } | |||
| enum demand-without-echo { | enum demand-without-echo { | |||
| value "3"; | value "4"; | |||
| description "Demand without echo"; | description "Demand without echo"; | |||
| } | } | |||
| } | } | |||
| description "Detect mode"; | description "Detection mode"; | |||
| } | } | |||
| leaf actual-tx-interval { | leaf negotiated-tx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| description "Actual transmit interval"; | description "Negotiated transmit interval"; | |||
| } | } | |||
| leaf actual-rx-interval { | leaf negotiated-rx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| description "Actual receive interval"; | description "Negotiated receive interval"; | |||
| } | } | |||
| leaf actual-echo-tx-interval { | leaf negotiated-echo-tx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| description "Actual echo transmit interval"; | description "Negotiated echo transmit interval"; | |||
| } | } | |||
| leaf detect-time { | leaf detection-time { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| description "Detect time"; | description "Detection time"; | |||
| } | } | |||
| } | } | |||
| list sesssion-statistics { | list sesssion-statistics { | |||
| description "BFD session statistics"; | description "BFD session statistics"; | |||
| leaf create-time { | leaf create-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Time and date when session was created"; | "Time and date when session was created"; | |||
| skipping to change at page 21, line 49 ¶ | skipping to change at page 25, line 21 ¶ | |||
| leaf last-down-time { | leaf last-down-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Time and date of last time the session went down"; | "Time and date of last time the session went down"; | |||
| } | } | |||
| leaf last-up-time { | leaf last-up-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Time and date of last time the session went up"; | "Time and date of last time the session went up"; | |||
| } | } | |||
| leaf receive-pkt { | leaf down-count { | |||
| type uint32; | ||||
| description "Session Down Count"; | ||||
| } | ||||
| leaf admin-down-count { | ||||
| type uint32; | ||||
| description "Session Admin-Down Count"; | ||||
| } | ||||
| leaf receive-packet-count { | ||||
| type uint64; | type uint64; | |||
| description "Received Packet Count"; | description "Received Packet Count"; | |||
| } | } | |||
| leaf send-pkt { | leaf send-packet-count { | |||
| type uint64; | type uint64; | |||
| description "Sent Packet Count"; | description "Sent Packet Count"; | |||
| } | } | |||
| leaf down-count { | leaf receive-bad-packet { | |||
| type uint32; | ||||
| description "Session Down Count"; | ||||
| } | ||||
| leaf receive-bad-pkt { | ||||
| type uint64; | type uint64; | |||
| description "Received bad packet count"; | description "Received bad packet count"; | |||
| } | } | |||
| leaf send-failed-pkt { | leaf send-failed-packet { | |||
| type uint64; | type uint64; | |||
| description "Packet Failed to Send Count"; | description "Packet Failed to Send Count"; | |||
| } | } | |||
| leaf short-break-count { | ||||
| type uint32; | ||||
| default "0"; | ||||
| description "Shortbreak count"; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| container bfd { | augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | |||
| description "BFD top-level container"; | + "rt:routing-protocol" { | |||
| container bfd-cfg { | when "rt:type = 'bfd:bfd'" { | |||
| description "BFD configuration"; | description | |||
| container bfd-session-cfg { | "This augment is only valid for a protocol instance | |||
| if-feature bfd-centralized-session-config; | of BFD."; | |||
| description "BFD session configuration"; | } | |||
| list session-ip-sh { | description "BFD augmentation."; | |||
| key "interface dest-addr"; | ||||
| description "List of IP single-hop sessions"; | container bfd { | |||
| description "BFD top-level container"; | ||||
| container bfd-cfg { | ||||
| description "BFD configuration"; | ||||
| container bfd-session-cfg { | ||||
| description "BFD session configuration"; | ||||
| list session-ip-mh { | ||||
| key "source-addr dest-addr"; | ||||
| description "List of IP multi-hop sessions"; | ||||
| leaf source-addr { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "Local IP address"; | ||||
| } | ||||
| leaf dest-addr { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "IP address of the peer"; | ||||
| } | ||||
| leaf admin-down { | ||||
| type boolean; | ||||
| default false; | ||||
| description | ||||
| "Is the BFD session administratively down"; | ||||
| } | ||||
| uses bfd-grouping-common-cfg-parms; | ||||
| leaf tx-ttl { | ||||
| type ttl; | ||||
| default 255; | ||||
| description "TTL of outgoing BFD control packets"; | ||||
| } | ||||
| leaf rx-ttl { | ||||
| type ttl; | ||||
| mandatory true; | ||||
| description | ||||
| "Minimum allowed TTL value for incoming BFD control | ||||
| packets"; | ||||
| } | ||||
| } | ||||
| } | ||||
| list bfd-interface-cfg { | ||||
| if-feature bfd-interface-config; | ||||
| key interface; | ||||
| description "Per-interface BFD configuration"; | ||||
| leaf interface { | leaf interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description "Interface"; | |||
| "Interface on which the IP single-hop session is | ||||
| running."; | ||||
| } | ||||
| leaf dest-addr { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "IP address of the peer"; | ||||
| } | ||||
| leaf admin-down { | ||||
| type boolean; | ||||
| default false; | ||||
| description | ||||
| "Is the BFD session administratively down"; | ||||
| } | } | |||
| uses bfd-grouping-common-cfg-parms; | uses bfd-grouping-common-cfg-parms; | |||
| uses bfd-grouping-echo-cfg-parms; | uses bfd-grouping-echo-cfg-parms; | |||
| } | ||||
| list session-ip-mh { | } | |||
| key "vrf-name source-addr dest-addr"; | } | |||
| description "List of IP multi-hop sessions"; | ||||
| leaf vrf-name { | container bfd-oper { | |||
| type vrfName; | config "false"; | |||
| description "Routing instance"; | description "BFD operational container"; | |||
| container bfd-session-statistics { | ||||
| description "BFD session counters"; | ||||
| leaf ip-sh-session-num { | ||||
| type uint32; | ||||
| description "IP single hop session number"; | ||||
| } | } | |||
| leaf source-addr { | leaf ip-mh-session-num { | |||
| type inet:ip-address; | type uint32; | |||
| description | description "IP multi hop session Number"; | |||
| "Local IP address"; | ||||
| } | } | |||
| leaf dest-addr { | leaf total-session-num { | |||
| type inet:ip-address; | type uint32; | |||
| description | description "Total session number"; | |||
| "IP address of the peer"; | ||||
| } | } | |||
| leaf admin-down { | leaf session-up-num { | |||
| type boolean; | type uint32; | |||
| default false; | description "Session up number"; | |||
| description | ||||
| "Is the BFD session administratively down"; | ||||
| } | } | |||
| uses bfd-grouping-common-cfg-parms; | leaf sess-down-num { | |||
| type uint32; | ||||
| leaf tx-ttl { | description "Session down number"; | |||
| type TTL; | ||||
| default 255; | ||||
| description "TTL of outgoing BFD control packets"; | ||||
| } | } | |||
| leaf rx-ttl { | leaf sess-admin-down-num { | |||
| type TTL; | type uint32; | |||
| mandatory true; | description "Session admin-down number"; | |||
| description | ||||
| "Minimum allowed TTL value for incoming BFD control | ||||
| packets"; | ||||
| } | } | |||
| } | } | |||
| container bfd-session-lists { | ||||
| description | ||||
| "Contains multiple session lists, one per type"; | ||||
| list session-ip-sh { | ||||
| key "interface dest-addr"; | ||||
| description "BFD IP single-hop sessions"; | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "Interface on which the BFD session is running."; | ||||
| } | ||||
| leaf dest-addr { | ||||
| type inet:ip-address; | ||||
| description "BFD peer address"; | ||||
| } | ||||
| leaf source-addr { | ||||
| type inet:ip-address; | ||||
| description "BFD source address"; | ||||
| } | ||||
| } | uses bfd-all-session; | |||
| } | ||||
| list bfd-interface-cfg { | ||||
| if-feature bfd-interface-config; | ||||
| key interface; | ||||
| description "Per-interface BFD configuration"; | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description "Interface"; | ||||
| } | ||||
| uses bfd-grouping-common-cfg-parms; | ||||
| uses bfd-grouping-echo-cfg-parms; | list session-ip-mh-group { | |||
| key "source-addr dest-addr"; | ||||
| description | ||||
| "BFD IP multi-hop group of sessions. A group of " + | ||||
| "sessions is between 1 source and 1 destination, " + | ||||
| "each session uses a different source UDP port for " + | ||||
| "ECMP."; | ||||
| leaf source-addr { | ||||
| type inet:ip-address; | ||||
| description "BFD source address"; | ||||
| } | ||||
| leaf dest-addr { | ||||
| type inet:ip-address; | ||||
| description "BFD peer address"; | ||||
| } | ||||
| list session-ip-mh { | ||||
| key "source-port"; | ||||
| description | ||||
| "The BFD sessions between a source and a. " + | ||||
| "destination. Source UDP port is unique for " + | ||||
| "each session in the group."; | ||||
| leaf ttl { | ||||
| type ttl; | ||||
| description "TTL of outgoing packets"; | ||||
| } | ||||
| uses bfd-all-session; | ||||
| } | ||||
| } | ||||
| } | list session-te-tunnel { | |||
| } | key "tunnel-name"; | |||
| description "BFD over TE tunnel"; | ||||
| container bfd-oper { | leaf tunnel-name { | |||
| config "false"; | type string; | |||
| description "BFD operational container"; | description "Name of TE tunnel"; | |||
| container bfd-session-statistics { | } | |||
| description "BFD session counters"; | uses bfd-all-session; | |||
| leaf ip-sh-session-num { | } | |||
| type uint32; | ||||
| description "IP single hop session number"; | ||||
| } | ||||
| leaf ip-mh-session-num { | ||||
| type uint32; | ||||
| description "IP multi hop session Number"; | ||||
| } | ||||
| leaf total-session-num { | ||||
| type uint32; | ||||
| description "Total session number"; | ||||
| } | ||||
| leaf session-up-num { | ||||
| type uint32; | ||||
| description "Session up number"; | ||||
| } | ||||
| leaf sess-down-num { | ||||
| type uint32; | ||||
| description "Session down number"; | ||||
| } | ||||
| } | ||||
| container bfd-session-lists { | list session-ldp-lsp-group { | |||
| description "Contains multiple session lists, one per type"; | key "ldp-fec"; | |||
| list session-ip-sh { | ||||
| key "interface dest-addr"; | ||||
| description "BFD IP single-hop sessions"; | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description | description | |||
| "Interface on which the BFD session is running."; | "BFD over LDP LSP group of sessions. A group of " + | |||
| } | "sessions is to one LDP FEC, each session uses a " + | |||
| leaf dest-addr { | "different source UDP port for ECMP."; | |||
| type inet:ip-address; | ||||
| description "BFD peer address"; | leaf ldp-fec { | |||
| type inet:ip-prefix; | ||||
| description "LDP FEC"; | ||||
| } | ||||
| list session-ldp-lsp { | ||||
| key "source-port"; | ||||
| description | ||||
| "The BFD sessions on an LDP FEC. Source UDP " + | ||||
| "port is unique for each session in the group."; | ||||
| leaf ttl { | ||||
| type ttl; | ||||
| description "TTL of outgoing packets"; | ||||
| } | ||||
| uses bfd-all-session; | ||||
| } | ||||
| } | } | |||
| uses bfd-all-session; | list session-lag { | |||
| } | key "lag-name"; | |||
| description "A LAG interface on which BFD is running"; | ||||
| leaf lag-name { | ||||
| type if:interface-ref ; | ||||
| description "Name of the LAG"; | ||||
| } | ||||
| list session-ip-mh { | list session-lag-micro { | |||
| key "vrfName source-addr dest-addr"; | key "member-link"; | |||
| description "BFD IP multi-hop sessions"; | description | |||
| leaf vrfName { | "Micro-BFD over LAG. This represents BFD " + | |||
| type vrfName; | "over one member link"; | |||
| description "VRF"; | ||||
| } | leaf member-link { | |||
| leaf source-addr { | type if:interface-ref; | |||
| type inet:ip-address; | description | |||
| description "BFD source address"; | "Member link on which micro-BFD is running"; | |||
| } | } | |||
| leaf dest-addr { | uses bfd-all-session; | |||
| type inet:ip-address; | } | |||
| description "BFD peer address"; | ||||
| } | ||||
| leaf ttl { | ||||
| type TTL; | ||||
| description "TTL of session"; | ||||
| } | } | |||
| uses bfd-all-session; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping bfd-notification-params { | grouping bfd-notification-parms { | |||
| description | description | |||
| "This group describes common params that will be send | "This group describes common parameters that will be sent " + | |||
| as part of BFD notification"; | "as part of BFD notification"; | |||
| leaf local-discr { | leaf local-discr { | |||
| type discriminator; | type discriminator; | |||
| description "BFD local discriminator"; | description "BFD local discriminator"; | |||
| } | } | |||
| leaf remote-discr { | leaf remote-discr { | |||
| type discriminator; | type discriminator; | |||
| description "BFD remote discriminator"; | description "BFD remote discriminator"; | |||
| } | } | |||
| skipping to change at page 26, line 32 ¶ | skipping to change at page 31, line 11 ¶ | |||
| leaf time-in-previous-state { | leaf time-in-previous-state { | |||
| type string; | type string; | |||
| description | description | |||
| "How long the BFD session was in the previous state"; | "How long the BFD session was in the previous state"; | |||
| } | } | |||
| leaf dest-addr { | leaf dest-addr { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| description "BFD peer address"; | description "BFD peer address"; | |||
| } | } | |||
| leaf source-addr { | ||||
| type inet:ip-address; | ||||
| description "BFD local address"; | ||||
| } | ||||
| leaf session-index { | ||||
| type uint32; | ||||
| description "An index used to uniquely identify BFD sessions"; | ||||
| } | ||||
| leaf session-type { | ||||
| type bfd-session-type; | ||||
| description "BFD session type"; | ||||
| } | ||||
| } | } | |||
| notification bfd-singlehop-notification { | notification bfd-singlehop-notification { | |||
| description | description | |||
| "Notitification for BFD single-hop session state change"; | "Notification for BFD single-hop session state change. An " + | |||
| "implementation may rate-limit notifications, e.g. when a" + | ||||
| "session is continuously changing state."; | ||||
| uses bfd-notification-params; | uses bfd-notification-parms; | |||
| leaf interface { | leaf interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description "Interface to which this BFD session belongs to"; | description "Interface to which this BFD session belongs to"; | |||
| } | } | |||
| leaf echo-enabled { | leaf echo-enabled { | |||
| type boolean; | type boolean; | |||
| description "Was echo enabled for BFD"; | description "Was echo enabled for BFD"; | |||
| } | } | |||
| skipping to change at page 27, line 4 ¶ | skipping to change at page 31, line 46 ¶ | |||
| leaf interface { | leaf interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description "Interface to which this BFD session belongs to"; | description "Interface to which this BFD session belongs to"; | |||
| } | } | |||
| leaf echo-enabled { | leaf echo-enabled { | |||
| type boolean; | type boolean; | |||
| description "Was echo enabled for BFD"; | description "Was echo enabled for BFD"; | |||
| } | } | |||
| } | } | |||
| notification bfd-multihop-notification { | notification bfd-multihop-notification { | |||
| description | description | |||
| "Notitification for BFD multi-hop session state change"; | "Notification for BFD multi-hop session state change. An " + | |||
| "implementation may rate-limit notifications, e.g. when a" + | ||||
| "session is continuously changing state."; | ||||
| uses bfd-notification-params; | uses bfd-notification-parms; | |||
| } | ||||
| leaf vrf-name { | notification bfd-te-tunnel-notification { | |||
| type vrfName; | description | |||
| description "Routing instance"; | "Notification for BFD over TE tunnel session state change. " + | |||
| "An implementation may rate-limit notifications, e.g. when a" + | ||||
| "session is continuously changing state."; | ||||
| uses bfd-notification-parms; | ||||
| leaf tunnel-name { | ||||
| type string; | ||||
| description "TE tunnel to which this BFD session belongs to"; | ||||
| } | } | |||
| } | ||||
| leaf source-addr { | notification bfd-ldp-lsp-notification { | |||
| type inet:ip-address; | description | |||
| description "BFD local address"; | "Notification for BFD over LDP LSP session state change. " + | |||
| "An implementation may rate-limit notifications, e.g. when a" + | ||||
| "session is continuously changing state."; | ||||
| uses bfd-notification-parms; | ||||
| leaf ldp-fec { | ||||
| type inet:ip-prefix; | ||||
| description "LDP FEC"; | ||||
| } | ||||
| leaf source-port { | ||||
| type inet:port-number; | ||||
| description "Source UDP port"; | ||||
| } | ||||
| } | ||||
| notification bfd-lag-notification { | ||||
| description | ||||
| "Notification for BFD over LAG session state change. " + | ||||
| "An implementation may rate-limit notifications, e.g. when a" + | ||||
| "session is continuously changing state."; | ||||
| uses bfd-notification-parms; | ||||
| leaf lag-name { | ||||
| type if:interface-ref; | ||||
| description "LAG interface name"; | ||||
| } | ||||
| leaf member-link { | ||||
| type if:interface-ref; | ||||
| description "Member link on which BFD is running"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 2.11. BFD Client Example Configuration Yang Module | 2.11. BFD Client Example Configuration Yang Module | |||
| module example-bfd-routing-app { | module example-bfd-routing-app { | |||
| namespace "urn:cisco:params:xml:ns:yang:bfdroutingapp"; | namespace "urn:ietf:params:xml:ns:yang:example-bfd-routing-app"; | |||
| prefix bfd-routing-app; | prefix bfd-routing-app; | |||
| import ietf-bfd { | import ietf-bfd { | |||
| prefix "bfd"; | prefix "bfd"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| } | } | |||
| organization | organization | |||
| "ACME"; | "ACME"; | |||
| contact | contact | |||
| "acme@acme.com"; | "acme@acme.com"; | |||
| description | description | |||
| "Testing BFD grouping (simulating a routing application)"; | "Testing BFD grouping (simulating a routing application)"; | |||
| revision 2015-02-14 { | revision 2015-07-01 { | |||
| description | description "Initial revision."; | |||
| "Initial revision."; | reference "RFC XXXX: An example BFD routing application"; | |||
| } | } | |||
| feature routing-app-bfd { | feature routing-app-bfd { | |||
| description "BFD configuration under routing-app"; | description "BFD configuration under routing-app"; | |||
| } | } | |||
| list area { | list area { | |||
| description | ||||
| "Specify a routing area."; | ||||
| key "area-id"; | key "area-id"; | |||
| description "Specify a routing area."; | ||||
| leaf area-id { | leaf area-id { | |||
| type uint32; | type uint32; | |||
| description "Area"; | ||||
| } | } | |||
| uses bfd:bfd-client-base-cfg-parms { | uses bfd:bfd-client-base-cfg-parms { | |||
| if-feature routing-app-bfd; | if-feature routing-app-bfd; | |||
| } | } | |||
| list interface { | list interface { | |||
| key "interface"; | key "interface"; | |||
| description "List of interfaces"; | ||||
| leaf interface { | leaf interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description "Interface"; | ||||
| } | } | |||
| uses bfd:bfd-client-base-cfg-parms { | uses bfd:bfd-client-base-cfg-parms { | |||
| if-feature routing-app-bfd; | if-feature routing-app-bfd; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 2.12. Security Considerations | 2.12. Security Considerations | |||
| skipping to change at page 30, line 14 ¶ | skipping to change at page 36, line 7 ¶ | |||
| [RFC7130] Bhatia, M., Chen, M., Boutros, S., Binderberger, M., and | [RFC7130] Bhatia, M., Chen, M., Boutros, S., Binderberger, M., and | |||
| J. Haas, "Bidirectional Forwarding Detection (BFD) on Link | J. Haas, "Bidirectional Forwarding Detection (BFD) on Link | |||
| Aggregation Group (LAG) Interfaces", RFC 7130, February | Aggregation Group (LAG) Interfaces", RFC 7130, February | |||
| 2014. | 2014. | |||
| 3.2. Informative References | 3.2. Informative References | |||
| [I-D.ietf-netconf-restconf] | [I-D.ietf-netconf-restconf] | |||
| Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| Protocol", draft-ietf-netconf-restconf-05 (work in | Protocol", draft-ietf-netconf-restconf-06 (work in | |||
| progress), June 2015. | progress), June 2015. | |||
| [I-D.ietf-netmod-routing-cfg] | ||||
| Lhotka, L. and A. Lindem, "A YANG Data Model for Routing | ||||
| Management", draft-ietf-netmod-routing-cfg-19 (work in | ||||
| progress), May 2015. | ||||
| Appendix A. Change log | Appendix A. Change log | |||
| RFC Editor: Remove this section upon publication as an RFC. | RFC Editor: Remove this section upon publication as an RFC. | |||
| A.1. Changes between versions -02 and -03 | A.1. Changes between versions -03 and -04 | |||
| o Follow VRF-centric model | ||||
| o IP single-hop session configuration in BFD clients | ||||
| A.2. Changes between versions -02 and -03 | ||||
| o Fixed date mismatch | o Fixed date mismatch | |||
| o Updated authors | o Updated authors | |||
| A.2. Changes between versions -01 and -02 | A.3. Changes between versions -01 and -02 | |||
| o Fixed errors and warnings from "pyang --ietf" | o Fixed errors and warnings from "pyang --ietf" | |||
| o Added appendix for "Change log" | o Added appendix for "Change log" | |||
| A.3. Changes between versions -00 and -01 | A.4. Changes between versions -00 and -01 | |||
| In the YANG module section: | In the YANG module section: | |||
| o Added missing filename | o Added missing filename | |||
| o Added missing CODE ENDS | o Added missing CODE ENDS | |||
| Authors' Addresses | Authors' Addresses | |||
| Lianshu Zheng (editor) | Lianshu Zheng (editor) | |||
| End of changes. 155 change blocks. | ||||
| 538 lines changed or deleted | 863 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||