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";
} }
skipping to change at page 25, line 41 skipping to change at page 36, line 40
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.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/