idnits 2.17.1 draft-zheng-bfd-yang-04.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 388 has weird spacing: '...nterval uin...' == Line 452 has weird spacing: '...nterval uin...' == Line 456 has weird spacing: '...terface if:...' == Line 463 has weird spacing: '...nterval uin...' == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (July 05, 2015) is 3211 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: 'RFC6242' is mentioned on line 1593, but not defined == Missing Reference: 'RFC6536' is mentioned on line 1594, but not defined ** Obsolete undefined reference: RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-18) exists of draft-ietf-netconf-restconf-06 == Outdated reference: A later version (-25) exists of draft-ietf-netmod-routing-cfg-19 Summary: 1 error (**), 0 flaws (~~), 10 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group L. Zheng, Ed. 3 Internet-Draft Huawei Technologies 4 Intended status: Standards Track R. Rahman, Ed. 5 Expires: January 6, 2016 Cisco Systems 6 S. Pallagatti 7 Juniper Networks 8 M. Jethanandani 9 Cisco Systems 10 G. Mirsky 11 Ericsson 12 July 05, 2015 14 Yang Data Model for Bidirectional Forwarding Detection (BFD) 15 draft-zheng-bfd-yang-04.txt 17 Abstract 19 This document defines a YANG data model that can be used to configure 20 and manage Bidirectional Forwarding Detection (BFD). 22 Requirements Language 24 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 25 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 26 document are to be interpreted as described in RFC 2119 [RFC2119]. 28 Status of This Memo 30 This Internet-Draft is submitted in full conformance with the 31 provisions of BCP 78 and BCP 79. 33 Internet-Drafts are working documents of the Internet Engineering 34 Task Force (IETF). Note that other groups may also distribute 35 working documents as Internet-Drafts. The list of current Internet- 36 Drafts is at http://datatracker.ietf.org/drafts/current/. 38 Internet-Drafts are draft documents valid for a maximum of six months 39 and may be updated, replaced, or obsoleted by other documents at any 40 time. It is inappropriate to use Internet-Drafts as reference 41 material or to cite them other than as "work in progress." 43 This Internet-Draft will expire on January 6, 2016. 45 Copyright Notice 47 Copyright (c) 2015 IETF Trust and the persons identified as the 48 document authors. All rights reserved. 50 This document is subject to BCP 78 and the IETF Trust's Legal 51 Provisions Relating to IETF Documents 52 (http://trustee.ietf.org/license-info) in effect on the date of 53 publication of this document. Please review these documents 54 carefully, as they describe your rights and restrictions with respect 55 to this document. Code Components extracted from this document must 56 include Simplified BSD License text as described in Section 4.e of 57 the Trust Legal Provisions and are provided without warranty as 58 described in the Simplified BSD License. 60 Table of Contents 62 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 63 1.1. Contributors . . . . . . . . . . . . . . . . . . . . . . 3 64 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 65 2.1. Design of Configuration Model . . . . . . . . . . . . . . 4 66 2.1.1. Single-hop IP . . . . . . . . . . . . . . . . . . . . 4 67 2.1.2. Multi-hop IP . . . . . . . . . . . . . . . . . . . . 5 68 2.1.3. Traffic Engineering Tunnels . . . . . . . . . . . . . 6 69 2.1.4. LDP Label Switched Paths . . . . . . . . . . . . . . 6 70 2.1.5. Link Aggregation Groups . . . . . . . . . . . . . . . 6 71 2.1.6. Per-interface Configuration . . . . . . . . . . . . . 7 72 2.2. Design of Operational Model . . . . . . . . . . . . . . . 7 73 2.3. Notifications . . . . . . . . . . . . . . . . . . . . . . 8 74 2.4. RPC Operations . . . . . . . . . . . . . . . . . . . . . 8 75 2.5. BFD Configuration Data Hierarchy . . . . . . . . . . . . 8 76 2.5.1. Centralized BFD Configuration . . . . . . . . . . . . 8 77 2.5.2. Configuration in BFD clients . . . . . . . . . . . . 9 78 2.6. Operational Data Hierarchy . . . . . . . . . . . . . . . 11 79 2.7. Notifications . . . . . . . . . . . . . . . . . . . . . . 14 80 2.8. Examples . . . . . . . . . . . . . . . . . . . . . . . . 16 81 2.9. Interaction with other YANG modules . . . . . . . . . . . 16 82 2.10. BFD Yang Module . . . . . . . . . . . . . . . . . . . . . 16 83 2.11. BFD Client Example Configuration Yang Module . . . . . . 33 84 2.12. Security Considerations . . . . . . . . . . . . . . . . . 34 85 2.13. IANA Considerations . . . . . . . . . . . . . . . . . . . 34 86 2.14. Acknowledgements . . . . . . . . . . . . . . . . . . . . 35 87 3. References . . . . . . . . . . . . . . . . . . . . . . . . . 35 88 3.1. Normative References . . . . . . . . . . . . . . . . . . 35 89 3.2. Informative References . . . . . . . . . . . . . . . . . 35 90 Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 36 91 A.1. Changes between versions -03 and -04 . . . . . . . . . . 36 92 A.2. Changes between versions -02 and -03 . . . . . . . . . . 36 93 A.3. Changes between versions -01 and -02 . . . . . . . . . . 36 94 A.4. Changes between versions -00 and -01 . . . . . . . . . . 36 95 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36 97 1. Introduction 99 YANG [RFC6020] is a data definition language that was introduced to 100 define the contents of a conceptual data store that allows networked 101 devices to be managed using NETCONF [RFC6241]. YANG is proving 102 relevant beyond its initial confines, as bindings to other interfaces 103 (e.g RESTCONF [I-D.ietf-netconf-restconf]) and encodings other than 104 XML (e.g JSON) are being defined. Furthermore, YANG data models can 105 be used as the basis of implementation for other interfaces, such as 106 CLI and programmatic APIs. 108 This document defines a YANG data model that can be used to configure 109 and manage Bidirectional Forwarding Detection (BFD)[RFC5880]. BFD is 110 a network protocol which is used for liveness detection of arbitrary 111 paths between systems. Some examples of different types of paths 112 over which we have BFD: 114 1) Two systems directly connected via IP. This is known as BFD over 115 single-hop IP [RFC5881] 117 2) Two systems connected via multiple hops [RFC5883] 119 3) Two systems connected via MPLS Label Switched Paths (LSPs) 120 [RFC5884] 122 4) Two systems connected via a Link Aggregation Group (LAG) interface 123 [RFC7130] 125 BFD typically does not operate on its own. Various control 126 protocols, also known as BFD clients, use the services provided by 127 BFD for their own operation [RFC5882]. The obvious candidates which 128 use BFD are those which do not have Hellos to detect failures, e.g. 129 static routes, and routing protocols whose Hellos do not suport sub- 130 second failure detection, e.g. OSPF and IS-IS. 132 1.1. Contributors 134 2. Design of the Data Model 136 The BFD YANG data model follows a VRF-centric model by augmenting the 137 "routing-protocol" data node in [I-D.ietf-netmod-routing-cfg]. 139 2.1. Design of Configuration Model 141 The configuration model consists mainly of the parameters specified 142 in [RFC5880]. Some examples are desired minimum transmit interval, 143 required minimum receive interval, detection multiplier, etc 145 Some implementations have BFD session configuration under the BFD 146 clients. For example, BFD session configuration is under routing 147 applications such as OSPF, IS-IS, BGP etc. Other implementations 148 have BFD session configuration centralized under BFD, i.e. outside 149 the multiple BFD clients. 151 The BFD parameters of interest to a BFD client are mainly the 152 multiplier and interval(s) since those parameters impact the 153 convergence time of the BFD clients when a failure occurs. So the 154 configuration model has groupings, containing multiplier and 155 interval(s), which are to be used by BFD clients. Other parameters 156 which remain under BFD control, e.g. demand mode and authentication, 157 are configured under BFD. 159 We provide groupings, which contain the basic BFD session parameters, 160 for applications to use. This ensures consistency of BFD parameters 161 across applications. 163 Although [RFC5880] allows for different values for transmit and 164 receive intervals, many implementations allow users to specify just 165 one interval which is used for both transmit and receive intervals or 166 separate values for transmit and receive intervals. Our YANG model 167 supports this: there is a choice between "min-interval", used for 168 both transmit and receive intervals, and "desired-min-tx-interval" 169 and "required-min-rx-interval". 171 2.1.1. Single-hop IP 173 For single-hop IP, the BFD multiplier and interval(s) are configured 174 in BFD clients. It is highly desirable to have the BFD configuration 175 consistent between those clients. Therefore, we have a grouping for 176 BFD configuration that applications can import in their YANG module: 178 - This provides consistency since the same grouping is being used in 179 all applications making use of BFD. 181 - Not all implementations of those BFD clients have support for BFD, 182 we must use if-feature in the respective YANG modules. 184 An application importing the BFD configuration grouping could do so 185 in a hierarchical manner if it has multiple levels at which BFD 186 configuration can be applied. In a subsequent section, we provide an 187 example of how a BFD client would use the grouping in such a way. 189 The configuration items are: 191 enabled 192 Set to true to enable BFD. 194 local-multiplier 195 This is the detection time multiplier as defined in 196 [RFC5880]. 198 min-interval 199 This is the Desired Min TX Interval and Required Min RX 200 Interval as defined in [RFC5880]. 202 OR 204 desired-min-tx-interval 205 This is the Desired Min TX Interval as defined in [RFC5880]. 207 required-min-rx-interval 208 This is the Required Min RX Interval as defined in [RFC5880]. 210 2.1.2. Multi-hop IP 212 We have a list for BFD sessions over multi-hop IP. The key consists 213 of: 215 source address 216 Address belonging to the local system as per [RFC5883] 218 destination address 219 Address belonging to the remote system as per [RFC5883] 221 Since we are following a VRF-centric model we do not need a VRF field 222 in the key. 224 Here is the list of parameters: 226 local-multiplier 227 This is the detection time multiplier as defined in 228 [RFC5880]. 230 desired-min-tx-interval 231 This is the Desired Min TX Interval as defined in [RFC5880]. 233 required-min-rx-interval 234 This is the Required Min RX Interval as defined in [RFC5880]. 236 demand-enabled 237 Set to true to enable demand mode as defined in [RFC5880]. 239 enable-authentication 240 Set to true to enable BFD authentication. 242 authentication-algorithm 243 Authentication algorithm to use, if enabled. 245 key-chain-name 246 Key-chain to be used for authentication, if enabled. 248 tx-ttl 249 TTL of outgoing BFD control packets. 251 rx-ttl 252 Minimum TTL of incoming BFD control packets. 254 2.1.3. Traffic Engineering Tunnels 256 For Traffic Engineering (TE) tunnels, BFD is configured under the TE 257 tunnel since it is the Traffic Enginnering application which knows 258 the desired failure detection parameters. The grouping for BFD 259 clients in Section 2.1.1 can be used by the TE application for the 260 basic BFD parameters. For BFD parameters which are specific to the 261 TE application, e.g. whether to tear down the tunnel in the event of 262 a BFD session failure, these parameters will be defined in the YANG 263 model of the TE application. 265 2.1.4. LDP Label Switched Paths 267 For LDP LSPs, BFD is configured under the LDP FEC. The grouping for 268 BFD clients in Section 2.1.1 can be used by the LDP application for 269 the basic BFD parameters. For BFD parameters which are specific to 270 the LDP application, if any, these parameters will be defined in the 271 YANG model of the LDP application. 273 2.1.5. Link Aggregation Groups 275 Per [RFC7130], configuring BFD on LAG consists of having micro-BFD 276 sessions on each LAG member link. The grouping for BFD clients in 277 Section 2.1.1 can be used by the LAG application for the basic BFD 278 parameters. This grouping can be used per-LAG or per member-link. 279 For BFD parameters which are specific to the LAG application, e.g. 280 the IP address of the peer system which can be reached by the LAG, 281 the parameters will be defined in the YANG model of the LAG 282 application. 284 2.1.6. Per-interface Configuration 286 With multiplier and intervals configured under the BFD clients, we 287 still need a central location to configure authentication, demand 288 mode, etc. This can be done by configuring the following parameters 289 per interface: 291 demand-enabled 292 Set to true to enable demand mode as defined in [RFC5880]. 294 enable-authentication 295 Set to true to enable BFD authentication. 297 authentication-algorithm 298 Authentication algorithm to use, if enabled. 300 key-chain-name 301 Key-chain to be used for authentication, if enabled. 303 desired-min-echo-tx-interval 304 This is the minimum interval that the local system would like 305 to use when transmitting BFD echo packets. If 0, the echo 306 function as defined in [RFC5880] is disabled. 308 required-min-echo-rx-interval 309 This is the Required Min Echo RX Interval as defined in 310 [RFC5880]. 312 2.2. Design of Operational Model 314 The operational model contains both the overall statistics of BFD 315 sessions running on the device and the per session operational 316 statistics. Since BFD is used for liveness detection of arbitrary 317 paths, there is no uniform key to identify a BFD session. E.g. a BFD 318 single-hop IP session is uniquely identified by the combination of 319 destination IP address and interface whereas a multihop IP session is 320 uniquely identified by the combination of source IP address and 321 destination IP address (in the context of a VRF). For this reason, 322 for per-session operational statistics, we do not have a single list 323 with different type BFD sessions. Instead, we have a container where 324 we have multiple lists, where each list corresponds to one specific 325 path type for BFD. For example, we have one operational list for BFD 326 single-hop IP, another list for BFD multi-hop IP, etc. In each list, 327 mainly three categories of operational items are shown. The 328 fundamental information of a BFD session such as the local 329 discriminator, remote discriminator and the capability of supporting 330 demand detect mode are shown in the first category. The second 331 category includes a BFD session running information, e.g. the FSM the 332 device in and diagnostic code received. Another example is the 333 actual transmit interval between the control packets, which may be 334 different from the desired minimum transmit interval configured, is 335 shown in this category. Similar examples are actual received 336 interval between the control packets and the actual transmit interval 337 between the echo packets. The third category contains the detailed 338 statistics of the session, e.g. when the session transitioned up/down 339 and how long it has been in that state. 341 For some session types, there may be more than 1 session on the 342 virtual path to the destination. For example, with IP multi-hop 343 there could be multiple BFD sessions from the source to the same 344 destination to test the various paths (ECMP) to the destination. 345 Each of the BFD sessions on the same virtual path is uniquely 346 identified by the source UDP port 348 2.3. Notifications 350 This YANG model defines a list of notifications to inform clients of 351 BFD of important events detected during the protocol operation. Pair 352 of local and remote discriminator identifies a BFD session on local 353 system. Notifications also give more important details about BFD 354 sessions; e.g. new state, time in previous state, routing-instance 355 and the reason that the BFD session state changed. 357 2.4. RPC Operations 359 TBD 361 2.5. BFD Configuration Data Hierarchy 363 2.5.1. Centralized BFD Configuration 365 The following is the centralized configuration data hierarchy: 367 We have a container which contains a list for each session type. 368 This contains session configuration for only IP multi-hop sessions. 370 We have per-interface configuration for authentication, demand-mode, 371 etc. This is used e.g. for IP single-hop sessions whose base BFD 372 configuration belongs to the BFD clients. 374 module: ietf-bfd 375 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 376 rt:routing-protocol: 377 +--rw bfd 378 +--rw bfd-cfg 379 | +--rw bfd-session-cfg 380 | | +--rw session-ip-mh* [source-addr dest-addr] 381 | | +--rw source-addr inet:ip-address 382 | | +--rw dest-addr inet:ip-address 383 | | +--rw admin-down? boolean 384 | | +--rw local-multiplier? multiplier 385 | | +--rw (interval-config-type)? 386 | | | +--:(tx-rx-intervals) 387 | | | | +--rw desired-min-tx-interval uint32 388 | | | | +--rw required-min-rx-interval uint32 389 | | | +--:(single-interval) 390 | | | +--rw min-interval uint32 391 | | +--rw demand-enabled? boolean 392 | | +--rw enable-authentication? boolean 393 | | +--rw authentication-parms {bfd-authentication}? 394 | | | +--rw key-chain-name? string 395 | | | +--rw algorithm? bfd-auth-algorithm 396 | | +--rw tx-ttl? ttl 397 | | +--rw rx-ttl ttl 398 | +--rw bfd-interface-cfg* [interface] {bfd-interface-config}? 399 | +--rw interface if:interface-ref 400 | +--rw local-multiplier? multiplier 401 | +--rw (interval-config-type)? 402 | | +--:(tx-rx-intervals) 403 | | | +--rw desired-min-tx-interval uint32 404 | | | +--rw required-min-rx-interval uint32 405 | | +--:(single-interval) 406 | | +--rw min-interval uint32 407 | +--rw demand-enabled? boolean 408 | +--rw enable-authentication? boolean 409 | +--rw authentication-parms {bfd-authentication}? 410 | | +--rw key-chain-name? string 411 | | +--rw algorithm? bfd-auth-algorithm 412 | +--rw desired-min-echo-tx-interval? uint32 413 | +--rw required-min-echo-rx-interval? uint32 415 2.5.2. Configuration in BFD clients 417 The following is the configuration data hierarchy for a hypothetical 418 BFD client called example-bfd-routing-app. The BFD configuration is 419 supported conditionally via use of if-feature. 421 We have a list of areas and in each area we have a list of 422 interfaces. The BFD configuration grouping is used in a hierarchical 423 fashion, it can be applied in "area" and "interface": 425 - If BFD configuration is applied under an interface, that 426 configuration takes precedence over any BFD configuration, if any, at 427 the area level 429 - If BFD configuration is applied under an "area" and none of the 430 interfaces in that area has BFD configuration, then all interfaces 431 belong to the "area" in question inherit the BFD configuration for 432 the area in question. 434 - If the BFD client implementation supports "interface all", then all 435 the interfaces belonging to that area will inherit the BFD 436 configuration under "interface all". Additionally, if there is 437 specific interface configuration, then the specific interface will 438 override the "interface all" parameters. 440 - The tx and rx intervals can be configured separately or a single 441 interval can be configured. 443 module: example-bfd-routing-app 444 +--rw area* [area-id] 445 +--rw area-id uint32 446 +--rw bfd-cfg 447 | +--rw enabled? boolean 448 | +--rw local-multiplier? multiplier 449 | +--rw (interval-config-type)? 450 | +--:(tx-rx-intervals) 451 | | +--rw desired-min-tx-interval uint32 452 | | +--rw required-min-rx-interval uint32 453 | +--:(single-interval) 454 | +--rw min-interval uint32 455 +--rw interface* [interface] 456 +--rw interface if:interface-ref 457 +--rw bfd-cfg 458 +--rw enabled? boolean 459 +--rw local-multiplier? multiplier 460 +--rw (interval-config-type)? 461 +--:(tx-rx-intervals) 462 | +--rw desired-min-tx-interval uint32 463 | +--rw required-min-rx-interval uint32 464 +--:(single-interval) 465 +--rw min-interval uint32 467 2.6. Operational Data Hierarchy 469 The complete data hierarchy of BFD YANG operational model is 470 presented below. 472 module: ietf-bfd 473 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 474 rt:routing-protocol: 475 +--rw bfd 476 +--ro bfd-oper 477 +--ro bfd-session-statistics 478 | +--ro ip-sh-session-num? uint32 479 | +--ro ip-mh-session-num? uint32 480 | +--ro total-session-num? uint32 481 | +--ro session-up-num? uint32 482 | +--ro sess-down-num? uint32 483 | +--ro sess-admin-down-num? uint32 484 +--ro bfd-session-lists 485 +--ro session-ip-sh* [interface dest-addr] 486 | +--ro interface if:interface-ref 487 | +--ro dest-addr inet:ip-address 488 | +--ro source-addr? inet:ip-address 489 | +--ro session-type? bfd-session-type 490 | +--ro local-discriminator? discriminator 491 | +--ro remote-discriminator? discriminator 492 | +--ro remote-multiplier? multiplier 493 | +--ro out-interface? if:interface-ref 494 | +--ro demand-capability? boolean 495 | +--ro source-port? inet:port-number 496 | +--ro dest-port? inet:port-number 497 | +--ro session-running* 498 | | +--ro session-index? uint32 499 | | +--ro local-state? state 500 | | +--ro remote-state? state 501 | | +--ro local-diagnostic? diagnostic 502 | | +--ro remote-diagnostic? diagnostic 503 | | +--ro detection-mode? enumeration 504 | | +--ro negotiated-tx-interval? uint32 505 | | +--ro negotiated-rx-interval? uint32 506 | | +--ro negotiated-echo-tx-interval? uint32 507 | | +--ro detection-time? uint32 508 | +--ro sesssion-statistics* 509 | +--ro create-time? yang:date-and-time 510 | +--ro last-down-time? yang:date-and-time 511 | +--ro last-up-time? yang:date-and-time 512 | +--ro down-count? uint32 513 | +--ro admin-down-count? uint32 514 | +--ro receive-packet-count? uint64 515 | +--ro send-packet-count? uint64 516 | +--ro receive-bad-packet? uint64 517 | +--ro send-failed-packet? uint64 518 +--ro session-ip-mh-group* [source-addr dest-addr] 519 | +--ro source-addr inet:ip-address 520 | +--ro dest-addr inet:ip-address 521 | +--ro session-ip-mh* [source-port] 522 | +--ro ttl? ttl 523 | +--ro session-type? bfd-session-type 524 | +--ro local-discriminator? discriminator 525 | +--ro remote-discriminator? discriminator 526 | +--ro remote-multiplier? multiplier 527 | +--ro out-interface? if:interface-ref 528 | +--ro demand-capability? boolean 529 | +--ro source-port inet:port-number 530 | +--ro dest-port? inet:port-number 531 | +--ro session-running* 532 | | +--ro session-index? uint32 533 | | +--ro local-state? state 534 | | +--ro remote-state? state 535 | | +--ro local-diagnostic? diagnostic 536 | | +--ro remote-diagnostic? diagnostic 537 | | +--ro detection-mode? enumeration 538 | | +--ro negotiated-tx-interval? uint32 539 | | +--ro negotiated-rx-interval? uint32 540 | | +--ro negotiated-echo-tx-interval? uint32 541 | | +--ro detection-time? uint32 542 | +--ro sesssion-statistics* 543 | +--ro create-time? yang:date-and-time 544 | +--ro last-down-time? yang:date-and-time 545 | +--ro last-up-time? yang:date-and-time 546 | +--ro down-count? uint32 547 | +--ro admin-down-count? uint32 548 | +--ro receive-packet-count? uint64 549 | +--ro send-packet-count? uint64 550 | +--ro receive-bad-packet? uint64 551 | +--ro send-failed-packet? uint64 552 +--ro session-te-tunnel* [tunnel-name] 553 | +--ro tunnel-name string 554 | +--ro session-type? bfd-session-type 555 | +--ro local-discriminator? discriminator 556 | +--ro remote-discriminator? discriminator 557 | +--ro remote-multiplier? multiplier 558 | +--ro out-interface? if:interface-ref 559 | +--ro demand-capability? boolean 560 | +--ro source-port? inet:port-number 561 | +--ro dest-port? inet:port-number 562 | +--ro session-running* 563 | | +--ro session-index? uint32 564 | | +--ro local-state? state 565 | | +--ro remote-state? state 566 | | +--ro local-diagnostic? diagnostic 567 | | +--ro remote-diagnostic? diagnostic 568 | | +--ro detection-mode? enumeration 569 | | +--ro negotiated-tx-interval? uint32 570 | | +--ro negotiated-rx-interval? uint32 571 | | +--ro negotiated-echo-tx-interval? uint32 572 | | +--ro detection-time? uint32 573 | +--ro sesssion-statistics* 574 | +--ro create-time? yang:date-and-time 575 | +--ro last-down-time? yang:date-and-time 576 | +--ro last-up-time? yang:date-and-time 577 | +--ro down-count? uint32 578 | +--ro admin-down-count? uint32 579 | +--ro receive-packet-count? uint64 580 | +--ro send-packet-count? uint64 581 | +--ro receive-bad-packet? uint64 582 | +--ro send-failed-packet? uint64 583 +--ro session-ldp-lsp-group* [ldp-fec] 584 | +--ro ldp-fec inet:ip-prefix 585 | +--ro session-ldp-lsp* [source-port] 586 | +--ro ttl? ttl 587 | +--ro session-type? bfd-session-type 588 | +--ro local-discriminator? discriminator 589 | +--ro remote-discriminator? discriminator 590 | +--ro remote-multiplier? multiplier 591 | +--ro out-interface? if:interface-ref 592 | +--ro demand-capability? boolean 593 | +--ro source-port inet:port-number 594 | +--ro dest-port? inet:port-number 595 | +--ro session-running* 596 | | +--ro session-index? uint32 597 | | +--ro local-state? state 598 | | +--ro remote-state? state 599 | | +--ro local-diagnostic? diagnostic 600 | | +--ro remote-diagnostic? diagnostic 601 | | +--ro detection-mode? enumeration 602 | | +--ro negotiated-tx-interval? uint32 603 | | +--ro negotiated-rx-interval? uint32 604 | | +--ro negotiated-echo-tx-interval? uint32 605 | | +--ro detection-time? uint32 606 | +--ro sesssion-statistics* 607 | +--ro create-time? yang:date-and-time 608 | +--ro last-down-time? yang:date-and-time 609 | +--ro last-up-time? yang:date-and-time 610 | +--ro down-count? uint32 611 | +--ro admin-down-count? uint32 612 | +--ro receive-packet-count? uint64 613 | +--ro send-packet-count? uint64 614 | +--ro receive-bad-packet? uint64 615 | +--ro send-failed-packet? uint64 616 +--ro session-lag* [lag-name] 617 +--ro lag-name if:interface-ref 618 +--ro session-lag-micro* [member-link] 619 +--ro member-link if:interface-ref 620 +--ro session-type? bfd-session-type 621 +--ro local-discriminator? discriminator 622 +--ro remote-discriminator? discriminator 623 +--ro remote-multiplier? multiplier 624 +--ro out-interface? if:interface-ref 625 +--ro demand-capability? boolean 626 +--ro source-port? inet:port-number 627 +--ro dest-port? inet:port-number 628 +--ro session-running* 629 | +--ro session-index? uint32 630 | +--ro local-state? state 631 | +--ro remote-state? state 632 | +--ro local-diagnostic? diagnostic 633 | +--ro remote-diagnostic? diagnostic 634 | +--ro detection-mode? enumeration 635 | +--ro negotiated-tx-interval? uint32 636 | +--ro negotiated-rx-interval? uint32 637 | +--ro negotiated-echo-tx-interval? uint32 638 | +--ro detection-time? uint32 639 +--ro sesssion-statistics* 640 +--ro create-time? yang:date-and-time 641 +--ro last-down-time? yang:date-and-time 642 +--ro last-up-time? yang:date-and-time 643 +--ro down-count? uint32 644 +--ro admin-down-count? uint32 645 +--ro receive-packet-count? uint64 646 +--ro send-packet-count? uint64 647 +--ro receive-bad-packet? uint64 648 +--ro send-failed-packet? uint64 650 2.7. Notifications 652 The BFD YANG data model defines notifications for BFD session state 653 changes. 655 module: ietf-bfd 656 augment /rt:routing/rt:routing-instance/rt:routing-protocols/ 657 rt:routing-protocol: 658 notifications: 659 +---n bfd-singlehop-notification 660 | +--ro local-discr? discriminator 661 | +--ro remote-discr? discriminator 662 | +--ro new-state? state 663 | +--ro state-change-reason? string 664 | +--ro time-in-previous-state? string 665 | +--ro dest-addr? inet:ip-address 666 | +--ro source-addr? inet:ip-address 667 | +--ro session-index? uint32 668 | +--ro session-type? bfd-session-type 669 | +--ro interface? if:interface-ref 670 | +--ro echo-enabled? boolean 671 +---n bfd-multihop-notification 672 | +--ro local-discr? discriminator 673 | +--ro remote-discr? discriminator 674 | +--ro new-state? state 675 | +--ro state-change-reason? string 676 | +--ro time-in-previous-state? string 677 | +--ro dest-addr? inet:ip-address 678 | +--ro source-addr? inet:ip-address 679 | +--ro session-index? uint32 680 | +--ro session-type? bfd-session-type 681 +---n bfd-te-tunnel-notification 682 | +--ro local-discr? discriminator 683 | +--ro remote-discr? discriminator 684 | +--ro new-state? state 685 | +--ro state-change-reason? string 686 | +--ro time-in-previous-state? string 687 | +--ro dest-addr? inet:ip-address 688 | +--ro source-addr? inet:ip-address 689 | +--ro session-index? uint32 690 | +--ro session-type? bfd-session-type 691 | +--ro tunnel-name? string 692 +---n bfd-ldp-lsp-notification 693 | +--ro local-discr? discriminator 694 | +--ro remote-discr? discriminator 695 | +--ro new-state? state 696 | +--ro state-change-reason? string 697 | +--ro time-in-previous-state? string 698 | +--ro dest-addr? inet:ip-address 699 | +--ro source-addr? inet:ip-address 700 | +--ro session-index? uint32 701 | +--ro session-type? bfd-session-type 702 | +--ro ldp-fec? inet:ip-prefix 703 | +--ro source-port? inet:port-number 704 +---n bfd-lag-notification 705 +--ro local-discr? discriminator 706 +--ro remote-discr? discriminator 707 +--ro new-state? state 708 +--ro state-change-reason? string 709 +--ro time-in-previous-state? string 710 +--ro dest-addr? inet:ip-address 711 +--ro source-addr? inet:ip-address 713 2.8. Examples 715 2.9. Interaction with other YANG modules 717 TBD. 719 2.10. BFD Yang Module 721 file "ietf-bfd@2015-07-01.yang" 723 module ietf-bfd { 724 namespace "urn:ietf:params:xml:ns:yang:ietf-bfd"; 725 // replace with IANA namespace when assigned 726 prefix "bfd"; 728 import ietf-interfaces { 729 prefix "if"; 730 } 732 import ietf-inet-types { 733 prefix "inet"; 734 } 736 import ietf-yang-types { 737 prefix "yang"; 738 } 740 import ietf-routing { 741 prefix "rt"; 742 } 744 organization "IETF BFD Working Group"; 746 contact 747 "WG Web: 748 WG List: 749 WG Chair: Jeff Haas 750 WG Chair: Nobo Akiya 751 Editor: Lianshu Zheng and Reshad Rahman"; 753 description 754 "This module contains the YANG definition for BFD parameters as 755 per RFC5880, RFC5881 and RFC5883"; 757 revision 2015-07-01 { 758 description "Initial revision."; 759 reference "RFC XXXX: A YANG data model for BFD"; 760 } 762 identity bfd { 763 base "rt:routing-protocol"; 764 description "BFD protocol"; 765 } 767 typedef discriminator { 768 type uint32 { 769 range 1..4294967295; 770 } 771 description "BFD discriminator"; 772 } 774 typedef diagnostic { 775 type enumeration { 776 enum none { 777 value 0; 778 description "None"; 779 } 780 enum controlExpiry { 781 value 1; 782 description "Control timer expiry"; 783 } 784 enum echoFailed { 785 value 2; 786 description "Echo failure"; 787 } 788 enum nborDown { 789 value 3; 790 description "Neighbor down"; 791 } 792 enum fwdingReset { 793 value 4; 794 description "Forwarding reset"; 795 } 796 enum pathDown { 797 value 5; 798 description "Path down"; 799 } 800 enum concPathDown { 801 value 6; 802 description "Concatenated path down"; 803 } 804 enum adminDown { 805 value 7; 806 description "Admin down"; 807 } 808 enum reverseConcPathDown { 809 value 8; 810 description "Reverse concatenated path down"; 811 } 812 } 813 description "BFD diagnostic"; 814 } 816 typedef state { 817 type enumeration { 818 enum adminDown { 819 value 0; 820 description "admindown"; 821 } 822 enum down { 823 value 1; 824 description "down"; 825 } 826 enum init { 827 value 2; 828 description "init"; 829 } 830 enum up { 831 value 3; 832 description "up"; 833 } 834 } 835 description "BFD state"; 836 } 838 typedef multiplier { 839 type uint8 { 840 range 1..255; 841 } 842 description "Multiplier"; 843 } 845 typedef ttl { 846 type uint8 { 847 range 1..255; 848 } 849 description "Time To Live"; 850 } 852 typedef bfd-session-type { 853 type enumeration { 854 enum ip-single-hop { 855 description "IP single hop"; 856 } 857 enum ip-multi-hop { 858 description "IP multi hop"; 859 } 860 enum te-tunnel { 861 description "Traffic Engineering tunnes"; 862 } 863 enum ldp-lsp { 864 description "LDP Label Switched Path"; 865 } 866 enum lag { 867 description "Micro-BFD on LAG member links"; 868 } 869 } 870 description 871 "BFD session type, this indicates the path type that BFD is 872 running on"; 873 } 875 typedef bfd-auth-algorithm { 876 type enumeration { 877 enum simple-password { 878 description 879 "Simple password"; 880 } 882 enum keyed-md5 { 883 description 884 "Keyed message Digest 5"; 885 } 887 enum meticulous-keyed-md5 { 888 description 889 "Meticulous keyed message Digest 5"; 890 } 892 enum keyed-sha-1 { 893 description 894 "Keyed secure hash algorithm (SHA1) "; 895 } 896 enum meticulous-keyed-sha-1 { 897 description 898 "Meticulous keyed secure hash algorithm (SHA1) "; 899 } 900 } 901 description "Authentication algorithm"; 902 } 904 feature bfd-interface-config { 905 description "BFD per-interface config supported"; 906 } 907 feature bfd-authentication { 908 description "BFD authentication supported"; 909 } 911 grouping bfd-grouping-base-cfg-parms { 912 description "BFD grouping for base config parameters"; 913 leaf local-multiplier { 914 type multiplier; 915 default 3; 916 description "Multiplier transmitted by local system"; 917 } 919 choice interval-config-type { 920 description 921 "Two interval values or 1 value used for both tx and rx"; 922 case tx-rx-intervals { 923 leaf desired-min-tx-interval { 924 type uint32; 925 units microseconds; 926 mandatory true; 927 description 928 "Desired minimum transmit interval of control packets"; 929 } 931 leaf required-min-rx-interval { 932 type uint32; 933 units microseconds; 934 mandatory true; 935 description 936 "Required minimum receive interval of control packets"; 937 } 938 } 939 case single-interval { 940 leaf min-interval { 941 type uint32; 942 units microseconds; 943 mandatory true; 944 description 945 "Desired minimum transmit interval and required " + 946 "minimum receive interval of control packets"; 947 } 948 } 949 } 950 } 952 grouping bfd-grouping-common-cfg-parms { 953 description "BFD grouping for common config parameters"; 955 uses bfd-grouping-base-cfg-parms; 957 leaf demand-enabled { 958 type boolean; 959 default false; 960 description "To enbale demand mode"; 961 } 963 leaf enable-authentication { 964 type boolean; 965 default false; 966 description 967 "If set, the Authentication Section is present and the 968 session is to be authenticated (see RFC5880 section 6.7 969 for details)."; 970 } 972 container authentication-parms { 973 if-feature bfd-authentication; 974 description "Parameters for authentication"; 975 leaf key-chain-name { 976 type string; 977 must "../algorithm" { 978 error-message 979 "May not be configured without algorithm"; 980 description "Requires algorithm"; 981 } 982 description 983 "Key chain name"; 984 } 985 leaf algorithm { 986 type bfd-auth-algorithm; 987 must "../key-chain" { 988 error-message 989 "May not be configured without key-chain"; 990 description "Requires key-chain"; 991 } 992 description "Authentication algorithm to be used"; 993 } 994 } 995 } 997 grouping bfd-grouping-echo-cfg-parms { 998 description "BFD grouping for echo config parameters"; 999 leaf desired-min-echo-tx-interval { 1000 type uint32; 1001 units microseconds; 1002 default 0; 1003 description "Desired minumum transmit interval for echo"; 1004 } 1006 leaf required-min-echo-rx-interval { 1007 type uint32; 1008 units microseconds; 1009 default 0; 1010 description "Required minimum receive interval for echo"; 1011 } 1012 } 1014 grouping bfd-client-base-cfg-parms { 1015 description 1016 "BFD grouping for base config parameters which could be used 1017 by a protocol which is a client of BFD"; 1019 container bfd-cfg { 1020 description "BFD configuration"; 1021 leaf enabled { 1022 type boolean; 1023 default false; 1024 description "True if BFD is enabled"; 1025 } 1027 uses bfd-grouping-base-cfg-parms; 1029 } 1030 } 1032 grouping bfd-all-session { 1033 description "BFD session operational information"; 1034 leaf session-type { 1035 type bfd-session-type; 1036 description 1037 "BFD session type, this indicates the path type that BFD is 1038 running on"; 1039 } 1040 leaf local-discriminator { 1041 type discriminator; 1042 description "Local discriminator"; 1043 } 1044 leaf remote-discriminator { 1045 type discriminator; 1046 description "Remote discriminator"; 1047 } 1048 leaf remote-multiplier { 1049 type multiplier; 1050 description "Remote multiplier"; 1051 } 1052 leaf out-interface { 1053 type if:interface-ref; 1054 description "Outgoing physical interface name"; 1055 } 1056 leaf demand-capability { 1057 type boolean; 1058 description "Local demand mode capability"; 1059 } 1060 leaf source-port { 1061 type inet:port-number; 1062 description "Source UDP port"; 1063 } 1064 leaf dest-port { 1065 type inet:port-number; 1066 description "Destination UDP port"; 1067 } 1069 list session-running { 1070 description "BFD session running information"; 1071 leaf session-index { 1072 type uint32; 1073 description 1074 "An index used to uniquely identify BFD sessions"; 1075 } 1076 leaf local-state { 1077 type state; 1078 description "Local state"; 1079 } 1080 leaf remote-state { 1081 type state; 1082 description "Remote state"; 1083 } 1084 leaf local-diagnostic { 1085 type diagnostic; 1086 description "Local diagnostic"; 1087 } 1088 leaf remote-diagnostic { 1089 type diagnostic; 1090 description "Remote diagnostic"; 1091 } 1092 leaf detection-mode { 1093 type enumeration { 1094 enum async-with-echo { 1095 value "1"; 1096 description "Async with echo"; 1097 } 1098 enum async-without-echo { 1099 value "2"; 1100 description "Async without echo"; 1101 } 1102 enum demand-with-echo { 1103 value "3"; 1104 description "Demand with echo"; 1105 } 1106 enum demand-without-echo { 1107 value "4"; 1108 description "Demand without echo"; 1109 } 1110 } 1111 description "Detection mode"; 1112 } 1113 leaf negotiated-tx-interval { 1114 type uint32; 1115 units microseconds; 1116 description "Negotiated transmit interval"; 1117 } 1118 leaf negotiated-rx-interval { 1119 type uint32; 1120 units microseconds; 1121 description "Negotiated receive interval"; 1122 } 1123 leaf negotiated-echo-tx-interval { 1124 type uint32; 1125 units microseconds; 1126 description "Negotiated echo transmit interval"; 1127 } 1128 leaf detection-time { 1129 type uint32; 1130 units microseconds; 1131 description "Detection time"; 1132 } 1133 } 1135 list sesssion-statistics { 1136 description "BFD session statistics"; 1138 leaf create-time { 1139 type yang:date-and-time; 1140 description 1141 "Time and date when session was created"; 1142 } 1143 leaf last-down-time { 1144 type yang:date-and-time; 1145 description 1146 "Time and date of last time the session went down"; 1147 } 1148 leaf last-up-time { 1149 type yang:date-and-time; 1150 description 1151 "Time and date of last time the session went up"; 1152 } 1153 leaf down-count { 1154 type uint32; 1155 description "Session Down Count"; 1156 } 1157 leaf admin-down-count { 1158 type uint32; 1159 description "Session Admin-Down Count"; 1160 } 1161 leaf receive-packet-count { 1162 type uint64; 1163 description "Received Packet Count"; 1164 } 1165 leaf send-packet-count { 1166 type uint64; 1167 description "Sent Packet Count"; 1168 } 1169 leaf receive-bad-packet { 1170 type uint64; 1171 description "Received bad packet count"; 1172 } 1173 leaf send-failed-packet { 1174 type uint64; 1175 description "Packet Failed to Send Count"; 1176 } 1177 } 1178 } 1180 augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" 1181 + "rt:routing-protocol" { 1182 when "rt:type = 'bfd:bfd'" { 1183 description 1184 "This augment is only valid for a protocol instance 1185 of BFD."; 1186 } 1187 description "BFD augmentation."; 1189 container bfd { 1190 description "BFD top-level container"; 1191 container bfd-cfg { 1192 description "BFD configuration"; 1193 container bfd-session-cfg { 1194 description "BFD session configuration"; 1196 list session-ip-mh { 1197 key "source-addr dest-addr"; 1198 description "List of IP multi-hop sessions"; 1200 leaf source-addr { 1201 type inet:ip-address; 1202 description 1203 "Local IP address"; 1204 } 1205 leaf dest-addr { 1206 type inet:ip-address; 1207 description 1208 "IP address of the peer"; 1209 } 1210 leaf admin-down { 1211 type boolean; 1212 default false; 1213 description 1214 "Is the BFD session administratively down"; 1215 } 1216 uses bfd-grouping-common-cfg-parms; 1218 leaf tx-ttl { 1219 type ttl; 1220 default 255; 1221 description "TTL of outgoing BFD control packets"; 1222 } 1223 leaf rx-ttl { 1224 type ttl; 1225 mandatory true; 1226 description 1227 "Minimum allowed TTL value for incoming BFD control 1228 packets"; 1229 } 1230 } 1231 } 1232 list bfd-interface-cfg { 1233 if-feature bfd-interface-config; 1234 key interface; 1236 description "Per-interface BFD configuration"; 1237 leaf interface { 1238 type if:interface-ref; 1239 description "Interface"; 1241 } 1242 uses bfd-grouping-common-cfg-parms; 1244 uses bfd-grouping-echo-cfg-parms; 1246 } 1247 } 1249 container bfd-oper { 1250 config "false"; 1251 description "BFD operational container"; 1252 container bfd-session-statistics { 1253 description "BFD session counters"; 1254 leaf ip-sh-session-num { 1255 type uint32; 1256 description "IP single hop session number"; 1257 } 1258 leaf ip-mh-session-num { 1259 type uint32; 1260 description "IP multi hop session Number"; 1261 } 1262 leaf total-session-num { 1263 type uint32; 1264 description "Total session number"; 1265 } 1266 leaf session-up-num { 1267 type uint32; 1268 description "Session up number"; 1269 } 1270 leaf sess-down-num { 1271 type uint32; 1272 description "Session down number"; 1273 } 1274 leaf sess-admin-down-num { 1275 type uint32; 1276 description "Session admin-down number"; 1277 } 1278 } 1279 container bfd-session-lists { 1280 description 1281 "Contains multiple session lists, one per type"; 1282 list session-ip-sh { 1283 key "interface dest-addr"; 1284 description "BFD IP single-hop sessions"; 1285 leaf interface { 1286 type if:interface-ref; 1287 description 1288 "Interface on which the BFD session is running."; 1289 } 1290 leaf dest-addr { 1291 type inet:ip-address; 1292 description "BFD peer address"; 1293 } 1294 leaf source-addr { 1295 type inet:ip-address; 1296 description "BFD source address"; 1297 } 1299 uses bfd-all-session; 1300 } 1302 list session-ip-mh-group { 1303 key "source-addr dest-addr"; 1304 description 1305 "BFD IP multi-hop group of sessions. A group of " + 1306 "sessions is between 1 source and 1 destination, " + 1307 "each session uses a different source UDP port for " + 1308 "ECMP."; 1309 leaf source-addr { 1310 type inet:ip-address; 1311 description "BFD source address"; 1312 } 1313 leaf dest-addr { 1314 type inet:ip-address; 1315 description "BFD peer address"; 1316 } 1317 list session-ip-mh { 1318 key "source-port"; 1319 description 1320 "The BFD sessions between a source and a. " + 1321 "destination. Source UDP port is unique for " + 1322 "each session in the group."; 1323 leaf ttl { 1324 type ttl; 1325 description "TTL of outgoing packets"; 1326 } 1327 uses bfd-all-session; 1328 } 1329 } 1331 list session-te-tunnel { 1332 key "tunnel-name"; 1333 description "BFD over TE tunnel"; 1335 leaf tunnel-name { 1336 type string; 1337 description "Name of TE tunnel"; 1338 } 1339 uses bfd-all-session; 1340 } 1342 list session-ldp-lsp-group { 1343 key "ldp-fec"; 1344 description 1345 "BFD over LDP LSP group of sessions. A group of " + 1346 "sessions is to one LDP FEC, each session uses a " + 1347 "different source UDP port for ECMP."; 1349 leaf ldp-fec { 1350 type inet:ip-prefix; 1351 description "LDP FEC"; 1352 } 1353 list session-ldp-lsp { 1354 key "source-port"; 1355 description 1356 "The BFD sessions on an LDP FEC. Source UDP " + 1357 "port is unique for each session in the group."; 1358 leaf ttl { 1359 type ttl; 1360 description "TTL of outgoing packets"; 1361 } 1362 uses bfd-all-session; 1363 } 1364 } 1366 list session-lag { 1367 key "lag-name"; 1368 description "A LAG interface on which BFD is running"; 1369 leaf lag-name { 1370 type if:interface-ref ; 1371 description "Name of the LAG"; 1372 } 1374 list session-lag-micro { 1375 key "member-link"; 1376 description 1377 "Micro-BFD over LAG. This represents BFD " + 1378 "over one member link"; 1380 leaf member-link { 1381 type if:interface-ref; 1382 description 1383 "Member link on which micro-BFD is running"; 1384 } 1385 uses bfd-all-session; 1386 } 1387 } 1389 } 1390 } 1391 } 1393 } 1395 grouping bfd-notification-parms { 1396 description 1397 "This group describes common parameters that will be sent " + 1398 "as part of BFD notification"; 1400 leaf local-discr { 1401 type discriminator; 1402 description "BFD local discriminator"; 1403 } 1405 leaf remote-discr { 1406 type discriminator; 1407 description "BFD remote discriminator"; 1408 } 1410 leaf new-state { 1411 type state; 1412 description "Current BFD state"; 1413 } 1415 leaf state-change-reason { 1416 type string; 1417 description "BFD state change reason"; 1418 } 1420 leaf time-in-previous-state { 1421 type string; 1422 description 1423 "How long the BFD session was in the previous state"; 1424 } 1426 leaf dest-addr { 1427 type inet:ip-address; 1428 description "BFD peer address"; 1429 } 1431 leaf source-addr { 1432 type inet:ip-address; 1433 description "BFD local address"; 1434 } 1436 leaf session-index { 1437 type uint32; 1438 description "An index used to uniquely identify BFD sessions"; 1439 } 1441 leaf session-type { 1442 type bfd-session-type; 1443 description "BFD session type"; 1444 } 1445 } 1447 notification bfd-singlehop-notification { 1448 description 1449 "Notification for BFD single-hop session state change. An " + 1450 "implementation may rate-limit notifications, e.g. when a" + 1451 "session is continuously changing state."; 1453 uses bfd-notification-parms; 1455 leaf interface { 1456 type if:interface-ref; 1457 description "Interface to which this BFD session belongs to"; 1458 } 1460 leaf echo-enabled { 1461 type boolean; 1462 description "Was echo enabled for BFD"; 1463 } 1464 } 1466 notification bfd-multihop-notification { 1467 description 1468 "Notification for BFD multi-hop session state change. An " + 1469 "implementation may rate-limit notifications, e.g. when a" + 1470 "session is continuously changing state."; 1472 uses bfd-notification-parms; 1473 } 1475 notification bfd-te-tunnel-notification { 1476 description 1477 "Notification for BFD over TE tunnel session state change. " + 1478 "An implementation may rate-limit notifications, e.g. when a" + 1479 "session is continuously changing state."; 1481 uses bfd-notification-parms; 1483 leaf tunnel-name { 1484 type string; 1485 description "TE tunnel to which this BFD session belongs to"; 1486 } 1487 } 1489 notification bfd-ldp-lsp-notification { 1490 description 1491 "Notification for BFD over LDP LSP session state change. " + 1492 "An implementation may rate-limit notifications, e.g. when a" + 1493 "session is continuously changing state."; 1495 uses bfd-notification-parms; 1497 leaf ldp-fec { 1498 type inet:ip-prefix; 1499 description "LDP FEC"; 1500 } 1501 leaf source-port { 1502 type inet:port-number; 1503 description "Source UDP port"; 1504 } 1505 } 1507 notification bfd-lag-notification { 1508 description 1509 "Notification for BFD over LAG session state change. " + 1510 "An implementation may rate-limit notifications, e.g. when a" + 1511 "session is continuously changing state."; 1513 uses bfd-notification-parms; 1515 leaf lag-name { 1516 type if:interface-ref; 1517 description "LAG interface name"; 1518 } 1520 leaf member-link { 1521 type if:interface-ref; 1522 description "Member link on which BFD is running"; 1523 } 1524 } 1525 } 1527 1529 2.11. BFD Client Example Configuration Yang Module 1531 module example-bfd-routing-app { 1532 namespace "urn:ietf:params:xml:ns:yang:example-bfd-routing-app"; 1533 prefix bfd-routing-app; 1535 import ietf-bfd { 1536 prefix "bfd"; 1537 } 1539 import ietf-interfaces { 1540 prefix "if"; 1541 } 1543 organization 1544 "ACME"; 1545 contact 1546 "acme@acme.com"; 1548 description 1549 "Testing BFD grouping (simulating a routing application)"; 1551 revision 2015-07-01 { 1552 description "Initial revision."; 1553 reference "RFC XXXX: An example BFD routing application"; 1554 } 1556 feature routing-app-bfd { 1557 description "BFD configuration under routing-app"; 1558 } 1560 list area { 1561 key "area-id"; 1563 description "Specify a routing area."; 1564 leaf area-id { 1565 type uint32; 1566 description "Area"; 1567 } 1569 uses bfd:bfd-client-base-cfg-parms { 1570 if-feature routing-app-bfd; 1571 } 1573 list interface { 1574 key "interface"; 1575 description "List of interfaces"; 1576 leaf interface { 1577 type if:interface-ref; 1578 description "Interface"; 1579 } 1580 uses bfd:bfd-client-base-cfg-parms { 1581 if-feature routing-app-bfd; 1582 } 1583 } 1585 } 1586 } 1588 2.12. Security Considerations 1590 The YANG module defined in this memo is designed to be accessed via 1591 the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 1592 secure transport layer and the mandatory to implement secure 1593 transport is SSH [RFC6242]. The NETCONF access control model 1594 [RFC6536] provides the means to restrict access for particular 1595 NETCONF users to a pre-configured subset of all available NETCONF 1596 protocol operations and content. 1598 The YANG module has writeable data nodes which can be used for 1599 creation of BFD sessions and modification of BFD session parameters. 1600 The system should "police" creation of BFD sessions to prevent new 1601 sessions from causing existing BFD sessions to fail. For BFD session 1602 modification, the BFD protocol has mechanisms in place which allow 1603 for in service modification. 1605 2.13. IANA Considerations 1607 The IANA is requested to as assign a new new namespace URI from the 1608 IETF XML registry. 1610 URI:TBD 1612 2.14. Acknowledgements 1614 We would also like to thank Nobo Akiya and Jeff Haas for their 1615 encouragement on this work. 1617 3. References 1619 3.1. Normative References 1621 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1622 Requirement Levels", BCP 14, RFC 2119, March 1997. 1624 [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 1625 (BFD)", RFC 5880, June 2010. 1627 [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 1628 (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, June 1629 2010. 1631 [RFC5882] Katz, D. and D. Ward, "Generic Application of 1632 Bidirectional Forwarding Detection (BFD)", RFC 5882, June 1633 2010. 1635 [RFC5883] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 1636 (BFD) for Multihop Paths", RFC 5883, June 2010. 1638 [RFC5884] Aggarwal, R., Kompella, K., Nadeau, T., and G. Swallow, 1639 "Bidirectional Forwarding Detection (BFD) for MPLS Label 1640 Switched Paths (LSPs)", RFC 5884, June 2010. 1642 [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the 1643 Network Configuration Protocol (NETCONF)", RFC 6020, 1644 October 2010. 1646 [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. 1647 Bierman, "Network Configuration Protocol (NETCONF)", RFC 1648 6241, June 2011. 1650 [RFC7130] Bhatia, M., Chen, M., Boutros, S., Binderberger, M., and 1651 J. Haas, "Bidirectional Forwarding Detection (BFD) on Link 1652 Aggregation Group (LAG) Interfaces", RFC 7130, February 1653 2014. 1655 3.2. Informative References 1657 [I-D.ietf-netconf-restconf] 1658 Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1659 Protocol", draft-ietf-netconf-restconf-06 (work in 1660 progress), June 2015. 1662 [I-D.ietf-netmod-routing-cfg] 1663 Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1664 Management", draft-ietf-netmod-routing-cfg-19 (work in 1665 progress), May 2015. 1667 Appendix A. Change log 1669 RFC Editor: Remove this section upon publication as an RFC. 1671 A.1. Changes between versions -03 and -04 1673 o Follow VRF-centric model 1675 o IP single-hop session configuration in BFD clients 1677 A.2. Changes between versions -02 and -03 1679 o Fixed date mismatch 1681 o Updated authors 1683 A.3. Changes between versions -01 and -02 1685 o Fixed errors and warnings from "pyang --ietf" 1687 o Added appendix for "Change log" 1689 A.4. Changes between versions -00 and -01 1691 In the YANG module section: 1693 o Added missing filename 1695 o Added missing CODE ENDS 1697 Authors' Addresses 1699 Lianshu Zheng (editor) 1700 Huawei Technologies 1701 China 1703 Email: vero.zheng@huawei.com 1704 Reshad Rahman (editor) 1705 Cisco Systems 1706 Canada 1708 Email: rrahman@cisco.com 1710 Santosh Pallagatti 1711 Juniper Networks 1712 India 1714 Email: santoshpk@juniper.net 1716 Mahesh Jethanandani 1717 Cisco Systems 1719 Email: mjethanandani@gmail.com 1721 Greg Mirsky 1722 Ericsson 1724 Email: gregory.mirsky@ericsson.com