idnits 2.17.00 (12 Aug 2021) /tmp/idnits31336/draft-ietf-lime-yang-connectionless-oam-03.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 : ---------------------------------------------------------------------------- ** There are 148 instances of too long lines in the document, the longest one being 154 characters in excess of 72. == There are 1 instance of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 353 has weird spacing: '...ocation ine...' == Line 396 has weird spacing: '...ocation ine...' == Line 439 has weird spacing: '...ocation yan...' == Line 481 has weird spacing: '...ocation uin...' == Line 524 has weird spacing: '...ocation ine...' == (6 more instances...) == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (December 23, 2016) is 1974 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: 'RFC7276' is mentioned on line 248, but not defined == Missing Reference: 'RFC4443' is mentioned on line 101, but not defined == Missing Reference: 'RFC3688' is mentioned on line 2465, but not defined == Unused Reference: 'I-D.ietf-netmod-schema-mount' is defined on line 2505, but no explicit reference was found in the text == Unused Reference: 'RFC6242' is defined on line 2525, but no explicit reference was found in the text == Outdated reference: draft-ietf-i2rs-yang-network-topo has been published as RFC 8345 == Outdated reference: A later version (-10) exists of draft-zheng-mpls-lsp-ping-yang-cfg-03 == Outdated reference: draft-ietf-bfd-yang has been published as RFC 9127 == Outdated reference: draft-ietf-netmod-schema-mount has been published as RFC 8528 Summary: 1 error (**), 0 flaws (~~), 18 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group D. Kumar 3 Internet-Draft Cisco 4 Intended status: Standards Track M. Wang 5 Expires: June 26, 2017 Q. Wu 6 Huawei 7 R. Rahman 8 S. Raghavan 9 Cisco 10 December 23, 2016 12 Generic YANG Data Model for Connectionless Operations, Administration, 13 and Maintenance(OAM) protocols 14 draft-ietf-lime-yang-connectionless-oam-03 16 Abstract 18 This document presents a base YANG Data model for connectionless OAM 19 protocols. It provides a technology-independent abstraction of key 20 OAM constructs for connectionless protocols. The Based model 21 presented here can be extended to include technology specific 22 details. This is leading to uniformity between OAM protocols and 23 support nested OAM workflows (i.e., performing OAM functions at 24 different or same levels through a unified interface). 26 Status of This Memo 28 This Internet-Draft is submitted in full conformance with the 29 provisions of BCP 78 and BCP 79. 31 Internet-Drafts are working documents of the Internet Engineering 32 Task Force (IETF). Note that other groups may also distribute 33 working documents as Internet-Drafts. The list of current Internet- 34 Drafts is at http://datatracker.ietf.org/drafts/current/. 36 Internet-Drafts are draft documents valid for a maximum of six months 37 and may be updated, replaced, or obsoleted by other documents at any 38 time. It is inappropriate to use Internet-Drafts as reference 39 material or to cite them other than as "work in progress." 41 This Internet-Draft will expire on June 26, 2017. 43 Copyright Notice 45 Copyright (c) 2016 IETF Trust and the persons identified as the 46 document authors. All rights reserved. 48 This document is subject to BCP 78 and the IETF Trust's Legal 49 Provisions Relating to IETF Documents 50 (http://trustee.ietf.org/license-info) in effect on the date of 51 publication of this document. Please review these documents 52 carefully, as they describe your rights and restrictions with respect 53 to this document. Code Components extracted from this document must 54 include Simplified BSD License text as described in Section 4.e of 55 the Trust Legal Provisions and are provided without warranty as 56 described in the Simplified BSD License. 58 Table of Contents 60 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 61 2. Conventions used in this document . . . . . . . . . . . . . . 3 62 2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 63 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 64 3. Overview of the Connectionless OAM Model . . . . . . . . . . 5 65 3.1. TP Address . . . . . . . . . . . . . . . . . . . . . . . 5 66 3.2. Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 6 67 3.3. OAM-layers . . . . . . . . . . . . . . . . . . . . . . . 6 68 3.4. Test Point Locations Information . . . . . . . . . . . . 7 69 3.5. Test Point Locations . . . . . . . . . . . . . . . . . . 7 70 3.6. Path Discovery Data . . . . . . . . . . . . . . . . . . . 7 71 3.7. Continuity Check Data . . . . . . . . . . . . . . . . . . 8 72 3.8. OAM data hierarchy . . . . . . . . . . . . . . . . . . . 8 73 4. OAM YANG Module . . . . . . . . . . . . . . . . . . . . . . . 17 74 5. CL model applicability . . . . . . . . . . . . . . . . . . . 46 75 5.1. BFD Extension . . . . . . . . . . . . . . . . . . . . . . 47 76 5.1.1. Augment Method . . . . . . . . . . . . . . . . . . . 47 77 5.1.2. Schema Mount . . . . . . . . . . . . . . . . . . . . 49 78 5.2. LSP ping extension . . . . . . . . . . . . . . . . . . . 51 79 5.2.1. technology type extension . . . . . . . . . . . . . . 51 80 5.2.2. test point attributes extension . . . . . . . . . . . 52 81 6. Security Considerations . . . . . . . . . . . . . . . . . . . 52 82 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52 83 8. Acknowlegements . . . . . . . . . . . . . . . . . . . . . . . 53 84 9. Normative References . . . . . . . . . . . . . . . . . . . . 53 85 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 54 87 1. Introduction 89 Operations, Administration, and Maintenance (OAM) are important 90 networking functions that allow operators to: 92 1. Monitor networks connections (Reachability Verification, 93 Continuity Check). 95 2. Troubleshoot failures (Fault verification and localization). 97 3. Monitor Performance 99 An overview of OAM tools is presented at [RFC7276]. 101 Ping and Traceroute [RFC792], [RFC4443] are well-known fault 102 verification and isolation tools, respectively, for IP networks. 103 Over the years, different technologies have developed similar tools 104 for similar purposes. 106 In this document, we presents a base YANG Data model for 107 connectionless OAM protocols. The generic YANG model for 108 connectionless OAM only includes configuration data and state data. 109 It can be used in conjunction with data retrieval method model[lime 110 retrieval methods], which focuses on data retrival procedures like 111 RPC. However it also can be used independently of data retrieval 112 method model. 114 2. Conventions used in this document 116 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 117 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 118 document are to be interpreted as described in [RFC2119]. 120 The following terms are defined in [RFC6241] and are not redefined 121 here: 123 o client 125 o configuration data 127 o server 129 o state data 131 The following terms are defined in [RFC6020] and are not redefined 132 here: 134 o augment 136 o data model 138 o data node 140 The terminology for describing YANG data models is found in 141 [RFC6020]. 143 2.1. Terminology 145 TP - Test Point 147 MAC - Media Access Control 149 BFD - Bidirectional Forwarding Detection 151 RPC - A Remote Procedure Call, as used within the NETCONF protocol 153 2.2. Tree Diagrams 155 A simplified graphical representation of the data model is used in 156 this document. The meaning of the symbols in these diagrams is as 157 follows: 159 Each node is printed as: 161 163 is one of: 164 + for current 165 x for deprecated 166 o for obsolete 168 is one of: 170 rw for configuration data 171 ro for non-configuration data 172 -x for rpcs 173 -n for notifications 175 is the name of the node 177 If the node is augmented into the tree from another module, its name 178 is printed as :. 180 is one of: 182 ? for an optional leaf or choice 183 ! for a presence container 184 * for a leaf-list or list 185 [] for a list's keys 187 is the name of the type for leafs and leaf-lists 189 3. Overview of the Connectionless OAM Model 191 At the top of the Model, there is an oper container for session 192 statistics. Grouping is also defined for common session statistics 193 and these are applicable for proactive OAM sessions. Multiple test- 194 point-locations keyed using technology specific keys (eg., IPv4 195 address for IPv4 locations) are possible by augmented network nodes 196 which are defined in [I-D.draft-ietf-i2rs-yang-network-topo] to 197 describe the network hierarchies and the inventory of nodes contained 198 in a network. Each test-point-location is chosen based on location- 199 type which when chosen, leads to a container that includes a list of 200 test-point-locations keyed by technology specific keys. Each test 201 point location includes a test-point-location-info. The test-point- 202 location-info includes tp-technology, tp-tools, and connectionless- 203 oam-layers. The groupings of tp-address and tp-address-vrf are kept 204 out of test-point-location-info to make it addressing agnostic and 205 allow varied composition. Depending upon the choice of the location- 206 type (determined by the tp-address-vrf), the containers differ in its 207 composition of test-point-locations while the test-point-location- 208 info, is a common aspect of every test-point-location. The vrf is 209 used to describe the corresponding network instance. The tp- 210 technology indicate oam technology details. The tp-tools describe 211 the oam tools supported. The connectionless-oam- layers is used to 212 describe the relationship of one test point with other test points. 213 The level in oam-layers indicate whether related oam test point is 214 client layer, server layer or same layer. The Model is augmented to 215 /nd:networks/nd:network/nd:node using Test Point Locations defined 216 below. 218 3.1. TP Address 220 In connectionless OAM, the tp address is defined with the following 221 type: 223 o MAC address 225 o IPv4 or IPv6 address 227 o a pair of source, destination addresses, and interface (Useful for 228 BFD) 230 o FEC 232 o System-id to represent the device or node. 234 3.2. Tools 236 In connectionless OAM, the tools attribute is used to describe a 237 toolset for fault detection and isolation, and for performance 238 measurement. And it can serve as a constraint condition when the 239 base model be extended to specific OAM technology. For example, to 240 fulfill the icmp ping configuration, the "../coam:continuity-check" 241 should be set to "true", and then the lime base model should be 242 augmented with icmp ping specific details. 244 3.3. OAM-layers 246 As typical networks have a multi-layer architecture, the set of OAM 247 protocols similarly take a multi-layer structure; each layer has its 248 own OAM protocols [RFC7276] and is corresponding to specific network 249 portion or path and has associated test points. OAM-layers is 250 referred to a list of upper layer, lower layer that are related to 251 current test point. This allow users to easily navigate up and down 252 to efficiently troubleshoot a connectivity issue at different layer. 253 In this model, we have kept level default as 0, when all test points 254 are located at the same layer. Level is provided for scenarios where 255 it might be possible to define layering relationship as it can be 256 used to stitching fault at related OAM layers. For example, there is 257 a network in which data traffic between two customer edges is 258 transported over three consecutive network portions, the current test 259 point is located in the second network portion. If there is a defect 260 in the first network portion is located at the upstream of the second 261 network portion, the level of the first network portion is set to 262 "-1". If the third network portion is located at the downstream of 263 the second network portion and the level is set to "1". In another 264 case, if the first network portion and the third network portion is 265 in the same level of thesecond network portion, the level is set to 266 "0". The snippet below depicts an example of OAM layers. 268 list oam-layers { 269 key "index"; 270 leaf index { 271 type uint16 { 272 range "0..65535"; 273 } 274 } 275 leaf level { 276 type int32 { 277 range "-1..1"; 278 } 279 description 280 "Level"; 281 } 282 ordered-by user; 283 description 284 "list of related oam layers."; 285 } 287 3.4. Test Point Locations Information 289 This is a generic grouping for Test Point Locations Information. It 290 Provide details of Test Point Location using Tools, OAM-Layers 291 grouping defined above. 293 3.5. Test Point Locations 295 This is a generic grouping for Test Point Locations. Choice 296 statement is used to define locations types, for example ipv4- 297 location-type, ipv6-location-type, etc. Container is defined under 298 each location type containing list keyed to test point address, Test 299 Point Location Information defined in section above, and routing 300 instance vrf name if required. 302 3.6. Path Discovery Data 304 This is a generic grouping for path discovery data model that can be 305 retrieved by any data retrieval methods including RPCs. Path 306 discovery data output from methods, includes src-test-point, dst- 307 test-point, sequence-number, hop-cnt, session statistics of various 308 kinds,path verification and path trace related information. Path 309 discovery includes data to be retrieved on a per-hop basis via a list 310 of path-trace-info-list which includes information like timestamps, 311 ingress-interface, egress-interface and app-meta-data. The path 312 discovery data model is made generic enough to allow active, passive 313 and hybrid OAMs to do the retrieval. None of the fields are made 314 mandatory for that reason. Noted that the retrieval methods are 315 defined in [lime retrieval methods]. 317 3.7. Continuity Check Data 319 This is a generic grouping for continuity check data model that can 320 be retrieved by any data retrieval methods including RPCs. 321 Continuity check data output from methods, includes src-test-point, 322 dst-test-point, sequence-number, hop-cnt and session statistics of 323 various kinds. The continuity check data model is made generic 324 enough to allow active, passive and hybrid OAMs to do the retrieval. 325 None of the fields are made mandatory for that reason. Noted that 326 the retrieval methods are defined in [lime retrieval methods]. 328 3.8. OAM data hierarchy 330 The complete data hierarchy related to the OAM YANG model is 331 presented below. 333 module: ietf-connectionless-oam 334 +--ro oper {continuity-check}? 335 +--ro cc-ipv4-sessions-statistics 336 | +--ro cc-session-statistics 337 | +--ro session-count? uint32 338 | +--ro session-up-count? uint32 339 | +--ro session-down-count? uint32 340 | +--ro session-admin-down-count? uint32 341 +--ro cc-ipv6-sessions-statistics 342 +--ro cc-session-statistics 343 +--ro session-count? uint32 344 +--ro session-up-count? uint32 345 +--ro session-down-count? uint32 346 +--ro session-admin-down-count? uint32 347 augment /nd:networks/nd:network/nd:node: 348 +--rw tp-address-type-value? identityref 349 +--rw (location-type)? 350 +--:(ipv4-location-type) 351 | +--rw test-point-ipv4-location-list 352 | +--rw test-point-locations* [ipv4-location] 353 | +--rw ipv4-location inet:ipv4-address 354 | +--rw vrf? routing-instance-ref 355 | +--rw (technology)? 356 | | +--:(technology-null) 357 | | | +--rw tech-null? empty 358 | | +--:(technology-string) 359 | | +--rw ipv4-icmp? string 360 | +--rw tp-tools 361 | | +--rw connectivity-verification? boolean 362 | | +--rw continuity-check? boolean 363 | | +--rw path-discovery? boolean 364 | +--rw root? 365 | +--rw oam-layers* [index] 366 | +--rw index uint16 367 | +--rw level? int32 368 | +--rw (tp-address)? 369 | +--:(mac-address) 370 | | +--rw mac-address-location? yang:mac-address 371 | +--:(ipv4-address) 372 | | +--rw ipv4-location? inet:ipv4-address 373 | +--:(ipv6-location) 374 | | +--rw ipv6-address? inet:ipv6-address 375 | +--:(tunnel-location) 376 | | +--rw tunnel-location? uint32 377 | +--:(ip-prefix-location) 378 | | +--rw ip-prefix-location? inet:ip-prefix 379 | +--:(route-dist-location) 380 | | +--rw route-dist-location? uint32 381 | +--:(group-ip-address-location) 382 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 383 | +--:(as-number-location) 384 | | +--rw as-number-location? inet:as-number 385 | +--:(lsp-id-location) 386 | | +--rw lsp-id-location? string 387 | +--:(system-id-location) 388 | | +--rw system-id-location? inet:uri 389 | +--:(connection-oriented-location) 390 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 391 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 392 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 393 +--:(ipv6-location-type) 394 | +--rw test-point-ipv6-location-list 395 | +--rw test-point-locations* [ipv6-location] 396 | +--rw ipv6-location inet:ipv6-address 397 | +--rw vrf? routing-instance-ref 398 | +--rw (technology)? 399 | | +--:(technology-null) 400 | | | +--rw tech-null? empty 401 | | +--:(technology-string) 402 | | +--rw ipv4-icmp? string 403 | +--rw tp-tools 404 | | +--rw connectivity-verification? boolean 405 | | +--rw continuity-check? boolean 406 | | +--rw path-discovery? boolean 407 | +--rw root? 408 | +--rw oam-layers* [index] 409 | +--rw index uint16 410 | +--rw level? int32 411 | +--rw (tp-address)? 412 | +--:(mac-address) 413 | | +--rw mac-address-location? yang:mac-address 414 | +--:(ipv4-address) 415 | | +--rw ipv4-location? inet:ipv4-address 416 | +--:(ipv6-location) 417 | | +--rw ipv6-address? inet:ipv6-address 418 | +--:(tunnel-location) 419 | | +--rw tunnel-location? uint32 420 | +--:(ip-prefix-location) 421 | | +--rw ip-prefix-location? inet:ip-prefix 422 | +--:(route-dist-location) 423 | | +--rw route-dist-location? uint32 424 | +--:(group-ip-address-location) 425 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 426 | +--:(as-number-location) 427 | | +--rw as-number-location? inet:as-number 428 | +--:(lsp-id-location) 429 | | +--rw lsp-id-location? string 430 | +--:(system-id-location) 431 | | +--rw system-id-location? inet:uri 432 | +--:(connection-oriented-location) 433 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 434 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 435 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 436 +--:(mac-location-type) 437 | +--rw test-point-mac-address-location-list 438 | +--rw test-point-locations* [mac-address-location] 439 | +--rw mac-address-location yang:mac-address 440 | +--rw (technology)? 441 | | +--:(technology-null) 442 | | | +--rw tech-null? empty 443 | | +--:(technology-string) 444 | | +--rw ipv4-icmp? string 445 | +--rw tp-tools 446 | | +--rw connectivity-verification? boolean 447 | | +--rw continuity-check? boolean 448 | | +--rw path-discovery? boolean 449 | +--rw root? 450 | +--rw oam-layers* [index] 451 | +--rw index uint16 452 | +--rw level? int32 453 | +--rw (tp-address)? 454 | +--:(mac-address) 455 | | +--rw mac-address-location? yang:mac-address 456 | +--:(ipv4-address) 457 | | +--rw ipv4-location? inet:ipv4-address 458 | +--:(ipv6-location) 459 | | +--rw ipv6-address? inet:ipv6-address 460 | +--:(tunnel-location) 461 | | +--rw tunnel-location? uint32 462 | +--:(ip-prefix-location) 463 | | +--rw ip-prefix-location? inet:ip-prefix 464 | +--:(route-dist-location) 465 | | +--rw route-dist-location? uint32 466 | +--:(group-ip-address-location) 467 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 468 | +--:(as-number-location) 469 | | +--rw as-number-location? inet:as-number 470 | +--:(lsp-id-location) 471 | | +--rw lsp-id-location? string 472 | +--:(system-id-location) 473 | | +--rw system-id-location? inet:uri 474 | +--:(connection-oriented-location) 475 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 476 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 477 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 478 +--:(tunnel-location-type) 479 | +--rw test-point-tunnel-address-location-list 480 | +--rw test-point-locations* [tunnel-location] 481 | +--rw tunnel-location uint32 482 | +--rw vrf? routing-instance-ref 483 | +--rw (technology)? 484 | | +--:(technology-null) 485 | | | +--rw tech-null? empty 486 | | +--:(technology-string) 487 | | +--rw ipv4-icmp? string 488 | +--rw tp-tools 489 | | +--rw connectivity-verification? boolean 490 | | +--rw continuity-check? boolean 491 | | +--rw path-discovery? boolean 492 | +--rw root? 493 | +--rw oam-layers* [index] 494 | +--rw index uint16 495 | +--rw level? int32 496 | +--rw (tp-address)? 497 | +--:(mac-address) 498 | | +--rw mac-address-location? yang:mac-address 499 | +--:(ipv4-address) 500 | | +--rw ipv4-location? inet:ipv4-address 501 | +--:(ipv6-location) 502 | | +--rw ipv6-address? inet:ipv6-address 503 | +--:(tunnel-location) 504 | | +--rw tunnel-location? uint32 505 | +--:(ip-prefix-location) 506 | | +--rw ip-prefix-location? inet:ip-prefix 507 | +--:(route-dist-location) 508 | | +--rw route-dist-location? uint32 509 | +--:(group-ip-address-location) 510 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 511 | +--:(as-number-location) 512 | | +--rw as-number-location? inet:as-number 513 | +--:(lsp-id-location) 514 | | +--rw lsp-id-location? string 515 | +--:(system-id-location) 516 | | +--rw system-id-location? inet:uri 517 | +--:(connection-oriented-location) 518 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 519 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 520 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 521 +--:(ip-prefix-location-type) 522 | +--rw test-point-ip-prefix-location-list 523 | +--rw test-point-locations* [ip-prefix-location] 524 | +--rw ip-prefix-location inet:ip-prefix 525 | +--rw vrf? routing-instance-ref 526 | +--rw (technology)? 527 | | +--:(technology-null) 528 | | | +--rw tech-null? empty 529 | | +--:(technology-string) 530 | | +--rw ipv4-icmp? string 531 | +--rw tp-tools 532 | | +--rw connectivity-verification? boolean 533 | | +--rw continuity-check? boolean 534 | | +--rw path-discovery? boolean 535 | +--rw root? 536 | +--rw oam-layers* [index] 537 | +--rw index uint16 538 | +--rw level? int32 539 | +--rw (tp-address)? 540 | +--:(mac-address) 541 | | +--rw mac-address-location? yang:mac-address 542 | +--:(ipv4-address) 543 | | +--rw ipv4-location? inet:ipv4-address 544 | +--:(ipv6-location) 545 | | +--rw ipv6-address? inet:ipv6-address 546 | +--:(tunnel-location) 547 | | +--rw tunnel-location? uint32 548 | +--:(ip-prefix-location) 549 | | +--rw ip-prefix-location? inet:ip-prefix 550 | +--:(route-dist-location) 551 | | +--rw route-dist-location? uint32 552 | +--:(group-ip-address-location) 553 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 554 | +--:(as-number-location) 555 | | +--rw as-number-location? inet:as-number 556 | +--:(lsp-id-location) 557 | | +--rw lsp-id-location? string 558 | +--:(system-id-location) 559 | | +--rw system-id-location? inet:uri 560 | +--:(connection-oriented-location) 561 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 562 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 563 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 564 +--:(route-distinguisher-location-type) 565 | +--rw test-point-route-dist-location-list 566 | +--rw test-point-locations* [route-dist-location] 567 | +--rw route-dist-location uint32 568 | +--rw vrf? routing-instance-ref 569 | +--rw (technology)? 570 | | +--:(technology-null) 571 | | | +--rw tech-null? empty 572 | | +--:(technology-string) 573 | | +--rw ipv4-icmp? string 574 | +--rw tp-tools 575 | | +--rw connectivity-verification? boolean 576 | | +--rw continuity-check? boolean 577 | | +--rw path-discovery? boolean 578 | +--rw root? 579 | +--rw oam-layers* [index] 580 | +--rw index uint16 581 | +--rw level? int32 582 | +--rw (tp-address)? 583 | +--:(mac-address) 584 | | +--rw mac-address-location? yang:mac-address 585 | +--:(ipv4-address) 586 | | +--rw ipv4-location? inet:ipv4-address 587 | +--:(ipv6-location) 588 | | +--rw ipv6-address? inet:ipv6-address 589 | +--:(tunnel-location) 590 | | +--rw tunnel-location? uint32 591 | +--:(ip-prefix-location) 592 | | +--rw ip-prefix-location? inet:ip-prefix 593 | +--:(route-dist-location) 594 | | +--rw route-dist-location? uint32 595 | +--:(group-ip-address-location) 596 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 597 | +--:(as-number-location) 598 | | +--rw as-number-location? inet:as-number 599 | +--:(lsp-id-location) 600 | | +--rw lsp-id-location? string 601 | +--:(system-id-location) 602 | | +--rw system-id-location? inet:uri 603 | +--:(connection-oriented-location) 604 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 605 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 606 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 607 +--:(group-ip-address-location-type) 608 | +--rw test-point-group-ip-address-location-list 609 | +--rw test-point-locations* [group-ip-address-location] 610 | +--rw group-ip-address-location IP-Multicast-Group-Address 611 | +--rw vrf? routing-instance-ref 612 | +--rw (technology)? 613 | | +--:(technology-null) 614 | | | +--rw tech-null? empty 615 | | +--:(technology-string) 616 | | +--rw ipv4-icmp? string 617 | +--rw tp-tools 618 | | +--rw connectivity-verification? boolean 619 | | +--rw continuity-check? boolean 620 | | +--rw path-discovery? boolean 621 | +--rw root? 622 | +--rw oam-layers* [index] 623 | +--rw index uint16 624 | +--rw level? int32 625 | +--rw (tp-address)? 626 | +--:(mac-address) 627 | | +--rw mac-address-location? yang:mac-address 628 | +--:(ipv4-address) 629 | | +--rw ipv4-location? inet:ipv4-address 630 | +--:(ipv6-location) 631 | | +--rw ipv6-address? inet:ipv6-address 632 | +--:(tunnel-location) 633 | | +--rw tunnel-location? uint32 634 | +--:(ip-prefix-location) 635 | | +--rw ip-prefix-location? inet:ip-prefix 636 | +--:(route-dist-location) 637 | | +--rw route-dist-location? uint32 638 | +--:(group-ip-address-location) 639 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 640 | +--:(as-number-location) 641 | | +--rw as-number-location? inet:as-number 642 | +--:(lsp-id-location) 643 | | +--rw lsp-id-location? string 644 | +--:(system-id-location) 645 | | +--rw system-id-location? inet:uri 646 | +--:(connection-oriented-location) 647 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 648 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 649 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 650 +--:(group-as-number-location-type) 651 | +--rw test-point-as-number-location-list 652 | +--rw test-point-locations* [as-number-location] 653 | +--rw as-number-location inet:as-number 654 | +--rw vrf? routing-instance-ref 655 | +--rw (technology)? 656 | | +--:(technology-null) 657 | | | +--rw tech-null? empty 658 | | +--:(technology-string) 659 | | +--rw ipv4-icmp? string 660 | +--rw tp-tools 661 | | +--rw connectivity-verification? boolean 662 | | +--rw continuity-check? boolean 663 | | +--rw path-discovery? boolean 664 | +--rw root? 665 | +--rw oam-layers* [index] 666 | +--rw index uint16 667 | +--rw level? int32 668 | +--rw (tp-address)? 669 | +--:(mac-address) 670 | | +--rw mac-address-location? yang:mac-address 671 | +--:(ipv4-address) 672 | | +--rw ipv4-location? inet:ipv4-address 673 | +--:(ipv6-location) 674 | | +--rw ipv6-address? inet:ipv6-address 675 | +--:(tunnel-location) 676 | | +--rw tunnel-location? uint32 677 | +--:(ip-prefix-location) 678 | | +--rw ip-prefix-location? inet:ip-prefix 679 | +--:(route-dist-location) 680 | | +--rw route-dist-location? uint32 681 | +--:(group-ip-address-location) 682 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 683 | +--:(as-number-location) 684 | | +--rw as-number-location? inet:as-number 685 | +--:(lsp-id-location) 686 | | +--rw lsp-id-location? string 687 | +--:(system-id-location) 688 | | +--rw system-id-location? inet:uri 689 | +--:(connection-oriented-location) 690 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 691 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 692 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 693 +--:(group-lsp-id-location-type) 694 | +--rw test-point-lsp-id-location-list 695 | +--rw test-point-locations* [lsp-id-location] 696 | +--rw lsp-id-location string 697 | +--rw vrf? routing-instance-ref 698 | +--rw (technology)? 699 | | +--:(technology-null) 700 | | | +--rw tech-null? empty 701 | | +--:(technology-string) 702 | | +--rw ipv4-icmp? string 703 | +--rw tp-tools 704 | | +--rw connectivity-verification? boolean 705 | | +--rw continuity-check? boolean 706 | | +--rw path-discovery? boolean 707 | +--rw root? 708 | +--rw oam-layers* [index] 709 | +--rw index uint16 710 | +--rw level? int32 711 | +--rw (tp-address)? 712 | +--:(mac-address) 713 | | +--rw mac-address-location? yang:mac-address 714 | +--:(ipv4-address) 715 | | +--rw ipv4-location? inet:ipv4-address 716 | +--:(ipv6-location) 717 | | +--rw ipv6-address? inet:ipv6-address 718 | +--:(tunnel-location) 719 | | +--rw tunnel-location? uint32 720 | +--:(ip-prefix-location) 721 | | +--rw ip-prefix-location? inet:ip-prefix 722 | +--:(route-dist-location) 723 | | +--rw route-dist-location? uint32 724 | +--:(group-ip-address-location) 725 | | +--rw group-ip-address-location? IP-Multicast-Group-Address 726 | +--:(as-number-location) 727 | | +--rw as-number-location? inet:as-number 728 | +--:(lsp-id-location) 729 | | +--rw lsp-id-location? string 730 | +--:(system-id-location) 731 | | +--rw system-id-location? inet:uri 732 | +--:(connection-oriented-location) 733 | +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 734 | +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 735 | +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 736 +--:(group-system-id-location-type) 737 +--rw test-point-system-info-location-list 738 +--rw test-point-locations* [system-id-location] 739 +--rw system-id-location inet:uri 740 +--rw vrf? routing-instance-ref 741 +--rw (technology)? 742 | +--:(technology-null) 743 | | +--rw tech-null? empty 744 | +--:(technology-string) 745 | +--rw ipv4-icmp? string 746 +--rw tp-tools 747 | +--rw connectivity-verification? boolean 748 | +--rw continuity-check? boolean 749 | +--rw path-discovery? boolean 750 +--rw root? 751 +--rw oam-layers* [index] 752 +--rw index uint16 753 +--rw level? int32 754 +--rw (tp-address)? 755 +--:(mac-address) 756 | +--rw mac-address-location? yang:mac-address 757 +--:(ipv4-address) 758 | +--rw ipv4-location? inet:ipv4-address 759 +--:(ipv6-location) 760 | +--rw ipv6-address? inet:ipv6-address 761 +--:(tunnel-location) 762 | +--rw tunnel-location? uint32 763 +--:(ip-prefix-location) 764 | +--rw ip-prefix-location? inet:ip-prefix 765 +--:(route-dist-location) 766 | +--rw route-dist-location? uint32 767 +--:(group-ip-address-location) 768 | +--rw group-ip-address-location? IP-Multicast-Group-Address 769 +--:(as-number-location) 770 | +--rw as-number-location? inet:as-number 771 +--:(lsp-id-location) 772 | +--rw lsp-id-location? string 773 +--:(system-id-location) 774 | +--rw system-id-location? inet:uri 775 +--:(connection-oriented-location) 776 +--rw maintenance-domain? -> /goam:domains/domain/MD-name-string 777 +--rw maintenance-association? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA/MA-name-string 778 +--rw maintenance-association-end-point? -> /goam:domains/domain[goam:MD-name-string = current()/../maintenance-domain]/MAs/MA[goam:MA-name-string = current()/../maintenance-association]/MEP/mep-name 780 data hierarchy of OAM 782 4. OAM YANG Module 784 file "ietf-connectionless-oam.yang" 786 module ietf-connectionless-oam { 787 yang-version 1.1; 788 namespace "urn:ietf:params:xml:ns:yang:ietf-connectionless-oam"; 790 prefix coam; 792 import ietf-yang-schema-mount { 793 prefix yangmnt; 794 } 796 import ietf-network{ 797 prefix nd; 798 } 799 import ietf-yang-types { 800 prefix yang; 801 } 802 import ietf-interfaces { 803 prefix if; 804 } 805 import ietf-inet-types { 806 prefix inet; 807 } 808 import ietf-network-instance { 809 prefix "ni"; 810 } 811 import ietf-conn-oam{ 812 prefix "goam"; 813 } 814 organization "IETF LIME Working Group"; 815 contact 817 "Deepak Kumar dekumar@cisco.com 818 Qin Wu bill.wu@huawei.com 819 S Raghavan srihari@cisco.com 820 Zitao Wang wangzitao@huawei.com 821 R Rahman rrahman@cisco.com"; 823 description 825 "This YANG module defines the generic configuration, 826 data model, statistics for connectionless OAM to be 827 used within IETF in a protocol indpendent manner. 828 Functional level abstraction is indendent with 829 YANG modeling. It is assumed that each protocol maps 830 corresponding abstracts to its native format. 831 Each protocol may extend the YANG model defined 832 here to include protocol specific extensions"; 833 revision 2016-12-16 { 834 description 835 "Initial revision. - 08 version"; 836 reference ""; 837 } 838 /* features */ 839 feature connection-less { 840 description 841 "this feature indicates that OAM solution is connection less."; 842 } 843 feature continuity-check { 844 description 845 "This feature indicates that the server supports 846 executing continuity check OAM command and 847 returning a response. Servers that do not advertise 848 this feature will not support executing 849 continuity check command or rpc model for 850 continuity check command."; 851 } 852 feature path-discovery { 853 description 854 "This feature indicates that the server supports 855 executing path discovery OAM command and 856 returning a response. Servers that do not advertise 857 this feature will not support executing 858 path discovery command or rpc model for 859 path discovery command."; 860 } 862 /* Identities */ 863 /* typedefs */ 864 typedef routing-instance-ref { 866 type leafref { 867 path "/ni:network-instances/ni:network-instance/ni:name"; 868 } 869 description 870 "This type is used for leafs that reference a routing instance 871 configuration."; 872 } 874 typedef IPv4-Multicast-Group-Address { 875 type string { 876 pattern '(2((2[4-9])|(3[0-9]))\.)' 877 +'(([0-9]|[1-9][0-9]|1[0-9][0-9]|' 878 +'2[0-4][0-9]|25[0-5])\.){2}' 879 +'([0-9]|[1-9][0-9]|1[0-9][0-9]' 880 +'|2[0-4][0-9]|25[0-5])'; 881 } 882 description 883 "The IPv4-Multicast-Group-Address type 884 represents an IPv4 multicast address 885 in dotted-quad notation."; 886 reference "RFC4607"; 887 } // typedef IPv4-Multicast-Group-Address 888 typedef IPv6-Multicast-Group-Address { 889 type string { 890 pattern 891 '(((FF|ff)[0-9a-fA-F]{2}):)([0-9a-fA-F]' 892 +'{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?' 893 +'(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4]' 894 +'[0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|' 895 +'2[0-4][0-9]|[01]?[0-9]?[0-9])))'; 896 pattern 897 '(([^:]+:){6}(([^:]+:[^:]+)|' 898 +'(.*\..*)))|((([^:]+:)*[^:]+)' 899 +'?::(([^:]+:)*[^:]+)?)'; 900 } 901 description 902 "The IPv6-Multicast-Group-Address 903 type represents an IPv6 address in full, 904 mixed, shortened, and shortened-mixed 905 notation."; 906 reference "RFC4291 2.7. 907 ietf-inet-types:ipv6-address"; 908 } 909 typedef IP-Multicast-Group-Address { 910 type union { 911 type IPv4-Multicast-Group-Address; 912 type IPv6-Multicast-Group-Address; 913 } 915 description 916 "The IP-Multicast-Group-Address type 917 represents an IP multicast address and 918 is IP version neutral. The format of the 919 textual representations implies the IP version."; 920 } // typedef IP-Multicast-Group-Address 922 identity fec-types { 924 description 925 "This is base identity of fec types which are ip-prefix, 926 bgp, tunnel, pwe3, vpls, etc."; 927 } 929 typedef fec-type { 930 type identityref { 931 base fec-types; 932 } 933 description "Target FEC type."; 934 } 936 typedef oam-counter32 { 937 type yang:zero-based-counter32; 938 description 939 "defines 32 bit counter for OAM"; 940 } 941 identity time-resolution{ 942 description 943 "Time interval resolution"; 944 } //base identity 946 identity hours { 947 base time-resolution; 948 description 949 "Hours"; 950 } 952 identity minutes { 953 base time-resolution; 954 description 955 "Minutes"; 956 } 958 identity seconds { 959 base time-resolution; 960 description 961 "Seconds"; 963 } 965 identity milliseconds { 966 base time-resolution; 967 description 968 "Milliseconds"; 969 } 971 identity microseconds { 973 base time-resolution; 974 description 975 "Microseconds"; 976 } 978 identity nanoseconds { 979 base time-resolution; 980 description 981 "Nanoseconds"; 982 } 984 /* groupings */ 985 grouping cc-session-statsitics { 986 description "Grouping for session statistics."; 987 container cc-session-statistics { 988 description "cc session counters"; 989 leaf session-count { 990 type uint32; 991 description "Number of cc sessions."; 992 } 993 leaf session-up-count { 994 type uint32; 995 description "Number of sessions which are up."; 996 } 997 leaf session-down-count { 998 type uint32; 999 description "Number of sessions which are down."; 1000 } 1001 leaf session-admin-down-count { 1002 type uint32; 1003 description "Number of sessions which are admin-down."; 1004 } 1005 } 1006 } 1008 grouping session-packet-statistics { 1009 description "Grouping for per session packet statistics"; 1010 container session-packet-statistics { 1012 description "Per session packet statistics."; 1013 leaf rx-packet-count { 1014 type uint32; 1015 description "Total received packet count."; 1016 } 1017 leaf tx-packet-count { 1018 type uint32; 1019 description "Total transmitted packet count."; 1020 } 1021 leaf rx-bad-packet { 1023 type uint32; 1024 description "Total received bad packet."; 1025 } 1026 leaf tx-packet-failed { 1027 type uint32; 1028 description "Total send packet failed."; 1029 } 1030 } 1031 } 1033 grouping cc-per-session-statistics { 1034 description "Grouping for per session statistics"; 1035 container cc-per-session-statistics { 1036 description "per session statistics."; 1037 leaf create-time { 1038 type yang:date-and-time; 1039 description "Time and date when session is created."; 1040 } 1041 leaf last-down-time { 1042 type yang:date-and-time; 1043 description "Time and date last time session is down."; 1044 } 1045 leaf last-up-time { 1046 type yang:date-and-time; 1047 description "Time and date last time session is up."; 1048 } 1049 leaf down-count { 1050 type uint32; 1051 description "Total down count."; 1052 } 1053 leaf admin-down-count { 1054 type uint32; 1055 description "Total down count."; 1056 } 1058 uses session-packet-statistics; 1059 } 1061 } 1063 grouping session-error-statistics { 1064 description "Grouping for per session error statistics"; 1065 container session-error-statistics { 1066 description "Per session error statistics."; 1067 leaf packet-drops-count { 1068 type uint32; 1069 description "Total received packet drops count."; 1070 } 1071 leaf packet-reorder-count { 1073 type uint32; 1074 description "Total received packet reordered count."; 1075 } 1076 leaf packets-out-of-seq-count { 1077 type uint32; 1078 description "Total received out of sequence count."; 1079 } 1080 leaf packets-dup-count { 1081 type uint32; 1082 description "Total received packet duplicates count."; 1083 } 1084 } 1086 } 1088 grouping session-delay-statistics { 1089 description "Grouping for per session delay statistics"; 1090 container session-delay-statistics { 1091 description "Session delay summarised information."; 1092 leaf time-resolution-value { 1093 type identityref { 1094 base time-resolution; 1095 } 1096 description "Time units among choice of s,ms,ns etc."; 1097 } 1098 leaf min-delay-value { 1099 type uint32; 1100 description "Minimum delay value observed."; 1101 } 1102 leaf max-delay-value { 1103 type uint32; 1104 description "Maximum delay value observed."; 1105 } 1106 leaf average-delay-value { 1107 type uint32; 1108 description "Average delay value observed."; 1109 } 1111 } 1112 } 1114 grouping session-jitter-statistics { 1115 description "Grouping for per session jitter statistics"; 1116 container session-jitter-statistics { 1117 description "Session jitter summarised information."; 1118 leaf time-resolution-value { 1119 type identityref { 1120 base time-resolution; 1121 } 1122 description "Time units among choice of s,ms,ns etc."; 1124 } 1125 leaf min-jitter-value { 1126 type uint32; 1127 description "Minimum jitter value observed."; 1128 } 1129 leaf max-jitter-value { 1130 type uint32; 1131 description "Maximum jitter value observed."; 1132 } 1133 leaf average-jitter-value { 1134 type uint32; 1135 description "Average jitter value observed."; 1136 } 1137 } 1138 } 1140 grouping session-path-verification-statistics { 1141 description "Grouping for per session path verification statistics"; 1142 container session-path-verification-statistics{ 1143 description "OAM per session path verification statistics."; 1144 leaf verified-count { 1145 type uint32; 1146 description "Total number of packets that went through a path as intended."; 1147 } 1148 leaf failed-count { 1149 type uint32; 1150 description "Total number of packets that went through an unintended path."; 1151 } 1152 } 1153 } 1155 grouping session-type { 1156 description 1157 "This object indicates the current session 1158 definition."; 1160 leaf session-type-enum { 1161 type enumeration { 1162 enum proactive { 1163 description 1164 "The current session is proactive"; 1165 } 1166 enum on-demand { 1167 description 1168 "The current session is on-demand."; 1169 } 1170 } 1171 default "on-demand"; 1172 description 1174 "session type enum"; 1175 } 1176 } 1178 identity tp-address-type { 1179 description 1180 "Test point address type"; 1181 } //base identity 1182 identity mac-address-type { 1183 base tp-address-type; 1184 description 1185 "MAC address type"; 1186 } 1188 identity ipv4-address-type { 1189 base tp-address-type; 1190 description 1191 "IPv4 address type"; 1192 } 1194 identity ipv6-address-type { 1195 base tp-address-type; 1196 description 1197 "IPv6 address type"; 1198 } 1200 identity src-dst-address-type { 1201 base tp-address-type; 1202 description 1203 "Source/Dest address type"; 1204 } 1206 identity fec-address-type { 1208 base tp-address-type; 1209 description 1210 "FEC address type"; 1211 } 1213 identity tlv-address-type { 1214 base tp-address-type; 1215 description 1216 "TLV address type"; 1217 } 1219 identity system-id-address-type { 1220 base tp-address-type; 1221 description 1223 "System id address type"; 1224 } 1226 identity lsp-id-address-type { 1227 base tp-address-type; 1228 description 1229 "LSP ID address type"; 1231 } 1233 identity as-number-address-type { 1234 base tp-address-type; 1235 description 1236 "AS number address type"; 1237 } 1239 identity group-ip-address-type { 1240 base tp-address-type; 1241 description 1242 "Group IP address type"; 1243 } 1245 identity route-distinguisher-address-type { 1246 base tp-address-type; 1247 description 1248 "Route Distinguisher address type"; 1249 } 1251 identity ip-prefix-address-type { 1252 base tp-address-type; 1253 description 1254 "IP prefix address type"; 1255 } 1257 identity tunnel-address-type { 1258 base tp-address-type; 1259 description 1260 "Tunnel address type"; 1261 } 1263 grouping tp-address { 1264 leaf tp-address-type-value { 1265 type identityref { 1266 base tp-address-type; 1267 } 1268 description "Test point address type."; 1269 } 1271 choice tp-address { 1273 case mac-address { 1274 when "'tp-address-type-value' = 'mac-address-type'" { 1275 description "MAC address type"; 1276 } 1277 leaf mac-address { 1278 type yang:mac-address; 1279 description 1280 "MAC Address"; 1281 } 1282 description 1283 "MAC Address based MP Addressing."; 1284 } 1285 case ipv4-address { 1286 when "'tp-address-type-value' = 'ipv4-address-type'" { 1287 description "IPv4 address type"; 1288 } 1289 leaf ipv4-address { 1290 type inet:ipv4-address; 1291 description 1292 "Ipv4 Address"; 1293 } 1294 description 1295 "Ip Address based MP Addressing."; 1296 } 1297 case ipv6-address { 1298 when "'tp-address-type-value' = 'ipv6-address-type'" { 1299 description "IPv6 address type"; 1300 } 1301 leaf ipv6-address { 1302 type inet:ipv6-address; 1303 description 1304 "Ipv6 Address"; 1306 } 1307 description 1308 "ipv6 Address based MP Addressing."; 1309 } 1310 case src-dst-address { 1311 when "'tp-address-type-value' = 'src-dst-address-type'" { 1312 description "Src dest address type for BFD"; 1313 } 1314 leaf src-ip-address { 1315 type inet:ip-address; 1316 description 1317 "source ip address."; 1318 } 1319 leaf dst-ip-address { 1320 type inet:ip-address; 1321 description 1323 "destination ip address."; 1324 } 1325 leaf Interface { 1326 type if:interface-ref; 1327 description 1328 "interface."; 1329 } 1330 } 1331 case fec { 1332 when "'tp-address-type-value' = 'fec-address-type'" { 1333 description "FEC address type"; 1334 } 1335 leaf fec-type { 1336 type fec-type; 1337 description 1338 "fec type."; 1339 } 1340 choice fec-value { 1341 description 1342 "fec value."; 1343 case ip-prefix { 1344 leaf ip-prefix { 1345 type inet:ip-prefix; 1346 description 1347 "ip prefix."; 1348 } 1349 } 1350 case bgp { 1351 leaf bgp { 1352 type inet:ip-prefix; 1353 description 1355 "BGP Labeled Prefix "; 1356 } 1357 } 1358 case tunnel { 1359 leaf tunnel-interface { 1360 type uint32; 1361 description 1362 "VPN Prefix "; 1363 } 1364 } 1366 case pw { 1367 leaf remote-pe-address{ 1368 type inet:ip-address; 1369 description 1370 "remote pe address."; 1371 } 1372 leaf pw-id { 1373 type uint32; 1374 description 1375 "Pseudowire id."; 1376 } 1377 } 1378 case vpls { 1379 leaf route-distinguisher { 1380 type uint32; 1381 description 1382 "Route Distinguisher(8 octets)."; 1383 } 1384 leaf sender-ve-id{ 1385 type uint32; 1386 description 1387 "Sender's VE ID."; 1388 } 1389 leaf receiver-ve-id{ 1390 type uint32; 1391 description 1392 "Receiver's VE ID."; 1393 } 1394 } 1395 case mpls-mldp{ 1396 choice root-address{ 1397 description 1398 "root address choice."; 1399 case ip-address{ 1400 leaf source-address{ 1401 type inet:ip-address; 1402 description 1404 "ip address."; 1405 } 1406 leaf group-ip-address{ 1407 type IP-Multicast-Group-Address; 1408 description 1409 "group ip address."; 1410 } 1411 } 1412 case vpn{ 1413 leaf as-number{ 1414 type inet:as-number; 1416 description 1417 "AS number."; 1418 } 1419 } 1420 case global-id{ 1421 leaf lsp-id{ 1422 type string; 1423 description 1424 "lsp id."; 1425 } 1426 } 1427 } 1428 } 1429 } 1430 } 1431 case tlv-address { 1432 when "'tp-address-type-value' = 'tlv-address-type'" { 1433 description "TLV address type"; 1434 } 1435 leaf tlv-type { 1436 type int16; 1437 description 1438 "Type of MEP-ID"; 1439 } 1440 leaf tlv-len { 1441 type int16; 1442 description 1443 "Length of MEP-ID value"; 1444 } 1445 leaf tlv-value { 1446 type binary { 1447 length "12..255"; 1448 } 1449 description 1450 "Value please refer RFC6428 (Figure 4,5,6)."; 1451 } 1453 description 1454 "MEP-ID"; 1455 } 1456 case system-info { 1457 when "'tp-address-type-value' = 'system-id-address-type'" { 1458 description "System id address type"; 1459 } 1460 leaf system-id { 1461 type inet:uri; 1462 description 1463 "System ID assigned to this node."; 1464 } 1466 } 1467 description 1468 "TP Addressing."; 1469 } 1470 description 1471 "TP Address"; 1472 } 1474 grouping tp-address-vrf { 1475 description 1476 "Test point address with VRF."; 1477 leaf vrf { 1478 type routing-instance-ref; 1479 description 1480 "The vrf is used to describe the 1481 corresponding network instance"; 1482 } 1484 uses tp-address; 1485 } 1487 grouping connectionless-oam-layers { 1488 list oam-layers { 1489 key "index"; 1490 leaf index { 1491 type uint16 { 1492 range "0..65535"; 1493 } 1494 description 1495 "Index"; 1496 } 1497 leaf level { 1498 type int32 { 1499 range "-1..1"; 1500 } 1502 default 0; 1503 description 1504 "Level 0 indicates default level, -1 means server 1505 and +1 means client layer. 1506 In relationship 0 means same layer."; 1507 } 1508 choice tp-address { 1510 case mac-address { 1511 leaf mac-address-location { 1512 type yang:mac-address; 1513 description 1514 "MAC Address"; 1515 } 1516 description 1517 "MAC Address based MP Addressing."; 1518 } 1519 case ipv4-address { 1520 leaf ipv4-location { 1521 type inet:ipv4-address; 1522 description 1523 "Ipv4 Address"; 1524 } 1525 description 1526 "Ip Address based MP Addressing."; 1527 } 1528 case ipv6-location { 1529 leaf ipv6-address { 1530 type inet:ipv6-address; 1531 description 1532 "Ipv6 Address"; 1534 } 1535 description 1536 "ipv6 Address based MP Addressing."; 1537 } 1539 case tunnel-location{ 1540 leaf tunnel-location{ 1541 type uint32; 1542 description 1543 "VPN Prefix"; 1544 } 1545 description 1546 "tunnel location"; 1547 } 1549 case ip-prefix-location{ 1550 leaf ip-prefix-location{ 1551 type inet:ip-prefix; 1552 description 1553 "Ip prefix location"; 1554 } 1555 description 1556 "IP prefix location"; 1557 } 1559 case route-dist-location{ 1560 leaf route-dist-location{ 1561 type uint32; 1562 description 1563 "Route Distinguisher (8 octets)"; 1564 } 1565 description 1566 "Route distinguisher location"; 1568 } 1570 case group-ip-address-location{ 1571 leaf group-ip-address-location{ 1572 type IP-Multicast-Group-Address; 1573 description 1574 "Group IP address location"; 1575 } 1576 description 1577 "Group IP address"; 1578 } 1580 case as-number-location{ 1581 leaf as-number-location{ 1582 type inet:as-number; 1583 description 1584 "AS number location"; 1585 } 1586 description 1587 "AS number"; 1588 } 1590 case lsp-id-location{ 1591 leaf lsp-id-location{ 1592 type string; 1593 description 1594 "LSP id"; 1595 } 1596 description 1597 "LSP ID"; 1598 } 1600 case system-id-location{ 1601 leaf system-id-location{ 1602 type inet:uri; 1603 description 1604 "system id location"; 1605 } 1606 description 1607 "System ID"; 1608 } 1610 case connection-oriented-location{ 1611 uses goam:maintenance-association-end-point-reference; 1612 description 1613 "connection oriented location"; 1614 } 1615 description 1616 "TP location."; 1618 } 1619 ordered-by user; 1620 description 1621 "list of related oam layers. 1622 0 means they are in same level, especially 1623 interworking scenarios of stiching multiple 1624 technology at same layer. 1625 -1 means server layer, for eg:- in case of 1627 Overlay and Underlay, Underlay is server layer for 1628 Overlay Test Point. 1629 +1 means client layer, for eg:- in case of 1630 Service OAM and Transport OAM, Service OAM is client 1631 layer to Transport OAM."; 1632 } 1633 description 1634 "connectionless related OAM layer"; 1635 } 1637 grouping tp-technology { 1638 choice technology { 1639 default technology-null; 1640 case technology-null { 1641 description 1642 "this is a placeholder when no technology is needed."; 1643 leaf tech-null { 1644 type empty; 1645 description 1646 "there is no technology define"; 1647 } 1648 } 1649 description 1650 "technology choice null"; 1651 case technology-string { 1652 description 1653 "oam technology string"; 1654 leaf ipv4-icmp { 1655 type string; 1656 description 1657 "name to identify oam technology"; 1658 } 1659 } 1660 } 1662 description 1663 "OAM Technology"; 1665 } 1667 grouping tp-tools { 1668 description 1669 "Test Point OAM Toolset."; 1670 container tp-tools{ 1671 leaf connectivity-verification{ 1672 type boolean; 1673 description 1674 "A flag indicating whether or not the 1675 connectivity-verification function is supported."; 1676 reference 1677 "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL. 1678 RFC 4443: Internet Control Message Protocol (ICMPv6) 1679 for the Internet Protocol Version 6 (IPv6) Specification. 1680 RFC 5880: Bidirectional Forwarding Detection. 1681 RFC 5881: BFD for IPv4 and IPv6. 1682 RFC 5883: BFD for Multihop Paths. 1683 RFC 5884: BFD for MPLS Label Switched Paths. 1684 RFC 5885: BFD for PW VCCV. 1685 RFC 4379: LSP-PING."; 1686 } 1687 leaf continuity-check{ 1688 type boolean; 1689 description 1690 "A flag indicating whether or not the 1691 continuity check function is supported."; 1692 reference 1693 "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL. 1694 RFC 4443: Internet Control Message Protocol (ICMPv6) 1695 for the Internet Protocol Version 6 (IPv6) Specification. 1696 RFC 5880: Bidirectional Forwarding Detection. 1697 RFC 5881: BFD for IPv4 and IPv6. 1698 RFC 5883: BFD for Multihop Paths. 1699 RFC 5884: BFD for MPLS Label Switched Paths. 1700 RFC 5885: BFD for PW VCCV."; 1701 } 1702 leaf path-discovery{ 1703 type boolean; 1704 description 1705 "A flag indicating whether or not the 1706 path discovery function is supported."; 1707 reference 1708 "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL. 1709 RFC 4443: Internet Control Message Protocol (ICMPv6) 1710 for the Internet Protocol Version 6 (IPv6) Specification. 1711 RFC 4884: Extended ICMP to Support Multi-part Message. 1712 RFC 5837:Extending ICMP for Interface and Next-Hop Identification. 1714 RFC 4379: LSP-PING."; 1715 } 1716 description 1717 "Container for test point OAM tools set."; 1718 } 1720 } 1722 grouping test-point-location-info { 1723 uses tp-technology; 1724 uses tp-tools; 1725 anydata root { 1726 yangmnt:mount-point root; 1727 description 1728 "Root for models supported per 1729 test point"; 1730 } 1731 uses connectionless-oam-layers; 1732 description 1733 "Test point Location"; 1734 } 1736 grouping test-point-locations { 1737 description "Group of test point locations."; 1738 leaf tp-address-type-value { 1740 type identityref { 1741 base tp-address-type; 1742 } 1743 description "Test point address type."; 1745 } 1746 choice location-type { 1747 case ipv4-location-type { 1748 when "'tp-address-type-value' = 'ipv4-address-type'" { 1749 description 1750 "when test point address is equal to ipv4 address."; 1751 } 1752 container test-point-ipv4-location-list { 1753 list test-point-locations { 1754 key "ipv4-location"; 1755 leaf ipv4-location { 1756 type inet:ipv4-address; 1757 description 1758 "Ipv4 Address."; 1759 } 1760 leaf vrf { 1761 type routing-instance-ref; 1762 description 1763 "The vrf is used to describe the 1764 corresponding network instance"; 1765 } 1767 uses test-point-location-info; 1769 ordered-by user; 1770 description 1771 "list of test point locations."; 1772 } 1773 description 1774 "Serves as top-level container for test point location list."; 1775 } 1776 } 1777 case ipv6-location-type { 1778 when "'tp-address-type-value' = 'ipv6-address-type'" { 1779 description 1780 "when test point address is equal to ipv6 address"; 1781 } 1782 container test-point-ipv6-location-list { 1783 list test-point-locations { 1784 key "ipv6-location"; 1785 leaf ipv6-location { 1786 type inet:ipv6-address; 1787 description 1788 "Ipv6 Address."; 1789 } 1790 leaf vrf { 1792 type routing-instance-ref; 1793 description 1794 "The vrf is used to describe the 1796 corresponding network instance"; 1797 } 1798 uses test-point-location-info; 1799 ordered-by user; 1800 description 1801 "list of test point locations."; 1802 } 1803 description 1804 "Serves as top-level container for test point location list."; 1805 } 1806 } 1807 case mac-location-type { 1808 when "'tp-address-type-value' = 'mac-address-type'" { 1809 description 1810 "when test point address is equal to mac address."; 1811 } 1812 container test-point-mac-address-location-list { 1813 list test-point-locations { 1814 key "mac-address-location"; 1815 leaf mac-address-location { 1816 type yang:mac-address; 1817 description 1818 "MAC Address"; 1819 } 1820 uses test-point-location-info; 1821 ordered-by user; 1822 description 1823 "list of test point locations."; 1824 } 1825 description 1826 "Serves as top-level container for test point location list."; 1827 } 1828 } 1829 case tunnel-location-type { 1830 when "'tp-address-type-value' = 'tunnel-address-type'" { 1831 description 1832 "when test point address is equal to tunnel type."; 1833 } 1834 container test-point-tunnel-address-location-list { 1835 list test-point-locations { 1836 key "tunnel-location"; 1837 leaf tunnel-location { 1838 type uint32; 1839 description 1840 "VPN Prefix"; 1842 } 1843 leaf vrf { 1845 type routing-instance-ref; 1846 description 1847 "The vrf is used to describe the 1848 corresponding network instance"; 1849 } 1850 uses test-point-location-info; 1851 ordered-by user; 1852 description 1853 "list of test point locations."; 1854 } 1855 description 1856 "Serves as top-level container for test point location list."; 1857 } 1859 } 1860 case ip-prefix-location-type { 1861 when "'tp-address-type-value' = 'ip-prefix-address-type'" { 1862 description 1863 "when test point address is equal to ip prefix."; 1864 } 1865 container test-point-ip-prefix-location-list { 1866 list test-point-locations { 1867 key "ip-prefix-location"; 1868 leaf ip-prefix-location { 1869 type inet:ip-prefix; 1870 description 1871 "IP Prefix"; 1872 } 1873 leaf vrf { 1874 type routing-instance-ref; 1875 description 1876 "The vrf is used to describe the 1877 corresponding network instance"; 1878 } 1879 uses test-point-location-info; 1880 ordered-by user; 1881 description 1882 "list of test point locations."; 1883 } 1884 description 1885 "Serves as top-level container for test point location list."; 1886 } 1887 } 1888 case route-distinguisher-location-type { 1889 when "'tp-address-type-value' = 'route-distinguisher-address-type'" { 1890 description "when test point address is equal to 1891 route distinguiher."; 1893 } 1895 container test-point-route-dist-location-list { 1896 list test-point-locations { 1897 key "route-dist-location"; 1898 leaf route-dist-location { 1899 type uint32; 1900 description 1901 "Route Distinguisher(8 octets)."; 1902 } 1903 leaf vrf { 1904 type routing-instance-ref; 1905 description 1906 "The vrf is used to describe the 1907 corresponding network instance"; 1908 } 1909 uses test-point-location-info; 1910 ordered-by user; 1911 description 1912 "list of test point locations."; 1913 } 1914 description 1915 "Serves as top-level container for test point location list."; 1916 } 1917 } 1918 case group-ip-address-location-type { 1919 when "'tp-address-type-value' = 'group-ip-address-type'" { 1920 description "when test point address is equal to 1921 group ip address."; 1922 } 1923 container test-point-group-ip-address-location-list { 1924 list test-point-locations { 1925 key "group-ip-address-location"; 1926 leaf group-ip-address-location { 1927 type IP-Multicast-Group-Address; 1928 description 1929 "Group IP address."; 1930 } 1931 leaf vrf { 1932 type routing-instance-ref; 1933 description 1934 "The vrf is used to describe the 1935 corresponding network instance"; 1936 } 1937 uses test-point-location-info; 1938 ordered-by user; 1939 description 1940 "list of test point locations."; 1941 } 1943 description 1944 "Serves as top-level container for test point location list."; 1945 } 1946 } 1947 case group-as-number-location-type { 1948 when "'tp-address-type-value' = 'as-number-address-type'" { 1949 description "when test point address is equal to 1950 as-number."; 1951 } 1952 container test-point-as-number-location-list { 1953 list test-point-locations { 1954 key "as-number-location"; 1955 leaf as-number-location { 1956 type inet:as-number; 1957 description 1958 "AS number."; 1959 } 1960 leaf vrf { 1961 type routing-instance-ref; 1962 description 1963 "The vrf is used to describe the 1964 corresponding network instance"; 1965 } 1966 uses test-point-location-info; 1967 ordered-by user; 1968 description 1969 "list of test point locations."; 1970 } 1971 description 1972 "Serves as top-level container for test point location list."; 1973 } 1974 } 1975 case group-lsp-id-location-type { 1976 when "'tp-address-type-value' = 'lsp-id-address-type'" { 1977 description "when test point address is equal to lspid."; 1978 } 1979 container test-point-lsp-id-location-list { 1980 list test-point-locations { 1981 key "lsp-id-location"; 1982 leaf lsp-id-location { 1983 type string; 1984 description 1985 "LSP Id."; 1986 } 1987 leaf vrf { 1988 type routing-instance-ref; 1989 description 1990 "The vrf is used to describe the 1992 corresponding network instance"; 1993 } 1994 uses test-point-location-info; 1995 ordered-by user; 1996 description 1997 "list of test point locations."; 1998 } 1999 description 2000 "Serves as top-level container for test point location list."; 2001 } 2002 } 2003 case group-system-id-location-type { 2004 when "'tp-address-type-value' = 'system-id-address-type'" { 2005 description "when test point address is equal to 2006 system info."; 2007 } 2008 container test-point-system-info-location-list { 2009 list test-point-locations { 2010 key "system-id-location"; 2011 leaf system-id-location { 2012 type inet:uri; 2013 description 2014 "System Id."; 2015 } 2016 leaf vrf { 2017 type routing-instance-ref; 2018 description 2019 "The vrf is used to describe the 2020 corresponding network instance"; 2021 } 2022 uses test-point-location-info; 2023 ordered-by user; 2024 description 2025 "list of test point locations."; 2026 } 2027 description 2028 "Serves as top-level container for test point location list."; 2029 } 2030 } 2031 description 2032 "Choice of address types."; 2033 } 2034 } 2036 augment "/nd:networks/nd:network/nd:node"{ 2037 description 2038 "Augment test points of connectionless oam."; 2039 uses test-point-locations; 2041 } 2043 grouping path-discovery-data { 2044 description "Path discovery related data output from nodes."; 2045 container src-test-point { 2046 description "Source test point."; 2047 uses tp-address-vrf; 2048 } 2049 container dest-test-point { 2050 description "Destination test point."; 2051 uses tp-address-vrf; 2052 } 2053 leaf sequence-number { 2054 type uint64; 2055 description "Sequence number in data packets."; 2056 } 2057 leaf hop-cnt { 2058 type uint8; 2059 description "hop count."; 2060 } 2062 uses session-packet-statistics; 2063 uses session-error-statistics; 2064 uses session-delay-statistics; 2065 uses session-jitter-statistics; 2067 container path-verification { 2068 description "Optional path verification related information."; 2069 leaf flow-info { 2070 type string; 2071 description 2072 "ACL name that refers to the flow, if any."; 2073 } 2074 uses session-path-verification-statistics; 2075 } 2077 container path-trace-info { 2078 description "Optional path trace per-hop test point information. 2079 The list has typically a single element for per-hop 2080 cases like path-discovery RPC but allows a list of 2081 hop related information for other types of 2082 data retrieval methods."; 2083 list path-trace-info-list { 2084 key "index"; 2085 description 2086 "Path trace information list."; 2087 leaf index { 2088 type uint32; 2090 description "Trace information index."; 2091 } 2093 uses tp-address-vrf; 2095 leaf timestamp-val { 2096 type yang:date-and-time; 2097 description "Timestamp value"; 2098 } 2099 leaf ingress-intf-name { 2100 type if:interface-ref; 2101 description 2102 "Ingress interface name"; 2103 } 2104 leaf egress-intf-name { 2105 type if:interface-ref; 2106 description 2107 "Egress interface name"; 2108 } 2109 leaf app-meta-data { 2110 type uint32; 2111 description 2112 "Application specific data added by node."; 2113 } 2114 } 2115 } 2116 } 2118 grouping continuity-check-data { 2119 description "Continuity check data output from nodes."; 2120 container src-test-point { 2121 description "Source test point."; 2122 uses tp-address-vrf; 2124 leaf egress-intf-name { 2125 type if:interface-ref; 2126 description 2127 "Egress interface name"; 2128 } 2129 } 2130 container dest-test-point { 2131 description "Destination test point."; 2132 uses tp-address-vrf; 2134 leaf ingress-intf-name { 2135 type if:interface-ref; 2136 description 2137 "Ingress interface name"; 2139 } 2140 } 2141 leaf sequence-number { 2142 type uint64; 2143 description "Sequence number."; 2144 } 2145 leaf hop-cnt { 2146 type uint8; 2147 description "hop count."; 2148 } 2150 uses session-packet-statistics; 2151 uses session-error-statistics; 2152 uses session-delay-statistics; 2153 uses session-jitter-statistics; 2154 } 2156 container oper { 2157 if-feature continuity-check; 2158 config "false"; 2159 description "cc operational information."; 2160 container cc-ipv4-sessions-statistics { 2161 description "cc ipv4 sessions"; 2162 uses cc-session-statsitics; 2163 } 2164 container cc-ipv6-sessions-statistics { 2165 description "cc ipv6 sessions"; 2166 uses cc-session-statsitics; 2167 } 2168 } 2169 } 2171 YANG module of OAM 2173 2175 5. CL model applicability 2177 ietf-connectionless-oam model defined in this document provides 2178 technology-independent abstraction of key OAM constructs for 2179 connectionless protocols. This model can be further extended to 2180 include technology specific details, e.g., adding new data nodes with 2181 technology specific functions and parameters into proper anchor 2182 points of the base model, so as to develop a technology-specific 2183 connectionless OAM model. 2185 This section demonstrates the usability of the connectionless YANG 2186 OAM data model to various connectionless OAM technologies, e.g., BFD, 2187 LSP ping. Note that, in this section, we only present several 2188 snippets of technology-specific model extensions for illustrative 2189 purposes. The complete model extensions should be worked on in 2190 respective protocol working groups. 2192 5.1. BFD Extension 2194 5.1.1. Augment Method 2196 The following sections shows how the "ietf-connectionless-oam" model 2197 can be extended to cover BFD technology. For this purpose, a set of 2198 extension are introduced such as technology-type extension and test- 2199 point attributes extension. 2201 Note that in BFD WG, there is a BFD yang data model 2202 [I-D.ietf-bfd-yang] to be produced. Users can choose to use "ietf- 2203 connectioless-oam" as basis and augment the "ietf-connectionless-oam" 2204 model with bfd specific details. The bfd specific details can be the 2205 grouping defined in the BFD model. 2207 5.1.1.1. technology type extension 2209 No BFD technology type has been defined in the "ietf-connectionless- 2210 oam" model. Therefore a technology type extension is required in the 2211 model Extension. 2213 The snippet below depicts an example of augmenting "bfd" type into 2214 the ietf-connectionless-oam": 2216 augment "/nd:networks/nd:network/nd:node/" 2217 +"coam:location-type/coam:ipv4-location-type" 2218 +"/coam:test-point-ipv4-location-list/" 2219 +"coam:test-point-locations/coam:technology" 2220 +"/coam:technology-string" 2221 { 2222 leaf bfd{ 2223 type string; 2224 } 2225 } 2227 5.1.1.2. test point attributes extension 2229 To support bfd technology, the "ietf-connectionless-oam" model can be 2230 extended and add bfd specific parameters under "test-point-location" 2231 list and/or add new location type such as "bfd over MPLS-TE" under 2232 "location-type". 2234 5.1.1.2.1. Define and insert new nodes into corresponding test-point- 2235 location 2237 In the "ietf-connectionless-oam" model, multiple "test-point- 2238 location" lists are defined under the "location-type" choice node. 2239 Therefore, to derive a model for some bfd technologies ( such as ip 2240 single-hop, ip multi-hops, etc), data nodes for bfd specific details 2241 need to be added into corresponding "test-point-locations" list. In 2242 this section, we reuse some groupings which are defined in 2243 [I-D.ietf-bfd-yang] as following: 2245 The snippet below shows how the "ietf-connectionless-oam" model can 2246 be extended to support "BFD IP single-hop": 2248 augment "/nd:networks/nd:network/nd:node/" 2249 +"coam:location-type/coam:ipv4-location-type" 2250 +"/coam:test-point-ipv4-location-list/" 2251 +"coam:test-point-locations" 2252 { 2253 container session-cfg { 2254 description "BFD IP single-hop session configuration"; 2255 list sessions { 2256 key "interface dest-addr"; 2257 description "List of IP single-hop sessions"; 2258 leaf interface { 2259 type if:interface-ref; 2260 description 2261 "Interface on which the BFD session is running."; 2262 } 2263 leaf dest-addr { 2264 type inet:ip-address; 2265 description "IP address of the peer"; 2266 } 2267 uses bfd:bfd-grouping-common-cfg-parms; 2268 uses bfd:bfd-grouping-echo-cfg-parms; 2269 } 2270 } 2271 } 2273 Similar augmentations can be defined to support other BFD 2274 technologies such as BFD IP multi-hop, BFD over MPLS, etc. 2276 5.1.1.2.2. Add new location-type cases 2278 In the "ietf-connectionless-oam" model, If there is no appropriate 2279 "location type" case that can be extended, a new "location-type" case 2280 can be defined and inserted into the "location-type" choice node. 2282 Therefore, the model user can flexibly add "location-type" to support 2283 other type of test point which are not defined in the "ietf- 2284 connectionless-oam" model. In this section, we add a new "location- 2285 type" case and reuse some groupings which are defined in 2286 [I-D.ietf-bfd-yang] as follows: 2288 The snippet below shows how the "ietf-connectionless-oam" model can 2289 be extended to support "BFD over MPLS-TE": 2291 augment "/nd:networks/nd:network/nd:node/coam:location-type"{ 2292 case te-location{ 2293 list test-point-location-list{ 2294 key "tunnel-name"; 2295 leaf tunnel-name{ 2296 type leafref{ 2297 path "/te:te/te:tunnels/te:tunnel/te:name"; 2298 } 2299 description 2300 "point to a te instance."; 2301 } 2302 uses bfd:bfd-grouping-common-cfg-parms; 2303 uses bfd-mpls:bfd-encap-cfg; 2304 } 2305 } 2306 } 2308 Similar augmentations can be defined to support other BFD 2309 technologies such as BFD over LAG, etc. 2311 5.1.2. Schema Mount 2313 And anohter alternative method is using schema mount mechanism 2314 [draft-ietf-netmod-schema-mount] in the "ietf-connectionless-oam". 2315 Within the "test-point-location" list, a "root" attribute is defined 2316 to provide a mounted point for models mounted per "test-point- 2317 location". Therefore, the "ietf-connectionless-oam" model can 2318 provide a place in the node hierarchy where other OAM YANG data 2319 models can be attached, without any special extension in the "ietf- 2320 connectionless-oam" YANG data models [draft-ietf-netmod-schema- 2321 mount]. Note that the limitation of the Schema Mount method is it is 2322 not allowed to specify certain modules that are required to be 2323 mounted under a mount point. 2325 The snippet below depicts the definition of "root" attribute. 2327 anydata root { 2328 yangmnt:mount-point root; 2329 description 2330 "Root for models supported per 2331 test point"; 2332 } 2334 The following section shows how the "ietf-connectionless-oam" model 2335 can use schema mount to support BFD technology. 2337 5.1.2.1. BFD Modules be populated in schema-mount 2339 To support BFD technology, "ietf-bfd-ip-sh" and "ietf-bfd-ip-mh" YANG 2340 modules might be populated in the "schema-mounts" container: 2342 2344 2345 ietf-connectionless-oam 2346 root 2347 2348 root 2349 2350 2351 2352 root 2353 2354 ietf-bfd-ip-sh 2355 2016-07-04 2356 2357 urn:ietf:params:xml:ns:yang: ietf-bfd-ip-sh 2358 2359 implement 2360 2361 2362 ietf-bfd-ip-mh 2363 2016-07-04 2364 2365 urn:ietf:params:xml:ns:yang: ietf-bfd-ip-mh 2366 2367 implement 2368 2369 2370 2372 and the " ietf-connectionless-oam " module might have: 2374 2375 ...... 2376 2377 1.1.1.1 2378 ...... 2379 2380 2381 2382 foo 2383 ...... 2384 2385 2386 2387 2388 foo 2389 ...... 2390 2391 2392 2393 2394 2396 5.2. LSP ping extension 2398 The following sections shows how the "ietf-connectionless-oam" model 2399 can be extended to support LSP ping technology. For this purpose, a 2400 set of extension are introduced such as technology-type extension and 2401 test-point attributes extension. 2403 Note that in MPLS WG, there is a LSP Ping yang data model 2404 [I-D.draft-zheng-mpls-lsp-ping-yang-cfg] to be produced. Users can 2405 choose to use "ietf-connectioless-oam" as basis and augment the 2406 "ietf-connectionless-oam" model with LSP Ping specific details in the 2407 model extension. The LSP Ping specific details can be the grouping 2408 defined in the LSP ping model. 2410 5.2.1. technology type extension 2412 No lsp-ping technology type has been defined in the "ietf- 2413 connectionless-oam" model. Therefore a technology type extension is 2414 required in the model extension. 2416 The snippet below depicts an example of augmenting the "ietf- 2417 connectionless-oam" with "lsp-ping" type: 2419 augment "/nd:networks/nd:network/nd:node/" 2420 +"coam:location-type/coam:ipv4-location-type" 2421 +"/coam:test-point-ipv4-location-list/" 2422 +"coam:test-point-locations/coam:technology" 2423 +"/coam:technology-string" 2424 { 2425 leaf lsp-ping{ 2426 type string; 2427 } 2428 } 2430 5.2.2. test point attributes extension 2432 To support lsp-ping, the "ietf-connectionless-oam" model can be 2433 extended and add lsp-ping specific parameters can be defined and 2434 under "test-point-location" list. 2436 User can reuse the attributes or groupings which are defined in 2437 [I-D.draft-zheng-mpls-lsp-ping-yang-cfg] as follows: 2439 The snippet below depicts an example of augmenting the "test-point- 2440 locations" list with lsp ping attributes: 2442 augment "/nd:networks/nd:network/nd:node/" 2443 +"coam:location-type/coam:ipv4-location-type" 2444 +"/coam:test-point-ipv4-location-list/" 2445 +"coam:test-point-locations" 2446 { 2447 list lsp-ping { 2448 key "lsp-ping-name"; 2449 leaf lsp-ping-name { 2450 type string { 2451 length "1..31"; 2452 } 2453 mandatory "true"; 2454 description "LSP Ping test name."; 2455 ...... 2456 } 2458 6. Security Considerations 2460 TBD. 2462 7. IANA Considerations 2464 This document registers a URI in the IETF XML registry [RFC3688] 2465 [RFC3688]. Following the format in RFC 3688, the following 2466 registration is requested to be made: 2468 URI: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam 2470 Registrant Contact: The IESG. 2472 XML: N/A, the requested URI is an XML namespace. 2474 This document registers a YANG module in the YANG Module Names 2475 registry [RFC6020]. 2477 name: ietf-connectionless-oam namespace: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam 2478 prefix: goam reference: RFC XXXX 2480 8. Acknowlegements 2482 The authors of this document would like to thank Greg Mirskey and 2483 others for their sustainable review and comments, proposals to 2484 improve and stablize document. 2486 9. Normative References 2488 [I-D.draft-ietf-i2rs-yang-network-topo] 2489 Clemm, A., Medved, J., Tkacik, T., Varga, R., Bahadur, N., 2490 Ananthakrishnan, H., and X. Liu, "A YANG Data Model for 2491 Network Topologies", I-D draft-ietf-i2rs-yang-network- 2492 topo-05, July 2016. 2494 [I-D.draft-zheng-mpls-lsp-ping-yang-cfg] 2495 Zheng, L., Aldrin, S., Zheng, G., Mirsky, G., and R. 2496 Rahman, "Yang Data Model for LSP-PING", I-D draft-zheng- 2497 mpls-lsp-ping-yang-cfg-03, March 2016. 2499 [I-D.ietf-bfd-yang] 2500 Zheng, L., Rahman, R., Networks, J., Jethanandani, M., and 2501 G. Mirsky, "Yang Data Model for Bidirectional Forwarding 2502 Detection (BFD)", draft-ietf-bfd-yang-03 (work in 2503 progress), July 2016. 2505 [I-D.ietf-netmod-schema-mount] 2506 Bjorklund, M. and L. Lhotka, "YANG Schema Mount", draft- 2507 ietf-netmod-schema-mount-03 (work in progress), October 2508 2016. 2510 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2511 Requirement Levels", BCP 14, RFC 2119, 2512 DOI 10.17487/RFC2119, March 1997, 2513 . 2515 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2516 the Network Configuration Protocol (NETCONF)", RFC 6020, 2517 DOI 10.17487/RFC6020, October 2010, 2518 . 2520 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2521 and A. Bierman, Ed., "Network Configuration Protocol 2522 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2523 . 2525 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2526 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2527 . 2529 [RFC792] Postel, J., "Internet Control Message Protocol", RFC 792, 2530 September 1981. 2532 Authors' Addresses 2534 Deepak Kumar 2535 CISCO Systems 2536 510 McCarthy Blvd 2537 Milpitas, CA 95035 2538 USA 2540 Email: dekumar@cisco.com 2542 Michael Wang 2543 Huawei Technologies,Co.,Ltd 2544 101 Software Avenue, Yuhua District 2545 Nanjing 210012 2546 China 2548 Email: wangzitao@huawei.com 2550 Qin Wu 2551 Huawei 2552 101 Software Avenue, Yuhua District 2553 Nanjing, Jiangsu 210012 2554 China 2556 Email: bill.wu@huawei.com 2557 Reshad Rahman 2558 CISCO Systems 2559 2000 Innovation Drive 2560 KANATA, ONTARIO K2K 3E8 2561 CANADA 2563 Email: rrahman@cisco.com 2565 Srihari Raghavan 2566 CISCO Systems 2567 TRIL INFOPARK SEZ, Ramanujan IT City 2568 NEVILLE BLOCK, 2nd floor, Old Mahabalipuram Road 2569 CHENNAI, TAMIL NADU 600113 2570 INDIA 2572 Email: srihari@cisco.com