idnits 2.17.1 draft-bestbar-teas-yang-ns-phd-00.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == The document doesn't use any RFC 2119 keywords, yet seems to have RFC 2119 boilerplate text. -- The document date (November 2, 2020) is 1264 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) == Outdated reference: A later version (-10) exists of draft-bestbar-teas-ns-packet-00 ** Downref: Normative reference to an Informational draft: draft-bestbar-teas-ns-packet (ref. 'I-D.bestbar-teas-ns-packet') == Outdated reference: A later version (-02) exists of draft-nsdt-teas-ietf-network-slice-definition-00 ** Downref: Normative reference to an Informational draft: draft-nsdt-teas-ietf-network-slice-definition (ref. 'I-D.nsdt-teas-ietf-network-slice-definition') == Outdated reference: A later version (-05) exists of draft-nsdt-teas-ns-framework-04 ** Downref: Normative reference to an Informational draft: draft-nsdt-teas-ns-framework (ref. 'I-D.nsdt-teas-ns-framework') Summary: 3 errors (**), 0 flaws (~~), 5 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 MPLS Working Group T. Saad 3 Internet-Draft V. Beeram 4 Intended status: Standards Track Juniper Networks 5 Expires: May 6, 2021 November 2, 2020 7 YANG Data Model for Network Slice Per-Hop Definition 8 draft-bestbar-teas-yang-ns-phd-00 10 Abstract 12 This document defines a YANG data model for the management of Network 13 Slice Per-Hop Definitions (Slice-PHDs) on network slicing capable 14 nodes in IP/MPLS networks. 16 Requirements Language 18 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 19 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 20 "OPTIONAL" in this document are to be interpreted as described in BCP 21 14 [RFC2119] [RFC8174] when, and only when, they appear in all 22 capitals, as shown here. 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 https://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 May 6, 2021. 41 Copyright Notice 43 Copyright (c) 2020 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 (https://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 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 60 1.2. Tree Structure . . . . . . . . . . . . . . . . . . . . . 3 61 2. Network Slice Per-Hop Definition Model . . . . . . . . . . . 3 62 2.1. Model Usage . . . . . . . . . . . . . . . . . . . . . . . 3 63 2.2. Model Structure . . . . . . . . . . . . . . . . . . . . . 3 64 2.3. Network Slice Per-Hop-Behaviors . . . . . . . . . . . . . 4 65 2.4. Network Slices . . . . . . . . . . . . . . . . . . . . . 4 66 2.4.1. Slice Resource Reservation . . . . . . . . . . . . . 5 67 2.4.2. Slice Selectors . . . . . . . . . . . . . . . . . . . 5 68 2.4.3. Slice Per-Hop-Behavior . . . . . . . . . . . . . . . 6 69 2.4.4. Slice Membership . . . . . . . . . . . . . . . . . . 6 70 2.5. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 7 71 3. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 25 72 4. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 25 73 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 74 6. Security Considerations . . . . . . . . . . . . . . . . . . . 26 75 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 27 76 7.1. Normative References . . . . . . . . . . . . . . . . . . 27 77 7.2. Informative References . . . . . . . . . . . . . . . . . 28 78 Appendix A. Complete Model Tree Structure . . . . . . . . . . . 28 79 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 81 1. Introduction 83 Network slicing in IP/MPLS networks can be realized by partitioning 84 the shared network resources in just the control plane or in just the 85 data plane or in both the control and data planes 86 [I-D.bestbar-teas-ns-packet]. The latter two approaches require the 87 forwarding engine on each network slicing capable node to identify 88 the traffic belonging to a specific slice and to apply the 89 corresponding Slice Per-Hop Behavior (Slice-PHB) that determines the 90 forwarding treatment of the packets belonging to the network slice. 91 The identification of the slice that the packet belongs to and the 92 corresponding forwarding treatment that needs to be applied to the 93 packet is dictated by the Network Slice Per-Hop Definition (Slice- 94 PHD) that is provisioned on each network slicing capable node. 96 This document defines a YANG data model for the provisioning and 97 management of Slice-PHDs on network slicing capable nodes in IP/MPLS 98 networks. 100 1.1. Terminology 102 The terminology for describing YANG data models is found in 103 [RFC7950]. 105 The reader is expected to be familiar with the terminology specified 106 in [I-D.nsdt-teas-ietf-network-slice-definition], 107 [I-D.nsdt-teas-ns-framework] and [I-D.bestbar-teas-ns-packet]. The 108 term "Network Slice" used in this document must be interpreted as 109 "IETF Network Slice" [I-D.nsdt-teas-ietf-network-slice-definition]. 111 1.2. Tree Structure 113 A simplified graphical representation of the data model is presented 114 in Appendix A of this document. The tree format defined in [RFC8340] 115 is used for the YANG data model tree representation. 117 2. Network Slice Per-Hop Definition Model 119 2.1. Model Usage 121 The instantiation of a network slice may require a network slice 122 controller that accepts a service layer slice customer intent as 123 input and translates it to a network-wide consistent per-hop slice 124 definition that is distributed to network slicing capable nodes. The 125 specification of the service layer slice customer intent is outside 126 the scope of this document. The data model defined in this document 127 covers the per-hop slice definition that is consumed by the network 128 slicing capable nodes. 130 2.2. Model Structure 132 The high-level model structure defined by this document is as shown 133 below: 135 module: ietf-network-slice-phd 136 +--rw network-slicing! 137 +--rw network-slice-phbs 138 | +--rw network-slice-phb* [id] 139 | ............ 140 +--rw network-slices 141 +--rw network-slice* [name] 142 | ............ 143 +--rw slice-resource-reservation 144 | ............ 145 +--rw slice-selectors 146 | +--rw slice-selector* [id] 147 | ............ 148 +--rw slice-phb? ns-phb-ref 149 | ............ 150 +--rw slice-membership 151 ............ 153 In addition to the set of Slice-PHDs (network-slices), the model also 154 includes a placeholder for the set of Slice-PHBs (network-slice-phbs) 155 that are referenced by the Slice-PHDs. 157 2.3. Network Slice Per-Hop-Behaviors 159 The Slice-PHBs (network-slice-phbs) container carries a list of 160 Slice-PHB (network-slice-phb) entries. Each of these entries can be 161 referenced by one or more Slice-PHD. A Slice-PHB entry can either 162 carry a reference to a generic PHB profile available on the node or 163 carry a custom PHB profile. The custom PHB profile includes 164 sufficient attributes to construct a slice specific Qos profile and 165 any classes within it. 167 +--rw network-slice-phbs 168 | +--rw network-slice-phb* [id] 169 | +--rw id uint16 170 | +--rw (profile-type)? 171 | +--:(profile) 172 | | +--rw profile? string 173 | +--:(custom-profile) 174 | ............ 176 2.4. Network Slices 178 The Slice-PHDs are held in a container called 'network-slices'. Each 179 network-slice entry is identified by a name and holds the set of per- 180 hop attributes needed to instantiate the network slice. The four key 181 elements of each network-slice entry are discussed in the following 182 sub-sections. 184 2.4.1. Slice Resource Reservation 186 The 'slice-resource-reservation' container carries data nodes that 187 are used to support Slice-aware Bandwidth Engineering. The data 188 nodes in this container facilitate preference-based preemption of 189 Slice-aware TE paths, sharing of resources amongst a group of slices 190 and backup slice path bandwidth protection. 192 +--rw slice-resource-reservation 193 | +--rw preference? uint16 194 | +--rw (max-bw-type)? 195 | | +--:(bw-value) 196 | | | +--rw maximum-bandwidth? uint64 197 | | +--:(bw-percentage) 198 | | +--rw maximum-bandwidth-percent? 199 | | rt-types:percentage 200 | +--rw shared-resource-groups* uint32 201 | +--rw protection 202 | +--rw backup-slice-id? uint32 203 | +--rw (backup-bw-type)? 204 | +--:(backup-bw-value) 205 | | +--rw backup-bandwidth? uint64 206 | +--:(backup-bw-percentage) 207 | +--rw backup-bandwidth-percent? 208 | rt-types:percentage 210 2.4.2. Slice Selectors 212 The 'slice-selectors' container carries a set of data plane field 213 selectors which are used to identify the packets belonging to the 214 given network slice. Each slice selector is uniquely identified by a 215 16-bit ID. The slice selector with the lowest ID is the default 216 slice selector used by all the topological elements that are members 217 of the given network slice. The other entries may be used when there 218 is a need to override the default slice selector on some select 219 topological elements. 221 +--rw slice-selectors 222 | +--rw slice-selector* [id] 223 | +--rw id uint16 224 | +--rw mpls 225 | | +--rw (ss-mpls-type)? 226 | | +--:(label-value) 227 | | | +--rw label? 228 | | | | rt-types:mpls-label 229 | | | +--rw label-position? identityref 230 | | | +--rw label-position-offset? uint8 231 | | +--:(label-ranges) 232 | | +--rw label-range* [index] 233 | | +--rw index string 234 | | +--rw start-label? 235 | | | rt-types:mpls-label 236 | | +--rw end-label? 237 | | | rt-types:mpls-label 238 | | +--rw label-position? 239 | | | identityref 240 | | +--rw label-position-offset? uint8 241 | +--rw ipv4 242 | | +--rw destination-prefix* inet:ipv4-prefix 243 | +--rw ipv6 244 | | +--rw (ss-ipv6-type)? 245 | | +--:(ipv6-destination) 246 | | | +--rw destination-prefix* 247 | | | inet:ipv6-prefix 248 | | +--:(ipv6-flow-label) 249 | | +--rw slid-flow-labels 250 | | +--rw slid-flow-label* [slid] 251 | | +--rw slid inet:ipv6-flow-label 252 | | +--rw bitmask? uint32 253 | +--rw acl-ref* ns-acl-ref 255 2.4.3. Slice Per-Hop-Behavior 257 The Slice-PHB leaf carries a reference to the appropriate PHB that 258 needs to be applied for the given network slice. Unless specified 259 otherwise, this is the default Slice-PHB to be used by all the 260 topological elements that are members of the given network slice. 262 +--rw slice-phb? ns-phb-ref 264 2.4.4. Slice Membership 266 The 'slice-membership' container consists of a set of filtering 267 policies that are used to determine which topological elements on the 268 given node belong to the specific network slice. A filtering policy 269 could either reference a predefined topology or specify the rules to 270 construct a customized topology using a set of include and exclude 271 filters. The topological elements that satisfy the network slice 272 membership criteria can optionally override the default Slice-PHB 273 and/or the default slice selector. 275 +--rw slice-membership 276 +--rw filter-policies 277 +--rw filter-policy* [id] 278 +--rw id 279 | uint16 280 +--rw (filter-type)? 281 | +--:(topology-ref) 282 | | +--rw (topo-ref-type)? 283 | | +--:(algo-id) 284 | | | +--rw algo-id? uint8 285 | | +--:(te-topo-id) 286 | | +--rw te-topology-identifier 287 | | +--rw provider-id? te-global-id 288 | | +--rw client-id? te-global-id 289 | | +--rw topology-id? 290 | | te-topology-id 291 | +--:(custom-topology) 292 | +--rw include 293 | | +--rw link-affinity* string 294 | | +--rw link-name* string 295 | | +--rw node-prefix* inet:ip-prefix 296 | | +--rw as* inet:as-number 297 | +--rw exclude 298 | +--rw link-affinity* string 299 | +--rw link-name* string 300 | +--rw node-prefix* inet:ip-prefix 301 | +--rw as* inet:as-number 302 +--rw slice-selector? 303 | ns-ss-ref 304 +--rw slice-phb? 305 ns-phb-ref 307 2.5. YANG Module 309 file "ietf-network-slice-phd@2020-11-02" 310 module ietf-network-slice-phd { 311 yang-version 1.1; 312 namespace "urn:ietf:params:xml:ns:yang:ietf-network-slice-phd"; 313 prefix "ns-phd"; 315 import ietf-inet-types { 316 prefix "inet"; 317 reference 318 "RFC 6991: Common YANG Data Types"; 319 } 321 import ietf-routing-types { 322 prefix "rt-types"; 323 reference 324 "RFC 8294: Common YANG Data Types for the Routing Area"; 325 } 327 import ietf-access-control-list { 328 prefix "acl"; 329 reference 330 "RFC 8519: YANG Data Model for Network Access Control Lists 331 (ACLs)"; 332 } 334 import ietf-te-types { 335 prefix te-types; 336 reference 337 "RFC 8776: Common YANG Data Types for Traffic Engineering"; 338 } 340 organization 341 "IETF Traffic Engineering Architecture and Signaling (TEAS) 342 Working Group."; 344 contact 345 "WG Web: 346 WG List: 348 Editor: Vishnu Pavan Beeram 349 351 Editor: Tarek Saad 352 "; 354 description 355 "This YANG module defines a data model for managing Network 356 Slice Per-Hop Definitions (Slice-PHDs) on a network slicing 357 capable node. 359 Copyright (c) 2020 IETF Trust and the persons identified as 360 authors of the code. All rights reserved. 362 Redistribution and use in source and binary forms, with or 363 without modification, is permitted pursuant to, and subject to 364 the license terms contained in, the Simplified BSD License set 365 forth in Section 4.c of the IETF Trust's Legal Provisions 366 Relating to IETF Documents 367 (https://trustee.ietf.org/license-info). 369 This version of this YANG module is part of RFC XXXX; see the 370 RFC itself for full legal notices."; 372 revision "2020-11-02" { 373 description "Initial revision."; 374 reference 375 "RFC XXXX: YANG Data Model for Network Slice Per-Hop 376 Definitions (Slice-PHDs)."; 377 } 379 /* 380 * I D E N T I T I E S 381 */ 383 /* 384 * Identity - MPLS Slice Selector Label Position Type 385 */ 387 identity ss-mpls-label-position-type { 388 description 389 "Base identity for the position of the MPLS label that is used 390 for slice selection."; 391 } 393 identity ss-mpls-label-position-top { 394 base ss-mpls-label-position-type; 395 description 396 "MPLS label that is used for slice selection is at the top of 397 the label stack."; 398 } 400 identity ss-mpls-label-position-bottom { 401 base ss-mpls-label-position-type; 402 description 403 "MPLS label that is used for slice selection is either at the 404 bottom or at a specific offset from the bottom of the label 405 stack."; 406 } 408 identity ss-mpls-label-position-indicator { 409 base ss-mpls-label-position-type; 410 description 411 "MPLS label that is used for slice selection is immediately 412 preceded by a special purpose slice indicator label in the 413 label stack."; 414 } 416 /* 417 * Identity - Slice-PHB Class Direction 418 */ 420 identity s-phb-class-direction { 421 description 422 "Base identity for the direction of traffic to which the Slice 423 PHB class profile is applied."; 424 } 426 identity s-phb-class-direction-in { 427 base s-phb-class-direction; 428 description 429 "Slice PHB class profile is applied to incoming traffic."; 430 } 432 identity s-phb-class-direction-out { 433 base s-phb-class-direction; 434 description 435 "Slice PHB class profile is applied to outgoing traffic."; 436 } 438 identity s-phb-class-direction-in-out { 439 base s-phb-class-direction; 440 description 441 "Slice PHB class profile is applied to both incoming and 442 outgoing directions of traffic."; 443 } 445 /* 446 * Identity - Slice-PHB Class Priority 447 */ 449 identity s-phb-class-priority { 450 description 451 "Base identity for the priority of the child class scheduler."; 452 } 454 identity s-phb-class-priority-low { 455 base s-phb-class-drop-probability; 456 description 457 "Priority of the child class scheduler is low."; 458 } 459 identity s-phb-class-priority-strict-high { 460 base s-phb-class-drop-probability; 461 description 462 "Priority of the child class scheduler is strict-high."; 463 } 465 /* 466 * Identity - Slice-PHB Class Drop Probability 467 */ 469 identity s-phb-class-drop-probability { 470 description 471 "Base identity for the drop probability applied to packets 472 exceeding the CIR of the class queue."; 473 } 475 identity s-phb-class-drop-probability-low { 476 base s-phb-class-drop-probability; 477 description 478 "Low drop probability applied to packets exceeding the CIR of 479 the class queue."; 480 } 482 identity s-phb-class-drop-probability-medium { 483 base s-phb-class-drop-probability; 484 description 485 "Medium drop probability applied to packets exceeding the CIR 486 of the class queue."; 487 } 489 identity s-phb-class-drop-probability-high { 490 base s-phb-class-drop-probability; 491 description 492 "High drop probability applied to packets exceeding the CIR of 493 the class queue."; 494 } 496 /* 497 * T Y P E D E F S 498 */ 500 typedef ns-acl-ref { 501 type leafref { 502 path "/acl:acls/acl:acl/acl:name"; 503 } 504 description 505 "This type is used to reference an ACL."; 506 } 507 typedef ns-ss-ref { 508 type leafref { 509 path "/network-slicing/network-slices/network-slice/" 510 + "slice-selectors/slice-selector/id"; 511 } 512 description 513 "This type is used to reference a Slice Selector (SS)."; 514 } 516 typedef ns-phb-ref { 517 type leafref { 518 path "/network-slicing/network-slice-phbs/network-slice-phb/" 519 + "id"; 520 } 521 description 522 "This type is used to reference a Slice Per-Hop Behavior 523 (Slice-PHB)."; 524 } 526 /* 527 * G R O U P I N G S 528 */ 530 /* 531 * Grouping - Slice Selector MPLS: Label location specific fields 532 */ 533 grouping ns-ss-mpls-label-location { 534 description 535 "Grouping for MPLS (SS) label location specific fields."; 536 leaf label-position { 537 type identityref { 538 base ss-mpls-label-position-type; 539 } 540 description 541 "MPLS label position - top, bottom with offset, Slice label 542 indicator."; 543 } 544 leaf label-position-offset { 545 when "derived-from-or-self(../label-position," 546 + "'ns-phd:ss-mpls-label-position-bottom')" { 547 description 548 "MPLS label position offset is relevant only when the 549 label-position is set to 'bottom'."; 550 } 551 type uint8; 552 description 553 "MPLS label position offset."; 554 } 556 } 558 /* 559 * Grouping - Slice Selector (SS) 560 */ 561 grouping ns-slice-selector { 562 description 563 "Grouping for Slice Selectors."; 564 container slice-selectors { 565 description 566 "Container for Slice Selectors."; 567 list slice-selector { 568 key "id"; 569 description 570 "List of Slice Selectors - this includes the default 571 selector and others used for overriding the default."; 572 leaf id { 573 type uint16; 574 description 575 "A 16-bit ID to uniquely identify the Slice Selector. 576 The Slice Selector with the lowest ID is the default 577 selector."; 578 } 579 container mpls { 580 description 581 "Container for MPLS Slice Selector."; 582 choice ss-mpls-type { 583 description 584 "Choices for MPLS Slice Selector."; 585 case label-value { 586 leaf label { 587 type rt-types:mpls-label; 588 description 589 "MPLS Slice Selector Label is explicitly 590 specified."; 591 } 592 uses ns-ss-mpls-label-location; 593 } 594 case label-ranges { 595 list label-range { 596 key "index"; 597 unique "start-label end-label"; 598 description 599 "MPLS Slice Selector Label is picked from a 600 specified set of label ranges."; 601 leaf index { 602 type string; 603 description 604 "A string that uniquely identifies a label 605 range."; 606 } 607 leaf start-label { 608 type rt-types:mpls-label; 609 must '. <= ../end-label' { 610 error-message 611 "The start-label must be less than or equal " 612 + "to end-label"; 613 } 614 description 615 "Label-range start."; 616 } 617 leaf end-label { 618 type rt-types:mpls-label; 619 must '. >= ../start-label' { 620 error-message 621 "The end-label must be greater than or equal " 622 + "to start-label"; 623 } 624 description 625 "Label-range end."; 626 } 627 uses ns-ss-mpls-label-location; 628 } 629 } 630 } 631 } 632 container ipv4 { 633 description 634 "Container for IPv4 Slice Selector."; 635 leaf-list destination-prefix { 636 type inet:ipv4-prefix; 637 description 638 "IPv4 Slice Selector is picked from a specified set of 639 IPv4 destination prefixes."; 640 } 641 } 642 container ipv6 { 643 description 644 "Container for IPv6 Slice Selector."; 645 choice ss-ipv6-type { 646 description 647 "Choices for IPv6 Slice Selector."; 648 case ipv6-destination { 649 leaf-list destination-prefix { 650 type inet:ipv6-prefix; 651 description 652 "IPv6 Slice Selector is picked from a specified 653 set of IPv6 destination prefixes."; 654 } 655 } 656 case ipv6-flow-label { 657 container slid-flow-labels { 658 description 659 "Container for a set of Slice IDs that are 660 encoded within the flow label."; 661 list slid-flow-label { 662 key "slid"; 663 description 664 "IPv6 Slice Selector is picked from a set of 665 Slice IDs that are encoded within the flow 666 label."; 667 leaf slid { 668 type inet:ipv6-flow-label; 669 description 670 "Slice ID encoded inside the IPv6 flow label."; 671 } 672 leaf bitmask { 673 type uint32; 674 description 675 "Bitmask to extract the encoded Slice ID from 676 the IPv6 flow label."; 677 } 678 } 679 } 680 } 681 } 682 } 683 leaf-list acl-ref { 684 type ns-acl-ref; 685 description 686 "Slice Selection is done based on the specified list of 687 ACLs."; 688 } 689 } 690 } 691 } 693 /* 694 * Grouping - Slice Resource Reservation 695 */ 696 grouping ns-slice-resource-reservation { 697 description 698 "Grouping for Slice Resource Reservation."; 699 container slice-resource-reservation { 700 description 701 "Container for Slice Resource Reservation."; 702 leaf preference { 703 type uint16; 704 description 705 "Slice control plane preference. A higher preference 706 indicates a more favorable slice resource 707 reservation than a lower preference."; 708 } 709 choice max-bw-type { 710 description 711 "Choice of maximum bandwidth specification."; 712 case bw-value { 713 leaf maximum-bandwidth { 714 type uint64; 715 description 716 "The maximum bandwidth allocated to a network slice on 717 the network resources - specified as absolute value."; 718 } 719 } 720 case bw-percentage { 721 leaf maximum-bandwidth-percent { 722 type rt-types:percentage; 723 description 724 "The maximum bandwidth allocated to a network slice on 725 the network resources - specified as percentage of 726 link capacity."; 727 } 728 } 729 } 730 leaf-list shared-resource-groups { 731 type uint32; 732 description 733 "List of shared resource groups that a network slice 734 shares its allocated resources with."; 735 } 736 container protection { 737 description 738 "Container for network slice protection reservation."; 739 leaf backup-slice-id { 740 type uint32; 741 description 742 "The Slice ID that identifies the network slice used 743 for backup paths that protect primary paths in a 744 specific network slice."; 745 } 746 choice backup-bw-type { 747 description 748 "Choice of backup bandwidth specification."; 749 case backup-bw-value { 750 leaf backup-bandwidth { 751 type uint64; 752 description 753 "The maximum bandwidth on a network resource that 754 is allocated for backup traffic - specified as 755 absolute value."; 756 } 757 } 758 case backup-bw-percentage { 759 leaf backup-bandwidth-percent { 760 type rt-types:percentage; 761 description 762 "The maximum bandwidth on a network resource that 763 is allocated for backup traffic - specified as 764 percentage of the link capacity."; 765 } 766 } 767 } 768 } 769 } 770 } 772 /* 773 * Grouping - Slice-PHB 774 */ 775 grouping ns-slice-phb { 776 description 777 "Grouping for Slice-PHB."; 778 leaf slice-phb { 779 type ns-phb-ref; 780 description 781 "Reference to a specific Slice-PHB from the list global 782 Slice-PHBs."; 783 } 784 } 786 /* 787 * Grouping - Slice default profile override 788 */ 789 grouping ns-slice-default-profile-override { 790 description 791 "Grouping of fields that are used to override the default 792 profile of the network slice."; 793 leaf slice-selector { 794 type ns-ss-ref; 795 description 796 "Reference to a specific Slice Selector."; 797 } 798 uses ns-slice-phb; 799 } 801 /* 802 * Grouping - Slice membership filter: Topology reference 803 */ 804 grouping ns-slice-membership-topo-ref { 805 description 806 "Grouping for topology reference slice membership filter."; 807 choice topo-ref-type { 808 description 809 "Choice of topology reference."; 810 case algo-id { 811 leaf algo-id { 812 type uint8; 813 description 814 "Algorithm ID."; 815 } 816 } 817 case te-topo-id { 818 uses te-types:te-topology-identifier; 819 } 820 } 821 } 823 /* 824 * Grouping - Slice membership filters: Custom topology 825 */ 826 grouping ns-slice-membership-custom-topo { 827 description 828 "Grouping for custom topology slice membership filters."; 829 leaf-list link-affinity { 830 type string; 831 description 832 "Match-filter is a list of link affinities."; 833 } 834 leaf-list link-name { 835 type string; 836 description 837 "Match-filter is a list of link names."; 838 } 839 leaf-list node-prefix { 840 type inet:ip-prefix; 841 description 842 "Match-filter is a list of node IDs."; 843 } 844 leaf-list as { 845 type inet:as-number; 846 description 847 "Match-filter is a list of AS numbers."; 848 } 849 } 851 /* 852 * Grouping - Slice membership filters 853 */ 854 grouping ns-slice-membership-filters { 855 description 856 "Grouping for Slice Membership filters."; 857 choice filter-type { 858 description 859 "Choice of filter type."; 860 case topology-ref { 861 uses ns-slice-membership-topo-ref; 862 } 863 case custom-topology { 864 container include { 865 description 866 "Include policies."; 867 uses ns-slice-membership-custom-topo; 868 } 869 container exclude { 870 description 871 "Exclude policies."; 872 uses ns-slice-membership-custom-topo; 873 } 874 } 875 } 876 } 878 /* 879 * Grouping - Slice Membership 880 */ 881 grouping ns-slice-membership { 882 description 883 "Grouping for 'Slice Membership'."; 884 container slice-membership { 885 description 886 "Container for Slice Membership."; 887 container filter-policies { 888 description 889 "Container for topology filtering policies."; 890 list filter-policy { 891 key "id"; 892 description 893 "List of topology filtering policies."; 894 leaf id { 895 type uint16; 896 description 897 "A 16-bit ID that uniquely identifies the topology 898 filtering policy."; 899 } 900 uses ns-slice-membership-filters; 901 uses ns-slice-default-profile-override; 902 } 903 } 904 } 905 } 907 /* 908 * Grouping - Network Slice Per-Hop Behaviors (Slice-PHBs) 909 */ 910 grouping ns-phbs { 911 description 912 "Grouping for Slice-PHBs."; 913 container network-slice-phbs { 914 description 915 "Container for Slice-PHBs."; 916 list network-slice-phb { 917 key "id"; 918 description 919 "List of Slice-PHBs."; 920 leaf id { 921 type uint16; 922 description 923 "A 16-bit ID that uniquely identifies the Slice-PHB."; 924 } 925 choice profile-type { 926 description 927 "Choice of PHB profile type."; 928 case profile { 929 description 930 "Generic PHB profile available on the network 931 element."; 932 leaf profile { 933 type string; 934 description 935 "Generic PHB profile identifier."; 936 } 937 } 938 case custom-profile { 939 description 940 "Custom PHB profile."; 941 choice guaranteed-rate-type { 942 description 943 "Guaranteed rate is the committed information rate 944 (CIR) of the Slice. The guaranteed rate also 945 determines the amount of excess (extra) bandwidth 946 that a group of Slices can share. Extra bandwidth 947 is allocated among the group in proportion to the 948 guaranteed rate of each Slice."; 949 case rate { 950 leaf guaranteed-rate { 951 type uint64; 952 description 953 "Guaranteed rate specified as absolute value."; 954 } 955 } 956 case percentage { 957 leaf guaranteed-rate-percent { 958 type rt-types:percentage; 959 description 960 "Guaranteed rate specified in percentage."; 961 } 962 } 963 } 964 choice shaping-rate-type { 965 description 966 "Shaping rate is the maximum bandwidth of the slice, 967 or the peak information rate (PIR) of a Slice."; 968 case rate { 969 leaf shaping-rate { 970 type uint64; 971 description 972 "Shaping rate specified as absolute value."; 973 } 974 } 975 case percentage { 976 leaf shaping-rate-percent { 977 type rt-types:percentage; 978 description 979 "Shaping rate specified in percentage."; 980 } 981 } 982 } 983 container classes { 984 description 985 "Container for classes."; 986 list class { 987 key class-id; 988 description 989 "List of classes."; 990 leaf class-id { 991 type string; 992 description 993 "A string to uniquely identify a class."; 994 } 995 leaf direction { 996 type identityref { 997 base s-phb-class-direction; 998 } 999 description 1000 "Class direction."; 1001 } 1002 leaf priority { 1003 type identityref { 1004 base s-phb-class-priority; 1005 } 1006 description 1007 "Priority of the class scheduler. Only one Slice 1008 class queue can be set as a strict-high priority 1009 queue. Strict-high priority allocates the 1010 scheduled bandwidth to the queue before any 1011 other queue receives bandwidth. Other queues 1012 receive the bandwidth that remains after the 1013 strict-high queue has been serviced."; 1014 } 1015 choice guaranteed-rate-type { 1016 description 1017 "Guaranteed Rate is the Committed information 1018 rate (CIR) of Slice class - specified as 1019 absolute value or percentage."; 1020 case rate { 1021 leaf guaranteed-rate { 1022 type uint64; 1023 description 1024 "Guaranteed rate specified as absolute 1025 value."; 1026 } 1027 } 1028 case percentage { 1029 leaf guaranteed-rate-percent { 1030 type rt-types:percentage; 1031 description 1032 "Guaranteed rate specified in percentage."; 1033 } 1034 } 1035 } 1036 leaf drop-probability { 1037 type identityref { 1038 base s-phb-class-drop-probability; 1039 } 1040 description 1041 "Drop probability applied to packets exceeding 1042 the CIR of the class queue."; 1043 } 1044 choice maximum-bandwidth-type { 1045 description 1046 "Maximum bandwidth is the Peak information 1047 rate (PIR) of Slice class - specified as 1048 absolute value or percentage."; 1049 case rate { 1050 leaf maximum-bandwidth { 1051 type uint64; 1052 description 1053 "Maximum bandwidth specified as absolute 1054 value."; 1055 } 1056 } 1057 case percentage { 1058 leaf maximum-bandwidth-percent { 1059 type rt-types:percentage; 1060 description 1061 "Maximum bandwidth specified as percentage."; 1062 } 1063 } 1064 } 1065 choice delay-buffer-size-type { 1066 description 1067 "Size of the queue buffer as a percentage of the 1068 dedicated buffer space - specified as value or 1069 percentage."; 1070 case value { 1071 leaf delay-buffer-size { 1072 type uint64; 1073 description 1074 "Delay buffer size."; 1075 } 1076 } 1077 case percentage { 1078 leaf delay-buffer-size-percent { 1079 type rt-types:percentage; 1080 description 1081 "Delay buffer size specified as percentage."; 1082 } 1083 } 1085 } 1086 } 1087 } 1088 } 1089 } 1090 } 1091 } 1092 } 1094 /* 1095 * Grouping - Network Slice Per-Hop Definitions (Slice-PHDs) 1096 */ 1097 grouping ns-entries { 1098 description 1099 "Grouping for Slice-PHDs."; 1100 container network-slices { 1101 description 1102 "Container for Slice-PHD entries (network-slices)."; 1103 list network-slice { 1104 key "name"; 1105 unique "id"; 1106 description 1107 "List of network slices."; 1108 leaf name { 1109 type string; 1110 description 1111 "A string that uniquely identifies the network slice."; 1112 } 1113 leaf id { 1114 type uint32; 1115 description 1116 "A 32-bit ID that uniquely identifies the network 1117 slice."; 1118 } 1119 uses ns-slice-resource-reservation; 1120 uses ns-slice-selector; 1121 uses ns-slice-phb; 1122 uses ns-slice-membership; 1123 } 1124 } 1125 } 1127 /* 1128 * Top-level container - Network Slicing 1129 */ 1130 container network-slicing { 1131 presence "Enable network slicing."; 1132 description 1133 "Top-level container for network slicing specific constructs 1134 on a network slicing capable node."; 1135 uses ns-phbs; 1136 uses ns-entries; 1137 } 1138 } 1139 1141 3. Acknowledgements 1143 The authors would like to thank Krzysztof Szarkowicz for his input 1144 from discussions. 1146 4. Contributors 1148 The following individuals contributed to this document: 1150 Colby Barth 1151 Juniper Networks 1152 Email: cbarth@juniper.net 1154 Srihari R. Sangli 1155 Juniper Networks 1156 Email: ssangli@juniper.net 1158 Chandra Ramachandran 1159 Juniper Networks 1160 Email: csekar@juniper.net 1162 5. IANA Considerations 1164 This document registers the following URI in the IETF XML registry 1165 [RFC3688]. Following the format in [RFC3688], the following 1166 registration is requested to be made. 1168 URI: urn:ietf:params:xml:ns:yang:ietf-network-slice-phd 1169 Registrant Contact: The TEAS WG of the IETF. 1170 XML: N/A, the requested URI is an XML namespace. 1172 This document registers a YANG module in the YANG Module Names 1173 registry [RFC6020]. 1175 name: ietf-network-slice-phd 1176 namespace: urn:ietf:params:xml:ns:yang:ietf-network-slice-phd 1177 prefix: ns-phd 1178 reference: RFCXXXX 1180 6. Security Considerations 1182 The YANG module specified in this document defines a schema for data 1183 that is designed to be accessed via network management protocols such 1184 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 1185 is the secure transport layer, and the mandatory-to-implement secure 1186 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 1187 is HTTPS, and the mandatory-to-implement secure transport is TLS 1188 [RFC8446]. 1190 The Network Configuration Access Control Model (NACM) [RFC8341] 1191 provides the means to restrict access for particular NETCONF or 1192 RESTCONF users to a preconfigured subset of all available NETCONF or 1193 RESTCONF protocol operations and content. 1195 The data nodes defined in this YANG module that are 1196 writable/creatable/deletable (i.e., config true, which is the 1197 default) may be considered sensitive or vulnerable in some network 1198 environments. Write operations (e.g., edit-config) to these data 1199 nodes without proper protection can have a negative effect on network 1200 operations. These are the subtrees and data nodes and their 1201 sensitivity/vulnerability: 1203 * "/network-slicing/network-slice-phbs": This subtree specifies the 1204 configurations for network slice per-hop behaviors. By 1205 manipulating these data nodes, a malicious attacker may cause 1206 unauthorized and improper behavior to be provided for the slice 1207 traffic on the network element. 1209 * "/network-slicing/network-slices": This subtree specifies the 1210 configurations for network slices on a given network element. By 1211 manipulating these data nodes, a malicious attacker may cause 1212 unauthorized and improper behavior to be provided for the slice 1213 traffic on the network element. 1215 The readable data nodes in this YANG module may be considered 1216 sensitive or vulnerable in some network environments. It is thus 1217 important to control read access (e.g., via get, get-config, or 1218 notification) to these data nodes. These are the subtrees and data 1219 nodes and their sensitivity/vulnerability: 1221 * "/network-slicing/network-slice-phbs": Unauthorized access to this 1222 subtree can disclose the network slice PHBs defined on the network 1223 element. 1225 * "/network-slicing/network-slices": Unauthorized access to this 1226 subtree can disclose the network slice definitions on the network 1227 element. 1229 7. References 1231 7.1. Normative References 1233 [I-D.bestbar-teas-ns-packet] 1234 Saad, T. and V. Beeram, "Realizing Network Slices in IP/ 1235 MPLS Networks", draft-bestbar-teas-ns-packet-00 (work in 1236 progress), October 2020. 1238 [I-D.nsdt-teas-ietf-network-slice-definition] 1239 Rokui, R., Homma, S., Makhijani, K., Contreras, L., and J. 1240 Tantsura, "Definition of IETF Network Slices", draft-nsdt- 1241 teas-ietf-network-slice-definition-00 (work in progress), 1242 October 2020. 1244 [I-D.nsdt-teas-ns-framework] 1245 Gray, E. and J. Drake, "Framework for Transport Network 1246 Slices", draft-nsdt-teas-ns-framework-04 (work in 1247 progress), July 2020. 1249 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1250 Requirement Levels", BCP 14, RFC 2119, 1251 DOI 10.17487/RFC2119, March 1997, 1252 . 1254 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1255 DOI 10.17487/RFC3688, January 2004, 1256 . 1258 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1259 the Network Configuration Protocol (NETCONF)", RFC 6020, 1260 DOI 10.17487/RFC6020, October 2010, 1261 . 1263 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1264 and A. Bierman, Ed., "Network Configuration Protocol 1265 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1266 . 1268 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1269 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1270 . 1272 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1273 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1274 . 1276 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 1277 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 1278 . 1280 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 1281 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 1282 May 2017, . 1284 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 1285 Access Control Model", STD 91, RFC 8341, 1286 DOI 10.17487/RFC8341, March 2018, 1287 . 1289 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 1290 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 1291 . 1293 7.2. Informative References 1295 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 1296 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 1297 . 1299 Appendix A. Complete Model Tree Structure 1301 module: ietf-network-slice-phd 1302 +--rw network-slicing! 1303 +--rw network-slice-phbs 1304 | +--rw network-slice-phb* [id] 1305 | +--rw id uint16 1306 | +--rw (profile-type)? 1307 | +--:(profile) 1308 | | +--rw profile? string 1309 | +--:(custom-profile) 1310 | +--rw (guaranteed-rate-type)? 1311 | | +--:(rate) 1312 | | | +--rw guaranteed-rate? uint64 1313 | | +--:(percentage) 1314 | | +--rw guaranteed-rate-percent? 1315 | | rt-types:percentage 1316 | +--rw (shaping-rate-type)? 1317 | | +--:(rate) 1318 | | | +--rw shaping-rate? uint64 1319 | | +--:(percentage) 1320 | | +--rw shaping-rate-percent? 1321 | | rt-types:percentage 1322 | +--rw classes 1323 | +--rw class* [class-id] 1324 | +--rw class-id 1325 | | string 1326 | +--rw direction? 1327 | | identityref 1328 | +--rw priority? 1329 | | identityref 1330 | +--rw (guaranteed-rate-type)? 1331 | | +--:(rate) 1332 | | | +--rw guaranteed-rate? 1333 | | | uint64 1334 | | +--:(percentage) 1335 | | +--rw guaranteed-rate-percent? 1336 | | rt-types:percentage 1337 | +--rw drop-probability? 1338 | | identityref 1339 | +--rw (maximum-bandwidth-type)? 1340 | | +--:(rate) 1341 | | | +--rw maximum-bandwidth? 1342 | | | uint64 1343 | | +--:(percentage) 1344 | | +--rw maximum-bandwidth-percent? 1345 | | rt-types:percentage 1346 | +--rw (delay-buffer-size-type)? 1347 | +--:(value) 1348 | | +--rw delay-buffer-size? 1349 | | uint64 1350 | +--:(percentage) 1351 | +--rw delay-buffer-size-percent? 1352 | rt-types:percentage 1353 +--rw network-slices 1354 +--rw network-slice* [name] 1355 +--rw name string 1356 +--rw id? uint32 1357 +--rw slice-resource-reservation 1358 | +--rw preference? uint16 1359 | +--rw (max-bw-type)? 1360 | | +--:(bw-value) 1361 | | | +--rw maximum-bandwidth? uint64 1362 | | +--:(bw-percentage) 1363 | | +--rw maximum-bandwidth-percent? 1364 | | rt-types:percentage 1365 | +--rw shared-resource-groups* uint32 1366 | +--rw protection 1367 | +--rw backup-slice-id? uint32 1368 | +--rw (backup-bw-type)? 1369 | +--:(backup-bw-value) 1370 | | +--rw backup-bandwidth? uint64 1371 | +--:(backup-bw-percentage) 1372 | +--rw backup-bandwidth-percent? 1373 | rt-types:percentage 1374 +--rw slice-selectors 1375 | +--rw slice-selector* [id] 1376 | +--rw id uint16 1377 | +--rw mpls 1378 | | +--rw (ss-mpls-type)? 1379 | | +--:(label-value) 1380 | | | +--rw label? 1381 | | | | rt-types:mpls-label 1382 | | | +--rw label-position? identityref 1383 | | | +--rw label-position-offset? uint8 1384 | | +--:(label-ranges) 1385 | | +--rw label-range* [index] 1386 | | +--rw index string 1387 | | +--rw start-label? 1388 | | | rt-types:mpls-label 1389 | | +--rw end-label? 1390 | | | rt-types:mpls-label 1391 | | +--rw label-position? 1392 | | | identityref 1393 | | +--rw label-position-offset? uint8 1394 | +--rw ipv4 1395 | | +--rw destination-prefix* inet:ipv4-prefix 1396 | +--rw ipv6 1397 | | +--rw (ss-ipv6-type)? 1398 | | +--:(ipv6-destination) 1399 | | | +--rw destination-prefix* 1400 | | | inet:ipv6-prefix 1401 | | +--:(ipv6-flow-label) 1402 | | +--rw slid-flow-labels 1403 | | +--rw slid-flow-label* [slid] 1404 | | +--rw slid inet:ipv6-flow-label 1405 | | +--rw bitmask? uint32 1406 | +--rw acl-ref* ns-acl-ref 1407 +--rw slice-phb? ns-phb-ref 1408 +--rw slice-membership 1409 +--rw filter-policies 1410 +--rw filter-policy* [id] 1411 +--rw id 1412 | uint16 1413 +--rw (filter-type)? 1414 | +--:(topology-ref) 1415 | | +--rw (topo-ref-type)? 1416 | | +--:(algo-id) 1417 | | | +--rw algo-id? uint8 1418 | | +--:(te-topo-id) 1419 | | +--rw te-topology-identifier 1420 | | +--rw provider-id? te-global-id 1421 | | +--rw client-id? te-global-id 1422 | | +--rw topology-id? 1423 | | te-topology-id 1424 | +--:(custom-topology) 1425 | +--rw include 1426 | | +--rw link-affinity* string 1427 | | +--rw link-name* string 1428 | | +--rw node-prefix* inet:ip-prefix 1429 | | +--rw as* inet:as-number 1430 | +--rw exclude 1431 | +--rw link-affinity* string 1432 | +--rw link-name* string 1433 | +--rw node-prefix* inet:ip-prefix 1434 | +--rw as* inet:as-number 1435 +--rw slice-selector? 1436 | ns-ss-ref 1437 +--rw slice-phb? 1438 ns-phb-ref 1440 Authors' Addresses 1442 Tarek Saad 1443 Juniper Networks 1445 Email: tsaad@juniper.net 1447 Vishnu Pavan Beeram 1448 Juniper Networks 1450 Email: vbeeram@juniper.net