idnits 2.17.1 draft-ietf-i2rs-yang-l3-topology-07.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 224 has weird spacing: '... prefix ine...' -- The document date (January 3, 2017) is 2670 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) == Unused Reference: 'RFC7223' is defined on line 1404, but no explicit reference was found in the text == Outdated reference: A later version (-20) exists of draft-ietf-i2rs-yang-network-topo-10 ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) == Outdated reference: A later version (-10) exists of draft-acee-rtgwg-yang-rib-extend-02 == Outdated reference: A later version (-22) exists of draft-ietf-teas-yang-te-topo-06 -- Obsolete informational reference (is this intentional?): RFC 7223 (Obsoleted by RFC 8343) -- Obsolete informational reference (is this intentional?): RFC 8022 (Obsoleted by RFC 8349) Summary: 1 error (**), 0 flaws (~~), 6 warnings (==), 3 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group A. Clemm 3 Internet-Draft Huawei 4 Intended status: Standards Track J. Medved 5 Expires: July 7, 2017 Cisco 6 R. Varga 7 Pantheon Technologies SRO 8 X. Liu 9 Ericsson 10 H. Ananthakrishnan 11 Packet Design 12 N. Bahadur 13 Bracket Computing 14 January 3, 2017 16 A YANG Data Model for Layer 3 Topologies 17 draft-ietf-i2rs-yang-l3-topology-07.txt 19 Abstract 21 This document defines a YANG data model for layer 3 network 22 topologies. 24 Status of This Memo 26 This Internet-Draft is submitted in full conformance with the 27 provisions of BCP 78 and BCP 79. 29 Internet-Drafts are working documents of the Internet Engineering 30 Task Force (IETF). Note that other groups may also distribute 31 working documents as Internet-Drafts. The list of current Internet- 32 Drafts is at http://datatracker.ietf.org/drafts/current/. 34 Internet-Drafts are draft documents valid for a maximum of six months 35 and may be updated, replaced, or obsoleted by other documents at any 36 time. It is inappropriate to use Internet-Drafts as reference 37 material or to cite them other than as "work in progress." 39 This Internet-Draft will expire on July 7, 2017. 41 Copyright Notice 43 Copyright (c) 2017 IETF Trust and the persons identified as the 44 document authors. All rights reserved. 46 This document is subject to BCP 78 and the IETF Trust's Legal 47 Provisions Relating to IETF Documents 48 (http://trustee.ietf.org/license-info) in effect on the date of 49 publication of this document. Please review these documents 50 carefully, as they describe your rights and restrictions with respect 51 to this document. Code Components extracted from this document must 52 include Simplified BSD License text as described in Section 4.e of 53 the Trust Legal Provisions and are provided without warranty as 54 described in the Simplified BSD License. 56 Table of Contents 58 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 59 2. Definitions and Acronyms . . . . . . . . . . . . . . . . . . 3 60 3. Model Structure . . . . . . . . . . . . . . . . . . . . . . . 4 61 4. Layer 3 Unicast Topology Model Overview . . . . . . . . . . . 5 62 5. Layer 3 Unicast Topology YANG Module . . . . . . . . . . . . 7 63 6. Extending the Model . . . . . . . . . . . . . . . . . . . . . 14 64 6.1. Example 1: OSPF Topology . . . . . . . . . . . . . . . . 15 65 6.1.1. Model Overview . . . . . . . . . . . . . . . . . . . 15 66 6.1.2. OSPF Topology YANG Module . . . . . . . . . . . . . . 17 67 6.2. Example 2: IS-IS Topology . . . . . . . . . . . . . . . . 22 68 6.2.1. Model Overview . . . . . . . . . . . . . . . . . . . 22 69 6.2.2. IS-IS Topology YANG Module . . . . . . . . . . . . . 23 70 7. Interactions with Other YANG Modules . . . . . . . . . . . . 28 71 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 72 9. Security Considerations . . . . . . . . . . . . . . . . . . . 29 73 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 29 74 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30 75 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 76 12.1. Normative References . . . . . . . . . . . . . . . . . . 30 77 12.2. Informative References . . . . . . . . . . . . . . . . . 31 78 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 80 1. Introduction 82 This document introduces a YANG [RFC7950] [RFC6991] data model for 83 Layer 3 network topologies, specifically Layer 3 Unicast. The model 84 allows an application to have a holistic view of the topology of a 85 Layer 3 network, all contained in a single conceptual YANG datastore. 86 The data model builds on top of, and augments, the data model for 87 network topologies defined in 88 [I-D.draft-ietf-i2rs-yang-network-topo]. 90 This document also shows how the model can be further refined to 91 cover different Layer 3 Unicast topology types. For this purpose, 92 example models are introduced that cover IS-IS [RFC1195] and OSPF 93 [RFC2328]. Those examples are intended purely for illustrative 94 purposes; we expect that full-blown IS-IS and OSPF models will be 95 more comprehensive and refined than the examples shown here. 97 There are multiple applications for a topology data model. A number 98 of use cases have been defined in section 6 of 99 [I-D.draft-ietf-i2rs-usecase-reqs-summary]. For example, nodes 100 within the network can use the data model to capture their 101 understanding of the overall network topology and expose it to a 102 network controller. A network controller can then use the 103 instantiated topology data to compare and reconcile its own view of 104 the network topology with that of the network elements that it 105 controls. Alternatively, nodes within the network could propagate 106 this understanding to compare and reconcile this understanding either 107 amongst themselves or with help of a controller. Beyond the network 108 element itself, a network controller might even use the data model to 109 represent its view of the topology that it controls and expose it to 110 applications north of itself. 112 The data model for Layer 3 Unicast topologies defined in this 113 document is specified in a YANG module "ietf-l3-unicast-topology". 114 To do so, it augments general network topology model defined in 115 [I-D.draft-ietf-i2rs-yang-network-topo] with information specific to 116 Layer 3 Unicast. This way, the general topology model is extended to 117 be able to meet the needs of Layer 3 Unicast topologies. 119 Information that is kept in the Traffic Engineering Database (TED) 120 will be specified in a separate model 121 [I-D.draft-ietf-teas-yang-te-topo] and outside the scope of this 122 specification. 124 2. Definitions and Acronyms 126 As this document defines a YANG data model, in this document many 127 terms are used that have been defined in conjunction with YANG 128 [RFC7950] and Netconf [RFC6241]. Some terms, such as datastore and 129 data tree, are repeated here for clarity and to put them in context. 131 Datastore: A conceptual place to store and access information, such 132 as instantiated YANG data. 134 Data tree: An instantiated tree of data modeled with YANG, in which 135 individual data items are represented by data nodes which are 136 arranged in hierarchical manner. 138 Data subtree: An instantiated data node and the data nodes that are 139 hierarchically contained within it. 141 HTTP: Hyper-Text Transfer Protocol 143 IGP: Interior Gateway Protocol 144 IS-IS: Intermediate System to Intermediate System protocol 146 LSP: Label Switched Path 148 NETCONF: Network Configuration Protocol 150 OSPF: Open Shortest Path First, a link state routing protocol 152 URI: Uniform Resource Identifier 154 ReST: Representational State Transfer, a style of stateless interface 155 and protocol that is generally carried over HTTP 157 SRLG: Shared Risk Link Group 159 TED: Traffic Engineering Database 161 YANG: A data definition language for NETCONF 163 3. Model Structure 165 The Layer 3 Unicast topology model is defined by YANG module "l3- 166 unicast-topology". The relationship of this module with other YANG 167 modules is roughly depicted in the figure below. 169 +-----------------------------+ 170 | +-----------------------+ | 171 | | ietf-network | | 172 | +----------^------------+ | 173 | | | 174 | +-----------------------+ | 175 | | ietf-network-topology | | 176 | +----------+------------+ | 177 +-------------^---------------+ 178 | 179 | 180 +-----------^-------------+ 181 | L3-UNICAST-TOPOLOGY | 182 +----+---------------+----+ 183 ^ ^ 184 | | 185 | | 186 +--------^-----+ +-----^---------+ 187 | ospf-topology| | isis-topology | 188 +--------------+ +---------------+ 190 Figure 1: Overall model structure 192 YANG modules "ietf-network" and "ietf-network-topology" collectively 193 define the basic network topology model. YANG module "ietf-l3- 194 unicast-topology" augments those models with additional definitions 195 needed to represent Layer 3 Unicast topologies. This module in turn 196 can be augmented by YANG modules with additional definitions for 197 specific types of Layer 3 Unicast topologies, such as OSPF and for 198 IS-IS topologies. 200 4. Layer 3 Unicast Topology Model Overview 202 The Layer 3 Unicast topology model is defined by YANG module "ietf- 203 l3-unicast-topology" and depicted in the following diagram. Brackets 204 enclose list keys, "rw" means configuration, "ro" operational state 205 data, "?" designates optional nodes, "*" designates nodes that can 206 have multiple instances. Parantheses enclose choice and case nodes. 207 The prefix "nd:" refers to the YANG module for networks; the prefix 208 "lnk:" refers to the YANG module for network topology. In the 209 interest of brevity, notifications are not depicted. 211 module: ietf-l3-unicast-topology 212 augment /nd:networks/nd:network/nd:network-types: 213 +--rw l3-unicast-topology! 214 augment /nd:networks/nd:network: 215 +--rw l3-topology-attributes 216 +--rw name? string 217 +--rw flag* l3-flag-type 218 augment /nd:networks/nd:network/nd:node: 219 +--rw l3-node-attributes 220 +--rw name? inet:domain-name 221 +--rw flag* node-flag-type 222 +--rw router-id* inet:ip-address 223 +--rw prefix* [prefix] 224 +--rw prefix inet:ip-prefix 225 +--rw metric? uint32 226 +--rw flag* prefix-flag-type 227 augment /nd:networks/nd:network/lnk:link: 228 +--rw l3-link-attributes 229 +--rw name? string 230 +--rw flag* link-flag-type 231 +--rw metric? uint32 232 augment /nd:networks/nd:network/nd:node/lnk:termination-point: 233 +--rw l3-termination-point-attributes 234 +--rw (termination-point-type)? 235 +--:(ip) 236 | +--rw ip-address* inet:ip-address 237 +--:(unnumbered) 238 | +--rw unnumbered-id? uint32 239 +--:(interface-name) 240 +--ro interface-name? string 242 The module augments the original ietf-network and ietf-network- 243 topology modules as follows: 245 o A new network topology type is introduced, l3-unicast-topology. 246 The corresponding container augments the network-types of the 247 ietf-network module. 249 o Additional topology attributes are introduced, defined in a 250 grouping, which augments the "network" list of the network module. 251 The attributes include a name for the topology, as well as a set 252 of flags (represented through a leaf-list). Each type of flag is 253 represented by a separate identity. This allows to introduce 254 additional flags in augmenting modules using additional identities 255 without needing to revise this module. 257 o Additional data objects for nodes are introduced by augmenting the 258 "node" list of the network module. New objects include again a 259 set of flags, as well as a list of prefixes. Each prefix in turn 260 includes an ip prefix, a metric, and a prefix-specific set of 261 flags. 263 o Links (in the ietf-network-topology module) are augmented with a 264 set of parameters as well, allowing to associate a link with a 265 link name, another set of flags, and a link metric. 267 o Termination points (in the ietf-network-topology module as well) 268 are augmented with a choice of IP address, identifier, or name. 270 In addition, the module defines a set of notifications to alert 271 clients of any events concerning links, nodes, prefixes, and 272 termination points. Each notification includes an indication of the 273 type of event, the topology from which it originated, and the 274 affected node, or link, or prefix, or termination point. In 275 addition, as a convenience to applications, additional data of the 276 affected node, or link, or termination point (respectively) is 277 included. While this makes notifications larger in volume than they 278 would need to be, it avoids the need for subsequent retrieval of 279 context information, which also might have changed in the meantime. 281 5. Layer 3 Unicast Topology YANG Module 283 file "ietf-l3-unicast-topology@2017-01-03.yang" 284 module ietf-l3-unicast-topology { 285 yang-version 1.1; 286 namespace 287 "urn:ietf:params:xml:ns:yang:ietf-l3-unicast-topology"; 288 prefix "l3t"; 289 import ietf-network { 290 prefix "nd"; 291 } 292 import ietf-network-topology { 293 prefix "lnk"; 294 } 295 import ietf-inet-types { 296 prefix "inet"; 297 } 298 organization 299 "IETF I2RS (Interface to the Routing System) Working Group"; 300 contact 301 "WG Web: 302 WG List: 303 WG Chair: Susan Hares 304 305 WG Chair: Russ White 306 308 Editor: Alexander Clemm 309 310 Editor: Jan Medved 311 312 Editor: Robert Varga 313 314 Editor: Xufeng Liu 315 316 Editor: Nitin Bahadur 317 318 Editor: Hariharan Ananthakrishnan 319 "; 320 description 321 "This module defines a model for Layer 3 Unicast 322 topologies. 323 Copyright (c) 2017 IETF Trust and the persons identified as 324 authors of the code. All rights reserved. 325 Redistribution and use in source and binary forms, with or 326 without modification, is permitted pursuant to, and subject 327 to the license terms contained in, the Simplified BSD License 328 set forth in Section 4.c of the IETF Trust's Legal Provisions 329 Relating to IETF Documents 330 (http://trustee.ietf.org/license-info). 331 This version of this YANG module is part of 332 draft-ietf-i2rs-yang-l3-topology-07; 333 see the RFC itself for full legal notices. 334 NOTE TO RFC EDITOR: Please replace above reference to 335 draft-ietf-i2rs-yang-l3-topology-07 with RFC 336 number when published (i.e. RFC xxxx)."; 337 revision "2017-01-03" { 338 description 339 "Initial revision. 340 NOTE TO RFC EDITOR: Please replace the following reference 341 to draft-ietf-i2rs-yang-l3-topology-07 with 342 RFC number when published (i.e. RFC xxxx)."; 343 reference 344 "draft-ietf-i2rs-yang-l3-topology-07"; 345 } 347 identity flag-identity { 348 description "Base type for flags"; 349 } 351 typedef l3-event-type { 352 type enumeration { 353 enum "add" { 354 description 355 "An Layer 3 node or link or prefix or termination-point has 356 been added"; 357 } 358 enum "remove" { 359 description 360 "An Layer 3 node or link or prefix or termination-point has 361 been removed"; 362 } 363 enum "update" { 364 description 365 "An Layer 3 node or link or prefix or termination-point has 366 been updated"; 367 } 368 } 369 description "Layer 3 Event type for notifications"; 370 } 372 typedef prefix-flag-type { 373 type identityref { 374 base "flag-identity"; 375 } 376 description "Prefix flag attributes"; 377 } 379 typedef node-flag-type { 380 type identityref { 381 base "flag-identity"; 382 } 383 description "Node flag attributes"; 384 } 386 typedef link-flag-type { 387 type identityref { 388 base "flag-identity"; 389 } 390 description "Link flag attributes"; 391 } 393 typedef l3-flag-type { 394 type identityref { 395 base "flag-identity"; 396 } 397 description "L3 flag attributes"; 398 } 400 grouping l3-prefix-attributes { 401 description 402 "L3 prefix attributes"; 403 leaf prefix { 404 type inet:ip-prefix; 405 description 406 "IP prefix value"; 407 } 408 leaf metric { 409 type uint32; 410 description 411 "Prefix metric"; 412 } 413 leaf-list flag { 414 type prefix-flag-type; 415 description 416 "Prefix flags"; 417 } 418 } 419 grouping l3-unicast-topology-type { 420 description "Identify the topology type to be L3 unicast."; 421 container l3-unicast-topology { 422 presence "indicates L3 Unicast Topology"; 423 description 424 "The presence of the container node indicates L3 Unicast 425 Topology"; 426 } 427 } 428 grouping l3-topology-attributes { 429 description "Topology scope attributes"; 430 container l3-topology-attributes { 431 description "Containing topology attributes"; 432 leaf name { 433 type string; 434 description 435 "Name of the topology"; 436 } 437 leaf-list flag { 438 type l3-flag-type; 439 description 440 "Topology flags"; 441 } 442 } 443 } 444 grouping l3-node-attributes { 445 description "L3 node scope attributes"; 446 container l3-node-attributes { 447 description 448 "Containing node attributes"; 449 leaf name { 450 type inet:domain-name; 451 description 452 "Node name"; 453 } 454 leaf-list flag { 455 type node-flag-type; 456 description 457 "Node flags"; 458 } 459 leaf-list router-id { 460 type inet:ip-address; 461 description 462 "Router-id for the node"; 463 } 464 list prefix { 465 key "prefix"; 466 description 467 "A list of prefixes along with their attributes"; 468 uses l3-prefix-attributes; 469 } 470 } 471 } 472 grouping l3-link-attributes { 473 description 474 "L3 link scope attributes"; 475 container l3-link-attributes { 476 description 477 "Containing link attributes"; 478 leaf name { 479 type string; 480 description 481 "Link Name"; 482 } 483 leaf-list flag { 484 type link-flag-type; 485 description 486 "Link flags"; 487 } 488 leaf metric { 489 type uint32; 490 description 491 "Link Metric"; 492 } 493 } 494 } 495 grouping l3-termination-point-attributes { 496 description "L3 termination point scope attributes"; 497 container l3-termination-point-attributes { 498 description 499 "Containing termination point attributes"; 501 choice termination-point-type { 502 description 503 "Indicates the termination point type"; 504 case ip { 505 leaf-list ip-address { 506 type inet:ip-address; 507 description 508 "IPv4 or IPv6 address"; 509 } 510 } 511 case unnumbered { 512 leaf unnumbered-id { 513 type uint32; 514 description 515 "Unnumbered interface identifier"; 516 } 517 } 518 case interface-name { 519 leaf interface-name { 520 type string; 521 description 522 "A name of the interface. The name can (but does not 523 have to) correspond to an interface reference of a 524 containing node's interface, i.e. the path name of a 525 corresponding interface data node on the containing 526 node reminiscent of data type if-ref defined in 527 RFC 7223. It should be noted that data type if-ref of 528 RFC 7223 cannot be used directly, as this data type 529 is used to reference an interface in a datastore of 530 a single node in the network, not to uniquely 531 reference interfaces across a network."; 532 } 533 } 534 } 535 } 536 } 537 augment "/nd:networks/nd:network/nd:network-types" { 538 description 539 "Introduce new network type for L3 unicast topology"; 540 uses l3-unicast-topology-type; 541 } 542 augment "/nd:networks/nd:network" { 543 when "nd:network-types/l3-unicast-topology" { 544 description 545 "Augmentation parameters apply only for networks with 546 L3 unicast topology"; 547 } 548 description 549 "L3 unicast for the network as a whole"; 550 uses l3-topology-attributes; 551 } 552 augment "/nd:networks/nd:network/nd:node" { 553 when "../nd:network-types/l3-unicast-topology" { 554 description 555 "Augmentation parameters apply only for networks with 556 L3 unicast topology"; 557 } 558 description 559 "L3 unicast node level attributes "; 560 uses l3-node-attributes; 561 } 562 augment "/nd:networks/nd:network/lnk:link" { 563 when "../nd:network-types/l3-unicast-topology" { 564 description 565 "Augmentation parameters apply only for networks with 566 L3 unicast topology"; 567 } 568 description 569 "Augment topology link attributes"; 570 uses l3-link-attributes; 571 } 572 augment "/nd:networks/nd:network/nd:node/" 573 +"lnk:termination-point" { 574 when "../../nd:network-types/l3-unicast-topology" { 575 description 576 "Augmentation parameters apply only for networks with 577 L3 unicast topology"; 578 } 579 description "Augment topology termination point configuration"; 580 uses l3-termination-point-attributes; 581 } 582 notification l3-node-event { 583 description 584 "Notification event for L3 node"; 585 leaf l3-event-type { 586 type l3-event-type; 587 description 588 "Event type"; 589 } 590 uses nd:node-ref; 591 uses l3-unicast-topology-type; 592 uses l3-node-attributes; 593 } 594 notification l3-link-event { 595 description 596 "Notification event for L3 link"; 598 leaf l3-event-type { 599 type l3-event-type; 600 description 601 "Event type"; 602 } 603 uses lnk:link-ref; 604 uses l3-unicast-topology-type; 605 uses l3-link-attributes; 606 } 607 notification l3-prefix-event { 608 description 609 "Notification event for L3 prefix"; 610 leaf l3-event-type { 611 type l3-event-type; 612 description 613 "Event type"; 614 } 615 uses nd:node-ref; 616 uses l3-unicast-topology-type; 617 container prefix { 618 description 619 "Containing L3 prefix attributes"; 620 uses l3-prefix-attributes; 621 } 622 } 623 notification termination-point-event { 624 description 625 "Notification event for L3 termination point"; 626 leaf l3-event-type { 627 type l3-event-type; 628 description 629 "Event type"; 630 } 631 uses lnk:tp-ref; 632 uses l3-unicast-topology-type; 633 uses l3-termination-point-attributes; 634 } 635 } 637 639 6. Extending the Model 641 The model can be extended for specific Layer 3 Unicast types. 642 Examples include OSPF and IS-IS topologies. In the following, two 643 additional YANG modules are introduced that define simple topology 644 models for OSPF and IS-IS, respectively. These modules intended to 645 serve as examples that illustrate how the general topology model can 646 be refined across multiple levels; they do not constitute full- 647 fledged OSPF and IS-IS topology models which may be more 648 comprehensive and refined than the models that are described here. 650 6.1. Example 1: OSPF Topology 652 6.1.1. Model Overview 654 The following model shows how the Layer 3 Unicast topology model can 655 be extended to cover OSFP topologies. For this purpose, a set of 656 augmentations are introduced in a separate YANG module, "example- 657 ietf-ospf-topology", whose structure is depicted in the following 658 diagram. Like before, brackets enclose list keys, "rw" means 659 configuration, "ro" operational state data, "?" designates optional 660 nodes, "*" designates nodes that can have multiple instances. 661 Parantheses enclose choice and case nodes. A "+" at the end of a 662 line indicates a line break. 664 module: example-ietf-ospf-topology 665 augment /nd:networks/nd:network/nd:network-types/+ 666 l3t:l3-unicast-topology: 667 +--rw ospf! 668 augment /nd:networks/nd:network/l3t:l3-topology-attributes: 669 +--rw ospf-topology-attributes 670 +--rw area-id? area-id-type 671 augment /nd:networks/nd:network/nd:node/l3t:l3-node-attributes: 672 +--rw ospf-node-attributes 673 +--rw (router-type)? 674 | +--:(abr) 675 | | +--rw abr? empty 676 | +--:(asbr) 677 | | +--rw asbr? empty 678 | +--:(internal) 679 | | +--rw internal? empty 680 | +--:(pseudonode) 681 | +--rw pseudonode? empty 682 +--rw dr-interface-id? uint32 683 +--rw multi-topology-id* uint8 684 augment /nd:networks/nd:network/lnk:link/l3t:l3-link-attributes: 685 +--rw ospf-link-attributes 686 +--rw multi-topology-id? uint8 687 augment /l3t:l3-node-event: 688 +---- ospf! 689 +---- ospf-node-attributes 690 +---- (router-type)? 691 | +--:(abr) 692 | | +---- abr? empty 693 | +--:(asbr) 694 | | +---- asbr? empty 695 | +--:(internal) 696 | | +---- internal? empty 697 | +--:(pseudonode) 698 | +---- pseudonode? empty 699 +---- dr-interface-id? uint32 700 +---- multi-topology-id* uint8 701 augment /l3t:l3-link-event: 702 +---- ospf! 703 +---- ospf-link-attributes 704 +---- multi-topology-id? uint8 706 The module augments "ietf-l3-unicast-topology" as follows: 708 o A new topology type for an OSPF topology is introduced. 710 o Additional topology attributes are defined in a new grouping which 711 augments l3-topology-attributes of the ietf-l3-unicast-topology 712 module. The attributes include an OSPF area-id identifying the 713 OSPF area. 715 o Additional data objects for nodes are introduced by augmenting the 716 l3-node-attributes of the l3-unicast-topology module. New objects 717 include router-type, dr-interface-id for pseudonodes, list of 718 multi-topology-ids, ospf node capabilities, and traffic 719 engineering attributes. 721 o Links are augmented with a multi-topology-id and traffic 722 engineering link attributes. 724 o Prefixes are augmented with OSPF specific forwarding address. 726 In addition, the module extends notifications for events concerning 727 Layer 3 nodes, links, termination points, and prefixes with OSPF 728 attributes. 730 It should be noted that the model defined here represents topology 731 and is intended as an example. It does not define how to configure 732 OSPF routers or interfaces. 734 6.1.2. OSPF Topology YANG Module 736 The OSPF Topology YANG Module is specified below. As mentioned, the 737 module is intended as an example for how the Layer 3 Unicast topology 738 model can be extended to cover OSFP topologies, but it is not 739 normative. Accordingly, the module is not delimited with and tags. 742 file "example-ietf-ospf-topology@2017-01-03.yang" 743 module example-ietf-ospf-topology { 744 yang-version 1.1; 745 namespace "urn:ietf:params:xml:ns:yang:example-ietf-ospf-topology"; 746 prefix "ospft"; 747 import ietf-yang-types { 748 prefix "yang"; 749 } 750 import ietf-network { 751 prefix "nd"; 752 } 753 import ietf-network-topology { 754 prefix "lnk"; 755 } 756 import ietf-l3-unicast-topology { 757 prefix "l3t"; 759 } 760 organization 761 "IETF I2RS (Interface to the Routing System) Working Group"; 762 contact 763 "WG Web: 764 WG List: 765 WG Chair: Susan Hares 766 767 WG Chair: Russ White 768 769 Editor: Alexander Clemm 770 771 Editor: Jan Medved 772 773 Editor: Robert Varga 774 775 Editor: Xufeng Liu 776 777 Editor: Nitin Bahadur 778 779 Editor: Hariharan Ananthakrishnan 780 "; 781 description 782 "This module defines a model for OSPF network topologies. 783 Copyright (c) 2017 IETF Trust and the persons identified as 784 authors of the code. All rights reserved. 785 Redistribution and use in source and binary forms, with or 786 without modification, is permitted pursuant to, and subject 787 to the license terms contained in, the Simplified BSD License 788 set forth in Section 4.c of the IETF Trust's Legal Provisions 789 Relating to IETF Documents 790 (http://trustee.ietf.org/license-info). 791 This version of this YANG module is part of 792 draft-ietf-i2rs-yang-l3-topology-07; 793 see the RFC itself for full legal notices. 794 NOTE TO RFC EDITOR: Please replace above reference to 795 draft-ietf-i2rs-yang-l3-topology-07 with RFC 796 number when published (i.e. RFC xxxx)."; 797 revision "2017-01-03" { 798 description 799 "Initial revision. 800 NOTE TO RFC EDITOR: Please replace the following reference 801 to draft-ietf-i2rs-yang-l3-topology-07 with 802 RFC number when published (i.e. RFC xxxx)."; 803 reference 804 "draft-ietf-i2rs-yang-l3-topology-07"; 805 } 806 typedef area-id-type { 807 type yang:dotted-quad; 808 description 809 "Area ID type."; 810 } 811 grouping ospf-topology-type { 812 description 813 "Identifies the OSPF topology type."; 814 container ospf { 815 presence "indiates OSPF Topology"; 816 description 817 "Its presence identifies the OSPF topology type."; 818 } 819 } 820 augment "/nd:networks/nd:network/nd:network-types/" 821 + "l3t:l3-unicast-topology" { 822 description 823 "Defines the OSPF topology type."; 824 uses ospf-topology-type; 825 } 826 augment "/nd:networks/nd:network/l3t:l3-topology-attributes" { 827 when "../nd:network-types/l3t:l3-unicast-topology/ospf" { 828 description 829 "Augment only for OSPF topology"; 830 } 831 description 832 "Augment topology configuration"; 833 container ospf-topology-attributes { 834 description 835 "Containing topology attributes"; 836 leaf area-id { 837 type area-id-type; 838 description 839 "OSPF area ID"; 840 } 841 } 842 } 843 augment "/nd:networks/nd:network/nd:node/l3t:l3-node-attributes" { 844 when "../../nd:network-types/l3t:l3-unicast-topology/ospf" { 845 description 846 "Augment only for OSPF topology"; 847 } 848 description 849 "Augment node configuration"; 850 uses ospf-node-attributes; 851 } 852 augment "/nd:networks/nd:network/lnk:link/l3t:l3-link-attributes" { 853 when "../../nd:network-types/l3t:l3-unicast-topology/ospf" { 854 description 855 "Augment only for OSPF topology"; 856 } 857 description 858 "Augment link configuration"; 859 uses ospf-link-attributes; 860 } 861 grouping ospf-node-attributes { 862 description 863 "OSPF node scope attributes"; 864 container ospf-node-attributes { 865 description 866 "Containing node attributes"; 867 choice router-type { 868 description 869 "Indicates router type"; 870 case abr { 871 leaf abr { 872 type empty; 873 description 874 "The node is ABR"; 875 } 876 } 877 case asbr { 878 leaf asbr { 879 type empty; 880 description 881 "The node is ASBR"; 882 } 883 } 884 case internal { 885 leaf internal { 886 type empty; 887 description 888 "The node is internal"; 889 } 890 } 891 case pseudonode { 892 leaf pseudonode { 893 type empty; 894 description 895 "The node is pseudonode"; 896 } 897 } 898 } 899 leaf dr-interface-id { 900 when "../pseudonode" { 901 description 902 "Valid only for pseudonode"; 904 } 905 type uint32; 906 default "0"; 907 description 908 "For pseudonodes, DR interface-id"; 909 } 910 leaf-list multi-topology-id { 911 type uint8 { 912 range "0..127"; 913 } 914 max-elements "128"; 915 description 916 "List of Multi-Topology Identifier up-to 128 (0-127). 917 See RFC 4915"; 918 } 919 } 920 } 921 grouping ospf-link-attributes { 922 description 923 "OSPF link scope attributes"; 924 container ospf-link-attributes { 925 description 926 "Containing OSPF link attributes"; 927 leaf multi-topology-id { 928 type uint8 { 929 range "0..127"; 930 } 931 description "Multi topology ID"; 932 } 933 } 934 } // ospf-link-attributes 935 augment "/l3t:l3-node-event" { 936 description 937 "OSPF node event"; 938 uses ospf-topology-type; 939 uses ospft:ospf-node-attributes; 940 } 941 augment "/l3t:l3-link-event" { 942 description 943 "OSPF link event"; 944 uses ospf-topology-type; 945 uses ospft:ospf-link-attributes; 946 } 947 } 949 6.2. Example 2: IS-IS Topology 951 6.2.1. Model Overview 953 IS-IS topologies are another type of Layer 3 Unicast topology. Like 954 in the case of OSPF topology, a model for IS-IS topology can be 955 defined in a separate module which augments "ietf-l3-unicast-igp- 956 topology". The structure of a corresponding model, "ietf-isis- 957 topology", is depicted in the following diagram. Like before, 958 brackets enclose list keys, "rw" means configuration, "ro" 959 operational state data, "?" designates optional nodes, "*" designates 960 nodes that can have multiple instances. Parantheses enclose choice 961 and case nodes. A "+" at the end of a line indicates a line break. 963 module: example-ietf-isis-topology 964 augment /nd:networks/nd:network/nd:network-types/+ 965 l3t:l3-unicast-topology: 966 +--rw isis! 967 augment /nd:networks/nd:network/l3t:l3-topology-attributes: 968 +--rw isis-topology-attributes 969 +--rw net? area-address 970 augment /nd:networks/nd:network/nd:node/l3t:l3-node-attributes: 971 +--rw isis-node-attributes 972 +--rw iso 973 | +--rw iso-system-id? system-id 974 | +--rw iso-pseudonode-id? iso-pseudonode-id 975 +--rw net* area-address 976 +--rw multi-topology-id* uint16 977 +--rw level? level 978 augment /nd:networks/nd:network/lnk:link/l3t:l3-link-attributes: 979 +--rw isis-link-attributes 980 +--rw multi-topology-id? uint16 981 augment /l3t:l3-node-event: 982 +---- isis! 983 +---- isis-node-attributes 984 +---- iso 985 | +---- iso-system-id? system-id 986 | +---- iso-pseudonode-id? iso-pseudonode-id 987 +---- net* area-address 988 +---- multi-topology-id* uint16 989 +---- level? level 990 augment /l3t:l3-link-event: 991 +---- isis! 992 +---- isis-link-attributes 993 +---- multi-topology-id? uint16 995 The module augments the ietf-l3-unicast-topology as follows: 997 o A new topology type is introduced for isis. 999 o Additional topology attributes are introduced in a new grouping 1000 which augments "topology-attributes" of the ietf-l3-unicast- 1001 topology module. The attributes include an ISIS NET-id 1002 identifying the area. 1004 o Additional data objects for nodes are introduced by augmenting 1005 "node-attributes" of the ietf-l3-unicast-topology module. New 1006 objects include router-type, iso-system-id to identify the router, 1007 a list of multi-topology-id, a list of NET ids, and traffic 1008 engineering attributes. 1010 o Links are augmented with multi-topology-id and traffic engineering 1011 link attributes. 1013 In addition, the module augments nodes and links with IS-IS 1014 attributes. 1016 Again, it should be noted that the model defined here represents a 1017 topology and is intended as an example. It does not define how to 1018 configure IS-IS routers or interfaces. 1020 6.2.2. IS-IS Topology YANG Module 1022 The IS-IS Topology YANG Module is specified as follows. As 1023 mentioned, the module is intended as an example for how the Layer 3 1024 Unicast topology model can be extended to cover IS-IS topologies, but 1025 it is not normative. Accordingly, the module is not delimited with 1026 and tags. 1028 file "example-ietf-isis-topology@2017-01-03.yang" 1029 module example-ietf-isis-topology { 1030 yang-version 1.1; 1031 namespace "urn:ietf:params:xml:ns:yang:example-ietf-isis-topology"; 1032 prefix "isist"; 1033 import ietf-network { 1034 prefix "nd"; 1035 } 1036 import ietf-network-topology { 1037 prefix "lnk"; 1038 } 1039 import ietf-l3-unicast-topology { 1040 prefix "l3t"; 1041 } 1042 organization 1043 "IETF I2RS (Interface to the Routing System) Working Group"; 1044 contact 1045 "WG Web: 1046 WG List: 1047 WG Chair: Susan Hares 1048 1049 WG Chair: Russ White 1050 1051 Editor: Alexander Clemm 1052 1053 Editor: Jan Medved 1054 1055 Editor: Robert Varga 1056 1057 Editor: Xufeng Liu 1058 1059 Editor: Nitin Bahadur 1060 1061 Editor: Hariharan Ananthakrishnan 1062 "; 1063 description 1064 "This module defines a model for IS-IS network topologies. 1065 Copyright (c) 2017 IETF Trust and the persons identified as 1066 authors of the code. All rights reserved. 1067 Redistribution and use in source and binary forms, with or 1068 without modification, is permitted pursuant to, and subject 1069 to the license terms contained in, the Simplified BSD License 1070 set forth in Section 4.c of the IETF Trust's Legal Provisions 1071 Relating to IETF Documents 1072 (http://trustee.ietf.org/license-info). 1073 This version of this YANG module is part of 1074 draft-ietf-i2rs-yang-l3-topology-07; 1075 see the RFC itself for full legal notices. 1076 NOTE TO RFC EDITOR: Please replace above reference to 1077 draft-ietf-i2rs-yang-l3-topology-07 with RFC 1078 number when published (i.e. RFC xxxx)."; 1079 revision "2017-01-03" { 1080 description 1081 "Initial revision. 1082 NOTE TO RFC EDITOR: Please replace the following reference 1083 to draft-ietf-i2rs-yang-l3-topology-07 with 1084 RFC number when published (i.e. RFC xxxx)."; 1085 reference 1086 draft-ietf-i2rs-yang-l3-topology-07; 1087 } 1088 typedef iso-pseudonode-id { 1089 type string { 1090 pattern '[0-9a-fA-F]{2}'; 1092 } 1093 description 1094 "ISO pseudonode id for broadcast network."; 1095 } 1096 typedef area-address{ 1097 type string { 1098 pattern '[0-9A-Fa-f]{2}\.([0-9A-Fa-f]{4}\.){0,3}'; 1099 } 1100 description 1101 "This type defines the area address."; 1102 } 1103 typedef system-id { 1104 type string { 1105 pattern 1106 '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; 1107 } 1108 description 1109 "This type defines ISIS system id using a pattern; 1110 an example of a system id looks like: 0143.0438.AeF0."; 1111 } 1112 typedef level { 1113 type enumeration { 1114 enum "level-1" { 1115 description 1116 "This enum describes L1 only capability."; 1117 } 1118 enum "level-2" { 1119 description 1120 "This enum describes L2 only capability."; 1121 } 1122 enum "level-all" { 1123 description 1124 "This enum describes both levels (L1 and L2) capability."; 1125 } 1126 } 1127 default "level-all"; 1128 description 1129 "This type defines the ISIS level of an object."; 1130 } 1131 grouping isis-topology-type { 1132 description 1133 "Identifies the ISIS topology type."; 1134 container isis { 1135 presence "Indicates ISIS Topology"; 1136 description 1137 "Its presence identifies the ISIS topology type."; 1138 } 1139 } 1140 augment "/nd:networks/nd:network/nd:network-types/" 1141 +"l3t:l3-unicast-topology" { 1142 description 1143 "Defines the ISIS topology type."; 1144 uses isis-topology-type; 1145 } 1146 augment "/nd:networks/nd:network/l3t:l3-topology-attributes" { 1147 when "../nd:network-types/l3t:l3-unicast-topology/isis" { 1148 description 1149 "Augment only for ISIS topology"; 1150 } 1151 description 1152 "Augment topology configuration"; 1153 container isis-topology-attributes { 1154 description 1155 "Containing topology attributes"; 1156 leaf net { 1157 type area-address; 1158 description 1159 "ISO NET ID value"; 1160 } 1161 } 1162 } 1163 augment "/nd:networks/nd:network/nd:node/"+ 1164 "l3t:l3-node-attributes" { 1165 when "../../nd:network-types/l3t:l3-unicast-topology/isis" { 1166 description 1167 "Augment only for ISIS topology"; 1168 } 1169 description 1170 "Augment node configuration"; 1171 uses isis-node-attributes; 1172 } 1173 augment "/nd:networks/nd:network/lnk:link/l3t:l3-link-attributes" { 1174 when "../../nd:network-types/l3t:l3-unicast-topology/isis" { 1175 description 1176 "Augment only for ISIS topology"; 1177 } 1178 description 1179 "Augment link configuration"; 1180 uses isis-link-attributes; 1181 } 1182 grouping isis-node-attributes { 1183 description 1184 "ISIS node scope attributes"; 1185 container isis-node-attributes { 1186 description 1187 "Containing node attributes"; 1189 container iso { 1190 description 1191 "Containing ISO atrributes"; 1192 leaf iso-system-id { 1193 type system-id; 1194 description 1195 "ISO system ID"; 1196 } 1197 leaf iso-pseudonode-id { 1198 type iso-pseudonode-id; 1199 default "00"; 1200 description 1201 "Pseudonode ID"; 1202 } 1203 } 1204 leaf-list net { 1205 type area-address; 1206 max-elements 3; 1207 description 1208 "List of ISO NET IDs"; 1209 } 1210 leaf-list multi-topology-id { 1211 type uint16 { 1212 range "0..4095"; 1213 } 1214 max-elements "128"; 1215 description 1216 "List of Multi Topology Identifier up to 128 (0-127). 1217 RFC 4915"; 1218 } 1219 leaf level { 1220 type level; 1221 description "Level 1, Level 2 or Level 1 and 2"; 1222 } 1223 } 1224 } 1225 grouping isis-link-attributes { 1226 description 1227 "ISIS link scope attributes"; 1228 container isis-link-attributes { 1229 description 1230 "Containing link attributes"; 1231 leaf multi-topology-id { 1232 type uint16 { 1233 range "0..4095"; 1234 } 1235 description 1236 "Multi topology ID"; 1238 } 1239 } 1240 } 1241 augment "/l3t:l3-node-event" { 1242 description 1243 "ISIS node event"; 1244 uses isis-topology-type; 1245 uses isis-node-attributes; 1246 } 1247 augment "/l3t:l3-link-event" { 1248 description 1249 "ISIS link event"; 1250 uses isis-topology-type; 1251 uses isis-link-attributes; 1252 } 1253 } 1255 7. Interactions with Other YANG Modules 1257 As described in section Section 3, the model builds on top of, and 1258 augments, the YANG modules defined in 1259 [I-D.draft-ietf-i2rs-yang-network-topo]. Specifically, module ietf- 1260 l3-unicast-topology augments modules "ietf-network" and "ietf- 1261 network-topology". In addition, the model makes use of data types 1262 that have been defined in [RFC6991]. 1264 The moodel defines a protocol independent YANG data model with layer 1265 3 topology information. It is separate from and not linked with data 1266 models that are used to configure routing protocols or routing 1267 information. This includes e.g. model "ietf-routing" [RFC8022] and 1268 model "ietf-fb-rib" [I-D.draft-acee-rtgwg-yang-rib-extend]. 1270 The model obeys the requirements for the ephemeral state found in the 1271 document [I-D.draft-ietf-i2rs-ephemeral-state]. For ephemeral 1272 topology data that is server provided, the process tasked with 1273 maintaining topology information will load information from the 1274 routing process (such as OSPF) into the data model without relying on 1275 a configuration datastore. 1277 8. IANA Considerations 1279 This document registers the following namespace URI in the "IETF XML 1280 Registry" [RFC3688]: 1282 URI: urn:ietf:params:xml:ns:yang:ietf-l3-unicast-topology 1283 Registrant Contact: The IESG. 1284 XML: N/A; the requested URI is an XML namespace. 1286 This document registers the following YANG module in the "YANG Module 1287 Names" registry [RFC6020]: 1289 Name: ietf-l3-unicast-topology 1290 Namespace: urn:ietf:params:xml:ns:yang:ietf-l3-unicast-topology 1291 Prefix: l3t 1292 Reference: draft-ietf-i2rs-yang-l3-topology-07.txt (RFC form) 1294 9. Security Considerations 1296 The YANG module defined in this memo is designed to be accessed via 1297 the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 1298 secure transport layer, and the mandatory-to-implement secure 1299 transport is Secure Shell (SSH) [RFC6242]. The NETCONF access 1300 control model [RFC6536] provides the means to restrict access for 1301 particular NETCONF users to a pre-configured subset of all available 1302 NETCONF protocol operations and content. 1304 In general, Layer 3 Unicast topologies are server-provided and 1305 provide ephemeral topology information. As they provide read-only 1306 access to clients, they are less vulnerable. That said, the YANG 1307 module does in principle allow information to be configurable in 1308 certain instances (when the server-provided flag for the topology is 1309 set to false). In such cases, a malicious client could introduce 1310 topologies that are undesired. For example, a client could remove or 1311 add topological links between nodes, which could lead to an undesired 1312 and suboptimal topology, which might impact service levels and 1313 network utilization. It is therefore important that the NETCONF 1314 access control model is vigorously applied to prevent topology 1315 configuration by unauthorized clients. 1317 10. Contributors 1319 The model presented in this paper was contributed to by more people 1320 than can be listed on the author list. Additional contributors 1321 include: 1323 o Vishnu Pavan Beeram, Juniper 1325 o Igor Bryskin, Huawei 1327 o Ken Gray, Cisco 1329 o Aihua Guo, Adva Optical 1331 o Tom Nadeau, Brocade 1333 o Tony Tkacik 1334 o Aleksandr Zhdankin, Cisco 1336 11. Acknowledgements 1338 We wish to acknowledge the helpful contributions, comments, and 1339 suggestions that were received from Ladislav Lhotka, Andy Bierman, 1340 Carlos Pignataro, Joel Halpern, Juergen Schoenwaelder, Alia Atlas, 1341 Susan Hares, Benoit Claise, and Carl Moberg. 1343 12. References 1345 12.1. Normative References 1347 [I-D.draft-ietf-i2rs-yang-network-topo] 1348 Clemm, A., Medved, J., Varga, R., Bahadur, N., 1349 Ananthakrishnan, H., and X. Liu, "A YANG Data Model for 1350 Network Topologies", I-D draft-ietf-i2rs-yang-network- 1351 topo-10, January 2017. 1353 [RFC1195] Callon, R., "Use of OSI IS-IS for Routing in TCP/IP and 1354 Dual Environments", RFC 1195, December 1990. 1356 [RFC2328] Moy, J., "OSPF Version 2", RFC 2328, April 1998. 1358 [RFC3688] Mealling, M., "The IETF XML Registry", RFC 3688, January 1359 2004. 1361 [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the 1362 Network Configuration Protocol (NETCONF)", RFC 6020, 1363 October 2010. 1365 [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. 1366 Bierman, "Network Configuration Protocol (NETCONF)", 1367 RFC 6241, June 2011. 1369 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1370 Shell (SSH)", RFC 6242, June 2011. 1372 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 1373 Protocol (NETCONF) Access Control Model", RFC 6536, March 1374 2012. 1376 [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, 1377 July 2013. 1379 [RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language", 1380 RFC 7950, August 2016. 1382 12.2. Informative References 1384 [I-D.draft-acee-rtgwg-yang-rib-extend] 1385 Lindem, A. and Y. Qu, "YANG Data Model for RIB 1386 Extensions", I-D draft-acee-rtgwg-yang-rib-extend-02, 1387 October 2016. 1389 [I-D.draft-ietf-i2rs-ephemeral-state] 1390 Haas, J. and S. Hares, "I2RS Ephemeral State 1391 Requirements", I-D draft-ietf-i2rs-ephemeral-state-23, 1392 November 2016. 1394 [I-D.draft-ietf-i2rs-usecase-reqs-summary] 1395 Hares, S. and M. Chen, "Summary of I2RS Use Case 1396 Requirements", I-D draft-ietf-i2rs-usecase-reqs-summary- 1397 03, November 2016. 1399 [I-D.draft-ietf-teas-yang-te-topo] 1400 Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and 1401 O. Gonzelz De Dios, "YANG Data Model for TE Topologies", 1402 I-D draft-ietf-teas-yang-te-topo-06, October 2016. 1404 [RFC7223] Bjorklund, M., "A YANG Data Model for Routing Management", 1405 RFC 7223, May 2014. 1407 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1408 Management", RFC 8022, November 2016. 1410 Authors' Addresses 1412 Alexander Clemm 1413 Huawei 1415 EMail: ludwig@clemm.org 1417 Jan Medved 1418 Cisco 1420 EMail: jmedved@cisco.com 1422 Robert Varga 1423 Pantheon Technologies SRO 1425 EMail: robert.varga@pantheon.sk 1426 Xufeng Liu 1427 Ericsson 1429 EMail: xliu@kuatrotech.com 1431 Hariharan Ananthakrishnan 1432 Packet Design 1434 EMail: hari@packetdesign.com 1436 Nitin Bahadur 1437 Bracket Computing 1439 EMail: nitin_bahadur@yahoo.com