idnits 2.17.1 draft-ietf-bfd-yang-00.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 (August 19, 2015) is 3174 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 1533, but not defined == Missing Reference: 'RFC6536' is mentioned on line 1534, but not defined ** Obsolete undefined reference: RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-18) exists of draft-ietf-netconf-restconf-07 == 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: February 20, 2016 Cisco Systems 6 S. Pallagatti 7 Juniper Networks 8 M. Jethanandani 9 Cisco Systems 10 G. Mirsky 11 Ericsson 12 August 19, 2015 14 Yang Data Model for Bidirectional Forwarding Detection (BFD) 15 draft-ietf-bfd-yang-00.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 February 20, 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 . . . . . . 31 84 2.12. Security Considerations . . . . . . . . . . . . . . . . . 33 85 2.13. IANA Considerations . . . . . . . . . . . . . . . . . . . 33 86 2.14. Acknowledgements . . . . . . . . . . . . . . . . . . . . 33 87 3. References . . . . . . . . . . . . . . . . . . . . . . . . . 33 88 3.1. Normative References . . . . . . . . . . . . . . . . . . 33 89 3.2. Informative References . . . . . . . . . . . . . . . . . 34 90 Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 35 91 A.1. Changes between versions -03 and -04 . . . . . . . . . . 35 92 A.2. Changes between versions -02 and -03 . . . . . . . . . . 35 93 A.3. Changes between versions -01 and -02 . . . . . . . . . . 35 94 A.4. Changes between versions -00 and -01 . . . . . . . . . . 35 95 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 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" 722 module ietf-bfd { 723 namespace "urn:ietf:params:xml:ns:yang:ietf-bfd"; 724 // replace with IANA namespace when assigned 725 prefix "bfd"; 727 import ietf-interfaces { 728 prefix "if"; 729 } 730 import ietf-inet-types { 731 prefix "inet"; 732 } 733 import ietf-yang-types { 734 prefix "yang"; 735 } 736 import ietf-routing { 737 prefix "rt"; 738 } 739 organization "IETF BFD Working Group"; 740 contact 741 "WG Web: 742 WG List: 743 WG Chair: Jeff Haas 744 WG Chair: Nobo Akiya 745 Editor: Lianshu Zheng and Reshad Rahman"; 746 description 747 "This module contains the YANG definition for BFD parameters as 748 per RFC5880, RFC5881 and RFC5883"; 749 revision 2015-07-01 { 750 description "Initial revision."; 751 reference "RFC XXXX: A YANG data model for BFD"; 753 } 754 identity bfd { 755 base "rt:routing-protocol"; 756 description "BFD protocol"; 757 } 758 typedef discriminator { 759 type uint32 { 760 range 1..4294967295; 761 } 762 description "BFD discriminator"; 763 } 764 typedef diagnostic { 765 type enumeration { 766 enum none { 767 value 0; 768 description "None"; 769 } 770 enum controlExpiry { 771 value 1; 772 description "Control timer expiry"; 773 } 774 enum echoFailed { 775 value 2; 776 description "Echo failure"; 777 } 778 enum nborDown { 779 value 3; 780 description "Neighbor down"; 781 } 782 enum fwdingReset { 783 value 4; 784 description "Forwarding reset"; 785 } 786 enum pathDown { 787 value 5; 788 description "Path down"; 789 } 790 enum concPathDown { 791 value 6; 792 description "Concatenated path down"; 793 } 794 enum adminDown { 795 value 7; 796 description "Admin down"; 797 } 798 enum reverseConcPathDown { 799 value 8; 800 description "Reverse concatenated path down"; 802 } 803 } 804 description "BFD diagnostic"; 805 } 806 typedef state { 807 type enumeration { 808 enum adminDown { 809 value 0; 810 description "admindown"; 811 } 812 enum down { 813 value 1; 814 description "down"; 815 } 816 enum init { 817 value 2; 818 description "init"; 819 } 820 enum up { 821 value 3; 822 description "up"; 823 } 824 } 825 description "BFD state"; 826 } 827 typedef multiplier { 828 type uint8 { 829 range 1..255; 830 } 831 description "Multiplier"; 832 } 833 typedef ttl { 834 type uint8 { 835 range 1..255; 836 } 837 description "Time To Live"; 838 } 839 typedef bfd-session-type { 840 type enumeration { 841 enum ip-single-hop { 842 description "IP single hop"; 843 } 844 enum ip-multi-hop { 845 description "IP multi hop"; 846 } 847 enum te-tunnel { 848 description "Traffic Engineering tunnes"; 849 } 850 enum ldp-lsp { 851 description "LDP Label Switched Path"; 852 } 853 enum lag { 854 description "Micro-BFD on LAG member links"; 855 } 856 } 857 description 858 "BFD session type, this indicates the path type that BFD is 859 running on"; 860 } 861 typedef bfd-auth-algorithm { 862 type enumeration { 863 enum simple-password { 864 description 865 "Simple password"; 866 } 868 enum keyed-md5 { 869 description 870 "Keyed message Digest 5"; 871 } 873 enum meticulous-keyed-md5 { 874 description 875 "Meticulous keyed message Digest 5"; 876 } 878 enum keyed-sha-1 { 879 description 880 "Keyed secure hash algorithm (SHA1) "; 881 } 883 enum meticulous-keyed-sha-1 { 884 description 885 "Meticulous keyed secure hash algorithm (SHA1) "; 886 } 887 } 888 description "Authentication algorithm"; 889 } 890 feature bfd-interface-config { 891 description "BFD per-interface config supported"; 892 } 893 feature bfd-authentication { 894 description "BFD authentication supported"; 895 } 896 grouping bfd-grouping-base-cfg-parms { 897 description "BFD grouping for base config parameters"; 898 leaf local-multiplier { 899 type multiplier; 900 default 3; 901 description "Multiplier transmitted by local system"; 902 } 903 choice interval-config-type { 904 description 905 "Two interval values or 1 value used for both tx and rx"; 906 case tx-rx-intervals { 907 leaf desired-min-tx-interval { 908 type uint32; 909 units microseconds; 910 mandatory true; 911 description 912 "Desired minimum transmit interval of control packets"; 913 } 914 leaf required-min-rx-interval { 915 type uint32; 916 units microseconds; 917 mandatory true; 918 description 919 "Required minimum receive interval of control packets"; 920 } 921 } 922 case single-interval { 923 leaf min-interval { 924 type uint32; 925 units microseconds; 926 mandatory true; 927 description 928 "Desired minimum transmit interval and required " + 929 "minimum receive interval of control packets"; 930 } 931 } 932 } 933 } 934 grouping bfd-grouping-common-cfg-parms { 935 description "BFD grouping for common config parameters"; 937 uses bfd-grouping-base-cfg-parms; 938 leaf demand-enabled { 939 type boolean; 940 default false; 941 description "To enbale demand mode"; 942 } 943 leaf enable-authentication { 944 type boolean; 945 default false; 946 description 947 "If set, the Authentication Section is present and the 948 session is to be authenticated (see RFC5880 section 6.7 949 for details)."; 950 } 951 container authentication-parms { 952 if-feature bfd-authentication; 953 description "Parameters for authentication"; 954 leaf key-chain-name { 955 type string; 956 must "../algorithm" { 957 error-message 958 "May not be configured without algorithm"; 959 description "Requires algorithm"; 960 } 961 description 962 "Key chain name"; 963 } 964 leaf algorithm { 965 type bfd-auth-algorithm; 966 must "../key-chain" { 967 error-message 968 "May not be configured without key-chain"; 969 description "Requires key-chain"; 970 } 971 description "Authentication algorithm to be used"; 972 } 973 } 974 } 975 grouping bfd-grouping-echo-cfg-parms { 976 description "BFD grouping for echo config parameters"; 977 leaf desired-min-echo-tx-interval { 978 type uint32; 979 units microseconds; 980 default 0; 981 description "Desired minumum transmit interval for echo"; 982 } 983 leaf required-min-echo-rx-interval { 984 type uint32; 985 units microseconds; 986 default 0; 987 description "Required minimum receive interval for echo"; 988 } 989 } 990 grouping bfd-client-base-cfg-parms { 991 description 992 "BFD grouping for base config parameters which could be used 993 by a protocol which is a client of BFD"; 995 container bfd-cfg { 996 description "BFD configuration"; 997 leaf enabled { 998 type boolean; 999 default false; 1000 description "True if BFD is enabled"; 1001 } 1002 uses bfd-grouping-base-cfg-parms; 1003 } 1004 } 1005 grouping bfd-all-session { 1006 description "BFD session operational information"; 1007 leaf session-type { 1008 type bfd-session-type; 1009 description 1010 "BFD session type, this indicates the path type that BFD is 1011 running on"; 1012 } 1013 leaf local-discriminator { 1014 type discriminator; 1015 description "Local discriminator"; 1016 } 1017 leaf remote-discriminator { 1018 type discriminator; 1019 description "Remote discriminator"; 1020 } 1021 leaf remote-multiplier { 1022 type multiplier; 1023 description "Remote multiplier"; 1024 } 1025 leaf out-interface { 1026 type if:interface-ref; 1027 description "Outgoing physical interface name"; 1028 } 1029 leaf demand-capability { 1030 type boolean; 1031 description "Local demand mode capability"; 1032 } 1033 leaf source-port { 1034 type inet:port-number; 1035 description "Source UDP port"; 1036 } 1037 leaf dest-port { 1038 type inet:port-number; 1039 description "Destination UDP port"; 1040 } 1041 list session-running { 1042 description "BFD session running information"; 1043 leaf session-index { 1044 type uint32; 1045 description 1046 "An index used to uniquely identify BFD sessions"; 1047 } 1048 leaf local-state { 1049 type state; 1050 description "Local state"; 1051 } 1052 leaf remote-state { 1053 type state; 1054 description "Remote state"; 1055 } 1056 leaf local-diagnostic { 1057 type diagnostic; 1058 description "Local diagnostic"; 1059 } 1060 leaf remote-diagnostic { 1061 type diagnostic; 1062 description "Remote diagnostic"; 1063 } 1064 leaf detection-mode { 1065 type enumeration { 1066 enum async-with-echo { 1067 value "1"; 1068 description "Async with echo"; 1069 } 1070 enum async-without-echo { 1071 value "2"; 1072 description "Async without echo"; 1073 } 1074 enum demand-with-echo { 1075 value "3"; 1076 description "Demand with echo"; 1077 } 1078 enum demand-without-echo { 1079 value "4"; 1080 description "Demand without echo"; 1081 } 1082 } 1083 description "Detection mode"; 1084 } 1085 leaf negotiated-tx-interval { 1086 type uint32; 1087 units microseconds; 1088 description "Negotiated transmit interval"; 1089 } 1090 leaf negotiated-rx-interval { 1091 type uint32; 1092 units microseconds; 1093 description "Negotiated receive interval"; 1094 } 1095 leaf negotiated-echo-tx-interval { 1096 type uint32; 1097 units microseconds; 1098 description "Negotiated echo transmit interval"; 1099 } 1100 leaf detection-time { 1101 type uint32; 1102 units microseconds; 1103 description "Detection time"; 1104 } 1105 } 1106 list sesssion-statistics { 1107 description "BFD session statistics"; 1108 leaf create-time { 1109 type yang:date-and-time; 1110 description 1111 "Time and date when session was created"; 1112 } 1113 leaf last-down-time { 1114 type yang:date-and-time; 1115 description 1116 "Time and date of last time the session went down"; 1117 } 1118 leaf last-up-time { 1119 type yang:date-and-time; 1120 description 1121 "Time and date of last time the session went up"; 1122 } 1123 leaf down-count { 1124 type uint32; 1125 description "Session Down Count"; 1126 } 1127 leaf admin-down-count { 1128 type uint32; 1129 description "Session Admin-Down Count"; 1130 } 1131 leaf receive-packet-count { 1132 type uint64; 1133 description "Received Packet Count"; 1134 } 1135 leaf send-packet-count { 1136 type uint64; 1137 description "Sent Packet Count"; 1138 } 1139 leaf receive-bad-packet { 1140 type uint64; 1141 description "Received bad packet count"; 1142 } 1143 leaf send-failed-packet { 1144 type uint64; 1145 description "Packet Failed to Send Count"; 1146 } 1147 } 1148 } 1149 augment "/rt:routing/rt:routing-instance/rt:routing-protocols/" 1150 + "rt:routing-protocol" { 1151 when "rt:type = 'bfd:bfd'" { 1152 description 1153 "This augment is only valid for a protocol instance 1154 of BFD."; 1155 } 1156 description "BFD augmentation."; 1157 container bfd { 1158 description "BFD top-level container"; 1159 container bfd-cfg { 1160 description "BFD configuration"; 1161 container bfd-session-cfg { 1162 description "BFD session configuration"; 1163 list session-ip-mh { 1164 key "source-addr dest-addr"; 1165 description "List of IP multi-hop sessions"; 1166 leaf source-addr { 1167 type inet:ip-address; 1168 description 1169 "Local IP address"; 1170 } 1171 leaf dest-addr { 1172 type inet:ip-address; 1173 description 1174 "IP address of the peer"; 1175 } 1176 leaf admin-down { 1177 type boolean; 1178 default false; 1179 description 1180 "Is the BFD session administratively down"; 1181 } 1182 uses bfd-grouping-common-cfg-parms; 1183 leaf tx-ttl { 1184 type ttl; 1185 default 255; 1186 description "TTL of outgoing BFD control packets"; 1188 } 1189 leaf rx-ttl { 1190 type ttl; 1191 mandatory true; 1192 description 1193 "Minimum allowed TTL value for incoming BFD control 1194 packets"; 1195 } 1196 } 1197 } 1198 list bfd-interface-cfg { 1199 if-feature bfd-interface-config; 1200 key interface; 1201 description "Per-interface BFD configuration"; 1202 leaf interface { 1203 type if:interface-ref; 1204 description "Interface"; 1205 } 1206 uses bfd-grouping-common-cfg-parms; 1207 uses bfd-grouping-echo-cfg-parms; 1208 } 1209 } 1210 container bfd-oper { 1211 config "false"; 1212 description "BFD operational container"; 1213 container bfd-session-statistics { 1214 description "BFD session counters"; 1215 leaf ip-sh-session-num { 1216 type uint32; 1217 description "IP single hop session number"; 1218 } 1219 leaf ip-mh-session-num { 1220 type uint32; 1221 description "IP multi hop session Number"; 1222 } 1223 leaf total-session-num { 1224 type uint32; 1225 description "Total session number"; 1226 } 1227 leaf session-up-num { 1228 type uint32; 1229 description "Session up number"; 1230 } 1231 leaf sess-down-num { 1232 type uint32; 1233 description "Session down number"; 1234 } 1235 leaf sess-admin-down-num { 1236 type uint32; 1237 description "Session admin-down number"; 1238 } 1239 } 1241 container bfd-session-lists { 1242 description 1243 "Contains multiple session lists, one per type"; 1244 list session-ip-sh { 1245 key "interface dest-addr"; 1246 description "BFD IP single-hop sessions"; 1247 leaf interface { 1248 type if:interface-ref; 1249 description 1250 "Interface on which the BFD session is running."; 1251 } 1252 leaf dest-addr { 1253 type inet:ip-address; 1254 description "BFD peer address"; 1255 } 1256 leaf source-addr { 1257 type inet:ip-address; 1258 description "BFD source address"; 1259 } 1260 uses bfd-all-session; 1261 } 1262 list session-ip-mh-group { 1263 key "source-addr dest-addr"; 1264 description 1265 "BFD IP multi-hop group of sessions. A group of " + 1266 "sessions is between 1 source and 1 destination, " + 1267 "each session uses a different source UDP port for " + 1268 "ECMP."; 1269 leaf source-addr { 1270 type inet:ip-address; 1271 description "BFD source address"; 1272 } 1273 leaf dest-addr { 1274 type inet:ip-address; 1275 description "BFD peer address"; 1276 } 1277 list session-ip-mh { 1278 key "source-port"; 1279 description 1280 "The BFD sessions between a source and a. " + 1281 "destination. Source UDP port is unique for " + 1282 "each session in the group."; 1283 leaf ttl { 1284 type ttl; 1285 description "TTL of outgoing packets"; 1286 } 1287 uses bfd-all-session; 1288 } 1289 } 1290 list session-te-tunnel { 1291 key "tunnel-name"; 1292 description "BFD over TE tunnel"; 1293 leaf tunnel-name { 1294 type string; 1295 description "Name of TE tunnel"; 1296 } 1297 uses bfd-all-session; 1298 } 1299 list session-ldp-lsp-group { 1300 key "ldp-fec"; 1301 description 1302 "BFD over LDP LSP group of sessions. A group of " + 1303 "sessions is to one LDP FEC, each session uses a " + 1304 "different source UDP port for ECMP."; 1305 leaf ldp-fec { 1306 type inet:ip-prefix; 1307 description "LDP FEC"; 1308 } 1309 list session-ldp-lsp { 1310 key "source-port"; 1311 description 1312 "The BFD sessions on an LDP FEC. Source UDP " + 1313 "port is unique for each session in the group."; 1314 leaf ttl { 1315 type ttl; 1316 description "TTL of outgoing packets"; 1317 } 1318 uses bfd-all-session; 1319 } 1320 } 1321 list session-lag { 1322 key "lag-name"; 1323 description "A LAG interface on which BFD is running"; 1324 leaf lag-name { 1325 type if:interface-ref ; 1326 description "Name of the LAG"; 1327 } 1328 list session-lag-micro { 1329 key "member-link"; 1330 description 1331 "Micro-BFD over LAG. This represents BFD " + 1332 "over one member link"; 1333 leaf member-link { 1334 type if:interface-ref; 1335 description 1336 "Member link on which micro-BFD is running"; 1337 } 1338 uses bfd-all-session; 1339 } 1340 } 1341 } 1342 } 1343 } 1344 } 1346 grouping bfd-notification-parms { 1347 description 1348 "This group describes common parameters that will be sent " + 1349 "as part of BFD notification"; 1351 leaf local-discr { 1352 type discriminator; 1353 description "BFD local discriminator"; 1354 } 1356 leaf remote-discr { 1357 type discriminator; 1358 description "BFD remote discriminator"; 1359 } 1361 leaf new-state { 1362 type state; 1363 description "Current BFD state"; 1364 } 1366 leaf state-change-reason { 1367 type string; 1368 description "BFD state change reason"; 1369 } 1371 leaf time-in-previous-state { 1372 type string; 1373 description 1374 "How long the BFD session was in the previous state"; 1375 } 1377 leaf dest-addr { 1378 type inet:ip-address; 1379 description "BFD peer address"; 1381 } 1382 leaf source-addr { 1383 type inet:ip-address; 1384 description "BFD local address"; 1385 } 1386 leaf session-index { 1387 type uint32; 1388 description "An index used to uniquely identify BFD sessions"; 1389 } 1390 leaf session-type { 1391 type bfd-session-type; 1392 description "BFD session type"; 1393 } 1394 } 1396 notification bfd-singlehop-notification { 1397 description 1398 "Notification for BFD single-hop session state change. An " + 1399 "implementation may rate-limit notifications, e.g. when a" + 1400 "session is continuously changing state."; 1401 uses bfd-notification-parms; 1403 leaf interface { 1404 type if:interface-ref; 1405 description "Interface to which this BFD session belongs to"; 1406 } 1408 leaf echo-enabled { 1409 type boolean; 1410 description "Was echo enabled for BFD"; 1411 } 1412 } 1414 notification bfd-multihop-notification { 1415 description 1416 "Notification for BFD multi-hop session state change. An " + 1417 "implementation may rate-limit notifications, e.g. when a" + 1418 "session is continuously changing state."; 1419 uses bfd-notification-parms; 1420 } 1421 notification bfd-te-tunnel-notification { 1422 description 1423 "Notification for BFD over TE tunnel session state change. " + 1424 "An implementation may rate-limit notifications, e.g. when a" + 1425 "session is continuously changing state."; 1426 uses bfd-notification-parms; 1427 leaf tunnel-name { 1428 type string; 1429 description "TE tunnel to which this BFD session belongs to"; 1430 } 1431 } 1432 notification bfd-ldp-lsp-notification { 1433 description 1434 "Notification for BFD over LDP LSP session state change. " + 1435 "An implementation may rate-limit notifications, e.g. when a" + 1436 "session is continuously changing state."; 1437 uses bfd-notification-parms; 1439 leaf ldp-fec { 1440 type inet:ip-prefix; 1441 description "LDP FEC"; 1442 } 1443 leaf source-port { 1444 type inet:port-number; 1445 description "Source UDP port"; 1446 } 1447 } 1448 notification bfd-lag-notification { 1449 description 1450 "Notification for BFD over LAG session state change. " + 1451 "An implementation may rate-limit notifications, e.g. when a" + 1452 "session is continuously changing state."; 1453 uses bfd-notification-parms; 1455 leaf lag-name { 1456 type if:interface-ref; 1457 description "LAG interface name"; 1458 } 1459 leaf member-link { 1460 type if:interface-ref; 1461 description "Member link on which BFD is running"; 1462 } 1463 } 1464 } 1465 1467 2.11. BFD Client Example Configuration Yang Module 1469 module example-bfd-routing-app { 1470 namespace "urn:ietf:params:xml:ns:yang:example-bfd-routing-app"; 1471 prefix bfd-routing-app; 1473 import ietf-bfd { 1474 prefix "bfd"; 1476 } 1478 import ietf-interfaces { 1479 prefix "if"; 1480 } 1482 organization 1483 "ACME"; 1484 contact 1485 "acme@acme.com"; 1487 description 1488 "Testing BFD grouping (simulating a routing application)"; 1490 revision 2015-07-01 { 1491 description "Initial revision."; 1492 reference "RFC XXXX: An example BFD routing application"; 1493 } 1495 feature routing-app-bfd { 1496 description "BFD configuration under routing-app"; 1497 } 1499 list area { 1500 key "area-id"; 1502 description "Specify a routing area."; 1504 leaf area-id { 1505 type uint32; 1506 description "Area"; 1507 } 1509 uses bfd:bfd-client-base-cfg-parms { 1510 if-feature routing-app-bfd; 1511 } 1513 list interface { 1514 key "interface"; 1515 description "List of interfaces"; 1516 leaf interface { 1517 type if:interface-ref; 1518 description "Interface"; 1519 } 1520 uses bfd:bfd-client-base-cfg-parms { 1521 if-feature routing-app-bfd; 1522 } 1523 } 1525 } 1526 } 1528 2.12. Security Considerations 1530 The YANG module defined in this memo is designed to be accessed via 1531 the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 1532 secure transport layer and the mandatory to implement secure 1533 transport is SSH [RFC6242]. The NETCONF access control model 1534 [RFC6536] provides the means to restrict access for particular 1535 NETCONF users to a pre-configured subset of all available NETCONF 1536 protocol operations and content. 1538 The YANG module has writeable data nodes which can be used for 1539 creation of BFD sessions and modification of BFD session parameters. 1540 The system should "police" creation of BFD sessions to prevent new 1541 sessions from causing existing BFD sessions to fail. For BFD session 1542 modification, the BFD protocol has mechanisms in place which allow 1543 for in service modification. 1545 2.13. IANA Considerations 1547 The IANA is requested to as assign a new new namespace URI from the 1548 IETF XML registry. 1550 URI:TBD 1552 2.14. Acknowledgements 1554 We would also like to thank Nobo Akiya and Jeff Haas for their 1555 encouragement on this work. 1557 3. References 1559 3.1. Normative References 1561 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1562 Requirement Levels", BCP 14, RFC 2119, 1563 DOI 10.17487/RFC2119, March 1997, 1564 . 1566 [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 1567 (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, 1568 . 1570 [RFC5881] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 1571 (BFD) for IPv4 and IPv6 (Single Hop)", RFC 5881, 1572 DOI 10.17487/RFC5881, June 2010, 1573 . 1575 [RFC5882] Katz, D. and D. Ward, "Generic Application of 1576 Bidirectional Forwarding Detection (BFD)", RFC 5882, 1577 DOI 10.17487/RFC5882, June 2010, 1578 . 1580 [RFC5883] Katz, D. and D. Ward, "Bidirectional Forwarding Detection 1581 (BFD) for Multihop Paths", RFC 5883, DOI 10.17487/RFC5883, 1582 June 2010, . 1584 [RFC5884] Aggarwal, R., Kompella, K., Nadeau, T., and G. Swallow, 1585 "Bidirectional Forwarding Detection (BFD) for MPLS Label 1586 Switched Paths (LSPs)", RFC 5884, DOI 10.17487/RFC5884, 1587 June 2010, . 1589 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1590 the Network Configuration Protocol (NETCONF)", RFC 6020, 1591 DOI 10.17487/RFC6020, October 2010, 1592 . 1594 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1595 and A. Bierman, Ed., "Network Configuration Protocol 1596 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1597 . 1599 [RFC7130] Bhatia, M., Ed., Chen, M., Ed., Boutros, S., Ed., 1600 Binderberger, M., Ed., and J. Haas, Ed., "Bidirectional 1601 Forwarding Detection (BFD) on Link Aggregation Group (LAG) 1602 Interfaces", RFC 7130, DOI 10.17487/RFC7130, February 1603 2014, . 1605 3.2. Informative References 1607 [I-D.ietf-netconf-restconf] 1608 Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1609 Protocol", draft-ietf-netconf-restconf-07 (work in 1610 progress), July 2015. 1612 [I-D.ietf-netmod-routing-cfg] 1613 Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1614 Management", draft-ietf-netmod-routing-cfg-19 (work in 1615 progress), May 2015. 1617 Appendix A. Change log 1619 RFC Editor: Remove this section upon publication as an RFC. 1621 A.1. Changes between versions -03 and -04 1623 o Follow VRF-centric model 1625 o IP single-hop session configuration in BFD clients 1627 A.2. Changes between versions -02 and -03 1629 o Fixed date mismatch 1631 o Updated authors 1633 A.3. Changes between versions -01 and -02 1635 o Fixed errors and warnings from "pyang --ietf" 1637 o Added appendix for "Change log" 1639 A.4. Changes between versions -00 and -01 1641 In the YANG module section: 1643 o Added missing filename 1645 o Added missing CODE ENDS 1647 Authors' Addresses 1649 Lianshu Zheng (editor) 1650 Huawei Technologies 1651 China 1653 Email: vero.zheng@huawei.com 1655 Reshad Rahman (editor) 1656 Cisco Systems 1657 Canada 1659 Email: rrahman@cisco.com 1660 Santosh Pallagatti 1661 Juniper Networks 1662 India 1664 Email: santoshpk@juniper.net 1666 Mahesh Jethanandani 1667 Cisco Systems 1669 Email: mjethanandani@gmail.com 1671 Greg Mirsky 1672 Ericsson 1674 Email: gregory.mirsky@ericsson.com