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

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