idnits 2.17.1 draft-boucadair-softwire-dslite-yang-04.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 1 instance of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 332 has weird spacing: '...reshold perce...' -- The document date (June 13, 2016) is 2872 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) ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) -- Obsolete informational reference (is this intentional?): RFC 6087 (Obsoleted by RFC 8407) Summary: 1 error (**), 0 flaws (~~), 3 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group M. Boucadair 3 Internet-Draft C. Jacquenet 4 Intended status: Standards Track Orange 5 Expires: December 15, 2016 S. Sivakumar 6 Cisco Systems 7 June 13, 2016 9 YANG Data Model for the DS-Lite Address Family Transition Router (AFTR) 10 draft-boucadair-softwire-dslite-yang-04 12 Abstract 14 This document defines a YANG data model for the DS-Lite Address 15 Family Transition Router (AFTR). 17 Status of This Memo 19 This Internet-Draft is submitted in full conformance with the 20 provisions of BCP 78 and BCP 79. 22 Internet-Drafts are working documents of the Internet Engineering 23 Task Force (IETF). Note that other groups may also distribute 24 working documents as Internet-Drafts. The list of current Internet- 25 Drafts is at http://datatracker.ietf.org/drafts/current/. 27 Internet-Drafts are draft documents valid for a maximum of six months 28 and may be updated, replaced, or obsoleted by other documents at any 29 time. It is inappropriate to use Internet-Drafts as reference 30 material or to cite them other than as "work in progress." 32 This Internet-Draft will expire on December 15, 2016. 34 Copyright Notice 36 Copyright (c) 2016 IETF Trust and the persons identified as the 37 document authors. All rights reserved. 39 This document is subject to BCP 78 and the IETF Trust's Legal 40 Provisions Relating to IETF Documents 41 (http://trustee.ietf.org/license-info) in effect on the date of 42 publication of this document. Please review these documents 43 carefully, as they describe your rights and restrictions with respect 44 to this document. Code Components extracted from this document must 45 include Simplified BSD License text as described in Section 4.e of 46 the Trust Legal Provisions and are provided without warranty as 47 described in the Simplified BSD License. 49 Table of Contents 51 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 52 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 53 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 2 54 2. DS-Lite AFTR YANG Data Model . . . . . . . . . . . . . . . . 3 55 3. AFTR YANG Module . . . . . . . . . . . . . . . . . . . . . . 8 56 4. Security Considerations . . . . . . . . . . . . . . . . . . . 28 57 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 58 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 59 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 60 7.1. Normative references . . . . . . . . . . . . . . . . . . 28 61 7.2. Informative references . . . . . . . . . . . . . . . . . 29 62 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 64 1. Introduction 66 This document defines a data model for DS-Lite [RFC6333] 67 architectures, using the YANG data modeling language [RFC6020]. Only 68 the Address Family Transition Router (AFTR) element is covered by 69 this specification. As a reminder, [RFC6334] can be used to 70 configure the name of the AFTR to a B4 element. 72 This document assumes [RFC4787][RFC5382][RFC5508] are enabled by 73 default. 75 This document follows the guidelines of [RFC6087]. 77 This document uses the common YANG types defined in [RFC6991]. 79 1.1. Terminology 81 This document makes use of the terms defined in [RFC6333]. 83 The terminology for describing YANG data models is defined in 84 [RFC6020]. 86 1.2. Tree Diagrams 88 The meaning of the symbols in these diagrams is as follows: 90 o Brackets "[" and "]" enclose list keys. 92 o Curly braces "{" and "}" contain names of optional features that 93 make the corresponding node conditional. 95 o Abbreviations before data node names: "rw" means configuration 96 (read-write), "ro" state data (read-only). 98 o Symbols after data node names: "?" means an optional node, "!" a 99 container with presence, and "*" denotes a "list" or "leaf-list". 101 o Parentheses enclose choice and case nodes, and case nodes are also 102 marked with a colon (":"). 104 o Ellipsis ("...") stands for contents of subtrees that are not 105 shown. 107 2. DS-Lite AFTR YANG Data Model 109 Figure 1 depicts the YANG data model for the AFTR element. 111 A device can enable multiple AFTR instances; each responsible to 112 service a group of B4s. Also, it assumes that each AFTR instance 113 can: be enable/disabled, be provisioned with a dedicated 114 configuration data, and maintain its own mapping table. This data 115 model assumes that pools of IPv4 addresses can be provisioned to the 116 AFTR. These pools may be contiguous or non-contiguous. Also, it 117 assumes that an AFTR can either assign individual port numbers or 118 port sets. Both features are supported in the YANG data model. 120 This model supports state migration as per [RFC7785]. 122 PCP-related considerations are out of scope of the document. 124 module: ietf-dslite-aftr 125 +--rw dslite-aftr-config 126 | +--rw enable? boolean 127 | +--rw dslite-aftr-instances 128 | +--rw dslite-aftr-instance* [id] 129 | +--rw id uint32 130 | +--rw name? string 131 | +--rw dslite-aftr-ip-address* [address-id] 132 | | +--rw address-id uint32 133 | | +--rw ip-address? inet:ipv6-address 134 | +--rw ipv4-address? inet:ipv4-address 135 | +--rw tunnel-mtu? uint16 136 | +--rw external-ip-address-pool* [address-id] 137 | | +--rw address-id uint32 138 | | +--rw external-ip-pool? inet:ipv4-prefix 139 | +--rw subscriber-mask? uint8 140 | +--rw port-quota uint16 141 | +--rw exclude-ports* [id] 142 | | +--rw id uint16 143 | | +--rw (port-type)? 144 | | +--:(single-port-number) 145 | | | +--rw single-port-number? inet:port-number 146 | | +--:(port-range) 147 | | +--rw start-port-number? inet:port-number 148 | | +--rw end-port-number? inet:port-number 149 | +--rw port-set 150 | | +--rw port-set-enable? boolean 151 | | +--rw port-set-size? uint16 152 | | +--rw port-set-timeout? uint32 153 | +--rw enable-app? boolean 154 | +--rw max-softwire-per-subscriber? uint8 155 | +--rw transport-protocol* [transport-protocol-id] 156 | | +--rw transport-protocol-id uint8 157 | +--rw new-mappings-rate-limit? uint32 158 | +--rw mss-clamping-enable? boolean 159 | +--rw port-randomization-enable? boolean 160 | +--rw port-preservation-enable? boolean 161 | +--rw port-parity-preservation-enable? boolean 162 | +--rw udp-lifetime? uint32 163 | +--rw tcp-idle-timeout? uint32 164 | +--rw tcp-trans-open-timeout? uint32 165 | +--rw tcp-trans-close-timeout? uint32 166 | +--rw tcp-in-syn-timeout? uint32 167 | +--rw fragment-min-timeout? uint32 168 | +--rw icmp-timeout? uint32 169 | +--rw hold-down-timeout? uint32 170 | +--rw v6-v4-dscp-preservation boolean 171 | +--rw logging-enable? boolean 172 | +--rw notify-address-pool-usage 173 | | +--rw pool-id? uint32 174 | | +--rw notify-pool-hi-threshold percent 175 | | +--rw notify-pool-low-threshold? percent 176 | +--rw ftp-alg-enable? boolean 177 | +--rw tftp-alg-enable? boolean 178 | +--rw sip-alg-enable? boolean 179 | +--rw rtsp-alg-enable? boolean 180 | +--rw h323-alg-enable? boolean 181 | +--rw all-algs-enable? boolean 182 | +--rw mapping-table 183 | +--rw mapping-entry* [index] 184 | +--rw index uint32 185 | +--rw status? enumeration 186 | +--rw type? enumeration 187 | +--rw b4-ip-address inet:ipv6-address 188 | +--rw internal-ip-address inet:ipv4-prefix 189 | +--rw internal-port 190 | | +--rw (port-type)? 191 | | +--:(single-port-number) 192 | | | +--rw single-port-number? inet:port-number 193 | | +--:(port-range) 194 | | +--rw start-port-number? inet:port-number 195 | | +--rw end-port-number? inet:port-number 196 | +--rw external-ip-address inet:ipv4-address 197 | +--rw external-port 198 | | +--rw (port-type)? 199 | | +--:(single-port-number) 200 | | | +--rw single-port-number? inet:port-number 201 | | +--:(port-range) 202 | | +--rw start-port-number? inet:port-number 203 | | +--rw end-port-number? inet:port-number 204 | +--rw transport-protocol uint8 205 | +--rw lifetime uint32 206 | +--rw v6-dscp? uint8 207 | +--rw internal-v4-dscp? uint8 208 | +--rw external-v4-dscp? uint8 209 | +--rw description? string 210 +--ro dslite-aftr-state 211 +--ro dslite-aftr-instances 212 +--ro dslite-aftr-instance* [id] 213 +--ro id int32 214 +--ro name? string 215 +--ro aftr-capabilities 216 | +--ro pcp-support? boolean 217 | +--ro subscriber-mask-support? boolean 218 | +--ro port-set-support? boolean 219 | +--ro self-state-migration? boolean 220 | +--ro mss-clamping-support? boolean 221 | +--ro port-randomization-support? boolean 222 | +--ro port-preservation-suport? boolean 223 | +--ro port-parity-preservation-support? boolean 224 | +--ro transport-proto-capabilities* [transport-protocol-id] 225 | | +--ro transport-protocol-id uint8 226 | +--ro v6-v4-dscp-preservation-support? boolean 227 | +--ro logging-support? boolean 228 | +--ro ftp-alg-support? boolean 229 | +--ro tftp-support? boolean 230 | +--ro sip-alg-support? boolean 231 | +--ro rtsp-alg-support? boolean 232 | +--ro h323-alg-support? boolean 233 +--ro aftr-current-config 234 | +--ro dslite-aftr-ip-address* [address-id] 235 | | +--ro address-id uint32 236 | | +--ro ip-address? inet:ipv6-address 237 | +--ro ipv4-address? inet:ipv4-address 238 | +--ro tunnel-mtu? uint16 239 | +--ro external-ip-address-pool* [address-id] 240 | | +--ro address-id uint32 241 | | +--ro external-ip-pool? inet:ipv4-prefix 242 | +--ro subscriber-mask? uint8 243 | +--ro port-quota uint16 244 | +--ro exclude-ports* [id] 245 | | +--ro id uint16 246 | | +--ro (port-type)? 247 | | +--:(single-port-number) 248 | | | +--ro single-port-number? inet:port-number 249 | | +--:(port-range) 250 | | +--ro start-port-number? inet:port-number 251 | | +--ro end-port-number? inet:port-number 252 | +--ro port-set 253 | | +--ro port-set-enable? boolean 254 | | +--ro port-set-size? uint16 255 | | +--ro port-set-timeout? uint32 256 | +--ro enable-app? boolean 257 | +--ro max-softwire-per-subscriber? uint8 258 | +--ro transport-protocol* [transport-protocol-id] 259 | | +--ro transport-protocol-id uint8 260 | +--ro new-mappings-rate-limit? uint32 261 | +--ro mss-clamping-enable? boolean 262 | +--ro port-randomization-enable? boolean 263 | +--ro port-preservation-enable? boolean 264 | +--ro port-parity-preservation-enable? boolean 265 | +--ro udp-lifetime? uint32 266 | +--ro tcp-idle-timeout? uint32 267 | +--ro tcp-trans-open-timeout? uint32 268 | +--ro tcp-trans-close-timeout? uint32 269 | +--ro tcp-in-syn-timeout? uint32 270 | +--ro fragment-min-timeout? uint32 271 | +--ro icmp-timeout? uint32 272 | +--ro hold-down-timeout? uint32 273 | +--ro v6-v4-dscp-preservation boolean 274 | +--ro logging-enable? boolean 275 | +--ro notify-address-pool-usage 276 | +--ro pool-id? uint32 277 | +--ro notify-pool-hi-threshold percent 278 | +--ro notify-pool-low-threshold? percent 279 +--ro mapping-table 280 | +--ro mapping-entry* [index] 281 | +--ro index uint32 282 | +--ro status? enumeration 283 | +--ro type? enumeration 284 | +--ro b4-ip-address inet:ipv6-address 285 | +--ro internal-ip-address inet:ipv4-prefix 286 | +--ro internal-port 287 | | +--ro (port-type)? 288 | | +--:(single-port-number) 289 | | | +--ro single-port-number? inet:port-number 290 | | +--:(port-range) 291 | | +--ro start-port-number? inet:port-number 292 | | +--ro end-port-number? inet:port-number 293 | +--ro external-ip-address inet:ipv4-address 294 | +--ro external-port 295 | | +--ro (port-type)? 296 | | +--:(single-port-number) 297 | | | +--ro single-port-number? inet:port-number 298 | | +--:(port-range) 299 | | +--ro start-port-number? inet:port-number 300 | | +--ro end-port-number? inet:port-number 301 | +--ro transport-protocol uint8 302 | +--ro lifetime uint32 303 | +--ro v6-dscp? uint8 304 | +--ro internal-v4-dscp? uint8 305 | +--ro external-v4-dscp? uint8 306 | +--ro description? string 307 +--ro statistics 308 | +--ro traffic-statistics 309 | | +--ro sent-packet? yang:zero-based-counter64 310 | | +--ro sent-byte? yang:zero-based-counter64 311 | | +--ro rcvd-packet? yang:zero-based-counter64 312 | | +--ro rcvd-byte? yang:zero-based-counter64 313 | | +--ro dropped-packet? yang:zero-based-counter64 314 | | +--ro dropped-byte? yang:zero-based-counter64 315 | +--ro mapping-table-stats 316 | +--ro current-mt-size? yang:zero-based-counter64 317 | +--ro max-mt-size? uint32 318 +--ro available-capacity-client? percent 319 +--ro available-capacity-ext? percent 320 +--ro address-pool-in-use? percent 321 +--ro port-in-use? percent 323 Figure 1: YANG Data Model for DS-Lite AFTR 325 The following notifications are supported. These notifications are 326 triggered by configurable parameters. 328 notifications: 329 +---n dslite-aftr-event 330 +--ro id? -> /dslite-aftr-state/dslite-aftr-instances/ 331 | dslite-aftr-instance/id 332 +--ro notify-pool-threshold percent 334 3. AFTR YANG Module 336 file "ietf-dslite-aftr@2016-06-13.yang" 337 module ietf-dslite-aftr { 338 namespace "urn:ietf:params:xml:ns:yang:ietf-dslite-aftr"; 339 prefix dslite-aftr; 341 import ietf-inet-types { prefix inet; } 342 import ietf-yang-types { prefix yang; } 344 organization "xxxx Working Group"; 345 contact 346 "Mohamed Boucadair 347 Christian Jacquenet 348 Senthil Sivakumar (ssenthil) "; 350 description 351 "This module is a YANG module for 352 DS-Lite AFTR implementations. 354 Copyright (c) 2016 IETF Trust and the persons identified as 355 authors of the code. All rights reserved. 357 Redistribution and use in source and binary forms, with or 358 without modification, is permitted pursuant to, and subject 359 to the license terms contained in, the Simplified BSD License 360 set forth in Section 4.c of the IETF Trust's Legal Provisions 361 Relating to IETF Documents 362 (http://trustee.ietf.org/license-info). 364 This version of this YANG module is part of RFC XXXX; see 365 the RFC itself for full legal notices."; 367 revision 2015-12-16 { 368 description "Update the module."; 369 reference "-04"; 370 } 371 revision 2015-12-16 { 372 description "Fix an error."; 373 reference "-03"; 374 } 376 revision 2015-09-01 { 377 description "Add port treshhold notifications."; 378 reference "-02"; 379 } 381 revision 2015-08-31 { 382 description "Fix a timeout issue."; 383 reference "-01"; 384 } 386 revision 2015-08-17 { 387 description "Changes xxxx."; 388 reference "-00"; 389 } 391 // Typedef 393 typedef percent { 394 type uint8 { 395 range "0 .. 100"; 396 } 397 description 398 "Percentage"; 399 } 401 /* 402 * Grouping 403 */ 405 // port numbers: single or port range 407 grouping port-number { 408 description 409 "Individual port or a range of ports."; 411 choice port-type { 412 default single-port-number; 413 description 414 "Port type: single or port-range."; 416 case single-port-number { 417 leaf single-port-number { 418 type inet:port-number; 419 description 420 "Used for single port numbers."; 421 } 422 } 424 case port-range { 425 leaf start-port-number { 426 type inet:port-number; 427 description 428 "Begining of the port range."; 429 } 430 leaf end-port-number { 431 type inet:port-number; 432 description 433 "End of the port range."; 434 } 435 } 436 } 437 } 439 // Timeout variables 441 grouping lifetime { 442 description 443 "Configure values of various timeouts."; 445 leaf udp-lifetime { 446 type uint32; 447 default 120; 448 description 449 "UDP inactivity timeout."; 450 } 452 leaf tcp-idle-timeout { 453 type uint32; 454 default 7440; 455 description 456 "TCP Idle timeout as per RFC 5382 should be no 457 more than 2 hours and 4 minutes."; 458 } 460 leaf tcp-trans-open-timeout { 461 type uint32; 462 default 240; 463 description 464 "The value of the transitory open connection 465 idle-timeout."; 466 } 468 leaf tcp-trans-close-timeout { 469 type uint32; 470 default 240; 471 description 472 "The value of the transitory close connection 473 idle-timeout."; 474 } 476 leaf tcp-in-syn-timeout { 477 type uint32; 478 default 6; 479 description 480 "6 seconds, as defined in [RFC5382]."; 481 } 483 leaf fragment-min-timeout { 484 type uint32; 485 default 2; 486 description 487 "As long as the AFTR has available resources, 488 the AFTR allows the fragments to arrive 489 over fragment-min-timeout interval. 490 The default value is inspired from RFC6146."; 491 } 493 leaf icmp-timeout { 494 type uint32; 495 default 60; 496 description 497 "60 seconds, as defined in [RFC5508]."; 498 } 500 leaf hold-down-timeout { 501 type uint32; 502 default 120; 503 description 504 "Hold down timer. Ports in the 505 hold down pool are not reassigned till 506 this timer expires."; 507 } 508 } 509 // AFTR Parameters 511 grouping aftr-parameters { 513 description 514 "A set of AFTR parameters"; 516 list dslite-aftr-ipv6-address { 518 key address-id; 520 description 521 "set one or multiple IP addresses for 522 the dslite-aftr"; 524 leaf address-id { 525 type uint32; 526 description 527 "The identifier of the address"; 528 } 530 leaf ipv6-address { 531 type inet:ipv6-address; 532 description 533 "IPv6 address of the dslite-aftr"; 534 } 535 } 536 leaf ipv4-address { 537 type inet:ipv4-address; 538 description 539 "IPv4 address of the DS-Lite AFTR. 540 192.0.0.1 is reserved for the AFTR element 541 [RFC6333]. 542 This address can be used to report ICMP 543 problems and will appear in traceroute 544 outputs."; 545 } 547 leaf tunnel-mtu { 548 type uint16; 549 description 550 "Configures a tunnel MTU."; 551 } 553 list external-ip-address-pool { 555 key address-id; 557 description 558 "Pool of external IP addresses used to service 559 internal hosts. 560 Both contiguous and non-contiguous pools 561 can be configured to an AFTR."; 563 leaf address-id { 564 type uint32; 565 description 566 "An identifier of the address."; 567 } 569 leaf external-ip-pool { 570 type inet:ipv4-prefix; 571 description 572 "An IPv4 prefix used by the AFTR 573 for NAT purposes."; 575 } 576 } 578 leaf subscriber-mask { 579 type uint8 { 580 range "0 .. 128"; 581 } 582 default "56"; 583 description 584 "The subscriber-mask is an integer that indicates 585 the length of significant bits to be applied on 586 the source IPv6 address (internal side) to 587 unambiguously identify a CPE. 589 Subscriber-mask is a system-wide configuration 590 parameter that is used to enforce generic 591 per-subscriberpolicies (e.g., port-quota). 593 The enforcement of these generic policies does not 594 require the configuration of every subscriber's prefix. 596 Example: suppose the 2001:db8:100:100::/56 prefix is 597 assigned to a DS-Lite enabled CPE. Suppose also that the 598 2001:db8:100:100::1 is the IPv6 address used by the 599 B4 that resides in that CPE. When the AFTR 600 receives a packet from this client, 601 it applies the subscriber-mask (e.g., 56) on 602 the source IPv6 address to compute the associated prefix 603 for this client (that is 2001:db8:100:100::/56). Then, 604 the AFTR enforces policies based on that prefix 605 (2001:db8:100:100::/56), not on the exact 606 source IPv6 address [RFC7785]."; 607 } 609 leaf port-quota { 610 type uint16; 611 mandatory true; 612 description 613 "Configures a port quota to be assigned per 614 subscriber."; 615 } 617 list exclude-ports { 618 key "id"; 619 description 620 "The set of ports not to be assigned 621 by the AFTR."; 623 leaf id { 624 type uint16; 625 description 626 "An identifier"; 627 } 629 uses port-number; 630 } 632 container port-set { 633 description 634 "Manages port-set assignments."; 636 leaf port-set-enable { 637 type boolean; 638 description 639 "Enable/Disable port set assignment."; 640 } 642 leaf port-set-size { 643 type uint16; 644 description 645 "Indicates the size of assigned port sets."; 646 } 648 leaf port-set-timeout { 649 type uint32; 650 description 651 "Inactivty timeout for port sets."; 652 } 653 } 655 leaf enable-app { 656 type boolean; 657 default true; 658 description 659 "Enable/disable Address Pooling of Paired 660 (APP) feature."; 661 } 663 leaf max-softwire-per-subscriber { 664 type uint8; 665 default 1; 666 description 667 "Configures the maximum softwire per subscriber 668 feature."; 669 } 670 list transport-protocol { 671 key "transport-protocol-id"; 672 description 673 "Set of (transport) protocols supported by 674 the AFTR. Default must be set to 675 TCP and UDP."; 677 leaf transport-protocol-id { 678 type uint8; 679 description 680 "Identifier of the transport protocol."; 681 } 682 } 684 leaf new-mappings-rate-limit { 685 type uint32; 686 description 687 "Rate-limit sessions per subscriber."; 688 } 690 leaf mss-clamping-enable { 691 type boolean; 692 description 693 "Enable/disable MSS clamping feature."; 694 } 696 leaf port-randomization-enable { 697 type boolean; 698 description 699 "Enable/disable port randomization feature."; 700 } 702 leaf port-preservation-enable { 703 type boolean; 704 description 705 "Indicates whether the AFTR should 706 preserve the internal port number."; 707 } 709 leaf port-parity-preservation-enable { 710 type boolean; 711 description 712 "Indicates whether the AFTR should 713 preserve the port parity of the 714 internal port number."; 715 } 717 uses lifetime; 718 leaf v6-v4-dscp-preservation { 719 type boolean; 720 mandatory true; 721 description 722 "Copies the DSCP value from the IPv6 header 723 and vice versa."; 724 } 726 leaf logging-enable { 727 type boolean; 728 description 729 "Enable logging features."; 730 } 732 container notify-address-pool-usage { 733 description 734 "Notification of Pool usage when certain criteria 735 is met"; 737 leaf pool-id { 738 type uint32; 739 description 740 "Pool-ID for which the notification criteria is 741 defined"; 742 } 744 leaf notify-pool-hi-threshold { 745 type percent; 746 mandatory true; 747 description 748 "Notification must be generated when the defined 749 high threshold is reached. For example, if a 750 notification is required when the pool utilization 751 reaches 90%, this configuration parameter must be 752 set to 90%"; 753 } 755 leaf notify-pool-low-threshold { 756 type percent; 757 description 758 "Notification must be generated when the defined 759 low threshold is reached. For example, if a 760 notificationis required when the pool utilization 761 reaches below 10%, this configuration parameter 762 must be set to 10%"; 763 } 764 } 765 leaf ftp-alg-enable { 766 type boolean; 767 description 768 "Enable/Disable FTP ALG"; 769 } 771 leaf tftp-alg-enable { 772 type boolean; 773 description 774 "Enable/Disable TFTP ALG"; 775 } 777 leaf sip-alg-enable { 778 type boolean; 779 description 780 "Enable/Disable SIP ALG"; 781 } 783 leaf rtsp-alg-enable { 784 type boolean; 785 description 786 "Enable/Disable RTSP ALG"; 787 } 789 leaf h323-alg-enable { 790 type boolean; 791 description 792 "Enable/Disable H323 ALG"; 793 } 795 leaf all-algs-enable { 796 type boolean; 797 description 798 "Enable/Disable all the ALGs"; 799 } 801 } 803 // Mapping Entry (Extended NAT44 mapping Entry) 805 grouping mapping-entry { 806 description 807 "A DS-Lite AFTR mapping entry."; 809 leaf index { 810 type uint32; 811 description 812 "A unique identifier of a mapping entry."; 814 } 816 leaf status { 817 type enumeration { 819 enum "disabled" { 820 description 821 "The mapping entry is not in use (Disabled)."; 822 } 824 enum "assigned" { 825 description 826 "This mapping has been granted by the server."; 827 } 829 enum "stale" { 830 description 831 "This is a stale mapping (case of reboot)."; 832 } 833 } 834 description 835 "Indicates the status of a mapping entry."; 836 } 838 leaf type { 839 type enumeration { 841 enum "static" { 842 description 843 "The mapping entry is manually configured."; 844 } 846 enum "implicit" { 847 description 848 "This mapping is created by an outgoing packet."; 849 } 851 enum "explicit" { 852 description 853 "This is a dynamic explicit mapping created as a result 854 of a PCP operation."; 855 } 856 } 857 description 858 "Indicates the type of a mapping entry. E.g., 859 a mapping can be: static, dynamic implicit or 860 dynamic explicit."; 861 } 862 leaf b4-ip-address { 863 type inet:ipv6-address; 864 mandatory true; 865 description 866 "Corresponds to the IPv6 address 867 used by the B4 element."; 868 } 870 leaf internal-ip-address { 871 type inet:ipv4-prefix; 872 mandatory true; 873 description 874 "Corresponds to the source IPv4 address 875 of the IPv4 packet conveyed over the softwire."; 876 } 878 container internal-port { 879 description 880 "Corresponds to the source port of the 881 IPv4 packet conveyed over the softwire."; 882 uses port-number; 883 } 885 leaf external-ip-address { 886 type inet:ipv4-address; 887 mandatory true; 888 description 889 "External IPv4 address assigned by the AFTR."; 890 } 892 container external-port { 893 description 894 "External port number assigned by the AFTR."; 895 uses port-number; 896 } 898 leaf transport-protocol { 899 type uint8; 900 mandatory true; 901 description 902 "Upper-layer protocol associated with this mapping. 903 Values are taken from the IANA protocol registry. 904 For example, this field contains 6 (TCP) for a TCP 905 mapping or 17 (UDP) for a UDP mapping."; 906 } 908 leaf lifetime { 909 type uint32; 910 mandatory true; 911 description 912 "Lifetime of the mapping."; 913 } 915 leaf v6-dscp { 916 type uint8; 917 description 918 "DSCP value used at the softwire level 919 (i.e., IPv6 header)."; 920 } 922 leaf internal-v4-dscp { 923 type uint8; 924 description 925 "DSCP value of the enacapsulated IPv4 packet."; 926 } 928 leaf external-v4-dscp { 929 type uint8; 930 description 931 "DSCP value of the translated IPv4 packet 932 as marked by the AFTR."; 933 } 935 leaf description { 936 type string; 937 description 938 "A description string associated with the mapping."; 939 } 940 } 942 /* 943 * DS-Lite AFTR Configuration 944 */ 946 container dslite-aftr-config { 947 description 948 "dslite-aftr"; 950 leaf enable { 951 type boolean; 952 description 953 "Enable/Disable dslite-aftr function."; 954 } 956 container dslite-aftr-instances { 957 description 958 "dslite-aftr instances"; 960 list dslite-aftr-instance { 961 key "id"; 962 description 963 "a dslite-aftr instance."; 965 leaf id { 966 type uint32; 967 description 968 "dslite-aftr instance identifier."; 969 } 971 leaf name { 972 type string; 973 description 974 "A name associated with the dslite-aftr instance."; 975 } 977 uses aftr-parameters; 979 container mapping-table { 980 description 981 "dslite-aftr mapping table maintained by 982 the dslite-aftr server."; 984 list mapping-entry { 985 key "index"; 986 description 987 "dslite-aftr mapping entry."; 988 uses mapping-entry; 989 } 990 } 991 } 992 } 993 } 995 /* 996 * DS-Lite AFTR State 997 */ 999 container dslite-aftr-state { 1001 config false; 1003 description 1004 "dslite-aftr"; 1006 container dslite-aftr-instances { 1007 description 1008 "dslite-aftr instances"; 1010 list dslite-aftr-instance { 1011 key "id"; 1013 description 1014 "dslite-aftr instance"; 1016 leaf id { 1017 type int32; 1018 description 1019 "The identifier of the dslite-aftr instance."; 1020 } 1022 leaf name { 1023 type string; 1024 description 1025 "The name of the dslite-aftr instance."; 1026 } 1028 container aftr-capabilities { 1029 description 1030 "AFTR capabilities"; 1032 leaf pcp-support { 1033 type boolean; 1034 description 1035 "Indicates whether a PCP server is enabled."; 1036 } 1038 leaf subscriber-mask-support{ 1039 type boolean; 1040 description 1041 "Indicates whether the subscriber-mask feature 1042 is supported"; 1043 } 1045 leaf port-set-support { 1046 type boolean; 1047 description 1048 "Indicates whether port set assignment is 1049 supported."; 1050 } 1052 leaf self-state-migration { 1053 type boolean; 1054 description 1055 "Indicates whether mappings migration 1056 to the new IPv6 address used by the B4 is 1057 supported [RFC7785]."; 1058 } 1060 leaf mss-clamping-support { 1061 type boolean; 1062 description 1063 "Indicates whether the MSS clamping 1064 feature is supported."; 1065 } 1067 leaf port-randomization-support { 1068 type boolean; 1069 description 1070 "Indicates whether port randomization is 1071 supported."; 1072 } 1074 leaf port-preservation-support { 1075 type boolean; 1076 description 1077 "Indicates whether port preservation 1078 is supported."; 1079 } 1081 leaf port-parity-preservation-support { 1082 type boolean; 1083 description 1084 "Indicates whether port parity preservation is 1085 supported."; 1086 } 1088 list transport-proto-capabilities { 1089 key "transport-protocol-id"; 1090 description 1091 "A set of supported transport protocols."; 1093 leaf transport-protocol-id { 1094 type uint8; 1095 description 1096 "ID of the transport protocol."; 1097 } 1098 } 1100 leaf v6-v4-dscp-preservation-support { 1101 type boolean; 1102 description 1103 "Copy the DSCP value from the IPv6 header 1104 and vice versa."; 1105 } 1107 leaf logging-support { 1108 type boolean; 1109 description 1110 "Indicates whether a logging feature is 1111 supported."; 1112 } 1114 leaf ftp-alg-support { 1115 type boolean; 1116 description 1117 "Indicates whether FTP ALG is supported"; 1118 } 1120 leaf tftp-support { 1121 type boolean; 1122 description 1123 "Indicates whether TFTP ALG is supported"; 1124 } 1126 leaf sip-alg-support { 1127 type boolean; 1128 description 1129 "Indicates whether SIP ALG is supported"; 1130 } 1132 leaf rtsp-alg-support { 1133 type boolean; 1134 description 1135 "Indicates whether RTSP ALG is supported"; 1136 } 1138 leaf h323-alg-support { 1139 type boolean; 1140 description 1141 "Indicates whether H323 ALG is supported"; 1142 } 1143 } 1145 container aftr-current-config { 1146 description 1147 "current config"; 1149 uses aftr-parameters; 1151 } 1153 container mapping-table { 1154 description 1155 "Mapping table"; 1156 list mapping-entry { 1157 key "index"; 1158 description 1159 "mapping entry"; 1160 uses mapping-entry; 1161 } 1162 } 1164 container statistics { 1165 description 1166 "traffic statistics"; 1168 container traffic-statistics { 1169 description 1170 "Generic traffic statistics."; 1172 leaf sent-packet { 1173 type yang:zero-based-counter64; 1174 description 1175 "Number of packets sent."; 1176 } 1178 leaf sent-byte { 1179 type yang:zero-based-counter64; 1180 description 1181 "Counter for sent traffic in bytes."; 1182 } 1184 leaf rcvd-packet { 1185 type yang:zero-based-counter64; 1186 description 1187 "Number of received packets."; 1188 } 1190 leaf rcvd-byte { 1191 type yang:zero-based-counter64; 1192 description 1193 "Counter for received traffic 1194 in bytes."; 1195 } 1197 leaf dropped-packet { 1198 type yang:zero-based-counter64; 1199 description 1200 "Number of dropped packets."; 1201 } 1203 leaf dropped-byte { 1204 type yang:zero-based-counter64; 1205 description 1206 "Counter for dropped traffic in 1207 bytes."; 1208 } 1209 } 1211 container mapping-table-stats { 1212 description 1213 "Mapping table statistics."; 1215 leaf current-mt-size { 1216 type yang:zero-based-counter64; 1217 description 1218 "Size of the mapping table."; 1219 } 1221 leaf max-mt-size { 1222 type uint32; 1223 description 1224 "Maximum configured size of the 1225 mapping table."; 1226 } 1227 } 1228 } 1230 leaf available-capacity-client { 1231 type percent; 1232 description 1233 "Ratio of available capacity in the 1234 customer-facing interfaces."; 1235 } 1237 leaf available-capacity-ext { 1238 type percent; 1239 description 1240 "Ratio of available capacity in the 1241 Internet-facing interfaces."; 1242 } 1244 leaf address-pool-in-use { 1245 type percent; 1246 description 1247 "Ratio of the shared address pool."; 1248 } 1250 leaf port-in-use { 1251 type percent; 1252 description 1253 "Ratio of the port usage."; 1254 } 1255 } 1256 } 1257 } 1259 /* 1260 * Notifications 1261 */ 1263 notification dslite-aftr-event { 1265 description 1266 "Notifications must be generated when the defined 1267 high/low threshold is reached. Related configuration 1268 parameters must be provided to trigger 1269 the notifications."; 1271 leaf id { 1272 type leafref { 1273 path 1274 "/dslite-aftr-state/dslite-aftr-instances/" 1275 + "dslite-aftr-instance/id"; 1276 } 1277 description 1278 "AFTR instance ID."; 1279 } 1281 leaf notify-pool-threshold { 1282 type percent; 1283 mandatory true; 1284 description 1285 "A treshhold has been fired."; 1286 } 1287 } 1288 } 1289 1291 4. Security Considerations 1293 The YANG module defined in this memo is designed to be accessed via 1294 the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 1295 secure transport layer and the support of SSH is mandatory to 1296 implement secure transport [RFC6242]. The NETCONF access control 1297 model [RFC6536] provides means to restrict access for particular 1298 NETCONF users to a pre-configured subset of all available NETCONF 1299 protocol operations and contents. 1301 All data nodes defined in the YANG module which can be created, 1302 modified and deleted (i.e., config true, which is the default). 1303 These data nodes are considered sensitive. Write operations (e.g., 1304 edit-config) applied to these data nodes without proper protection 1305 can negatively affect network operations. 1307 5. IANA Considerations 1309 This document requests IANA to register the following URI in the 1310 "IETF XML Registry" [RFC3688]: 1312 URI: urn:ietf:params:xml:ns:yang:ietf-dslite-aftr 1313 Registrant Contact: The IESG. 1314 XML: N/A; the requested URI is an XML namespace. 1316 This document requests IANA to register the following YANG module in 1317 the "YANG Module Names" registry [RFC6020]. 1319 name: ietf-dslite-aftr 1320 namespace: urn:ietf:params:xml:ns:yang:ietf-dslite-aftr 1321 prefix: dslite-aftr 1322 reference: RFC XXXX 1324 6. Acknowledgements 1326 Thanks to Q. Wu for identifying a compiling error. 1328 7. References 1330 7.1. Normative references 1332 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1333 DOI 10.17487/RFC3688, January 2004, 1334 . 1336 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1337 the Network Configuration Protocol (NETCONF)", RFC 6020, 1338 DOI 10.17487/RFC6020, October 2010, 1339 . 1341 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1342 and A. Bierman, Ed., "Network Configuration Protocol 1343 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1344 . 1346 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1347 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1348 . 1350 [RFC6333] Durand, A., Droms, R., Woodyatt, J., and Y. Lee, "Dual- 1351 Stack Lite Broadband Deployments Following IPv4 1352 Exhaustion", RFC 6333, DOI 10.17487/RFC6333, August 2011, 1353 . 1355 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 1356 Protocol (NETCONF) Access Control Model", RFC 6536, 1357 DOI 10.17487/RFC6536, March 2012, 1358 . 1360 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1361 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1362 . 1364 7.2. Informative references 1366 [RFC4787] Audet, F., Ed. and C. Jennings, "Network Address 1367 Translation (NAT) Behavioral Requirements for Unicast 1368 UDP", BCP 127, RFC 4787, DOI 10.17487/RFC4787, January 1369 2007, . 1371 [RFC5382] Guha, S., Ed., Biswas, K., Ford, B., Sivakumar, S., and P. 1372 Srisuresh, "NAT Behavioral Requirements for TCP", BCP 142, 1373 RFC 5382, DOI 10.17487/RFC5382, October 2008, 1374 . 1376 [RFC5508] Srisuresh, P., Ford, B., Sivakumar, S., and S. Guha, "NAT 1377 Behavioral Requirements for ICMP", BCP 148, RFC 5508, 1378 DOI 10.17487/RFC5508, April 2009, 1379 . 1381 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 1382 Data Model Documents", RFC 6087, DOI 10.17487/RFC6087, 1383 January 2011, . 1385 [RFC6334] Hankins, D. and T. Mrugalski, "Dynamic Host Configuration 1386 Protocol for IPv6 (DHCPv6) Option for Dual-Stack Lite", 1387 RFC 6334, DOI 10.17487/RFC6334, August 2011, 1388 . 1390 [RFC7785] Vinapamula, S. and M. Boucadair, "Recommendations for 1391 Prefix Binding in the Context of Softwire Dual-Stack 1392 Lite", RFC 7785, DOI 10.17487/RFC7785, February 2016, 1393 . 1395 Authors' Addresses 1397 Mohamed Boucadair 1398 Orange 1399 Rennes 35000 1400 France 1402 EMail: mohamed.boucadair@orange.com 1404 Christian Jacquenet 1405 Orange 1406 Rennes 35000 1407 France 1409 EMail: christian.jacquenet@orange.com 1411 Senthil Sivakumar 1412 Cisco Systems 1413 7100-8 Kit Creek Road 1414 Research Triangle Park, North Carolina 27709 1415 USA 1417 Phone: +1 919 392 5158 1418 EMail: ssenthil@cisco.com