idnits 2.17.1 draft-sun-casm-address-pool-management-yang-00.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 5 instances of too long lines in the document, the longest one being 4 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 147 has weird spacing: '...ce-name str...' == Line 150 has weird spacing: '...ge-name stri...' == Line 171 has weird spacing: '...ce-name str...' == Line 175 has weird spacing: '...ge-name str...' -- The document date (March 13, 2017) is 2599 days in the past. Is this intentional? Checking references for intended status: Informational ---------------------------------------------------------------------------- == Missing Reference: 'RFC6241' is mentioned on line 582, but not defined == Missing Reference: 'RFC6242' is mentioned on line 584, but not defined == Missing Reference: 'RFC6536' is mentioned on line 585, but not defined ** Obsolete undefined reference: RFC 6536 (Obsoleted by RFC 8341) == Missing Reference: 'RFC3688' is mentioned on line 598, but not defined == Unused Reference: 'RFC2119' is defined on line 631, but no explicit reference was found in the text == Unused Reference: 'RFC6674' is defined on line 651, but no explicit reference was found in the text == Unused Reference: 'RFC6888' is defined on line 656, but no explicit reference was found in the text ** Obsolete normative reference: RFC 7223 (Obsoleted by RFC 8343) Summary: 3 errors (**), 0 flaws (~~), 12 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group Q. Sun 3 Internet-Draft C. Xie 4 Intended status: Informational China Telecom 5 Expires: September 14, 2017 M. Boucadair 6 Orange 7 T. Peng 8 Huawei Technologies 9 Y. Lee 10 Comcast 11 March 13, 2017 13 A YANG Data Model for Address Pool Management 14 draft-sun-casm-address-pool-management-yang-00 16 Abstract 18 This document specifies a YANG data model for IP address pool 19 management. It can be used to automatically allocate, update and 20 delete address pools in different devices of an underlying network. 22 Status of This Memo 24 This Internet-Draft is submitted in full conformance with the 25 provisions of BCP 78 and BCP 79. 27 Internet-Drafts are working documents of the Internet Engineering 28 Task Force (IETF). Note that other groups may also distribute 29 working documents as Internet-Drafts. The list of current Internet- 30 Drafts is at http://datatracker.ietf.org/drafts/current/. 32 Internet-Drafts are draft documents valid for a maximum of six months 33 and may be updated, replaced, or obsoleted by other documents at any 34 time. It is inappropriate to use Internet-Drafts as reference 35 material or to cite them other than as "work in progress." 37 This Internet-Draft will expire on September 14, 2017. 39 Copyright Notice 41 Copyright (c) 2017 IETF Trust and the persons identified as the 42 document authors. All rights reserved. 44 This document is subject to BCP 78 and the IETF Trust's Legal 45 Provisions Relating to IETF Documents 46 (http://trustee.ietf.org/license-info) in effect on the date of 47 publication of this document. Please review these documents 48 carefully, as they describe your rights and restrictions with respect 49 to this document. Code Components extracted from this document must 50 include Simplified BSD License text as described in Section 4.e of 51 the Trust Legal Provisions and are provided without warranty as 52 described in the Simplified BSD License. 54 Table of Contents 56 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 57 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 58 3. AddressPoolManagement Data Model . . . . . . . . . . . . . . 3 59 4. AddressPoolManagement YANG Module . . . . . . . . . . . . . . 4 60 5. Security Considerations . . . . . . . . . . . . . . . . . . . 13 61 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 62 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 13 63 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 64 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 65 9.1. Normative References . . . . . . . . . . . . . . . . . . 14 66 9.2. Informative References . . . . . . . . . . . . . . . . . 14 67 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 69 1. Introduction 71 IP address pool management is one of the basic elements to configure 72 in a network to offer connectivity services to connected devices. 73 Concretely, pools can be provisioned to DHCP servers, IPv4 service 74 continuity devices (e.g., DS-Lite AFTR, NAT64), Carrier Grade NAT 75 (CGN), Broadband Network Gateway (BNG), etc. Automated means to 76 rationalize the management of address resources and to make sure the 77 underlying routing and forwarding capabilities are appropriately 78 configured, are helpful for opertaors. This document specifies a 79 YANG data model for that purpose. 81 A device can be provisioned with a pool of addresses for various 82 reasons: service requesting hosts with addresses or prefixes (e.g., 83 DHCP server, Delegating router), inject appropriate routing entries 84 (e.g., PE, BNG) given that prefix assignments and routing actions 85 must be correlated otherwise delivery of connectivity service will 86 fail. This document does not elaborate the usage of pools 87 provisioned to a network element. 89 It is worth mentioning that: (1) current practices rely on static 90 configuration which is prone to errors, (2) the level of route 91 aggregation cannot be driven by PE routers without any hint(s) from 92 an entity that has the visibility on aggregation policies and the 93 status of prefixes, etc., and (3) relying on proprietary means to 94 trigger the injection of routing entries may lead to undesired 95 behavior such as to increase the size of routing table and forwarding 96 table due to injecting very specific routes. 98 Within this document, an address pool usually contains the address 99 pool type, start-address, end-address, its corresponding lifetime and 100 the identification of the usage. Each address pool is represented by 101 an Address Pool Entry (APE). 103 Pools may be specific to a service offered by a network or be valid 104 for all services. 106 Pools can be added and/or withdrawn. 108 2. Terminology 110 The terminology for describing YANG data models is defined in 111 [RFC6020]. 113 The meaning of the symbols in the tree diagrams is as follows: 115 Brackets "[" and "]" enclose list keys. 117 Curly braces "{" and "}" contain names of optional features that 118 make the corresponding node conditional. 120 Abbreviations before data node names: "rw" means configuration 121 (read-write), "ro" state data (read-only). 123 Symbols after data node names: "?" means an optional node, "!" a 124 container with presence, and "*" denotes a "list" or "leaf-list". 126 Parentheses enclose choice and case nodes, and case nodes are also 127 marked with a colon (":"). 129 Ellipsis ("...") stands for contents of subtrees that are not 130 shown. 132 3. AddressPoolManagement Data Model 134 Two YANG modules are defined (Figure 1). The first module, "ietf- 135 address-pool", defines generic address pool aspects which is common 136 to all use cases. The second module, "ietf-address-pool-status", 137 defines the status of the address pool. 139 module: ietf-address-pool 140 +--rw address-pools 141 | +--rw address-pool* [address-pool-name] 142 | +--rw address-pool-name string 143 | +--rw address-pool-id uint32 default "0" 144 | +--rw device-id? string 145 | +--rw domain-name string 146 | +--rw address-pool-service* [service-name] 147 | | +--rw service-name string 148 | +--rw address-pool-entries 149 | +--rw ipv4-address-range* [ipv4-address-range-name] 150 | | +--rw ipv4-address-range-name string 151 | | +--rw ip-lower-address? inet:ipv4-address-no-zone 152 | | +--rw ip-upper-address? inet:ipv4-address-no-zone 153 | | +--rw usergateway? inet:ipv4-address-no-zone 154 | | +--rw gwnetmask? yang:dotted-quad 155 | | +--rw type? address-pool-type 156 | | +--rw lifetime? yang:date-and-time 157 | | +--rw instance? instance-type 158 | +--rw warning-threshold-v4? percent 159 | +--rw ipv6-prefix* [ipv6-prefix-name] 160 | | +--rw ipv6-prefix-name string 161 | | +--rw ipv6-prefix? inet:ipv6-prefix 162 | | +--rw usergateway? inet:ipv6-address-no-zone 163 | | +--rw type? address-pool-type 164 | | +--rw lifetime? yang:date-and-time 165 | | +--rw instance? instance-type 166 | +--rw warning-threshold-v6? percent 167 +--ro address-pool-status 168 +--ro address-pool* [address-pool-name] 169 +--ro address-pool-name string 170 +--ro address-pool-service* [service-name] 171 | +--ro service-name string 172 +--ro status? enumeration 173 +--ro address-pool-entries 174 +--ro ipv4-address-range* [ipv4-address-range-name] 175 | +--ro ipv4-address-range-name string 176 | +--ro peak-address-usage-ratio? percent 177 | +--ro average-address-usage-ratio? percent 178 +--ro ipv6-prefix* [ipv6-prefix-name] 179 | +--ro ipv6-prefix-name string 180 | +--ro peak-prefix-usage-ratio? percent 181 | +--ro average-prefix-usage-ratio? percent 182 +--ro port-range* [port-range-name] 183 +--ro port-range-name string 184 +--ro peak-address-usage-ratio? percent 185 +--ro average-address-usage-ratio? percent 187 Figure 1: Interface to Address Pool Management (APM) 189 4. AddressPoolManagement YANG Module 191 This module imports typedefs from [RFC6991] and [RFC7223]. 193 file "ietf-address-pool@2015-10-14.yang" 194 module ietf-address-pool { 195 namespace "urn:ietf:params:xml:ns:yang:ietf-address-pool"; 196 prefix address-pool; 197 import ietf-inet-types { 198 prefix inet; 199 } 200 import ietf-yang-types { 201 prefix yang; 202 } 203 organization 204 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 206 contact 207 "WG Web: 208 WG List: 210 WG Chair: Thomas Nadeau 211 213 WG Chair: Juergen Schoenwaelder 214 216 Editor: Qiong Sun 217 219 Editor: Tao Peng 220 ; 222 Contributor: Will(Shucheng) Liu 223 "; 225 description 226 "This module contains a collection of YANG definitions for 227 configuring IP address pools. 229 Copyright (c) 2015 IETF Trust and the persons identified as 230 authors of the code. All rights reserved. 232 Redistribution and use in source and binary forms, with or 233 without modification, is permitted pursuant to, and subject 234 to the license terms contained in, the Simplified BSD License 235 set forth in Section 4.c of the IETF Trust's Legal Provisions 236 Relating to IETF Documents 237 (http://trustee.ietf.org/license-info). 238 This version of this YANG module is part of RFC 7277; see 239 the RFC itself for full legal notices."; 241 revision 2015-10-14 { 242 description 243 "Initial revision."; 244 reference 245 "RFC 7277: A YANG Data Model for IP Management"; 246 } 248 typedef percent { 249 type uint8 { 250 range "0 .. 100"; 251 } 252 description 253 "Percentage"; 254 } 256 typedef address-pool-type{ 257 type enumeration{ 258 enum usergateway { 259 description 260 "The address pool has a usergateway."; 261 } 262 enum import-route { 263 description 264 "The address pool need to import a route 265 to external network."; 266 } 267 } 268 description 269 "Address pool type."; 270 } 272 typedef instance-type{ 273 type enumeration{ 274 enum pppoe { 275 description 276 "The address pool is used for pppoe access."; 277 } 278 enum dhcp { 279 description 280 "The address pool is used for dhcp access."; 281 } 282 enum vpn { 283 description 284 "The address pool is used for vpn access."; 285 } 286 enum ds-lite { 287 description 288 "The address pool is used for ds-lite access."; 289 } 290 enum lw4over6 { 291 description 292 "The address pool is used for lw4over6 access."; 293 } 294 enum map { 295 description 296 "The address pool is used for map access."; 297 } 298 enum cgn { 299 description 300 "The address pool is used for cgn access."; 301 } 302 enum xlat { 303 description 304 "The address pool is used for xlat access."; 305 } 306 enum other { 307 description 308 "The address pool is used for others."; 309 } 310 } 311 description 312 "Instance type."; 313 } 315 container address-pools { 316 description 317 "This is a top level container for Address Pools. 318 It can have one or more Address Pools. The pools may 319 not be contiguous."; 320 list address-pool { 321 key address-pool-name; 322 description 323 "An Address Pool is an ordered list of 324 Address Pool Entries (APE). Each Access Pool Entry has a 325 list of address ranges and its associated lifetime."; 326 leaf address-pool-name { 327 type string; 328 description 329 "The name of address pool"; 330 } 331 leaf address-pool-id { 332 type uint32; 333 default "0"; 334 description 335 "The Address Pool id"; 336 } 337 leaf domain-name { 338 type string; 339 description 340 "The domain name"; 341 } 342 leaf device-id { 343 type string; 344 description 345 "The identifier of device that using address pool"; 346 } 347 list address-pool-service { 348 key service-name; 349 description 350 "The services that can use these pool."; 351 leaf service-name { 352 type string; 353 description 354 "A service name: e.g., any, voip, iptv, internet, etc."; 355 } 356 } 358 container address-pool-entries { 359 description 360 "The address-pool-entries container contains 361 a list of address-ranges and associated attributes."; 362 list ipv4-address-range { 363 key ipv4-address-range-name; 364 description 365 "IPv4 Address range."; 366 leaf ipv4-address-range-name { 367 type string; 368 description 369 "The name of IPv4 address range."; 370 } 371 leaf ip-lower-address { 372 type inet:ipv4-address-no-zone; 373 description 374 "The lower IPv4 address of the address range."; 375 } 376 leaf ip-upper-address { 377 type inet:ipv4-address-no-zone; 378 description 379 "The upper IPv4 address of the address range."; 380 } 381 leaf usergateway { 382 type inet:ipv4-address-no-zone; 383 description 384 "It only exists when address pool are used for 385 user addressing."; 387 } 388 leaf gwnetmask { 389 type yang:dotted-quad; 390 description 391 "The netmask for usergateway."; 392 } 393 leaf type { 394 type address-pool-type; 395 description 396 "The type of the address pool."; 397 } 398 leaf lifetime { 399 type yang:date-and-time; 400 description 401 "The lifetime for the address pool. '0' means 402 withdrawal."; 403 } 404 leaf instance { 405 type instance-type; 406 description 407 "The instance of the address pool."; 408 } 409 } 410 leaf warning-threshold-v4{ 411 type percent; 412 description 413 "The threshold of the ipv4 address pool."; 414 } 416 list ipv6-prefix { 417 key ipv6-prefix-name; 418 description 419 "IPv6 prefix."; 420 leaf ipv6-prefix-name { 421 type string; 422 description 423 "The name of IPv6 prefix."; 424 } 425 leaf ipv6-prefix { 426 type inet:ipv6-prefix; 427 description 428 "The IPv6 prefix."; 429 } 430 leaf usergateway { 431 type inet:ipv6-address-no-zone; 432 description 433 "It only exists when address pool are used for 434 user addressing."; 436 } 437 leaf type { 438 type address-pool-type; 439 description 440 "The type of the address pool."; 441 } 442 leaf lifetime { 443 type yang:date-and-time; 444 description 445 "The lifetime for the address pool. '0' means 446 withdrawal."; 447 } 448 leaf instance { 449 type instance-type; 450 description 451 "The instance of the address pool."; 452 } 453 } 454 leaf warning-threshold-v6{ 455 type percent; 456 description 457 "The threshold of the ipv6 address pool."; 458 } 459 } 460 } 461 } 463 /* 464 * Operational state data nodes 465 */ 467 container address-pool-status { 468 config false; 469 description 470 "This is a top level container for Address Pool Status, 471 which contains the status of address pool usage."; 472 list address-pool { 473 key address-pool-name; 474 description 475 "An Address Pool is an ordered list of 476 Address Pool Entries (APE). Each Access Pool Entry has a 477 list of address ranges and its associated lifetime. "; 478 leaf address-pool-name { 479 type string; 480 description 481 "The name of address pool"; 482 } 483 list address-pool-service { 484 key service-name; 485 description 486 "The services that can use these pool."; 487 leaf service-name { 488 type string; 489 description 490 "A service name: e.g., any, voip, iptv, internet, etc."; 491 } 492 } 493 leaf status { 494 type enumeration{ 495 enum active { 496 description 497 "The address pool is in active status."; 498 } 499 enum idle { 500 description 501 "The address pool is in idle status."; 502 } 503 } 504 description 505 "The status of address pool"; 506 } 507 container address-pool-entries { 508 description 509 "The address-pool-entries container contains 510 a list of address-ranges and associated attributes."; 511 list ipv4-address-range { 512 key ipv4-address-range-name; 513 description 514 "IPv4 Address range."; 515 leaf ipv4-address-range-name { 516 type string; 517 description 518 "The name of IPv4 address range."; 519 } 520 leaf peak-address-usage-ratio { 521 type percent; 522 description 523 "The peak usage rate of the address range."; 524 } 525 leaf average-address-usage-ratio { 526 type percent; 527 description 528 "The average usage rate of the address range."; 529 } 530 } 531 list ipv6-prefix { 532 key ipv6-prefix-name; 533 description 534 "IPv6 prefix."; 535 leaf ipv6-prefix-name { 536 type string; 537 description 538 "The name of IPv6 prefix."; 539 } 540 leaf peak-prefix-usage-ratio { 541 type percent; 542 description 543 "The peak usage rate of the prefix."; 544 } 545 leaf average-prefix-usage-ratio { 546 type percent; 547 description 548 "The average usage rate of the prefix."; 549 } 550 } 551 list port-range { 552 key port-range-name; 553 description 554 "port range."; 555 leaf port-range-name { 556 type string; 557 description 558 "The name of port range."; 559 } 560 leaf peak-address-usage-ratio { 561 type percent; 562 description 563 "The peak usage rate of the port range."; 564 } 565 leaf average-address-usage-ratio { 566 type percent; 567 description 568 "The average usage rate of the port range."; 569 } 570 } 571 } 572 } 573 } 574 } 575 577 Figure 2: Interface to Address Pool Management (APM) 579 5. Security Considerations 581 The YANG module defined in this memo is designed to be accessed via 582 the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 583 secure transport layer and the support of SSH is mandatory to 584 implement secure transport [RFC6242]. The NETCONF access control 585 model [RFC6536] provides means to restrict access for particular 586 NETCONF users to a pre-configured subset of all available NETCONF 587 protocol operations and contents. 589 All data nodes defined in the YANG module which can be created, 590 modified and deleted (i.e., config true, which is the default). 591 These data nodes are considered sensitive. Write operations (e.g., 592 edit-config) applied to these data nodes without proper protection 593 can negatively affect network operations. 595 6. IANA Considerations 597 This document requests IANA to register the following URI in the 598 "IETF XML Registry" [RFC3688]: 600 URI: urn:ietf:params:xml:ns:yang:ietf-address-pool 601 Registrant Contact: The IESG. 602 XML: N/A; the requested URI is an XML namespace. 604 Figure 3: namespace 606 This document requests IANA to register the following YANG module in 607 the "YANG Module Names" registry [RFC6020]. 609 name: ietf-address-pool 610 namespace: urn:ietf:params:xml:ns:yang:ietf-address-pool 611 prefix: address-pool 612 reference: RFC XXXX 614 Figure 4: IANA register 616 7. Contributors 618 The following people contributed to creating this document, and are 619 listed in alphabetical order: 621 Will(Shucheng) Liu 623 8. Acknowledgements 625 N/A. 627 9. References 629 9.1. Normative References 631 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 632 Requirement Levels", BCP 14, RFC 2119, 633 DOI 10.17487/RFC2119, March 1997, 634 . 636 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 637 the Network Configuration Protocol (NETCONF)", RFC 6020, 638 DOI 10.17487/RFC6020, October 2010, 639 . 641 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 642 RFC 6991, DOI 10.17487/RFC6991, July 2013, 643 . 645 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 646 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 647 . 649 9.2. Informative References 651 [RFC6674] Brockners, F., Gundavelli, S., Speicher, S., and D. Ward, 652 "Gateway-Initiated Dual-Stack Lite Deployment", RFC 6674, 653 DOI 10.17487/RFC6674, July 2012, 654 . 656 [RFC6888] Perreault, S., Ed., Yamagata, I., Miyakawa, S., Nakagawa, 657 A., and H. Ashida, "Common Requirements for Carrier-Grade 658 NATs (CGNs)", BCP 127, RFC 6888, DOI 10.17487/RFC6888, 659 April 2013, . 661 Authors' Addresses 663 Qiong Sun 664 China Telecom 665 No.118 Xizhimennei street, Xicheng District 666 Beijing 100035 667 P.R. China 669 Email: sunqiong@ctbri.com.cn 670 Chongfeng Xie 671 China Telecom 672 No.118 Xizhimennei street, Xicheng District 673 Beijing 100035 674 P.R. China 676 Email: xiechf@ctbri.com.cn 678 Mohamed Boucadair 679 Orange 680 Rennes 35000 681 France 683 Email: mohamed.boucadair@orange-ftgroup.com 685 Tao Peng 686 Huawei Technologies 687 Bantian, Longgang District 688 Shenzhen 518129 689 China 691 Email: dr.pengtao@huawei.com 693 Yiu L. Lee 694 Comcast 695 One Comcast Center 696 Philadelphia, PA 19103 697 USA 699 Email: yiu_lee@cable.comcast.com