| < draft-ietf-bfd-yang-00.txt | draft-ietf-bfd-yang-01.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: February 20, 2016 Cisco Systems | Expires: August 20, 2016 Cisco Systems | |||
| S. Pallagatti | S. Pallagatti | |||
| Juniper Networks | ||||
| M. Jethanandani | M. Jethanandani | |||
| Cisco Systems | Cisco Systems | |||
| G. Mirsky | G. Mirsky | |||
| Ericsson | Ericsson | |||
| August 19, 2015 | February 17, 2016 | |||
| Yang Data Model for Bidirectional Forwarding Detection (BFD) | Yang Data Model for Bidirectional Forwarding Detection (BFD) | |||
| draft-ietf-bfd-yang-00.txt | draft-ietf-bfd-yang-01.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 February 20, 2016. | This Internet-Draft will expire on August 20, 2016. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2016 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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Contributors . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Contributors . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 | 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Design of Configuration Model . . . . . . . . . . . . . . 4 | 2.1. Design of Configuration Model . . . . . . . . . . . . . . 4 | |||
| 2.1.1. Single-hop IP . . . . . . . . . . . . . . . . . . . . 4 | 2.1.1. Common BFD configuration parameters . . . . . . . . . 5 | |||
| 2.1.2. Multi-hop IP . . . . . . . . . . . . . . . . . . . . 5 | 2.1.2. Single-hop IP . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.1.3. Traffic Engineering Tunnels . . . . . . . . . . . . . 6 | 2.1.3. Multi-hop IP . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.1.4. LDP Label Switched Paths . . . . . . . . . . . . . . 6 | 2.1.4. MPLS Traffic Engineering Tunnels . . . . . . . . . . 6 | |||
| 2.1.5. Link Aggregation Groups . . . . . . . . . . . . . . . 6 | 2.1.5. MPLS Label Switched Paths . . . . . . . . . . . . . . 7 | |||
| 2.1.6. Per-interface Configuration . . . . . . . . . . . . . 7 | 2.1.6. Link Aggregation Groups . . . . . . . . . . . . . . . 7 | |||
| 2.2. Design of Operational Model . . . . . . . . . . . . . . . 7 | 2.2. Design of Operational Model . . . . . . . . . . . . . . . 7 | |||
| 2.3. Notifications . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3. Notifications . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.4. RPC Operations . . . . . . . . . . . . . . . . . . . . . 8 | 2.4. RPC Operations . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.5. BFD Configuration Data Hierarchy . . . . . . . . . . . . 8 | 2.5. BFD top level hierarchy . . . . . . . . . . . . . . . . . 8 | |||
| 2.5.1. Centralized BFD Configuration . . . . . . . . . . . . 8 | 2.6. BFD IP single-hop hierarchy . . . . . . . . . . . . . . . 9 | |||
| 2.5.2. Configuration in BFD clients . . . . . . . . . . . . 9 | 2.7. BFD IP multi-hop hierarchy . . . . . . . . . . . . . . . 11 | |||
| 2.6. Operational Data Hierarchy . . . . . . . . . . . . . . . 11 | 2.8. BFD over LAG hierarchy . . . . . . . . . . . . . . . . . 13 | |||
| 2.7. Notifications . . . . . . . . . . . . . . . . . . . . . . 14 | 2.9. BFD over MPLS LSPs hierarchy . . . . . . . . . . . . . . 15 | |||
| 2.8. Examples . . . . . . . . . . . . . . . . . . . . . . . . 16 | 2.10. BFD over MPLS-TE hierarchy . . . . . . . . . . . . . . . 17 | |||
| 2.9. Interaction with other YANG modules . . . . . . . . . . . 16 | 2.11. Examples . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 2.10. BFD Yang Module . . . . . . . . . . . . . . . . . . . . . 16 | 2.12. Interaction with other YANG modules . . . . . . . . . . . 19 | |||
| 2.11. BFD Client Example Configuration Yang Module . . . . . . 31 | 2.13. BFD top-level Yang Module . . . . . . . . . . . . . . . . 19 | |||
| 2.12. Security Considerations . . . . . . . . . . . . . . . . . 33 | 2.14. BFD IP single-hop Yang Module . . . . . . . . . . . . . . 32 | |||
| 2.13. IANA Considerations . . . . . . . . . . . . . . . . . . . 33 | 2.15. BFD IP multi-hop Yang Module . . . . . . . . . . . . . . 35 | |||
| 2.14. Acknowledgements . . . . . . . . . . . . . . . . . . . . 33 | 2.16. BFD over LAG Yang Module . . . . . . . . . . . . . . . . 38 | |||
| 3. References . . . . . . . . . . . . . . . . . . . . . . . . . 33 | 2.17. BFD over MPLS Yang Module . . . . . . . . . . . . . . . . 41 | |||
| 3.1. Normative References . . . . . . . . . . . . . . . . . . 33 | 2.18. BFD over MPLS-TEYang Module . . . . . . . . . . . . . . . 45 | |||
| 3.2. Informative References . . . . . . . . . . . . . . . . . 34 | 2.19. Security Considerations . . . . . . . . . . . . . . . . . 47 | |||
| Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 35 | 2.20. IANA Considerations . . . . . . . . . . . . . . . . . . . 47 | |||
| A.1. Changes between versions -03 and -04 . . . . . . . . . . 35 | 2.21. Acknowledgements . . . . . . . . . . . . . . . . . . . . 47 | |||
| A.2. Changes between versions -02 and -03 . . . . . . . . . . 35 | 3. References . . . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| A.3. Changes between versions -01 and -02 . . . . . . . . . . 35 | 3.1. Normative References . . . . . . . . . . . . . . . . . . 47 | |||
| A.4. Changes between versions -00 and -01 . . . . . . . . . . 35 | 3.2. Informative References . . . . . . . . . . . . . . . . . 49 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 49 | |||
| A.1. Changes between versions -00 and -01 . . . . . . . . . . 49 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
| 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 33 ¶ | skipping to change at page 3, line 35 ¶ | |||
| over which we have BFD: | over which we have BFD: | |||
| 1) Two systems directly connected via IP. This is known as BFD over | 1) Two systems directly connected via IP. This is known as BFD over | |||
| single-hop IP [RFC5881] | single-hop IP [RFC5881] | |||
| 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 pseudowires (PWs), this is known as | |||
| Virtual Circuit Connectivity Verification (VCCV) [RFC5885] | ||||
| 5) 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, also known as BFD clients, use the services provided by | protocols, also known as BFD clients, use the services provided by | |||
| BFD for their own operation [RFC5882]. The obvious candidates which | BFD for their own operation [RFC5882]. The obvious candidates which | |||
| use BFD are those which do not have Hellos to detect failures, e.g. | use BFD are those which do not have Hellos to detect failures, e.g. | |||
| static routes, and routing protocols whose Hellos do not suport sub- | static routes, and routing protocols whose Hellos do not support sub- | |||
| second 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 | |||
| The BFD YANG data model follows a VRF-centric model by augmenting the | Since BFD is used for liveliness detection of various forwarding | |||
| "routing-protocol" data node in [I-D.ietf-netmod-routing-cfg]. | paths, there is no uniform key to identify a BFD session. So the BFD | |||
| data model is split in multiple YANG modules where each module | ||||
| corresponds to one type of forwarding path. For example, BFD for IP | ||||
| single-hop is in one YANG module and BFD for MPLS-TE is in another | ||||
| YANG module. The main difference between these modules is how a BFD | ||||
| session is uniquely identified, i.e the key for the list containing | ||||
| the BFD sessions for that forwarding path. To avoid duplication of | ||||
| BFD definitions, we have common types and groupings which are used by | ||||
| all the modules. | ||||
| The new top-level container "bfd" is augmented by all the YANG | ||||
| modules for their respective specific information. | ||||
| The "routing-protocol" data node in [I-D.ietf-netmod-routing-cfg] has | ||||
| been augmented with the "bfd" data node. Where appropriate for | ||||
| specific types of forwarding path, the respective BFD YANG modules | ||||
| follow a VRF-centric model by augmenting that new "bfd" node under | ||||
| "routing-protocol". | ||||
| Each node in every "bfd" sub-tree has a "config" node and an "oper" | ||||
| node. | ||||
| 2.1. Design of Configuration Model | 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 session configuration under the BFD | Some implementations have BFD session configuration under the BFD | |||
| clients. For example, BFD session configuration is under routing | clients. For example, BFD session configuration is under routing | |||
| applications such as OSPF, IS-IS, BGP etc. Other implementations | applications such as OSPF, IS-IS, BGP etc. Other implementations | |||
| have BFD session configuration centralized under BFD, i.e. outside | have BFD session configuration centralized under BFD, i.e. outside | |||
| the multiple BFD clients. | the multiple BFD clients. | |||
| The BFD parameters of interest to a BFD client are mainly the | The BFD parameters of interest to a BFD client are mainly the | |||
| multiplier and interval(s) since those parameters impact the | multiplier and interval(s) since those parameters impact the | |||
| convergence time of the BFD clients when a failure occurs. So the | convergence time of the BFD clients when a failure occurs. Other | |||
| configuration model has groupings, containing multiplier and | parameters such as BFD authentication are not specific to the | |||
| interval(s), which are to be used by BFD clients. Other parameters | requirements of the BFD client. To avoid splitting the BFD | |||
| which remain under BFD control, e.g. demand mode and authentication, | configuration between BFD clients and BFD, all the configuration is | |||
| are configured under BFD. | under BFD. The only BFD configuration under BFD clients should be an | |||
| "enable" knob which makes those clients react to BFD liveliness | ||||
| detection events. | ||||
| We provide groupings, which contain the basic BFD session parameters, | 2.1.1. Common BFD configuration parameters | |||
| for applications to use. This ensures consistency of BFD parameters | ||||
| across applications. | ||||
| Although [RFC5880] allows for different values for transmit and | The basic BFD configuration parameters are: | |||
| 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". | ||||
| 2.1.1. Single-hop IP | local-multiplier | |||
| This is the detection time multiplier as defined in | ||||
| [RFC5880]. | ||||
| For single-hop IP, the BFD multiplier and interval(s) are configured | desired-min-tx-interval | |||
| in BFD clients. It is highly desirable to have the BFD configuration | This is the Desired Min TX Interval as defined in [RFC5880]. | |||
| 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 | required-min-rx-interval | |||
| all applications making use of BFD. | This is the Required Min RX Interval as defined in [RFC5880]. | |||
| - Not all implementations of those BFD clients have support for BFD, | Although [RFC5880] allows for different values for transmit and | |||
| we must use if-feature in the respective YANG modules. | receive intervals, some 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. The BFD 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". This is supported via a | ||||
| grouping which is used by the YANG modules for the various forwarding | ||||
| paths. There are also intervals for the echo function (if | ||||
| supported): | ||||
| An application importing the BFD configuration grouping could do so | desired-min-echo-tx-interval | |||
| in a hierarchical manner if it has multiple levels at which BFD | This is the minimum interval that the local system would like | |||
| configuration can be applied. In a subsequent section, we provide an | to use when transmitting BFD echo packets. If 0, the echo | |||
| example of how a BFD client would use the grouping in such a way. | function as defined in [RFC5880] is disabled. | |||
| The configuration items are: | required-min-echo-rx-interval | |||
| This is the Required Min Echo RX Interval as defined in | ||||
| [RFC5880]. | ||||
| enabled | For BFD authentication we have: | |||
| Set to true to enable BFD. | ||||
| local-multiplier | key-chain | |||
| This is the detection time multiplier as defined in | This is a reference to key-chain defined in | |||
| [RFC5880]. | [I-D.ietf-rtgwg-yang-key-chain]. The keys, cryptographic | |||
| algotihms, key lifetime etc are all defined in the key-chain | ||||
| model. | ||||
| min-interval | replay-protection | |||
| This is the Desired Min TX Interval and Required Min RX | This specifies meticulous v/s non-meticulous mode as per | |||
| Interval as defined in [RFC5880]. | [RFC5880]. | |||
| OR | 2.1.2. Single-hop IP | |||
| desired-min-tx-interval | For single-hop IP, there is an augment of the "bfd" data node under | |||
| This is the Desired Min TX Interval as defined in [RFC5880]. | "routing-protocol" in Section 2. We have a list of IP single-hop | |||
| sessions where each session is uniquely identified by the interface | ||||
| and destination address pair. For the configuration parameters we | ||||
| use what is defined in Section 2.1.1 | ||||
| required-min-rx-interval | 2.1.3. Multi-hop IP | |||
| This is the Required Min RX Interval as defined in [RFC5880]. | ||||
| 2.1.2. Multi-hop IP | For multi-hop IP, there is an augment of the "bfd" data node under | |||
| "routing-protocol" in Section 2. | ||||
| We have a list for BFD sessions over multi-hop IP. The key consists | We have a list for BFD sessions over multi-hop IP. The key consists | |||
| of: | of: | |||
| source address | source address | |||
| Address belonging to the local system as per [RFC5883] | Address belonging to the local system as per [RFC5883] | |||
| destination address | destination address | |||
| Address belonging to the remote system as per [RFC5883] | Address belonging to the remote system as per [RFC5883] | |||
| Since we are following a VRF-centric model we do not need a VRF field | Since we are following a VRF-centric model we do not need a VRF field | |||
| in the key. | in the key. | |||
| Here is the list of parameters: | For the configuration parameters we use what is defined in | |||
| Section 2.1.1 | ||||
| local-multiplier | ||||
| This is the detection time multiplier as defined in | ||||
| [RFC5880]. | ||||
| desired-min-tx-interval | ||||
| This is the Desired Min TX Interval as defined in [RFC5880]. | ||||
| required-min-rx-interval | ||||
| This is the Required Min RX Interval as defined in [RFC5880]. | ||||
| demand-enabled | ||||
| 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 | Here are some extra parameters: | |||
| Key-chain to be used for authentication, if enabled. | ||||
| tx-ttl | tx-ttl | |||
| TTL of outgoing BFD control packets. | TTL of outgoing BFD control packets. | |||
| rx-ttl | rx-ttl | |||
| Minimum TTL of incoming BFD control packets. | Minimum TTL of incoming BFD control packets. | |||
| 2.1.3. Traffic Engineering Tunnels | 2.1.4. MPLS Traffic Engineering Tunnels | |||
| For Traffic Engineering (TE) tunnels, BFD is configured under the TE | ||||
| tunnel since it is the Traffic Enginnering application which knows | ||||
| the desired failure detection parameters. The grouping for BFD | ||||
| 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. | ||||
| 2.1.4. LDP Label Switched Paths | ||||
| For LDP LSPs, BFD is configured under the LDP FEC. The grouping for | ||||
| 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.5. Link Aggregation Groups | ||||
| Per [RFC7130], configuring BFD on LAG consists of having micro-BFD | For MPLS-TE tunnels, BFD is configured under the MPLS-TE tunnel since | |||
| sessions on each LAG member link. The grouping for BFD clients in | the desired failure detection parameters is a property of the MPLS-TE | |||
| Section 2.1.1 can be used by the LAG application for the basic BFD | tunnel. This is achieved by augmenting the MPLS-TE data model in | |||
| parameters. This grouping can be used per-LAG or per member-link. | [I-D.ietf-teas-yang-te]. For BFD parameters which are specific to | |||
| For BFD parameters which are specific to the LAG application, e.g. | the TE application, e.g. whether to tear down the tunnel in the event | |||
| the IP address of the peer system which can be reached by the LAG, | of a BFD session failure, these parameters will be defined in the | |||
| the parameters will be defined in the YANG model of the LAG | YANG model of the MPLS-TE application. | |||
| application. | ||||
| 2.1.6. Per-interface Configuration | On top of the usual BFD parameters, we have the following per MPLS-TE | |||
| tunnel: | ||||
| With multiplier and intervals configured under the BFD clients, we | encap | |||
| still need a central location to configure authentication, demand | Encapsulation for the BFD packets: choice between IP, G-ACh | |||
| mode, etc. This can be done by configuring the following parameters | and IP with G-ACh as per [RFC5586] | |||
| per interface: | ||||
| demand-enabled | For general MPLS-TE data, "mpls-te" data node is added under the top- | |||
| Set to true to enable demand mode as defined in [RFC5880]. | level "bfd" node in Section 2. Since some MPLS-TE tunnels are uni- | |||
| directional there is no MPLS-TE configuration for these tunnels on | ||||
| the egress node (note that this does not apply to bi-directional | ||||
| MPLS-TP tunnels). The BFD parameters for the egress node are added | ||||
| under "mpls-te". | ||||
| enable-authentication | 2.1.5. MPLS Label Switched Paths | |||
| Set to true to enable BFD authentication. | ||||
| authentication-algorithm | Here we address MPLS LSPs whose FEC is an IP address. The top-level | |||
| Authentication algorithm to use, if enabled. | "bfd" node in Section 2 is augmented with "mpls" which contains a | |||
| list of sessions uniquely identified by an IP address. | ||||
| key-chain-name | Since these LSPs are uni-directional there is no LSP configuration on | |||
| Key-chain to be used for authentication, if enabled. | the egress node. The BFD parameters for the egress node are added | |||
| under "mpls". | ||||
| desired-min-echo-tx-interval | 2.1.6. Link Aggregation Groups | |||
| 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 | Per [RFC7130], configuring BFD on LAG consists of having micro-BFD | |||
| This is the Required Min Echo RX Interval as defined in | sessions on each LAG member link. Since the BFD parameters are an | |||
| [RFC5880]. | attribute of the LAG, they should be under the LAG. However there is | |||
| no LAG YANG model which we can augment. So a "lag" data node is | ||||
| added to the top-level "bfd" node in Section 2, the configuration is | ||||
| per-LAG: we have a list of LAGs. The destination IP address of the | ||||
| micro-BFD sessions is configured per-LAG and per address-family (IPv4 | ||||
| and IPv6) | ||||
| 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 | information. | |||
| 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 | The overall statistics of BFD sessions consist of number of BFD | |||
| destination IP address and interface whereas a multihop IP session is | sessions, number of BFD sessions up etc. This information is | |||
| uniquely identified by the combination of source IP address and | available globally (i.e. for all BFD sessions) under the top level | |||
| destination IP address (in the context of a VRF). For this reason, | "bfd" node in Section 2 and also per type of forwarding path. | |||
| for per-session operational statistics, we do not have a single list | ||||
| with different type BFD sessions. Instead, we have a container where | For each BFD session, mainly three categories of operational items | |||
| we have multiple lists, where each list corresponds to one specific | are shown. The fundamental information of a BFD session such as the | |||
| path type for BFD. For example, we have one operational list for BFD | local discriminator, remote discriminator and the capability of | |||
| single-hop IP, another list for BFD multi-hop IP, etc. In each list, | supporting demand detect mode are shown in the first category. The | |||
| mainly three categories of operational items are shown. The | second category includes a BFD session running information, e.g. the | |||
| fundamental information of a BFD session such as the local | remote BFD state and the diagnostic code received. Another example | |||
| discriminator, remote discriminator and the capability of supporting | is the actual transmit interval between the control packets, which | |||
| demand detect mode are shown in the first category. The second | may be different from the desired minimum transmit interval | |||
| category includes a BFD session running information, e.g. the FSM the | configured, is shown in this category. Similar examples are actual | |||
| device in and diagnostic code received. Another example is the | received interval between the control packets and the actual transmit | |||
| actual transmit interval between the control packets, which may be | interval between the echo packets. The third category contains the | |||
| different from the desired minimum transmit interval configured, is | detailed statistics of the session, e.g. when the session | |||
| shown in this category. Similar examples are actual received | transitioned up/down and how long it has been in that state. | |||
| interval between the control packets and the actual transmit interval | ||||
| between the echo packets. The third category contains the detailed | ||||
| statistics of the session, e.g. when the session transitioned up/down | ||||
| and how long it has been in that state. | ||||
| For some session types, there may be more than 1 session on the | For some session types, there may be more than 1 session on the | |||
| virtual path to the destination. For example, with IP multi-hop | virtual path to the destination. For example, with IP multi-hop | |||
| there could be multiple BFD sessions from the source to the same | there could be multiple BFD sessions from the source to the same | |||
| destination to test the various paths (ECMP) to the destination. | destination to test the various paths (ECMP) to the destination. | |||
| Each of the BFD sessions on the same virtual path is uniquely | Each of the BFD sessions on the same virtual path is uniquely | |||
| identified by the source UDP port | identified by the local discriminator. | |||
| 2.3. Notifications | 2.3. Notifications | |||
| This YANG model defines a list of notifications to inform clients of | This YANG model defines notifications to inform clients of BFD of | |||
| BFD of important events detected during the protocol operation. Pair | important events detected during the protocol operation. Pair of | |||
| of local and remote discriminator identifies a BFD session on local | local and remote discriminator identifies a BFD session on local | |||
| system. Notifications also give more important details about BFD | system. Notifications also give more important details about BFD | |||
| sessions; e.g. new state, time in previous state, routing-instance | sessions; e.g. new state, time in previous state, routing-instance | |||
| and the reason that the BFD session state changed. | and the reason that the BFD session state changed. The notifications | |||
| are defined for each type of forwarding path but use groupings for | ||||
| common information. | ||||
| 2.4. RPC Operations | 2.4. RPC Operations | |||
| TBD | TBD | |||
| 2.5. BFD Configuration Data Hierarchy | 2.5. BFD top level hierarchy | |||
| 2.5.1. Centralized BFD Configuration | ||||
| The following is the centralized configuration data hierarchy: | ||||
| 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 for authentication, demand-mode, | ||||
| etc. This is used e.g. for IP single-hop sessions whose base BFD | ||||
| configuration belongs to the BFD clients. | ||||
| At the top level there is no configuration data, only operational | ||||
| data. The operational data consist of overall BFD session statistics | ||||
| globally and per routing-instance | ||||
| module: ietf-bfd | module: ietf-bfd | |||
| augment /rt:routing/rt:routing-instance/rt:routing-protocols/ | +--rw bfd! | |||
| rt:routing-protocol: | +--rw config | |||
| +--rw bfd | +--ro oper | |||
| +--rw bfd-cfg | +--ro bfd-session-statistics | |||
| | +--rw bfd-session-cfg | +--ro session-count? uint32 | |||
| | | +--rw session-ip-mh* [source-addr dest-addr] | +--ro session-up-count? uint32 | |||
| | | +--rw source-addr inet:ip-address | +--ro session-down-count? uint32 | |||
| | | +--rw dest-addr inet:ip-address | +--ro session-admin-down-count? uint32 | |||
| | | +--rw admin-down? boolean | augment /rt:routing/rt:routing-instance | |||
| | | +--rw local-multiplier? multiplier | /rt:routing-protocols/rt:routing-protocol: | |||
| | | +--rw (interval-config-type)? | +--rw bfd! | |||
| | | | +--:(tx-rx-intervals) | +--rw config | |||
| | | | | +--rw desired-min-tx-interval uint32 | +--ro oper | |||
| | | | | +--rw required-min-rx-interval uint32 | +--ro bfd-session-statistics | |||
| | | | +--:(single-interval) | +--ro session-count? uint32 | |||
| | | | +--rw min-interval uint32 | +--ro session-up-count? uint32 | |||
| | | +--rw demand-enabled? boolean | +--ro session-down-count? uint32 | |||
| | | +--rw enable-authentication? boolean | +--ro session-admin-down-count? uint32 | |||
| | | +--rw authentication-parms {bfd-authentication}? | ||||
| | | | +--rw key-chain-name? string | ||||
| | | | +--rw algorithm? bfd-auth-algorithm | ||||
| | | +--rw tx-ttl? ttl | ||||
| | | +--rw rx-ttl ttl | ||||
| | +--rw bfd-interface-cfg* [interface] {bfd-interface-config}? | ||||
| | +--rw interface if:interface-ref | ||||
| | +--rw local-multiplier? multiplier | ||||
| | +--rw (interval-config-type)? | ||||
| | | +--:(tx-rx-intervals) | ||||
| | | | +--rw desired-min-tx-interval uint32 | ||||
| | | | +--rw required-min-rx-interval uint32 | ||||
| | | +--:(single-interval) | ||||
| | | +--rw min-interval uint32 | ||||
| | +--rw demand-enabled? boolean | ||||
| | +--rw enable-authentication? boolean | ||||
| | +--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 | ||||
| The following is the configuration data hierarchy for a hypothetical | ||||
| BFD client called example-bfd-routing-app. The BFD configuration is | ||||
| supported conditionally via use of if-feature. | ||||
| We have a list of areas and in each area we have a list of | 2.6. BFD IP single-hop hierarchy | |||
| interfaces. The BFD configuration grouping is used in a hierarchical | ||||
| fashion, it can be applied in "area" and "interface": | ||||
| - If BFD configuration is applied under an interface, that | The configuration and operational data for each BFD IP single-hop | |||
| configuration takes precedence over any BFD configuration, if any, at | session is under "ip-sh" node under routing-instance. Overall BFD IP | |||
| the area level | single-hop session statistics are available per routing-instance and | |||
| globally (for all routing instances). | ||||
| - If BFD configuration is applied under an "area" and none of the | module: ietf-bfd-ip-sh | |||
| interfaces in that area has BFD configuration, then all interfaces | augment /bfd:bfd: | |||
| belong to the "area" in question inherit the BFD configuration for | +--rw ip-sh | |||
| the area in question. | +--rw config | |||
| +--ro oper | ||||
| +--ro bfd-session-statistics | ||||
| +--ro session-count? uint32 | ||||
| +--ro session-up-count? uint32 | ||||
| +--ro session-down-count? uint32 | ||||
| +--ro session-admin-down-count? uint32 | ||||
| augment /rt:routing/rt:routing-instance/rt:routing-protocols | ||||
| /rt:routing-protocol/bfd:bfd: | ||||
| +--rw ip-sh | ||||
| +--rw config | ||||
| | +--rw session-cfg | ||||
| | +--rw sessions* [interface dest-addr] | ||||
| | +--rw interface if:interface-ref | ||||
| | +--rw dest-addr inet:ip-address | ||||
| | +--rw source-addr? inet:ip-address | ||||
| | +--rw local-multiplier? bfd-multiplier | ||||
| | +--rw (interval-config-type)? | ||||
| | | +--:(tx-rx-intervals) | ||||
| | | | +--rw desired-min-tx-interval uint32 | ||||
| | | | +--rw required-min-rx-interval uint32 | ||||
| | | +--:(single-interval) | ||||
| | | +--rw min-interval uint32 | ||||
| | +--rw demand-enabled? boolean | ||||
| | +--rw admin-down? boolean | ||||
| | +--rw authentication-parms! {bfd-authentication}? | ||||
| | | +--rw key-chain? kc:key-chain-ref | ||||
| | | +--rw replay-protection? identityref | ||||
| | +--rw desired-min-echo-tx-interval? uint32 | ||||
| | +--rw required-min-echo-rx-interval? uint32 | ||||
| +--ro oper | ||||
| +--ro bfd-session-statistics | ||||
| | +--ro session-count? uint32 | ||||
| | +--ro session-up-count? uint32 | ||||
| | +--ro session-down-count? uint32 | ||||
| | +--ro session-admin-down-count? uint32 | ||||
| +--ro sessions* [interface dest-addr] | ||||
| +--ro interface if:interface-ref | ||||
| +--ro dest-addr inet:ip-address | ||||
| +--ro source-addr? inet:ip-address | ||||
| +--ro path-type? identityref | ||||
| +--ro local-discriminator? bfd-discriminator | ||||
| +--ro remote-discriminator? bfd-discriminator | ||||
| +--ro remote-multiplier? bfd-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? bfd-state | ||||
| | +--ro remote-state? bfd-state | ||||
| | +--ro local-diagnostic? bfd-diagnostic | ||||
| | +--ro remote-diagnostic? bfd-diagnostic | ||||
| | +--ro detection-mode? enumeration | ||||
| | +--ro negotiated-tx-interval? uint32 | ||||
| | +--ro negotiated-rx-interval? uint32 | ||||
| | +--ro echo-tx-interval-in-use? 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 | ||||
| notifications: | ||||
| +---n bfd-singlehop-notification | ||||
| +--ro local-discr? bfd-discriminator | ||||
| +--ro remote-discr? bfd-discriminator | ||||
| +--ro new-state? bfd-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 path-type? identityref | ||||
| +--ro interface? if:interface-ref | ||||
| +--ro echo-enabled? boolean | ||||
| - If the BFD client implementation supports "interface all", then all | 2.7. BFD IP multi-hop hierarchy | |||
| the interfaces belonging to that area will inherit the BFD | ||||
| configuration under "interface all". Additionally, if there is | ||||
| specific interface configuration, then the specific interface will | ||||
| override the "interface all" parameters. | ||||
| - The tx and rx intervals can be configured separately or a single | The configuration and operational data for each BFD IP multi-hop | |||
| interval can be configured. | session is under "ip-mh" node under routing-instance. In the | |||
| operational model we support multiple BFD multi-hop sessions per | ||||
| remote address (ECMP), the local discriminator is used as key. | ||||
| Overall BFD IP multi-hop session statistics are available per | ||||
| routing-instance and globally (for all routing instances). | ||||
| module: example-bfd-routing-app | module: ietf-bfd-ip-mh | |||
| +--rw area* [area-id] | augment /bfd:bfd: | |||
| +--rw area-id uint32 | +--rw ip-mh | |||
| +--rw bfd-cfg | +--rw config | |||
| | +--rw enabled? boolean | +--ro oper | |||
| | +--rw local-multiplier? multiplier | +--ro bfd-session-statistics | |||
| | +--rw (interval-config-type)? | +--ro session-count? uint32 | |||
| | +--:(tx-rx-intervals) | +--ro session-up-count? uint32 | |||
| | | +--rw desired-min-tx-interval uint32 | +--ro session-down-count? uint32 | |||
| | | +--rw required-min-rx-interval uint32 | +--ro session-admin-down-count? uint32 | |||
| | +--:(single-interval) | augment /rt:routing/rt:routing-instance/rt:routing-protocols | |||
| | +--rw min-interval uint32 | /rt:routing-protocol/bfd:bfd: | |||
| +--rw interface* [interface] | +--rw ip-mh | |||
| +--rw interface if:interface-ref | +--rw config | |||
| +--rw bfd-cfg | | +--rw session-cfg | |||
| +--rw enabled? boolean | | +--rw sessions* [source-addr dest-addr] | |||
| +--rw local-multiplier? multiplier | | +--rw source-addr inet:ip-address | |||
| +--rw (interval-config-type)? | | +--rw dest-addr inet:ip-address | |||
| +--:(tx-rx-intervals) | | +--rw local-multiplier? bfd-multiplier | |||
| | +--rw desired-min-tx-interval uint32 | | +--rw (interval-config-type)? | |||
| | +--rw required-min-rx-interval uint32 | | | +--:(tx-rx-intervals) | |||
| +--:(single-interval) | | | | +--rw desired-min-tx-interval uint32 | |||
| +--rw min-interval uint32 | | | | +--rw required-min-rx-interval uint32 | |||
| | | +--:(single-interval) | ||||
| | | +--rw min-interval uint32 | ||||
| | +--rw demand-enabled? boolean | ||||
| | +--rw admin-down? boolean | ||||
| | +--rw authentication-parms! {bfd-authentication}? | ||||
| | | +--rw key-chain? kc:key-chain-ref | ||||
| | | +--rw replay-protection? identityref | ||||
| | +--rw tx-ttl? bfd:ttl | ||||
| | +--rw rx-ttl bfd:ttl | ||||
| +--ro oper | ||||
| +--ro bfd-session-statistics | ||||
| | +--ro bfd-session-statistics | ||||
| | +--ro session-count? uint32 | ||||
| | +--ro session-up-count? uint32 | ||||
| | +--ro session-down-count? uint32 | ||||
| | +--ro session-admin-down-count? uint32 | ||||
| +--ro session-group* [source-addr dest-addr] | ||||
| +--ro source-addr inet:ip-address | ||||
| +--ro dest-addr inet:ip-address | ||||
| +--ro sessions* [local-discriminator] | ||||
| +--ro ttl? bfd:ttl | ||||
| +--ro path-type? identityref | ||||
| +--ro local-discriminator bfd-discriminator | ||||
| +--ro remote-discriminator? bfd-discriminator | ||||
| +--ro remote-multiplier? bfd-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? bfd-state | ||||
| | +--ro remote-state? bfd-state | ||||
| | +--ro local-diagnostic? bfd-diagnostic | ||||
| | +--ro remote-diagnostic? bfd-diagnostic | ||||
| | +--ro detection-mode? enumeration | ||||
| | +--ro negotiated-tx-interval? uint32 | ||||
| | +--ro negotiated-rx-interval? uint32 | ||||
| | +--ro echo-tx-interval-in-use? 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 | ||||
| notifications: | ||||
| +---n bfd-multihop-notification | ||||
| +--ro local-discr? bfd-discriminator | ||||
| +--ro remote-discr? bfd-discriminator | ||||
| +--ro new-state? bfd-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 path-type? identityref | ||||
| +--ro routing-instance? rt:routing-instance-ref | ||||
| 2.6. Operational Data Hierarchy | 2.8. BFD over LAG hierarchy | |||
| The complete data hierarchy of BFD YANG operational model is | The configuration and operational data for each BFD LAG session is | |||
| presented below. | under "lag" node. Overall BFD LAG session statistics are available | |||
| globally. | ||||
| module: ietf-bfd | module: ietf-bfd-lag | |||
| augment /rt:routing/rt:routing-instance/rt:routing-protocols/ | augment /bfd:bfd: | |||
| rt:routing-protocol: | +--rw lag | |||
| +--rw bfd | +--rw config | |||
| +--ro bfd-oper | | +--rw session-cfg | |||
| +--ro bfd-session-statistics | | +--rw sessions* [lag-name] | |||
| | +--ro ip-sh-session-num? uint32 | | +--rw lag-name if:interface-ref | |||
| | +--ro ip-mh-session-num? uint32 | | +--rw ipv4-dest-addr? inet:ipv4-address | |||
| | +--ro total-session-num? uint32 | | +--rw ipv6-dest-addr? inet:ipv6-address | |||
| | +--ro session-up-num? uint32 | | +--rw local-multiplier? bfd-multiplier | |||
| | +--ro sess-down-num? uint32 | | +--rw (interval-config-type)? | |||
| | +--ro sess-admin-down-num? uint32 | | | +--:(tx-rx-intervals) | |||
| +--ro bfd-session-lists | | | | +--rw desired-min-tx-interval uint32 | |||
| +--ro session-ip-sh* [interface dest-addr] | | | | +--rw required-min-rx-interval uint32 | |||
| | +--ro interface if:interface-ref | | | +--:(single-interval) | |||
| | +--ro dest-addr inet:ip-address | | | +--rw min-interval uint32 | |||
| | +--ro source-addr? inet:ip-address | | +--rw demand-enabled? boolean | |||
| | +--ro session-type? bfd-session-type | | +--rw admin-down? boolean | |||
| | +--ro local-discriminator? discriminator | | +--rw authentication-parms! {bfd-authentication}? | |||
| | +--ro remote-discriminator? discriminator | | +--rw key-chain? kc:key-chain-ref | |||
| | +--ro remote-multiplier? multiplier | | +--rw replay-protection? identityref | |||
| | +--ro out-interface? if:interface-ref | +--ro oper | |||
| | +--ro demand-capability? boolean | +--ro micro-bfd-ipv4-session-statistics | |||
| | +--ro source-port? inet:port-number | | +--ro bfd-session-statistics | |||
| | +--ro dest-port? inet:port-number | | +--ro session-count? uint32 | |||
| | +--ro session-running* | | +--ro session-up-count? uint32 | |||
| | | +--ro session-index? uint32 | | +--ro session-down-count? uint32 | |||
| | | +--ro local-state? state | | +--ro session-admin-down-count? uint32 | |||
| | | +--ro remote-state? state | +--ro micro-bfd-ipv6-session-statistics | |||
| | | +--ro local-diagnostic? diagnostic | | +--ro bfd-session-statistics | |||
| | | +--ro remote-diagnostic? diagnostic | | +--ro session-count? uint32 | |||
| | | +--ro detection-mode? enumeration | | +--ro session-up-count? uint32 | |||
| | | +--ro negotiated-tx-interval? uint32 | | +--ro session-down-count? uint32 | |||
| | | +--ro negotiated-rx-interval? uint32 | | +--ro session-admin-down-count? uint32 | |||
| | | +--ro negotiated-echo-tx-interval? uint32 | +--ro session-lag* [lag-name] | |||
| | | +--ro detection-time? uint32 | +--ro lag-name if:interface-ref | |||
| | +--ro sesssion-statistics* | +--ro use-ipv4? boolean | |||
| | +--ro create-time? yang:date-and-time | +--ro use-ipv6? boolean | |||
| | +--ro last-down-time? yang:date-and-time | +--ro member-links* [member-link] | |||
| | +--ro last-up-time? yang:date-and-time | +--ro member-link if:interface-ref | |||
| | +--ro down-count? uint32 | +--ro micro-bfd-ipv4 | |||
| | +--ro admin-down-count? uint32 | | +--ro path-type? identityref | |||
| | +--ro receive-packet-count? uint64 | | +--ro local-discriminator? bfd-discriminator | |||
| | +--ro send-packet-count? uint64 | | +--ro remote-discriminator? bfd-discriminator | |||
| | +--ro receive-bad-packet? uint64 | | +--ro remote-multiplier? bfd-multiplier | |||
| | +--ro send-failed-packet? uint64 | | +--ro out-interface? if:interface-ref | |||
| +--ro session-ip-mh-group* [source-addr dest-addr] | | +--ro demand-capability? boolean | |||
| | +--ro source-addr inet:ip-address | | +--ro source-port? inet:port-number | |||
| | +--ro dest-addr inet:ip-address | | +--ro dest-port? inet:port-number | |||
| | +--ro session-ip-mh* [source-port] | | +--ro session-running | |||
| | +--ro ttl? ttl | | | +--ro session-index? uint32 | |||
| | +--ro session-type? bfd-session-type | | | +--ro local-state? bfd-state | |||
| | +--ro local-discriminator? discriminator | | | +--ro remote-state? bfd-state | |||
| | +--ro remote-discriminator? discriminator | | | +--ro local-diagnostic? bfd-diagnostic | |||
| | +--ro remote-multiplier? multiplier | | | +--ro remote-diagnostic? bfd-diagnostic | |||
| | +--ro out-interface? if:interface-ref | | | +--ro detection-mode? enumeration | |||
| | +--ro demand-capability? boolean | | | +--ro negotiated-tx-interval? uint32 | |||
| | +--ro source-port inet:port-number | | | +--ro negotiated-rx-interval? uint32 | |||
| | +--ro dest-port? inet:port-number | | | +--ro echo-tx-interval-in-use? uint32 | |||
| | +--ro session-running* | | | +--ro detection-time? uint32 | |||
| | | +--ro session-index? uint32 | | +--ro sesssion-statistics | |||
| | | +--ro local-state? state | | +--ro create-time? yang:date-and-time | |||
| | | +--ro remote-state? state | | +--ro last-down-time? yang:date-and-time | |||
| | | +--ro local-diagnostic? diagnostic | | +--ro last-up-time? yang:date-and-time | |||
| | | +--ro remote-diagnostic? diagnostic | | +--ro down-count? uint32 | |||
| | | +--ro detection-mode? enumeration | | +--ro admin-down-count? uint32 | |||
| | | +--ro negotiated-tx-interval? uint32 | | +--ro receive-packet-count? uint64 | |||
| | | +--ro negotiated-rx-interval? uint32 | | +--ro send-packet-count? uint64 | |||
| | | +--ro negotiated-echo-tx-interval? uint32 | | +--ro receive-bad-packet? uint64 | |||
| | | +--ro detection-time? uint32 | | +--ro send-failed-packet? uint64 | |||
| | +--ro sesssion-statistics* | +--ro micro-bfd-ipv6 | |||
| | +--ro create-time? yang:date-and-time | +--ro path-type? identityref | |||
| | +--ro last-down-time? yang:date-and-time | +--ro local-discriminator? bfd-discriminator | |||
| | +--ro last-up-time? yang:date-and-time | +--ro remote-discriminator? bfd-discriminator | |||
| | +--ro down-count? uint32 | +--ro remote-multiplier? bfd-multiplier | |||
| | +--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-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 out-interface? if:interface-ref | |||
| +--ro demand-capability? boolean | +--ro demand-capability? boolean | |||
| +--ro source-port? inet:port-number | +--ro source-port? inet:port-number | |||
| +--ro dest-port? inet:port-number | +--ro dest-port? inet:port-number | |||
| +--ro session-running* | +--ro session-running | |||
| | +--ro session-index? uint32 | | +--ro session-index? uint32 | |||
| | +--ro local-state? state | | +--ro local-state? bfd-state | |||
| | +--ro remote-state? state | | +--ro remote-state? bfd-state | |||
| | +--ro local-diagnostic? diagnostic | | +--ro local-diagnostic? bfd-diagnostic | |||
| | +--ro remote-diagnostic? diagnostic | | +--ro remote-diagnostic? bfd-diagnostic | |||
| | +--ro detection-mode? enumeration | | +--ro detection-mode? enumeration | |||
| | +--ro negotiated-tx-interval? uint32 | | +--ro negotiated-tx-interval? uint32 | |||
| | +--ro negotiated-rx-interval? uint32 | | +--ro negotiated-rx-interval? uint32 | |||
| | +--ro negotiated-echo-tx-interval? uint32 | | +--ro echo-tx-interval-in-use? uint32 | |||
| | +--ro detection-time? 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 down-count? uint32 | +--ro down-count? uint32 | |||
| +--ro admin-down-count? uint32 | +--ro admin-down-count? uint32 | |||
| +--ro receive-packet-count? uint64 | +--ro receive-packet-count? uint64 | |||
| +--ro send-packet-count? uint64 | +--ro send-packet-count? uint64 | |||
| +--ro receive-bad-packet? uint64 | +--ro receive-bad-packet? uint64 | |||
| +--ro send-failed-packet? uint64 | +--ro send-failed-packet? uint64 | |||
| notifications: | ||||
| +---n bfd-lag-notification | ||||
| +--ro local-discr? bfd-discriminator | ||||
| +--ro remote-discr? bfd-discriminator | ||||
| +--ro new-state? bfd-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 path-type? identityref | ||||
| +--ro lag-name? if:interface-ref | ||||
| +--ro member-link? if:interface-ref | ||||
| 2.7. Notifications | 2.9. BFD over MPLS LSPs hierarchy | |||
| The BFD YANG data model defines notifications for BFD session state | The configuration is per MPLS FEC under "mpls". In the operational | |||
| changes. | model we support multiple BFD sessions per MPLS FEC (ECMP), the local | |||
| discriminator is used as key. | ||||
| module: ietf-bfd | module: ietf-bfd-mpls | |||
| augment /rt:routing/rt:routing-instance/rt:routing-protocols/ | augment /bfd:bfd: | |||
| rt:routing-protocol: | ||||
| +--rw mpls | ||||
| +--rw config | ||||
| | +--rw egress | ||||
| | +--rw local-multiplier? bfd-multiplier | ||||
| | +--rw (interval-config-type)? | ||||
| | | +--:(tx-rx-intervals) | ||||
| | | | +--rw desired-min-tx-interval uint32 | ||||
| | | | +--rw required-min-rx-interval uint32 | ||||
| | | +--:(single-interval) | ||||
| | | +--rw min-interval uint32 | ||||
| | +--rw authentication-parms! {bfd-authentication}? | ||||
| | +--rw key-chain? kc:key-chain-ref | ||||
| | +--rw replay-protection? identityref | ||||
| +--ro oper | ||||
| +--ro bfd-session-statistics | ||||
| +--ro session-count? uint32 | ||||
| +--ro session-up-count? uint32 | ||||
| +--ro session-down-count? uint32 | ||||
| +--ro session-admin-down-count? uint32 | ||||
| augment /rt:routing/rt:routing-instance/rt:routing-protocols | ||||
| /rt:routing-protocol/bfd:bfd: | ||||
| +--rw mpls | ||||
| +--rw config | ||||
| | +--rw session-cfg | ||||
| | +--rw sessions* [mpls-fec] | ||||
| | +--rw mpls-fec inet:ip-address | ||||
| | +--rw local-multiplier? bfd-multiplier | ||||
| | +--rw (interval-config-type)? | ||||
| | | +--:(tx-rx-intervals) | ||||
| | | | +--rw desired-min-tx-interval uint32 | ||||
| | | | +--rw required-min-rx-interval uint32 | ||||
| | | +--:(single-interval) | ||||
| | | +--rw min-interval uint32 | ||||
| | +--rw demand-enabled? boolean | ||||
| | +--rw admin-down? boolean | ||||
| | +--rw authentication-parms! {bfd-authentication}? | ||||
| | +--rw key-chain? kc:key-chain-ref | ||||
| | +--rw replay-protection? identityref | ||||
| +--ro oper | ||||
| +--ro bfd-session-statistics | ||||
| | +--ro session-count? uint32 | ||||
| | +--ro session-up-count? uint32 | ||||
| | +--ro session-down-count? uint32 | ||||
| | +--ro session-admin-down-count? uint32 | ||||
| +--ro session-group* [mpls-fec] | ||||
| +--ro mpls-fec inet:ip-address | ||||
| +--ro sessions* [local-discriminator] | ||||
| +--ro path-type? identityref | ||||
| +--ro local-discriminator bfd-discriminator | ||||
| +--ro remote-discriminator? bfd-discriminator | ||||
| +--ro remote-multiplier? bfd-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? bfd-state | ||||
| | +--ro remote-state? bfd-state | ||||
| | +--ro local-diagnostic? bfd-diagnostic | ||||
| | +--ro remote-diagnostic? bfd-diagnostic | ||||
| | +--ro detection-mode? enumeration | ||||
| | +--ro negotiated-tx-interval? uint32 | ||||
| | +--ro negotiated-rx-interval? uint32 | ||||
| | +--ro echo-tx-interval-in-use? 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 mpls-dest-address? inet:ip-address | ||||
| notifications: | notifications: | |||
| +---n bfd-singlehop-notification | +---n bfd-mpls-notification | |||
| | +--ro local-discr? discriminator | +--ro local-discr? bfd-discriminator | |||
| | +--ro remote-discr? discriminator | +--ro remote-discr? bfd-discriminator | |||
| | +--ro new-state? state | +--ro new-state? bfd-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 interface? if:interface-ref | ||||
| | +--ro echo-enabled? boolean | ||||
| +---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 remote-discr? discriminator | ||||
| +--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 source-addr? inet:ip-address | |||
| +--ro session-index? uint32 | ||||
| +--ro path-type? identityref | ||||
| +--ro routing-instance? rt:routing-instance-ref | ||||
| +--ro mpls-dest-address? inet:ip-address | ||||
| 2.8. Examples | 2.10. BFD over MPLS-TE hierarchy | |||
| 2.9. Interaction with other YANG modules | The MPLS-TE YANG model [I-D.ietf-teas-yang-te] is augmented. BFD is | |||
| configured per MPLS-TE tunnel, and BFD session operational data is | ||||
| provided per MPLS-TE LSP. | ||||
| module: ietf-bfd-mpls-te | ||||
| augment /bfd:bfd: | ||||
| +--rw mpls-te | ||||
| +--rw config | ||||
| | +--rw egress | ||||
| | +--rw local-multiplier? bfd-multiplier | ||||
| | +--rw (interval-config-type)? | ||||
| | | +--:(tx-rx-intervals) | ||||
| | | | +--rw desired-min-tx-interval uint32 | ||||
| | | | +--rw required-min-rx-interval uint32 | ||||
| | | +--:(single-interval) | ||||
| | | +--rw min-interval uint32 | ||||
| | +--rw authentication-parms! {bfd-authentication}? | ||||
| | +--rw key-chain? kc:key-chain-ref | ||||
| | +--rw replay-protection? identityref | ||||
| +--ro oper | ||||
| +--ro bfd-session-statistics | ||||
| +--ro session-count? uint32 | ||||
| +--ro session-up-count? uint32 | ||||
| +--ro session-down-count? uint32 | ||||
| +--ro session-admin-down-count? uint32 | ||||
| augment /te:te/te:tunnels/te:tunnel/te:config: | ||||
| +--rw local-multiplier? bfd-multiplier | ||||
| +--rw (interval-config-type)? | ||||
| | +--:(tx-rx-intervals) | ||||
| | | +--rw desired-min-tx-interval uint32 | ||||
| | | +--rw required-min-rx-interval uint32 | ||||
| | +--:(single-interval) | ||||
| | +--rw min-interval uint32 | ||||
| +--rw demand-enabled? boolean | ||||
| +--rw admin-down? boolean | ||||
| +--rw authentication-parms! {bfd-authentication}? | ||||
| | +--rw key-chain? kc:key-chain-ref | ||||
| | +--rw replay-protection? identityref | ||||
| +--rw encap? identityref | ||||
| augment /te:te/te:lsps-state/te:lsp: | ||||
| +--ro path-type? identityref | ||||
| +--ro local-discriminator? bfd-discriminator | ||||
| +--ro remote-discriminator? bfd-discriminator | ||||
| +--ro remote-multiplier? bfd-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? bfd-state | ||||
| | +--ro remote-state? bfd-state | ||||
| | +--ro local-diagnostic? bfd-diagnostic | ||||
| | +--ro remote-diagnostic? bfd-diagnostic | ||||
| | +--ro detection-mode? enumeration | ||||
| | +--ro negotiated-tx-interval? uint32 | ||||
| | +--ro negotiated-rx-interval? uint32 | ||||
| | +--ro echo-tx-interval-in-use? 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 mpls-dest-address? inet:ip-address | ||||
| notifications: | ||||
| +---n bfd-mpls-te-notification | ||||
| +--ro local-discr? bfd-discriminator | ||||
| +--ro remote-discr? bfd-discriminator | ||||
| +--ro new-state? bfd-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 path-type? identityref | ||||
| +--ro mpls-dest-address? inet:ip-address | ||||
| +--ro tunnel-name? string | ||||
| 2.11. Examples | ||||
| 2.12. Interaction with other YANG modules | ||||
| TBD. | TBD. | |||
| 2.10. BFD Yang Module | 2.13. BFD top-level Yang Module | |||
| <CODE BEGINS> file "ietf-bfd@2015-07-01.yang" | <CODE BEGINS> file "ietf-bfd@2016-02-17.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 { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| import ietf-key-chain { | ||||
| prefix "kc"; | ||||
| } | ||||
| 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: Reshad Rahman | |||
| 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."; | |||
| revision 2016-02-17 { | ||||
| description | ||||
| "* Split in several modules | ||||
| * This module contains common definitions and | ||||
| summary information."; | ||||
| reference "RFC XXXX: A YANG data model for BFD"; | ||||
| } | ||||
| revision 2015-07-01 { | 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 { | identity bfd { | |||
| base "rt:routing-protocol"; | base "rt:routing-protocol"; | |||
| description "BFD protocol"; | description "BFD protocol"; | |||
| } | } | |||
| typedef discriminator { | typedef bfd-discriminator { | |||
| type uint32 { | type uint32 { | |||
| range 1..4294967295; | range 1..4294967295; | |||
| } | } | |||
| description "BFD discriminator"; | description "BFD discriminator"; | |||
| } | } | |||
| typedef diagnostic { | ||||
| typedef bfd-diagnostic { | ||||
| type enumeration { | type enumeration { | |||
| enum none { | enum none { | |||
| value 0; | value 0; | |||
| description "None"; | description "None"; | |||
| } | } | |||
| enum controlExpiry { | enum controlExpiry { | |||
| value 1; | value 1; | |||
| description "Control timer expiry"; | description "Control timer expiry"; | |||
| } | } | |||
| enum echoFailed { | enum echoFailed { | |||
| skipping to change at page 18, line 4 ¶ | skipping to change at page 21, line 48 ¶ | |||
| value 6; | value 6; | |||
| description "Concatenated path down"; | description "Concatenated path down"; | |||
| } | } | |||
| enum adminDown { | enum adminDown { | |||
| value 7; | value 7; | |||
| description "Admin down"; | description "Admin down"; | |||
| } | } | |||
| enum reverseConcPathDown { | enum reverseConcPathDown { | |||
| value 8; | value 8; | |||
| description "Reverse concatenated path down"; | description "Reverse concatenated path down"; | |||
| } | } | |||
| } | } | |||
| description "BFD diagnostic"; | description "BFD diagnostic"; | |||
| } | } | |||
| typedef state { | typedef bfd-state { | |||
| type enumeration { | type enumeration { | |||
| enum adminDown { | enum adminDown { | |||
| value 0; | value 0; | |||
| description "admindown"; | description "admindown"; | |||
| } | } | |||
| enum down { | enum down { | |||
| value 1; | value 1; | |||
| description "down"; | description "down"; | |||
| } | } | |||
| enum init { | enum init { | |||
| value 2; | value 2; | |||
| description "init"; | description "init"; | |||
| } | } | |||
| enum up { | enum up { | |||
| value 3; | value 3; | |||
| description "up"; | description "up"; | |||
| } | } | |||
| } | } | |||
| description "BFD state"; | description "BFD state"; | |||
| } | } | |||
| typedef multiplier { | ||||
| typedef bfd-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 { | identity bfd-path-type { | |||
| 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 | description | |||
| "BFD session type, this indicates the path type that BFD is | "Base identity for BFD path type. The session type indicates | |||
| running on"; | the type of path on which BFD is running"; | |||
| } | } | |||
| typedef bfd-auth-algorithm { | identity bfd-path-ip-sh { | |||
| type enumeration { | base bfd-path-type; | |||
| enum simple-password { | description "BFD on IP single hop"; | |||
| description | } | |||
| "Simple password"; | identity bfd-path-ip-mh { | |||
| } | base bfd-path-type; | |||
| description "BFD on IP multi hop"; | ||||
| enum keyed-md5 { | } | |||
| description | identity bfd-path-mpls-te { | |||
| "Keyed message Digest 5"; | base bfd-path-type; | |||
| } | description "BFD on MPLS Traffic Engineering"; | |||
| } | ||||
| identity bfd-path-mpls-lsp { | ||||
| base bfd-path-type; | ||||
| description "BFD on MPLS Label Switched Path"; | ||||
| } | ||||
| identity bfd-path-lag { | ||||
| base bfd-path-type; | ||||
| description "Micro-BFD on LAG member links"; | ||||
| } | ||||
| enum meticulous-keyed-md5 { | identity bfd-encap-type { | |||
| description | description | |||
| "Meticulous keyed message Digest 5"; | "Base identity for BFD encapsulation type."; | |||
| } | } | |||
| identity bfd-encap-ip { | ||||
| base bfd-encap-type; | ||||
| description "BFD with IP encapsulation."; | ||||
| } | ||||
| enum keyed-sha-1 { | feature bfd-authentication { | |||
| description | description "BFD authentication supported"; | |||
| "Keyed secure hash algorithm (SHA1) "; | } | |||
| identity bfd-auth-replay-protection { | ||||
| description | ||||
| "Base identity for BFD authentication replay protection"; | ||||
| } | ||||
| identity bfd-auth-replay-protection-non-meticulous { | ||||
| base bfd-auth-replay-protection; | ||||
| description "Non-meticulous (see RFC5880)"; | ||||
| } | ||||
| identity bfd-auth-replay-protection-meticulous { | ||||
| base bfd-auth-replay-protection; | ||||
| description "Meticulous (see RFC5880)"; | ||||
| } | ||||
| grouping bfd-auth-parms { | ||||
| description | ||||
| "Grouping for BFD authentication parameters | ||||
| (see section 6.7 of RFC5880)."; | ||||
| container authentication-parms { | ||||
| if-feature bfd-authentication; | ||||
| presence | ||||
| "Enables BFD authentication (see section 6.7 of RFC5880)."; | ||||
| description "Parameters for BFD authentication"; | ||||
| leaf key-chain { | ||||
| type kc:key-chain-ref; | ||||
| description "Name of key-chain"; | ||||
| } | } | |||
| enum meticulous-keyed-sha-1 { | leaf replay-protection { | |||
| type identityref { | ||||
| base bfd-auth-replay-protection; | ||||
| } | ||||
| description | description | |||
| "Meticulous keyed secure hash algorithm (SHA1) "; | "Protection against replays"; | |||
| } | } | |||
| } | } | |||
| description "Authentication algorithm"; | ||||
| } | ||||
| feature bfd-interface-config { | ||||
| description "BFD per-interface config supported"; | ||||
| } | ||||
| feature bfd-authentication { | ||||
| description "BFD authentication supported"; | ||||
| } | } | |||
| grouping bfd-grouping-base-cfg-parms { | grouping bfd-grouping-base-cfg-parms { | |||
| description "BFD grouping for base config parameters"; | description "BFD grouping for base config parameters"; | |||
| leaf local-multiplier { | leaf local-multiplier { | |||
| type multiplier; | type bfd-multiplier; | |||
| default 3; | default 3; | |||
| description "Multiplier transmitted by local system"; | description "Multiplier transmitted by local system"; | |||
| } | } | |||
| choice interval-config-type { | choice interval-config-type { | |||
| description | description | |||
| "Two interval values or 1 value used for both tx and rx"; | "Two interval values or 1 value used for both tx and rx"; | |||
| case tx-rx-intervals { | case tx-rx-intervals { | |||
| leaf desired-min-tx-interval { | leaf desired-min-tx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Desired minimum transmit interval of control packets"; | "Desired minimum transmit interval of control packets"; | |||
| skipping to change at page 20, line 40 ¶ | skipping to change at page 25, line 14 ¶ | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Desired minimum transmit interval and required " + | "Desired minimum transmit interval and required " + | |||
| "minimum receive interval of control packets"; | "minimum receive interval of control packets"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping bfd-grouping-common-cfg-parms { | grouping bfd-grouping-common-cfg-parms { | |||
| description "BFD grouping for common config parameters"; | description "BFD grouping for common config parameters"; | |||
| uses bfd-grouping-base-cfg-parms; | 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 enable demand mode"; | |||
| } | } | |||
| leaf enable-authentication { | ||||
| leaf admin-down { | ||||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description | description | |||
| "If set, the Authentication Section is present and the | "Is the BFD session administratively down"; | |||
| session is to be authenticated (see RFC5880 section 6.7 | ||||
| for details)."; | ||||
| } | ||||
| container authentication-parms { | ||||
| if-feature bfd-authentication; | ||||
| description "Parameters for authentication"; | ||||
| leaf key-chain-name { | ||||
| type string; | ||||
| must "../algorithm" { | ||||
| error-message | ||||
| "May not be configured without algorithm"; | ||||
| description "Requires algorithm"; | ||||
| } | ||||
| description | ||||
| "Key chain name"; | ||||
| } | ||||
| leaf algorithm { | ||||
| type bfd-auth-algorithm; | ||||
| must "../key-chain" { | ||||
| error-message | ||||
| "May not be configured without key-chain"; | ||||
| description "Requires key-chain"; | ||||
| } | ||||
| description "Authentication algorithm to be used"; | ||||
| } | ||||
| } | } | |||
| uses bfd-auth-parms; | ||||
| } | } | |||
| grouping bfd-grouping-echo-cfg-parms { | grouping bfd-grouping-echo-cfg-parms { | |||
| description "BFD grouping for echo config parameters"; | description "BFD grouping for echo config parameters"; | |||
| leaf desired-min-echo-tx-interval { | leaf desired-min-echo-tx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| default 0; | default 0; | |||
| description "Desired minumum transmit interval for echo"; | description "Desired minumum transmit interval for echo"; | |||
| } | } | |||
| leaf required-min-echo-rx-interval { | leaf required-min-echo-rx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| default 0; | default 0; | |||
| description "Required minimum receive interval for echo"; | description "Required minimum receive interval for echo"; | |||
| } | } | |||
| } | } | |||
| grouping bfd-client-base-cfg-parms { | grouping bfd-client-base-cfg-parms { | |||
| description | description | |||
| "BFD grouping for base config parameters which could be used | "BFD grouping which could be used by a protocol which | |||
| by a protocol which is a client of BFD"; | is a client of BFD to enable its use 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"; | |||
| } | } | |||
| uses bfd-grouping-base-cfg-parms; | ||||
| } | } | |||
| } | } | |||
| grouping bfd-all-session { | grouping bfd-all-session { | |||
| description "BFD session operational information"; | description "BFD session operational information"; | |||
| leaf session-type { | leaf path-type { | |||
| type bfd-session-type; | type identityref { | |||
| base bfd-path-type; | ||||
| } | ||||
| 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 bfd-discriminator; | |||
| description "Local discriminator"; | description "Local discriminator"; | |||
| } | } | |||
| leaf remote-discriminator { | leaf remote-discriminator { | |||
| type discriminator; | type bfd-discriminator; | |||
| description "Remote discriminator"; | description "Remote discriminator"; | |||
| } | } | |||
| leaf remote-multiplier { | leaf remote-multiplier { | |||
| type multiplier; | type bfd-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"; | |||
| } | } | |||
| skipping to change at page 22, line 46 ¶ | skipping to change at page 27, line 4 ¶ | |||
| 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 { | leaf source-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| description "Source UDP port"; | description "Source UDP port"; | |||
| } | } | |||
| leaf dest-port { | leaf dest-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| description "Destination UDP port"; | description "Destination UDP port"; | |||
| } | } | |||
| list session-running { | ||||
| container session-running { | ||||
| description "BFD session running information"; | description "BFD session running information"; | |||
| leaf session-index { | leaf session-index { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "An index used to uniquely identify BFD sessions"; | "An index used to uniquely identify BFD sessions"; | |||
| } | } | |||
| leaf local-state { | leaf local-state { | |||
| type state; | type bfd-state; | |||
| description "Local state"; | description "Local state"; | |||
| } | } | |||
| leaf remote-state { | leaf remote-state { | |||
| type state; | type bfd-state; | |||
| description "Remote state"; | description "Remote state"; | |||
| } | } | |||
| leaf local-diagnostic { | leaf local-diagnostic { | |||
| type diagnostic; | type bfd-diagnostic; | |||
| description "Local diagnostic"; | description "Local diagnostic"; | |||
| } | } | |||
| leaf remote-diagnostic { | leaf remote-diagnostic { | |||
| type diagnostic; | type bfd-diagnostic; | |||
| description "Remote diagnostic"; | description "Remote diagnostic"; | |||
| } | } | |||
| leaf detection-mode { | leaf detection-mode { | |||
| type enumeration { | type enumeration { | |||
| enum async-with-echo { | enum async-with-echo { | |||
| value "1"; | value "1"; | |||
| description "Async with echo"; | description "Async with echo"; | |||
| } | } | |||
| enum async-without-echo { | enum async-without-echo { | |||
| value "2"; | value "2"; | |||
| skipping to change at page 24, line 8 ¶ | skipping to change at page 28, line 16 ¶ | |||
| leaf negotiated-tx-interval { | leaf negotiated-tx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| description "Negotiated transmit interval"; | description "Negotiated transmit interval"; | |||
| } | } | |||
| leaf negotiated-rx-interval { | leaf negotiated-rx-interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| description "Negotiated receive interval"; | description "Negotiated receive interval"; | |||
| } | } | |||
| leaf negotiated-echo-tx-interval { | leaf echo-tx-interval-in-use { | |||
| when "../../path-type = 'bfd-path-ip-sh'" { | ||||
| description | ||||
| "Echo is supported for IP single-hop only."; | ||||
| } | ||||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| description "Negotiated echo transmit interval"; | description "Echo transmit interval in use"; | |||
| } | } | |||
| leaf detection-time { | leaf detection-time { | |||
| type uint32; | type uint32; | |||
| units microseconds; | units microseconds; | |||
| description "Detection time"; | description "Detection time"; | |||
| } | } | |||
| } | } | |||
| list sesssion-statistics { | ||||
| description "BFD session statistics"; | container sesssion-statistics { | |||
| description "BFD per-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"; | |||
| } | } | |||
| 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"; | |||
| } | } | |||
| skipping to change at page 25, line 14 ¶ | skipping to change at page 29, line 28 ¶ | |||
| leaf receive-bad-packet { | leaf receive-bad-packet { | |||
| type uint64; | type uint64; | |||
| description "Received bad packet count"; | description "Received bad packet count"; | |||
| } | } | |||
| leaf send-failed-packet { | leaf send-failed-packet { | |||
| type uint64; | type uint64; | |||
| description "Packet Failed to Send Count"; | description "Packet Failed to Send Count"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping bfd-session-statistics { | ||||
| description "Grouping for session counters"; | ||||
| container bfd-session-statistics { | ||||
| description "BFD session counters"; | ||||
| leaf session-count { | ||||
| type uint32; | ||||
| description "Number of sessions"; | ||||
| } | ||||
| leaf session-up-count { | ||||
| type uint32; | ||||
| description "Count of sessions which are up"; | ||||
| } | ||||
| leaf session-down-count { | ||||
| type uint32; | ||||
| description "Count of sessions which are down"; | ||||
| } | ||||
| leaf session-admin-down-count { | ||||
| type uint32; | ||||
| description "Count of sessions which are admin-down"; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping bfd-notification-parms { | ||||
| description | ||||
| "This group describes common parameters that will be sent " + | ||||
| "as part of BFD notification"; | ||||
| leaf local-discr { | ||||
| type bfd-discriminator; | ||||
| description "BFD local discriminator"; | ||||
| } | ||||
| leaf remote-discr { | ||||
| type bfd-discriminator; | ||||
| description "BFD remote discriminator"; | ||||
| } | ||||
| leaf new-state { | ||||
| type bfd-state; | ||||
| description "Current BFD state"; | ||||
| } | ||||
| leaf state-change-reason { | ||||
| type string; | ||||
| description "BFD state change reason"; | ||||
| } | ||||
| leaf time-in-previous-state { | ||||
| type string; | ||||
| description | ||||
| "How long the BFD session was in the previous state"; | ||||
| } | ||||
| leaf dest-addr { | ||||
| type inet:ip-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 path-type { | ||||
| type identityref { | ||||
| base bfd-path-type; | ||||
| } | ||||
| description "BFD path type"; | ||||
| } | ||||
| } | ||||
| augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | |||
| + "rt:routing-protocol" { | + "rt:routing-protocol" { | |||
| when "rt:type = 'bfd:bfd'" { | when "rt:type = 'bfd:bfd'" { | |||
| description | description | |||
| "This augment is only valid for a protocol instance | "This augment is only valid for a protocol instance | |||
| of BFD."; | of BFD."; | |||
| } | } | |||
| description "BFD augmentation."; | description "BFD augmentation."; | |||
| container bfd { | container bfd { | |||
| description "BFD top-level container"; | presence "BFD"; | |||
| container bfd-cfg { | description "BFD top level container"; | |||
| container config { | ||||
| description "BFD configuration container"; | ||||
| } | ||||
| container oper { | ||||
| config "false"; | ||||
| description | ||||
| "BFD operational container for this routing instance"; | ||||
| uses bfd-session-statistics; | ||||
| } | ||||
| } | ||||
| } | ||||
| container bfd { | ||||
| presence "BFD"; | ||||
| description "BFD top level container"; | ||||
| container config { | ||||
| description "BFD configuration container"; | ||||
| } | ||||
| container oper { | ||||
| config "false"; | ||||
| description "BFD operational container."; | ||||
| uses bfd-session-statistics; | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 2.14. BFD IP single-hop Yang Module | ||||
| <CODE BEGINS> file "ietf-bfd-ip-sh@2016-02-17.yang" | ||||
| module ietf-bfd-ip-sh { | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-ip-sh"; | ||||
| // replace with IANA namespace when assigned | ||||
| prefix "bfd-ip-sh"; | ||||
| import ietf-bfd { | ||||
| prefix "bfd"; | ||||
| } | ||||
| import ietf-interfaces { | ||||
| prefix "if"; | ||||
| } | ||||
| import ietf-inet-types { | ||||
| prefix "inet"; | ||||
| } | ||||
| import ietf-routing { | ||||
| prefix "rt"; | ||||
| } | ||||
| organization "IETF BFD Working Group"; | ||||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/bfd> | ||||
| WG List: <rtg-bfd@ietf.org> | ||||
| WG Chair: Jeff Haas | ||||
| WG Chair: Reshad Rahman | ||||
| Editor: Lianshu Zheng and Reshad Rahman"; | ||||
| description | ||||
| "This module contains the YANG definition for BFD IP single-hop | ||||
| as per RFC5881."; | ||||
| revision 2016-02-17 { | ||||
| description "Initial revision."; | ||||
| reference "RFC XXXX: A YANG data model for BFD IP single-hop"; | ||||
| } | ||||
| augment "/bfd:bfd" { | ||||
| description "BFD augmentation for IP single-hop"; | ||||
| container ip-sh { | ||||
| description "BFD IP single-hop top level container"; | ||||
| container config { | ||||
| description "BFD IP single-hop configuration container"; | ||||
| } | ||||
| container oper { | ||||
| config "false"; | ||||
| description "BFD IP single-hop operational container"; | ||||
| uses bfd:bfd-session-statistics; | ||||
| } | ||||
| } | ||||
| } | ||||
| augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | ||||
| + "rt:routing-protocol/bfd:bfd" { | ||||
| description "BFD augmentation for IP single-hop."; | ||||
| container ip-sh { | ||||
| description "BFD IP single-hop container"; | ||||
| container config { | ||||
| description "BFD configuration"; | description "BFD configuration"; | |||
| container bfd-session-cfg { | container session-cfg { | |||
| description "BFD session configuration"; | description "BFD IP single-hop session configuration"; | |||
| list session-ip-mh { | ||||
| list sessions { | ||||
| key "interface dest-addr"; | ||||
| description "List of 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 "IP address of the peer"; | ||||
| } | ||||
| leaf source-addr { | ||||
| type inet:ip-address; | ||||
| description "Local address"; | ||||
| } | ||||
| uses bfd:bfd-grouping-common-cfg-parms; | ||||
| uses bfd:bfd-grouping-echo-cfg-parms; | ||||
| } | ||||
| } | ||||
| } | ||||
| container oper { | ||||
| config "false"; | ||||
| description "BFD operational container"; | ||||
| uses bfd:bfd-session-statistics; | ||||
| list sessions { | ||||
| 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:bfd-all-session; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| notification bfd-singlehop-notification { | ||||
| description | ||||
| "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:bfd-notification-parms; | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description "Interface to which this BFD session belongs to"; | ||||
| } | ||||
| leaf echo-enabled { | ||||
| type boolean; | ||||
| description "Was echo enabled for BFD"; | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 2.15. BFD IP multi-hop Yang Module | ||||
| <CODE BEGINS> file "ietf-bfd-ip-mh@2016-02-17.yang" | ||||
| module ietf-bfd-ip-mh { | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-ip-mh"; | ||||
| // replace with IANA namespace when assigned | ||||
| prefix "bfd-ip-mh"; | ||||
| import ietf-bfd { | ||||
| prefix "bfd"; | ||||
| } | ||||
| import ietf-inet-types { | ||||
| prefix "inet"; | ||||
| } | ||||
| import ietf-routing { | ||||
| prefix "rt"; | ||||
| } | ||||
| organization "IETF BFD Working Group"; | ||||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/bfd> | ||||
| WG List: <rtg-bfd@ietf.org> | ||||
| WG Chair: Jeff Haas | ||||
| WG Chair: Reshad Rahman | ||||
| Editor: Lianshu Zheng and Reshad Rahman"; | ||||
| description | ||||
| "This module contains the YANG definition for BFD IP multi-hop | ||||
| asper RFC5883."; | ||||
| revision 2016-02-17 { | ||||
| description "Initial revision."; | ||||
| reference "RFC XXXX: A YANG data model for BFD IP multi-hop"; | ||||
| } | ||||
| augment "/bfd:bfd" { | ||||
| description "BFD augmentation for IP multi-hop"; | ||||
| container ip-mh { | ||||
| description "BFD IP multi-hop top level container"; | ||||
| container config { | ||||
| description "BFD IP multi-hop configuration container"; | ||||
| } | ||||
| container oper { | ||||
| config "false"; | ||||
| description "BFD IP multi-hop operational container"; | ||||
| uses bfd:bfd-session-statistics; | ||||
| } | ||||
| } | ||||
| } | ||||
| augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | ||||
| + "rt:routing-protocol/bfd:bfd" { | ||||
| when "rt:type = 'bfd:bfd'" { | ||||
| description | ||||
| "This augment is only valid for a protocol instance | ||||
| of BFD."; | ||||
| } | ||||
| description "BFD augmentation for IP multi-hop."; | ||||
| container ip-mh { | ||||
| description "BFD IP multi-hop container"; | ||||
| container config { | ||||
| description "BFD configuration"; | ||||
| container session-cfg { | ||||
| description "BFD IP multi-hop session configuration"; | ||||
| list sessions { | ||||
| key "source-addr dest-addr"; | key "source-addr dest-addr"; | |||
| description "List of IP multi-hop sessions"; | description "List of IP multi-hop sessions"; | |||
| leaf source-addr { | leaf source-addr { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| description | description | |||
| "Local IP address"; | "Local IP address"; | |||
| } | } | |||
| leaf dest-addr { | leaf dest-addr { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| description | description | |||
| "IP address of the peer"; | "IP address of the peer"; | |||
| } | } | |||
| leaf admin-down { | uses bfd:bfd-grouping-common-cfg-parms; | |||
| type boolean; | ||||
| default false; | ||||
| description | ||||
| "Is the BFD session administratively down"; | ||||
| } | ||||
| uses bfd-grouping-common-cfg-parms; | ||||
| leaf tx-ttl { | leaf tx-ttl { | |||
| type ttl; | type bfd:ttl; | |||
| default 255; | default 255; | |||
| description "TTL of outgoing BFD control packets"; | description "TTL of outgoing BFD control packets"; | |||
| } | } | |||
| leaf rx-ttl { | leaf rx-ttl { | |||
| type ttl; | type bfd:ttl; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Minimum allowed TTL value for incoming BFD control | "Minimum allowed TTL value for incoming BFD control | |||
| packets"; | packets"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 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; | ||||
| } | ||||
| } | } | |||
| container bfd-oper { | ||||
| container oper { | ||||
| config "false"; | config "false"; | |||
| description "BFD operational container"; | description "BFD operational container"; | |||
| container bfd-session-statistics { | container bfd-session-statistics { | |||
| description "BFD session counters"; | description "BFD session counters"; | |||
| leaf ip-sh-session-num { | uses bfd:bfd-session-statistics; | |||
| 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"; | ||||
| } | ||||
| leaf sess-admin-down-num { | ||||
| type uint32; | ||||
| description "Session admin-down number"; | ||||
| } | ||||
| } | } | |||
| container bfd-session-lists { | list session-group { | |||
| key "source-addr dest-addr"; | ||||
| description | description | |||
| "Contains multiple session lists, one per type"; | "BFD IP multi-hop group of sessions. A group of " + | |||
| list session-ip-sh { | "sessions is between 1 source and 1 destination, " + | |||
| key "interface dest-addr"; | "each session has a different field in UDP/IP hdr for " + | |||
| description "BFD IP single-hop sessions"; | "ECMP."; | |||
| leaf interface { | leaf source-addr { | |||
| type if:interface-ref; | type inet:ip-address; | |||
| description | description "BFD source address"; | |||
| "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 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 { | leaf dest-addr { | |||
| key "tunnel-name"; | type inet:ip-address; | |||
| description "BFD over TE tunnel"; | description "BFD peer address"; | |||
| leaf tunnel-name { | ||||
| type string; | ||||
| description "Name of TE tunnel"; | ||||
| } | ||||
| uses bfd-all-session; | ||||
| } | } | |||
| list session-ldp-lsp-group { | list sessions { | |||
| key "ldp-fec"; | key "local-discriminator"; | |||
| description | description | |||
| "BFD over LDP LSP group of sessions. A group of " + | "The BFD sessions between a source and a. " + | |||
| "sessions is to one LDP FEC, each session uses a " + | "destination. Local discriminator is unique for " + | |||
| "different source UDP port for ECMP."; | "each session in the group."; | |||
| leaf ldp-fec { | leaf ttl { | |||
| type inet:ip-prefix; | type bfd:ttl; | |||
| description "LDP FEC"; | description "TTL of outgoing packets"; | |||
| } | ||||
| 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:bfd-all-session; | ||||
| } | } | |||
| list session-lag { | } | |||
| } | ||||
| } | ||||
| } | ||||
| notification bfd-multihop-notification { | ||||
| description | ||||
| "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:bfd-notification-parms; | ||||
| leaf routing-instance { | ||||
| type rt:routing-instance-ref; | ||||
| description "Routing instance"; | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 2.16. BFD over LAG Yang Module | ||||
| <CODE BEGINS> file "ietf-bfd-lag@2016-02-17.yang" | ||||
| module ietf-bfd-lag { | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-lag"; | ||||
| // replace with IANA namespace when assigned | ||||
| prefix "bfd-lag"; | ||||
| import ietf-bfd { | ||||
| prefix "bfd"; | ||||
| } | ||||
| import ietf-interfaces { | ||||
| prefix "if"; | ||||
| } | ||||
| import ietf-inet-types { | ||||
| prefix "inet"; | ||||
| } | ||||
| organization "IETF BFD Working Group"; | ||||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/bfd> | ||||
| WG List: <rtg-bfd@ietf.org> | ||||
| WG Chair: Jeff Haas | ||||
| WG Chair: Reshad Rahman | ||||
| Editor: Lianshu Zheng and Reshad Rahman"; | ||||
| description | ||||
| "This module contains the YANG definition for BFD over LAG | ||||
| interfaces as per RFC7130."; | ||||
| revision 2016-02-17 { | ||||
| description "Initial revision."; | ||||
| reference "RFC XXXX: A YANG data model for BFD over LAG"; | ||||
| } | ||||
| augment "/bfd:bfd" { | ||||
| description "BFD augmentation for LAG"; | ||||
| container lag { | ||||
| description "BFD over LAG top level container"; | ||||
| container config { | ||||
| description "BFD over LAG configuration container"; | ||||
| container session-cfg { | ||||
| description "BFD over LAG session configuration"; | ||||
| list sessions { | ||||
| key "lag-name"; | key "lag-name"; | |||
| description "A LAG interface on which BFD is running"; | description "A LAG interface on which BFD is running"; | |||
| leaf lag-name { | leaf lag-name { | |||
| type if:interface-ref ; | type if:interface-ref ; | |||
| description "Name of the LAG"; | description "Name of the LAG"; | |||
| } | } | |||
| list session-lag-micro { | leaf ipv4-dest-addr { | |||
| type inet:ipv4-address; | ||||
| description | ||||
| "IPv4 address of the peer, for IPv4 micro-BFD."; | ||||
| } | ||||
| leaf ipv6-dest-addr { | ||||
| type inet:ipv6-address; | ||||
| description | ||||
| "IPv6 address of the peer, for IPv6 micro-BFD."; | ||||
| } | ||||
| uses bfd:bfd-grouping-common-cfg-parms; | ||||
| } | ||||
| } | ||||
| } | ||||
| container oper { | ||||
| config "false"; | ||||
| description "BFD over LAG operational container."; | ||||
| container micro-bfd-ipv4-session-statistics { | ||||
| description "Micro-BFD IPv4 session counters"; | ||||
| uses bfd:bfd-session-statistics; | ||||
| } | ||||
| container micro-bfd-ipv6-session-statistics { | ||||
| description "Micro-BFD IPv6 session counters"; | ||||
| uses bfd:bfd-session-statistics; | ||||
| } | ||||
| 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"; | ||||
| } | ||||
| leaf use-ipv4 { | ||||
| type boolean; | ||||
| description "Using IPv4 micro-BFD."; | ||||
| } | ||||
| leaf use-ipv6 { | ||||
| type boolean; | ||||
| description "Using IPv6 micro-BFD."; | ||||
| } | ||||
| list member-links { | ||||
| key "member-link"; | key "member-link"; | |||
| description | ||||
| "Micro-BFD over LAG. This represents one member link"; | ||||
| leaf member-link { | ||||
| type if:interface-ref; | ||||
| description | description | |||
| "Micro-BFD over LAG. This represents BFD " + | "Member link on which micro-BFD is running"; | |||
| "over one member link"; | } | |||
| leaf member-link { | container micro-bfd-ipv4 { | |||
| type if:interface-ref; | when "../use-ipv4 = 'true'" { | |||
| description | description "Needed only if IPv4 is used."; | |||
| "Member link on which micro-BFD is running"; | ||||
| } | } | |||
| uses bfd-all-session; | description | |||
| "Micro-BFD IPv4 session state on member link"; | ||||
| uses bfd:bfd-all-session; | ||||
| } | ||||
| container micro-bfd-ipv6 { | ||||
| when "../use-ipv6 = 'true'" { | ||||
| description "Needed only if IPv6 is used."; | ||||
| } | ||||
| description | ||||
| "Micro-BFD IPv6 session state on member link"; | ||||
| uses bfd:bfd-all-session; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| notification bfd-lag-notification { | ||||
| grouping bfd-notification-parms { | ||||
| description | description | |||
| "This group describes common parameters that will be sent " + | "Notification for BFD over LAG session state change. " + | |||
| "as part of BFD notification"; | "An implementation may rate-limit notifications, e.g. when a" + | |||
| "session is continuously changing state."; | ||||
| leaf local-discr { | uses bfd:bfd-notification-parms; | |||
| type discriminator; | ||||
| description "BFD local discriminator"; | ||||
| } | ||||
| leaf remote-discr { | leaf lag-name { | |||
| type discriminator; | type if:interface-ref; | |||
| description "BFD remote discriminator"; | description "LAG interface name"; | |||
| } | } | |||
| leaf new-state { | leaf member-link { | |||
| type state; | type if:interface-ref; | |||
| description "Current BFD state"; | description "Member link on which BFD is running"; | |||
| } | } | |||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| leaf state-change-reason { | 2.17. BFD over MPLS Yang Module | |||
| type string; | ||||
| description "BFD state change reason"; | ||||
| } | ||||
| leaf time-in-previous-state { | <CODE BEGINS> file "ietf-bfd-mpls@2016-02-17.yang" | |||
| type string; | module ietf-bfd-mpls { | |||
| description | namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-mpls"; | |||
| "How long the BFD session was in the previous state"; | // replace with IANA namespace when assigned | |||
| } | prefix "bfd-mpls"; | |||
| leaf dest-addr { | import ietf-bfd { | |||
| type inet:ip-address; | prefix "bfd"; | |||
| description "BFD peer address"; | } | |||
| } | import ietf-inet-types { | |||
| leaf source-addr { | prefix "inet"; | |||
| 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 { | import ietf-routing { | |||
| description | prefix "rt"; | |||
| "Notification for BFD single-hop session state change. An " + | } | |||
| "implementation may rate-limit notifications, e.g. when a" + | organization "IETF BFD Working Group"; | |||
| "session is continuously changing state."; | ||||
| uses bfd-notification-parms; | ||||
| leaf interface { | contact | |||
| type if:interface-ref; | "WG Web: <http://tools.ietf.org/wg/bfd> | |||
| description "Interface to which this BFD session belongs to"; | WG List: <rtg-bfd@ietf.org> | |||
| } | WG Chair: Jeff Haas | |||
| WG Chair: Reshad Rahman | ||||
| Editor: Lianshu Zheng and Reshad Rahman"; | ||||
| leaf echo-enabled { | description | |||
| type boolean; | "This module contains the YANG definition for BFD parameters for | |||
| description "Was echo enabled for BFD"; | MPLS LSPs as per RFC5884."; | |||
| } | ||||
| revision 2016-02-17 { | ||||
| description "Initial revision."; | ||||
| reference "RFC XXXX: A YANG data model for BFD over MPLS LSPs"; | ||||
| } | } | |||
| notification bfd-multihop-notification { | identity bfd-encap-gach { | |||
| base bfd:bfd-encap-type; | ||||
| description | description | |||
| "Notification for BFD multi-hop session state change. An " + | "BFD with G-ACh encapsulation as per RFC5586."; | |||
| "implementation may rate-limit notifications, e.g. when a" + | ||||
| "session is continuously changing state."; | ||||
| uses bfd-notification-parms; | ||||
| } | } | |||
| notification bfd-te-tunnel-notification { | ||||
| identity bfd-encap-ip-gach { | ||||
| base bfd:bfd-encap-type; | ||||
| description | description | |||
| "Notification for BFD over TE tunnel session state change. " + | "BFD with IP and G-ACh encapsulation as per RFC5586."; | |||
| "An implementation may rate-limit notifications, e.g. when a" + | } | |||
| "session is continuously changing state."; | ||||
| uses bfd-notification-parms; | grouping bfd-encap-cfg { | |||
| leaf tunnel-name { | description "Configuration for BFD encapsulation"; | |||
| type string; | ||||
| description "TE tunnel to which this BFD session belongs to"; | leaf encap { | |||
| type identityref { | ||||
| base bfd:bfd-encap-type; | ||||
| } | ||||
| default bfd:bfd-encap-ip; | ||||
| description "BFD encapsulation"; | ||||
| } | } | |||
| } | } | |||
| notification bfd-ldp-lsp-notification { | ||||
| description | ||||
| "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 { | grouping bfd-mpls-dest-address { | |||
| type inet:ip-prefix; | description "Destination address as per RFC5884"; | |||
| description "LDP FEC"; | ||||
| leaf mpls-dest-address { | ||||
| type inet:ip-address; | ||||
| config "false"; | ||||
| description | ||||
| "Destination address as per RFC5884. | ||||
| Needed if IP encapsulation is used"; | ||||
| } | } | |||
| leaf source-port { | } | |||
| type inet:port-number; | ||||
| description "Source UDP port"; | augment "/bfd:bfd" { | |||
| description "BFD augmentation for MPLS"; | ||||
| container mpls { | ||||
| description "BFD MPLS top level container"; | ||||
| container config { | ||||
| description "BFD MPLS configuration container"; | ||||
| container egress { | ||||
| description "Egress configuration"; | ||||
| uses bfd:bfd-grouping-base-cfg-parms; | ||||
| uses bfd:bfd-auth-parms; | ||||
| } | ||||
| } | ||||
| container oper { | ||||
| config "false"; | ||||
| description "BFD MPLS operational container"; | ||||
| uses bfd:bfd-session-statistics; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| notification bfd-lag-notification { | ||||
| augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" | ||||
| + "rt:routing-protocol/bfd:bfd" { | ||||
| description "BFD augmentation for MPLS."; | ||||
| container mpls { | ||||
| description "BFD MPLS container"; | ||||
| container config { | ||||
| description "BFD MPLS configuration container"; | ||||
| container session-cfg { | ||||
| description "BFD MPLS session configuration"; | ||||
| list sessions { | ||||
| key "mpls-fec"; | ||||
| description "List of BFD MPLS sessions"; | ||||
| leaf mpls-fec { | ||||
| type inet:ip-address; | ||||
| description "MPLS FEC"; | ||||
| } | ||||
| uses bfd:bfd-grouping-common-cfg-parms; | ||||
| } | ||||
| } | ||||
| } | ||||
| container oper { | ||||
| config "false"; | ||||
| description "BFD MPLS operational container"; | ||||
| uses bfd:bfd-session-statistics; | ||||
| list session-group { | ||||
| key "mpls-fec"; | ||||
| description | ||||
| "BFD MPLS group of sessions. A group of sessions is" + | ||||
| "for 1 FEC, each session has a different field in " + | ||||
| "UDP/IP hdr for ECMP."; | ||||
| leaf mpls-fec { | ||||
| type inet:ip-address; | ||||
| description "MPLS-FEC"; | ||||
| } | ||||
| list sessions { | ||||
| key "local-discriminator"; | ||||
| description | ||||
| "The BFD sessions for an MPLS FEC. Local " + | ||||
| "discriminator is unique for each session in the " + | ||||
| "group."; | ||||
| uses bfd:bfd-all-session; | ||||
| uses bfd-mpls:bfd-mpls-dest-address; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| notification bfd-mpls-notification { | ||||
| description | description | |||
| "Notification for BFD over LAG session state change. " + | "Notification for BFD over MPLS FEC session state change. " + | |||
| "An implementation may rate-limit notifications, e.g. when a" + | "An implementation may rate-limit notifications, e.g. when a" + | |||
| "session is continuously changing state."; | "session is continuously changing state."; | |||
| uses bfd-notification-parms; | ||||
| leaf lag-name { | uses bfd:bfd-notification-parms; | |||
| type if:interface-ref; | ||||
| description "LAG interface name"; | leaf routing-instance { | |||
| type rt:routing-instance-ref; | ||||
| description "Routing instance"; | ||||
| } | } | |||
| leaf member-link { | ||||
| type if:interface-ref; | leaf mpls-dest-address { | |||
| description "Member link on which BFD is running"; | type inet:ip-address; | |||
| description | ||||
| "Destination address as per RFC5884. | ||||
| Needed if IP encapsulation is used"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 2.11. BFD Client Example Configuration Yang Module | 2.18. BFD over MPLS-TEYang Module | |||
| module example-bfd-routing-app { | <CODE BEGINS> file "ietf-bfd-mpls-te@2016-02-17.yang" | |||
| namespace "urn:ietf:params:xml:ns:yang:example-bfd-routing-app"; | module ietf-bfd-mpls-te { | |||
| prefix bfd-routing-app; | namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-mpls-te"; | |||
| // replace with IANA namespace when assigned | ||||
| prefix "bfd-mpls-te"; | ||||
| import ietf-bfd { | import ietf-bfd { | |||
| prefix "bfd"; | prefix "bfd"; | |||
| } | ||||
| } | import ietf-bfd-mpls { | |||
| prefix "bfd-mpls"; | ||||
| } | ||||
| import ietf-interfaces { | import ietf-te { | |||
| prefix "if"; | prefix "te"; | |||
| } | } | |||
| organization | organization "IETF BFD Working Group"; | |||
| "ACME"; | ||||
| contact | ||||
| "acme@acme.com"; | ||||
| description | contact | |||
| "Testing BFD grouping (simulating a routing application)"; | "WG Web: <http://tools.ietf.org/wg/bfd> | |||
| WG List: <rtg-bfd@ietf.org> | ||||
| WG Chair: Jeff Haas | ||||
| WG Chair: Reshad Rahman | ||||
| Editor: Lianshu Zheng and Reshad Rahman"; | ||||
| revision 2015-07-01 { | description | |||
| description "Initial revision."; | "This module contains the YANG definition for BFD parameters for | |||
| reference "RFC XXXX: An example BFD routing application"; | MPLS Traffic Engineering as per RFC5884."; | |||
| } | ||||
| feature routing-app-bfd { | revision 2016-02-04 { | |||
| description "BFD configuration under routing-app"; | description "Initial revision."; | |||
| } | reference "RFC XXXX: A YANG data model for BFD over MPLS-TE"; | |||
| } | ||||
| list area { | augment "/bfd:bfd" { | |||
| key "area-id"; | description "BFD augmentation for MPLS-TE"; | |||
| container mpls-te { | ||||
| description "BFD MPLS-TE top level container"; | ||||
| container config { | ||||
| description "BFD MPLS-TE configuration container"; | ||||
| description "Specify a routing area."; | container egress { | |||
| description "Egress configuration"; | ||||
| leaf area-id { | uses bfd:bfd-grouping-base-cfg-parms; | |||
| type uint32; | ||||
| description "Area"; | ||||
| } | ||||
| uses bfd:bfd-client-base-cfg-parms { | uses bfd:bfd-auth-parms; | |||
| if-feature routing-app-bfd; | } | |||
| } | } | |||
| list interface { | container oper { | |||
| key "interface"; | config "false"; | |||
| description "List of interfaces"; | description "BFD operational container"; | |||
| leaf interface { | uses bfd:bfd-session-statistics; | |||
| type if:interface-ref; | } | |||
| description "Interface"; | } | |||
| } | } | |||
| uses bfd:bfd-client-base-cfg-parms { | ||||
| if-feature routing-app-bfd; | ||||
| } | ||||
| } | ||||
| } | augment "/te:te/te:tunnels/te:tunnel/te:config" { | |||
| description "BFD configuration on MPLS-TE tunnel."; | ||||
| uses bfd:bfd-grouping-common-cfg-parms; | ||||
| uses bfd-mpls:bfd-encap-cfg; | ||||
| } | ||||
| augment "/te:te/te:lsps-state/te:lsp" { | ||||
| when "/te:te/te:lsps-state/te:lsp/te:origin-type != 'transit'" { | ||||
| description "BFD information not needed at transit points"; | ||||
| } | ||||
| description "BFD state information on MPLS-TE LSP."; | ||||
| uses bfd:bfd-all-session; | ||||
| uses bfd-mpls:bfd-mpls-dest-address; | ||||
| } | ||||
| notification bfd-mpls-te-notification { | ||||
| description | ||||
| "Notification for BFD over MPLS-TE session state change. " + | ||||
| "An implementation may rate-limit notifications, e.g. when a" + | ||||
| "session is continuously changing state."; | ||||
| uses bfd:bfd-notification-parms; | ||||
| uses bfd-mpls:bfd-mpls-dest-address; | ||||
| leaf tunnel-name { | ||||
| type string; | ||||
| description "MPLS-TE tunnel on which BFD was running."; | ||||
| } | ||||
| } | ||||
| } | } | |||
| <CODE ENDS> | ||||
| 2.12. Security Considerations | 2.19. Security Considerations | |||
| The YANG module defined in this memo is designed to be accessed via | The YANG module defined in this memo is designed to be accessed via | |||
| the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the | the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the | |||
| secure transport layer and the mandatory to implement secure | secure transport layer and the mandatory to implement secure | |||
| transport is SSH [RFC6242]. The NETCONF access control model | transport is SSH [RFC6242]. The NETCONF access control model | |||
| [RFC6536] provides the means to restrict access for particular | [RFC6536] provides the means to restrict access for particular | |||
| NETCONF users to a pre-configured subset of all available NETCONF | NETCONF users to a pre-configured subset of all available NETCONF | |||
| protocol operations and content. | protocol operations and content. | |||
| The YANG module has writeable data nodes which can be used for | The YANG module has writeable data nodes which can be used for | |||
| creation of BFD sessions and modification of BFD session parameters. | creation of BFD sessions and modification of BFD session parameters. | |||
| The system should "police" creation of BFD sessions to prevent new | The system should "police" creation of BFD sessions to prevent new | |||
| sessions from causing existing BFD sessions to fail. For BFD session | sessions from causing existing BFD sessions to fail. For BFD session | |||
| modification, the BFD protocol has mechanisms in place which allow | modification, the BFD protocol has mechanisms in place which allow | |||
| for in service modification. | for in service modification. | |||
| 2.13. IANA Considerations | 2.20. IANA Considerations | |||
| The IANA is requested to as assign a new new namespace URI from the | The IANA is requested to as assign a new new namespace URI from the | |||
| IETF XML registry. | IETF XML registry. | |||
| URI:TBD | URI:TBD | |||
| 2.14. Acknowledgements | 2.21. Acknowledgements | |||
| We would also like to thank Nobo Akiya and Jeff Haas for their | We would also like to thank Nobo Akiya and Jeff Haas for their | |||
| encouragement on this work. | encouragement on this work. We would also like to thank Rakesh | |||
| Gandhi and Tarek Saad for their help on the MPLS-TE model. | ||||
| 3. References | 3. References | |||
| 3.1. Normative References | 3.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC5586] Bocci, M., Ed., Vigoureux, M., Ed., and S. Bryant, Ed., | ||||
| "MPLS Generic Associated Channel", RFC 5586, | ||||
| DOI 10.17487/RFC5586, June 2009, | ||||
| <http://www.rfc-editor.org/info/rfc5586>. | ||||
| [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | |||
| (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, | (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, | |||
| <http://www.rfc-editor.org/info/rfc5880>. | <http://www.rfc-editor.org/info/rfc5880>. | |||
| [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | |||
| (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, | (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, | |||
| DOI 10.17487/RFC5881, June 2010, | DOI 10.17487/RFC5881, June 2010, | |||
| <http://www.rfc-editor.org/info/rfc5881>. | <http://www.rfc-editor.org/info/rfc5881>. | |||
| [RFC5882] Katz, D. and D. Ward, "Generic Application of | [RFC5882] Katz, D. and D. Ward, "Generic Application of | |||
| skipping to change at page 34, line 24 ¶ | skipping to change at page 48, line 33 ¶ | |||
| [RFC5883] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | [RFC5883] Katz, D. and D. Ward, "Bidirectional Forwarding Detection | |||
| (BFD) for Multihop Paths", RFC 5883, DOI 10.17487/RFC5883, | (BFD) for Multihop Paths", RFC 5883, DOI 10.17487/RFC5883, | |||
| June 2010, <http://www.rfc-editor.org/info/rfc5883>. | June 2010, <http://www.rfc-editor.org/info/rfc5883>. | |||
| [RFC5884] Aggarwal, R., Kompella, K., Nadeau, T., and G. Swallow, | [RFC5884] Aggarwal, R., Kompella, K., Nadeau, T., and G. Swallow, | |||
| "Bidirectional Forwarding Detection (BFD) for MPLS Label | "Bidirectional Forwarding Detection (BFD) for MPLS Label | |||
| Switched Paths (LSPs)", RFC 5884, DOI 10.17487/RFC5884, | Switched Paths (LSPs)", RFC 5884, DOI 10.17487/RFC5884, | |||
| June 2010, <http://www.rfc-editor.org/info/rfc5884>. | June 2010, <http://www.rfc-editor.org/info/rfc5884>. | |||
| [RFC5885] Nadeau, T., Ed. and C. Pignataro, Ed., "Bidirectional | ||||
| Forwarding Detection (BFD) for the Pseudowire Virtual | ||||
| Circuit Connectivity Verification (VCCV)", RFC 5885, | ||||
| DOI 10.17487/RFC5885, June 2010, | ||||
| <http://www.rfc-editor.org/info/rfc5885>. | ||||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
| <http://www.rfc-editor.org/info/rfc6020>. | <http://www.rfc-editor.org/info/rfc6020>. | |||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <http://www.rfc-editor.org/info/rfc6241>. | <http://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC7130] Bhatia, M., Ed., Chen, M., Ed., Boutros, S., Ed., | [RFC7130] Bhatia, M., Ed., Chen, M., Ed., Boutros, S., Ed., | |||
| Binderberger, M., Ed., and J. Haas, Ed., "Bidirectional | Binderberger, M., Ed., and J. Haas, Ed., "Bidirectional | |||
| Forwarding Detection (BFD) on Link Aggregation Group (LAG) | Forwarding Detection (BFD) on Link Aggregation Group (LAG) | |||
| Interfaces", RFC 7130, DOI 10.17487/RFC7130, February | Interfaces", RFC 7130, DOI 10.17487/RFC7130, February | |||
| 2014, <http://www.rfc-editor.org/info/rfc7130>. | 2014, <http://www.rfc-editor.org/info/rfc7130>. | |||
| 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-07 (work in | Protocol", draft-ietf-netconf-restconf-09 (work in | |||
| progress), July 2015. | progress), December 2015. | |||
| [I-D.ietf-netmod-routing-cfg] | [I-D.ietf-netmod-routing-cfg] | |||
| Lhotka, L. and A. Lindem, "A YANG Data Model for Routing | Lhotka, L. and A. Lindem, "A YANG Data Model for Routing | |||
| Management", draft-ietf-netmod-routing-cfg-19 (work in | Management", draft-ietf-netmod-routing-cfg-20 (work in | |||
| progress), May 2015. | progress), October 2015. | |||
| Appendix A. Change log | ||||
| RFC Editor: Remove this section upon publication as an RFC. | ||||
| 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 | [I-D.ietf-rtgwg-yang-key-chain] | |||
| Lindem, A., Qu, Y., Yeung, D., Chen, H., Zhang, J., and Y. | ||||
| Yang, "Key Chain YANG Data Model", draft-ietf-rtgwg-yang- | ||||
| key-chain-01 (work in progress), February 2016. | ||||
| o Updated authors | [I-D.ietf-teas-yang-te] | |||
| Saad, T., Gandhi, R., Liu, X., Beeram, V., Shah, H., Chen, | ||||
| X., Jones, R., and B. Wen, "A YANG Data Model for Traffic | ||||
| Engineering Tunnels and Interfaces", draft-ietf-teas-yang- | ||||
| te-02 (work in progress), October 2015. | ||||
| A.3. Changes between versions -01 and -02 | Appendix A. Change log | |||
| o Fixed errors and warnings from "pyang --ietf" | RFC Editor: Remove this section upon publication as an RFC. | |||
| o Added appendix for "Change log" | A.1. Changes between versions -00 and -01 | |||
| A.4. Changes between versions -00 and -01 | o Remove BFD configuration parameters from BFD clients, all BFD | |||
| configuration parameters in BFD | ||||
| In the YANG module section: | o YANG module split in multiple YANG modules (one per type of | |||
| forwarding path) | ||||
| o Added missing filename | o For BFD over MPLS-TE we augment MPLS-TE model | |||
| o Added missing CODE ENDS | o For BFD authentication we now use key-chain in | |||
| [I-D.ietf-rtgwg-yang-key-chain] | ||||
| Authors' Addresses | Authors' Addresses | |||
| Lianshu Zheng (editor) | Lianshu Zheng (editor) | |||
| Huawei Technologies | Huawei Technologies | |||
| China | China | |||
| Email: vero.zheng@huawei.com | Email: vero.zheng@huawei.com | |||
| Reshad Rahman (editor) | Reshad Rahman (editor) | |||
| skipping to change at page 36, line 4 ¶ | skipping to change at page 50, line 18 ¶ | |||
| Huawei Technologies | Huawei Technologies | |||
| China | China | |||
| Email: vero.zheng@huawei.com | Email: vero.zheng@huawei.com | |||
| Reshad Rahman (editor) | Reshad Rahman (editor) | |||
| Cisco Systems | Cisco Systems | |||
| Canada | Canada | |||
| Email: rrahman@cisco.com | Email: rrahman@cisco.com | |||
| Santosh Pallagatti | Santosh Pallagatti | |||
| Juniper Networks | ||||
| India | India | |||
| Email: santoshpk@juniper.net | Email: santosh.pallagatti@gmail.com | |||
| Mahesh Jethanandani | Mahesh Jethanandani | |||
| Cisco Systems | Cisco Systems | |||
| Email: mjethanandani@gmail.com | Email: mjethanandani@gmail.com | |||
| Greg Mirsky | Greg Mirsky | |||
| Ericsson | Ericsson | |||
| Email: gregory.mirsky@ericsson.com | Email: gregory.mirsky@ericsson.com | |||
| End of changes. 205 change blocks. | ||||
| 901 lines changed or deleted | 1580 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/ | ||||