--- 1/draft-ietf-dhc-dhcpv6-yang-22.txt 2021-10-25 11:13:16.977050592 -0700 +++ 2/draft-ietf-dhc-dhcpv6-yang-23.txt 2021-10-25 11:13:17.157055105 -0700 @@ -1,103 +1,95 @@ DHC Working Group I. Farrer, Ed. Internet-Draft Deutsche Telekom AG -Intended status: Standards Track 2 July 2021 -Expires: 3 January 2022 +Intended status: Standards Track 25 October 2021 +Expires: 28 April 2022 YANG Data Model for DHCPv6 Configuration - draft-ietf-dhc-dhcpv6-yang-22 + draft-ietf-dhc-dhcpv6-yang-23 Abstract This document describes YANG data modules for the configuration and - management of DHCPv6 (Dynamic Host Configuration Protocol for IPv6) - servers, relays, and clients. - -Requirements Language - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", - "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and - "OPTIONAL" in this document are to be interpreted as described in BCP - 14 [RFC2119] [RFC8174] when, and only when, they appear in all - capitals, as shown here. + management of DHCPv6 (Dynamic Host Configuration Protocol for IPv6 + RFC8415) servers, relays, and clients. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." - This Internet-Draft will expire on 3 January 2022. + This Internet-Draft will expire on 28 April 2022. Copyright Notice Copyright (c) 2021 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/ license-info) in effect on the date of publication of this document. - Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents - 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 - 1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 4 + 1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 3 1.2.1. DHCPv6 Option Definitions . . . . . . . . . . . . . . 4 1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 - 2. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 6 - 2.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 6 - 2.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 13 - 2.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 16 - 3. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 19 - 3.1. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 19 - 3.2. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 39 - 3.3. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 49 - 3.4. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 63 - 4. Security Considerations . . . . . . . . . . . . . . . . . . . 71 - 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 73 - 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 74 - 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 74 - 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 74 - 8.1. Normative References . . . . . . . . . . . . . . . . . . 74 - 8.2. Informative References . . . . . . . . . . . . . . . . . 77 - Appendix A. Data Tree Examples . . . . . . . . . . . . . . . . . 77 - A.1. DHCPv6 Server Configuration Example . . . . . . . . . . . 77 - A.2. DHCPv6 Relay Configuration Example . . . . . . . . . . . 81 - A.3. DHCPv6 Client Configuration Examples . . . . . . . . . . 82 + 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 6 + 3. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 6 + 3.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 6 + 3.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 13 + 3.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 15 + 4. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 20 + 4.1. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 20 + 4.2. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 28 + 4.3. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 48 + 4.4. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 58 + 5. Security Considerations . . . . . . . . . . . . . . . . . . . 73 + 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 74 + 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 75 + 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 75 + 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 76 + 9.1. Normative References . . . . . . . . . . . . . . . . . . 76 + 9.2. Informative References . . . . . . . . . . . . . . . . . 78 + Appendix A. Data Tree Examples . . . . . . . . . . . . . . . . . 79 + A.1. DHCPv6 Server Configuration Examples . . . . . . . . . . 79 + A.2. DHCPv6 Relay Configuration Example . . . . . . . . . . . 83 + A.3. DHCPv6 Client Configuration Example . . . . . . . . . . . 84 Appendix B. Example of Augmenting Additional DHCPv6 Option - Definitions . . . . . . . . . . . . . . . . . . . . . . . 85 + Definitions . . . . . . . . . . . . . . . . . . . . . . . 87 Appendix C. Example Vendor Specific Server Configuration - Module . . . . . . . . . . . . . . . . . . . . . . . . . 88 + Module . . . . . . . . . . . . . . . . . . . . . . . . . 90 Appendix D. Example definition of class-selector - configuration . . . . . . . . . . . . . . . . . . . . . . 95 - Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 102 + configuration . . . . . . . . . . . . . . . . . . . . . . 97 + Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 104 1. Introduction - DHCPv6 [RFC8415] is widely used for supplying configuration and other + DHCPv6 [RFC8415] is used for supplying configuration and other relevant parameters to clients in IPv6 networks. This document defines YANG [RFC7950] modules for the configuration and management of DHCPv6 'element' (servers, relays, and clients) using the Network Configuration Protocol (NETCONF [RFC6241]) or RESTCONF [RFC8040] protocols. Separate modules are defined for each element. Additionally, a 'common' module contains typedefs and groupings used by all of the element modules. Appendix A provides XML examples for each of the element modules and shows their interaction. @@ -251,27 +243,35 @@ The reader should be familiar with the YANG data modeling language defined in [RFC7950]. The YANG modules in this document adopt the Network Management Datastore Architecture (NMDA) [RFC8342]. The meanings of the symbols used in tree diagrams are defined in [RFC8340]. The reader should be familiar with DHCPv6 relevant terminology as defined in [RFC8415] and other relevant documents. -2. DHCPv6 Tree Diagrams +2. Requirements Language -2.1. DHCPv6 Server Tree Diagram + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in BCP + 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +3. DHCPv6 Tree Diagrams + +3.1. DHCPv6 Server Tree Diagram The tree diagram in Figure 1 provides an overview of the DHCPv6 server module. The tree also includes the common functions module - Section 3.4. + Section 4.1. module: ietf-dhcpv6-server +--rw dhcpv6-server +--rw enabled? boolean +--rw server-duid? dhc6:duid +--rw vendor-config +--rw option-sets | +--rw option-set* [option-set-id] | +--rw option-set-id uint32 | +--rw description? string @@ -296,40 +296,40 @@ | +--rw reconfigure-message-option | | +--rw msg-type? uint8 | +--rw reconfigure-accept-option! | +--rw info-refresh-time-option | | +--rw info-refresh-time? dhc6:timer-seconds32 | +--rw sol-max-rt-option | | +--rw sol-max-rt-value? dhc6:timer-seconds32 | +--rw inf-max-rt-option | +--rw inf-max-rt-value? dhc6:timer-seconds32 +--rw class-selector - +--rw network-ranges + +--rw allocation-ranges +--rw option-set-id* leafref +--rw valid-lifetime? dhc6:timer-seconds32 +--rw renew-time? dhc6:timer-seconds32 +--rw rebind-time? dhc6:timer-seconds32 +--rw preferred-lifetime? dhc6:timer-seconds32 +--rw rapid-commit? boolean - +--rw network-range* [id] + +--rw allocation-range* [id] | +--rw id uint32 | +--rw description? string | +--rw network-prefix inet:ipv6-prefix | +--rw option-set-id* leafref | +--rw valid-lifetime? dhc6:timer-seconds32 | +--rw renew-time? dhc6:timer-seconds32 | +--rw rebind-time? dhc6:timer-seconds32 | +--rw preferred-lifetime? dhc6:timer-seconds32 | +--rw rapid-commit? boolean - | +--rw address-pools + | +--rw address-pools {na-assignment}? | | +--rw address-pool* [pool-id] - | | +--rw pool-id uint32 + | | +--rw pool-id string | | +--rw pool-prefix | | | inet:ipv6-prefix | | +--rw start-address | | | inet:ipv6-address-no-zone | | +--rw end-address | | | inet:ipv6-address-no-zone | | +--rw max-address-utilization? dhc6:threshold | | +--rw option-set-id* leafref | | +--rw valid-lifetime? | | | dhc6:timer-seconds32 @@ -373,21 +373,21 @@ | | | dhc6:timer-seconds32 | | +--ro lease-t1? | | | dhc6:timer-seconds32 | | +--ro lease-t2? | | | dhc6:timer-seconds32 | | +--ro status | | +--ro code? uint16 | | +--ro message? string | +--rw prefix-pools {prefix-delegation}? | +--rw prefix-pool* [pool-id] - | +--rw pool-id uint32 + | +--rw pool-id string | +--rw pool-prefix | | inet:ipv6-prefix | +--rw client-prefix-length uint8 | +--rw max-pd-space-utilization? dhc6:threshold | +--rw option-set-id* leafref | +--rw valid-lifetime? | | dhc6:timer-seconds32 | +--rw renew-time? | | dhc6:timer-seconds32 | +--rw rebind-time? @@ -440,48 +440,49 @@ +--ro confirm-count? uint32 +--ro renew-count? uint32 +--ro rebind-count? uint32 +--ro reply-count? uint32 +--ro release-count? uint32 +--ro decline-count? uint32 +--ro reconfigure-count? uint32 +--ro information-request-count? uint32 rpcs: - +---x delete-address-lease + +---x delete-address-lease {na-assignment}? | +---w input | | +---w lease-address-to-delete leafref | +--ro output | +--ro return-message? string +---x delete-prefix-lease {prefix-delegation}? +---w input | +---w lease-prefix-to-delete leafref +--ro output +--ro return-message? string notifications: +---n address-pool-utilization-threshold-exceeded + | {na-assignment}? | +--ro pool-id leafref | +--ro total-pool-addresses uint64 | +--ro max-allocated-addresses uint64 | +--ro allocated-address-count uint64 +---n prefix-pool-utilization-threshold-exceeded | {prefix-delegation}? | +--ro pool-id leafref | +--ro total-pool-prefixes uint64 | +--ro max-allocated-prefixes uint64 | +--ro allocated-prefixes-count uint64 +---n invalid-client-detected | +--ro message-type? enumeration | +--ro duid? dhc6:duid | +--ro description? string - +---n decline-received + +---n decline-received {na-assignment}? | +--ro duid? dhc6:duid | +--ro declined-resources* [] | +--ro (resource-type)? | +--:(declined-address) | | +--ro address? inet:ipv6-address | +--:(declined-prefix) | +--ro prefix? inet:ipv6-prefix +---n non-success-code-sent +--ro duid? dhc6:duid +--ro status @@ -523,24 +524,24 @@ and additional options that are also relevant to the relay and/or client are imported from the 'ietf-dhcpv6-common' module. Where needed, other DHCPv6 option modules can be augmented as they are defined. * class-selector: This is provided as a location for additional implementation specific YANG nodes for vendor specific class selector nodes to be augmented. See Appendix D for an example of this. - * network-ranges: A hierarchical model is used for the allocation of - addresses and prefixes. At the top level 'network-ranges' + * allocation-ranges: A hierarchical model is used for the allocation + of addresses and prefixes. At the top level 'allocation-ranges' container holds global configuration parameters. Under this, the - 'network-range' list is used for specifying IPv6 prefixes and + 'allocation-range' list is used for specifying IPv6 prefixes and additional, prefix specific parameters. * address-pools: Used for IA_NA and IA_TA pool allocations with a container for defining host reservations. State information about active leases from the pool is also located here. * prefix-pools: Defines pools to be used for prefix delegation to clients. Static host reservations can also be configured. As prefix delegation is not supported by all DHCPv6 server implementations, it is enabled by a feature statement. @@ -562,25 +563,25 @@ * invalid-client-detected: Raised when the server detects an invalid client. A description of the error and message type that has generated the notification can be included. * decline-received: Raised when a DHCPv6 Decline message is received from a client. * non-success-code-sent: Raised when there is a status message for an failure. -2.2. DHCPv6 Relay Tree Diagram +3.2. DHCPv6 Relay Tree Diagram The tree diagram in Figure 2 provides an overview of the DHCPv6 relay module. The tree also includes the common functions module - Section 3.4. + Section 4.1. module: ietf-dhcpv6-relay +--rw dhcpv6-relay +--rw enabled? boolean +--rw relay-if* [if-name] | +--rw if-name | | if:interface-ref | +--rw enabled? boolean | +--rw destination-address* | | inet:ipv6-address @@ -696,33 +697,38 @@ the relay. * clear-interface-prefixes: Allows the removal of all of the delegated lease entries from an interface on the relay. Information about notifications: * topology-changed: Raised when the topology of the relay agent is changed, e.g., a client facing interface is reconfigured. -2.3. DHCPv6 Client Tree Diagram +3.3. DHCPv6 Client Tree Diagram The tree diagram in Figure 3 provides an overview of the DHCPv6 client module. The tree also includes the common functions module - defined in Section 3.4. + defined in Section 4.1. module: ietf-dhcpv6-client +--rw dhcpv6-client +--rw enabled? boolean + +--rw client-duid? dhc6:duid + | {non-temp-addr or prefix-del or temp-addr + | and not anon-profile}? +--rw client-if* [if-name] +--rw if-name if:interface-ref +--rw enabled? boolean - +--rw duid? dhc6:duid + +--rw interface-duid? dhc6:duid + | {non-temp-addr or prefix-del or temp-addr + | and anon-profile}? +--rw client-configured-options | +--rw option-request-option | | +--rw oro-option* uint16 | +--rw rapid-commit-option! | +--rw user-class-option! | | +--rw user-class-data-instance* | | [user-class-data-id] | | +--rw user-class-data-id uint8 | | +--rw user-class-data? string | +--rw vendor-class-option @@ -734,50 +740,51 @@ | | +--rw vendor-class-data-id uint8 | | +--rw vendor-class-data? string | +--rw vendor-specific-information-options | | +--rw vendor-specific-information-option* | | [enterprise-number] | | +--rw enterprise-number uint32 | | +--rw vendor-option-data* [sub-option-code] | | +--rw sub-option-code uint16 | | +--rw sub-option-data? string | +--rw reconfigure-accept-option! - +--rw ia-na* [ia-id] {non-temporary-address}? + +--rw ia-na* [ia-id] {non-temp-addr}? | +--rw ia-id uint32 | +--rw ia-na-options | +--ro lease-state | +--ro ia-na-address? inet:ipv6-address | +--ro lease-t1? dhc6:timer-seconds32 | +--ro lease-t2? dhc6:timer-seconds32 | +--ro preferred-lifetime? dhc6:timer-seconds32 | +--ro valid-lifetime? dhc6:timer-seconds32 | +--ro allocation-time? yang:date-and-time | +--ro last-renew-rebind? yang:date-and-time | +--ro server-duid? dhc6:duid | +--ro status | +--ro code? uint16 | +--ro message? string - +--rw ia-ta* [ia-id] {temporary-address}? + +--rw ia-ta* [ia-id] {temp-addr}? | +--rw ia-id uint32 | +--rw ia-ta-options | +--ro lease-state | +--ro ia-ta-address? inet:ipv6-address | +--ro preferred-lifetime? dhc6:timer-seconds32 | +--ro valid-lifetime? dhc6:timer-seconds32 | +--ro allocation-time? yang:date-and-time | +--ro last-renew-rebind? yang:date-and-time | +--ro server-duid? dhc6:duid | +--ro status | +--ro code? uint16 | +--ro message? string - +--rw ia-pd* [ia-id] {prefix-delegation}? + +--rw ia-pd* [ia-id] {prefix-del}? | +--rw ia-id uint32 + | +--rw prefix-length-hint? uint8 | +--rw ia-pd-options | +--ro lease-state | +--ro ia-pd-prefix? inet:ipv6-prefix | +--ro lease-t1? dhc6:timer-seconds32 | +--ro lease-t2? dhc6:timer-seconds32 | +--ro preferred-lifetime? dhc6:timer-seconds32 | +--ro valid-lifetime? dhc6:timer-seconds32 | +--ro allocation-time? yang:date-and-time | +--ro last-renew-rebind? yang:date-and-time | +--ro server-duid? dhc6:duid @@ -791,78 +798,86 @@ +--ro renew-count? uint32 +--ro rebind-count? uint32 +--ro reply-count? uint32 +--ro release-count? uint32 +--ro decline-count? uint32 +--ro reconfigure-count? uint32 +--ro information-request-count? uint32 notifications: +---n invalid-ia-address-detected - | {non-temporary-address or temporary-address}? + | {non-temp-addr or temp-addr}? | +--ro ia-id uint32 | +--ro ia-na-t1-timer? uint32 | +--ro ia-na-t2-timer? uint32 | +--ro invalid-address? inet:ipv6-address | +--ro preferred-lifetime? uint32 | +--ro valid-lifetime? uint32 | +--ro ia-options? binary | +--ro description? string +---n transmission-failed | +--ro failure-type enumeration | +--ro description? string +---n unsuccessful-status-code | +--ro server-duid dhc6:duid | +--ro status | +--ro code? uint16 | +--ro message? string +---n server-duid-changed - {non-temporary-address or prefix-delegation or temporary- - address}? + {non-temp-addr or prefix-del or temp-addr}? +--ro new-server-duid dhc6:duid +--ro previous-server-duid dhc6:duid +--ro lease-ia-na? | -> ../../dhcpv6-client/client-if/ia-na/ia-id - | {non-temporary-address}? + | {non-temp-addr}? +--ro lease-ia-ta? | -> ../../dhcpv6-client/client-if/ia-ta/ia-id - | {temporary-address}? + | {temp-addr}? +--ro lease-ia-pd? -> ../../dhcpv6-client/client-if/ia-pd/ia-id - {prefix-delegation}? + {prefix-del}? Figure 3: DHCPv6 Client Data Module Structure Descriptions of important nodes: * enabled: Globally enables/disables all DHCPv6 client functions. * dhcpv6-client: This container holds the client's DHCPv6 specific configuration. * client-if: As a client may have multiple interfaces requesting configuration over DHCP, they are configured in a list. The if- name leaf is the key and is an interface-ref to the applicable interface defined by the 'ietf-interfaces' YANG module. * enabled: Enables/disables all DHCPv6 client function for the specific interface. - * client-duid: Each client must have a DUID (DHCP Unique Identifier) - to identify itself to servers and relays. A DUID consists of a - two-octet type field and an arbitrary length (1-128 octets) - content field. Currently there are four defined types of DUIDs in - [RFC8415] and [RFC6355]. The DUID may be configured using the - format for one of these types, or using the 'unstructured' format. - The DUID type definitions are imported from the 'ietf- - dhcpv6-common.yang' module. [IANA-HARDWARE-TYPES] and [IANA-PEN] - are referenced for the relevant DUID types. + * client-duid/interface-duid: The DUID (DHCP Unique Identifier) is + used to identify the client to servers and relays. DUID + configuration may conditionally appear in one of two locations in + the client tree, depending on the features that the client + implements. If the client does not support requesting any address + or prefix leasing features, then there is no leaf for a DUID + value. If the client does not implement the 'anon-profile' + feature [RFC7844], then there is a single 'client-duid' leaf that + holds that DUID value which will be used for all DHCPv6 enabled + interfaces. If the 'anon-profile' is enabled, there is an + 'interface-duid' leaf for each DHCP enabled interface. A DUID + consists of a two-octet type field and an arbitrary length (1-128 + octets) content field. Currently there are four defined types of + DUIDs in [RFC8415] and [RFC6355]. The DUID may be configured + using the format for one of these types, or using the + 'unstructured' format. The DUID type definitions are imported + from the 'ietf-dhcpv6-common.yang' module. [IANA-HARDWARE-TYPES] + and [IANA-PEN] are referenced for the relevant DUID types. * client-configured-options: Holds configuration parameters for DHCPv6 options which can be sent by the client. The initial set of applicable option definitions are defined here and additional options that are also relevant to the relay and/or server are imported from the 'ietf-dhcpv6-common' module. Where needed, other DHCPv6 option modules can be augmented as they are defined. * ia-na, ia-ta, ia-pd: Contains configuration nodes relevant for requesting one or more of each of the lease types. Read-only @@ -874,27 +889,440 @@ Information about notifications: * invalid-ia-detected: Raised when the identity association of the client can be proved to be invalid. Possible conditions include: duplicated address, illegal address, etc. * retransmission-failed: Raised when the retransmission mechanism defined in [RFC8415] has failed. -3. DHCPv6 YANG Modules +4. DHCPv6 YANG Modules -3.1. DHCPv6 Server YANG Module +4.1. DHCPv6 Common YANG Module + + This module imports typedefs from [RFC6991]. + + file "ietf-dhcpv6-common@2021-10-25.yang" + + module ietf-dhcpv6-common { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common"; + prefix "dhc6"; + + organization + "IETF DHC (Dynamic Host Configuration) Working Group"; + + contact + "WG Web: + WG List: + Author: Yong Cui + Author: Linhui Sun + Editor: Ian Farrer + Author: Sladjana Zeichlin + Author: Zihao He + Author: Michal Nowikowski "; + + description + "This YANG module defines common components used for the + configuration and management of DHCPv6. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', + 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', + 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document + are to be interpreted as described in BCP 14 (RFC 2119) + (RFC 8174) when, and only when, they appear in all + capitals, as shown here. + + Copyright (c) 2021 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + revision 2021-10-25 { + description + "Initial Revision."; + reference + "XXXX: YANG Data Model for DHCPv6 Configuration"; + } + + typedef threshold { + type uint8 { + range 1..100; + } + description + "Threshold value in percent."; + } + + typedef timer-seconds32 { + type uint32; + units "seconds"; + description + "Timer value type, in seconds (32-bit range)."; + } + + typedef duid-base { + type string { + pattern '([0-9a-fA-F]{2}){3,130}'; + } + description + "Each DHCP server and client has a DUID (DHCP Unique + Identifier). The DUID consists of a two-octet + type field and an arbitrary length (1-128 octets) content + field. The duid-base type is used by other duid types with + additional pattern constraints. + + Currently, there are four defined types of DUIDs + in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL + and DUID-UUID. DUID-unstructured represents DUIDs which + do not follow any of the defined formats."; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 11 + RFC 6355: Definition of the UUID-Based DHCPv6 Unique + Identifier (DUID-UUID), Section 4"; + } + + typedef duid-llt { + type duid-base { + pattern '0001' + + '[0-9a-fA-F]{12,}'; + } + description + "DUID type 1, based on Link-Layer Address Plus Time + (DUID-LLT). Constructed with a 2-octet hardware type assigned + by IANA, 4-octet containing the time the DUID is generated + (represented in seconds since midnight (UTC), January 1, 2000, + modulo 2^32), and a link-layer address. The address is encoded + without separator characters. For example: + + +------+------+----------+--------------+ + | 0001 | 0006 | 28490058 | 00005E005300 | + +------+------+----------+--------------+ + + This example includes the 2-octet DUID type of 1 (0x01), the + hardware type is 0x06 (IEEE Hardware Types) the creation + time is 0x028490058 (constructed as described above). Finally, + the link-layer address is 0x5E005300 (EUI-48 address + 00-00-5E-00-53-00)"; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 11.2 + IANA 'Hardware Types' registry. + "; + } + + typedef duid-en { + type duid-base { + pattern '0002' + + '[0-9a-fA-F]{4,}'; + } + description + "DUID type 2, assigned by vendor based on Enterprise + Number (DUID-EN). This DUID consists of the 4-octet vendor's + registered Private Enterprise Number as maintained by IANA + followed by a unique identifier assigned by the vendor. For + example: + + +------+----------+------------------+ + | 0002 | 00007ED9 | 0CC084D303000912 | + +------+----------+------------------+ + + This example includes the 2-octet DUID type of 2 (0x02), + 4-octets for the Enterprise Number (0x7ED9), followed by + 8-octets of identifier data (0x0CC084D303000912)."; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 11.3 + IANA 'Private Enterprise Numbers' registry. + "; + + } + + typedef duid-ll { + type duid-base { + pattern '0003' + + '([0-9a-fA-F]){4,}'; + } + description + "DUID type 3, based on Link-Layer Address (DUID-LL). + Constructed with a 2-octet hardware type assigned + by IANA, and a link-layer address. The address is encoded + without separator characters. For example: + + +------+------+--------------+ + | 0003 | 0006 | 00005E005300 | + +------+------+--------------+ + + This example includes the 2-octet DUID type of 3 (0x03), the + hardware type is 0x06 (IEEE Hardware Types), and the link-layer + + address is 0x5E005300 (EUI-48 address 00-00-5E-00-53-00)"; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 11.4 + IANA 'Hardware Types' registry. + "; + } + + typedef duid-uuid { + type duid-base { + pattern '0004' + + '[0-9a-fA-F]{32}'; + } + description + "DUID type 4, based on Universally Unique Identifier + (DUID-UUID). This type of DUID consists of 16 octets + containing a 128-bit UUID. For example: + + +------+----------------------------------+ + | 0004 | 9f03b182705747e38a1e422910078642 | + +------+----------------------------------+ + + This example includes the 2-octet DUID type of 4 (0x04), and + the UUID 9f03b182-7057-47e3-8a1e-422910078642."; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 11.5 + RFC 6355: Definition of the UUID-Based DHCPv6 Unique Identifier + + (DUID-UUID)"; + + } + + typedef duid-unstructured { + type duid-base { + pattern '(000[1-4].*|.*[^0-9a-fA-F].*)' { + modifier invert-match; + } + } + description + "Used for DUIDs following any other formats than DUID + types 1-4. For example: + + +----------------------------------+ + | 7b6a164d325946539dc540fb539bc430 | + +----------------------------------+ + + Here, an arbitrary 16-octet value is used. The only constraint + placed on this is that the first 2-octects are not 0x01-0x04 + to avoid collision with the other defined DUID types + (duid-llt, duid-en, duid-ll, or duid-uuid)."; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 11"; + } + + typedef duid { + type union { + type duid-llt; + type duid-en; + type duid-ll; + type duid-uuid; + type duid-unstructured; + } + description + "Represents the DUID and is neutral to the DUID's construction + format."; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 11"; + } + + /* + * Groupings + */ + + grouping status { + description + "Holds information about the most recent status code which + has been sent by the server or received by the client."; + reference "RFC 8415: Dynamic Host Configuration Protocol + for IPv6 (DHCPv6), Section 7.5."; + container status { + description + "Status code information, relating to the success or failure + of operations requested in messages."; + leaf code { + type uint16; + description + "The numeric code for the status encoded in this option. + See the Status Codes registry at + + for the current list of status codes."; + } + leaf message { + type string; + description + "A UTF-8 encoded text string suitable for display to an + end user. It MUST NOT be null-terminated."; + } + } + } + + grouping auth-option-group { + description + "OPTION_AUTH (11) Authentication Option."; + reference "RFC 8415: Dynamic Host Configuration Protocol + for IPv6 (DHCPv6), Section 21.11 + IANA 'Dynamic Host Configuration Protocol (DHCP) Authentication + + Option Name Spaces' registry. + "; + container auth-option { + description + "OPTION_AUTH (11) Authentication Option container."; + leaf protocol { + type uint8; + description + "The authentication protocol used by this Authentication + option."; + } + leaf algorithm { + type uint8; + description + "The algorithm used in the authentication protocol."; + } + leaf rdm { + type uint8; + description + "The Replay Detection Method (RDM) used in this + Authentication option."; + } + leaf replay-detection { + type uint64; + description + "The replay detection information for the RDM."; + } + leaf auth-information { + type string; + description + "The authentication information, as specified by the + protocol and algorithm used in this Authentication + option."; + } + } + } + + grouping status-code-option-group { + description + "OPTION_STATUS_CODE (13) Status Code Option."; + reference "RFC 8415: Dynamic Host Configuration Protocol + for IPv6 (DHCPv6), Section 21.13"; + container status-code-option { + description + "OPTION_STATUS_CODE (13) Status Code Option container."; + leaf status-code { + type uint16; + description + "The numeric code for the status encoded in this option. + See the Status Codes registry at + + for the current list of status codes."; + } + leaf status-message { + type string; + description + "A UTF-8 encoded text string suitable for display to an + end user. It MUST NOT be null-terminated."; + } + } + } + + grouping rapid-commit-option-group { + description + "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 21.14"; + + container rapid-commit-option { + presence "Enable sending of this option"; + description + "OPTION_RAPID_COMMIT (14) Rapid Commit Option container."; + } + } + + grouping vendor-specific-information-option-group { + description + "OPTION_VENDOR_OPTS (17) Vendor-specific Information + Option."; + reference "RFC 8415: Dynamic Host Configuration Protocol + for IPv6 (DHCPv6), Section 21.17"; + container vendor-specific-information-options { + description + "OPTION_VENDOR_OPTS (17) Vendor-specific Information + Option container."; + list vendor-specific-information-option { + key enterprise-number; + description + "The vendor-specific information option allows for + multiple instances in a single message. Each list entry + defines the contents of an instance of the option."; + leaf enterprise-number { + type uint32; + description + "The vendor's registered Enterprise Number, as + maintained by IANA."; + reference "IANA 'Private Enterprise Numbers' registry. + "; + } + list vendor-option-data { + key sub-option-code; + description + "Vendor options, interpreted by vendor-specific + client/server functions."; + leaf sub-option-code { + type uint16; + description + "The code for the sub-option."; + } + leaf sub-option-data { + type string { + pattern '([0-9a-fA-F]{2}){0,}'; + } + description + "The data area for the sub-option."; + } + + } + } + } + } + + grouping reconfigure-accept-option-group { + description + "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. + A client uses the Reconfigure Accept option to announce to + the server whether the client is willing to accept Reconfigure + messages, and a server uses this option to tell the client + whether or not to accept Reconfigure messages. In the absence + of this option, the default behavior is that the client is + unwilling to accept Reconfigure messages. The presence node + is used to enable the option."; + reference "RFC 8415: Dynamic Host Configuration Protocol + for IPv6 (DHCPv6), Section 21.20"; + container reconfigure-accept-option { + presence "Enable sending of this option"; + description + "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option + container."; + } + } + } + + +4.2. DHCPv6 Server YANG Module This module imports typedefs from [RFC6991], [RFC8343]. - file "ietf-dhcpv6-server@2021-07-02.yang" + file "ietf-dhcpv6-server@2021-10-25.yang" module ietf-dhcpv6-server { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; prefix "dhc6-srv"; import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; @@ -941,31 +1370,39 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2021-07-02 { + revision 2021-10-25 { description "Initial Revision."; reference "XXXX: YANG Data Model for DHCPv6 Configuration"; } /* * Features */ + feature na-assignment { + description + "Denotes that the server implements DHCPv6 non-temporary + address assignment."; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 6.2"; + } + feature prefix-delegation { description "Denotes that the server implements DHCPv6 prefix delegation."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6.3"; } /* * Groupings @@ -974,21 +1411,21 @@ grouping resource-config { description "Nodes that are reused at multiple levels in the DHCPv6 server's addressing hierarchy."; leaf-list option-set-id { type leafref { path "/dhcpv6-server/option-sets/option-set/option-set-id"; } description "The ID field of relevant set of DHCPv6 options (option-set) - to be provisioned to clients using the network-range."; + to be provisioned to clients using the allocation-range."; } leaf valid-lifetime { type dhc6:timer-seconds32; description "Valid lifetime for the Identity Association (IA)."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6"; } leaf renew-time { type dhc6:timer-seconds32; @@ -1342,60 +1777,61 @@ "DHCPv6 servers use a 'class-selector' function in order to identify and classify incoming client messages so that they can be given the correct configuration. The mechanisms used for implementing this function vary greatly between different implementations such it is not possible to include in this module. This container provides a location for server implementors to augment their own class-selector YANG."; } - container network-ranges { + container allocation-ranges { description "This model is based on an address and parameter allocation hierarchy. The top level is 'global' - which - is defined as the container for all network-ranges. Under - this are the individual network-ranges."; + is defined as the container for all allocation-ranges. Under + this are the individual allocation-ranges."; uses resource-config; - list network-range { + list allocation-range { key id; description "Network-ranges are identified by the 'id' key."; leaf id { type uint32; mandatory true; description - "Unique identifier for the network range."; + "Unique identifier for the allocation range."; } leaf description { type string; description - "Description for the network range."; + "Description for the allocation range."; } leaf network-prefix { type inet:ipv6-prefix; mandatory true; description "Network prefix."; } uses resource-config; container address-pools { + if-feature na-assignment; description "Configuration for the DHCPv6 server's address pools."; list address-pool { key pool-id; description "List of address pools for allocation to clients, distinguished by 'pool-id'."; leaf pool-id { - type uint32; + type string; mandatory true; description "Unique identifier for the pool."; } leaf pool-prefix { type inet:ipv6-prefix; mandatory true; description "IPv6 prefix for the pool."; } @@ -1479,21 +1914,21 @@ container prefix-pools { if-feature prefix-delegation; description "Configuration for the DHCPv6 server's prefix pools."; list prefix-pool { key pool-id; description "List of prefix pools for allocation to clients, distinguished by 'pool-id'."; leaf pool-id { - type uint32; + type string; mandatory true; description "Unique identifier for the pool."; } leaf pool-prefix { type inet:ipv6-prefix; mandatory true; description "IPv6 prefix for the pool."; } @@ -1579,31 +2013,32 @@ uses message-stats; } } /* * RPCs */ rpc delete-address-lease { nacm:default-deny-all; + if-feature na-assignment; description "Deletes a client's active address lease from the server's lease database. Note this will not cause the address to be revoked from the client, and the lease may be refreshed or renewed by the client."; input { leaf lease-address-to-delete { type leafref { - path "../../dhcpv6-server/network-ranges/network-range" + - "/address-pools/address-pool/active-leases" + - "/active-lease/leased-address"; + path "../../dhcpv6-server/allocation-ranges/" + + "allocation-range/address-pools/address-pool" + + "/active-leases/active-lease/leased-address"; } mandatory true; description "IPv6 address of an active lease that will be deleted from the server."; } } output { leaf return-message { type string; @@ -1618,23 +2053,23 @@ if-feature prefix-delegation; description "Deletes a client's active prefix lease from the server's lease database. Note, this will not cause the prefix to be revoked from the client, and the lease may be refreshed or renewed by the client."; input { leaf lease-prefix-to-delete { type leafref { - path "../../dhcpv6-server/network-ranges/network-range" + - "/prefix-pools/prefix-pool/active-leases/active-lease" + - "/leased-prefix"; + path "../../dhcpv6-server/allocation-ranges/" + + "allocation-range/prefix-pools/prefix-pool" + + "/active-leases/active-lease/leased-prefix"; } mandatory true; description "IPv6 prefix of an active lease that will be deleted from the server."; } } output { leaf return-message { type string; @@ -1642,28 +2077,30 @@ "Response message from the server."; } } } /* * Notifications */ notification address-pool-utilization-threshold-exceeded { + if-feature na-assignment; description "Notification sent when the address pool utilization exceeds the threshold configured in max-address-utilization."; leaf pool-id { type leafref { - path "../../dhcpv6-server/network-ranges/network-range/" + - "address-pools/address-pool/pool-id"; + path "../../dhcpv6-server/allocation-ranges/" + + "allocation-range/address-pools/address-pool" + + "/pool-id"; } mandatory true; description "Leafref to the address pool that the notification is being generated for."; } leaf total-pool-addresses { type uint64; mandatory true; description @@ -1689,22 +2126,22 @@ } notification prefix-pool-utilization-threshold-exceeded { if-feature prefix-delegation; description "Notification sent when the prefix pool utilization exceeds the threshold configured in max-pd-space-utilization."; leaf pool-id { type leafref { - path "../../dhcpv6-server/network-ranges/network-range/" + - "prefix-pools/prefix-pool/pool-id"; + path "../../dhcpv6-server/allocation-ranges" + + "/allocation-range/prefix-pools/prefix-pool/pool-id"; } mandatory true; description "Unique identifier for the pool."; } leaf total-pool-prefixes { type uint64; mandatory true; description "Total number of prefixes in the pool."; @@ -1778,20 +2215,21 @@ } leaf description { type string; description "Description of the event (e.g., and error code or log message)."; } } notification decline-received { + if-feature na-assignment; description "Notification sent when the server has received a Decline (9) message from a client."; leaf duid { type dhc6:duid; description "Client DUID."; } list declined-resources { description @@ -1825,25 +2263,25 @@ leaf duid { type dhc6:duid; description "Client DUID."; } uses dhc6:status; } } -3.2. DHCPv6 Relay YANG Module +4.3. DHCPv6 Relay YANG Module This module imports typedefs from [RFC6991], [RFC8343]. - file "ietf-dhcpv6-relay@2021-07-02.yang" + file "ietf-dhcpv6-relay@2021-10-25.yang" module ietf-dhcpv6-relay { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay"; prefix "dhc6-rly"; import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; @@ -1896,27 +2333,26 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2021-07-02 { + revision 2021-10-25 { description "Initial Revision."; reference "XXXX: YANG Data Model for DHCPv6 Configuration"; } - /* * Features */ feature prefix-delegation { description "Enable if the relay functions as a delegating router for DHCPv6 prefix delegation."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6.3"; @@ -2291,31 +2724,30 @@ path "../../../dhcpv6-relay/relay-if/if-name"; } description "Name of the interface that has been removed."; } leaf last-ipv6-addr { type inet:ipv6-address; description "Last IPv6 address configured on the interface."; } - } } } -3.3. DHCPv6 Client YANG Module +4.4. DHCPv6 Client YANG Module This module imports typedefs from [RFC6991], [RFC8343]. - file "ietf-dhcpv6-client@2021-07-02.yang" + file "ietf-dhcpv6-client@2021-10-25.yang" module ietf-dhcpv6-client { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; prefix "dhc6-clnt"; import ietf-inet-types { prefix inet; reference "RFC 6991: Common YANG Data Types"; @@ -2369,54 +2801,63 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2021-07-02 { + revision 2021-10-25 { description "Initial Revision."; reference "XXXX: YANG Data Model for DHCPv6 Configuration"; } /* * Features */ - feature non-temporary-address { + feature non-temp-addr { description "Denotes that the client supports DHCPv6 non-temporary address allocations."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6.2"; + } - feature prefix-delegation { + + feature prefix-del { description "Denotes that the client implements DHCPv6 prefix delegation."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6.3"; } - feature temporary-address { + feature temp-addr { description "Denotes that the client supports DHCPv6 temporary address allocations."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 6.5"; } + feature anon-profile { + description + "Denotes that the client supports DHCP anonymity + profiles."; + reference "RFC 7844: Anonymity Profiles for DHCP Clients"; + } + /* * Groupings */ grouping message-statistics { description "Counters for DHCPv6 messages."; leaf solicit-count { type uint32; config "false"; @@ -2619,61 +3061,75 @@ */ container dhcpv6-client { description "DHCPv6 client configuration and state."; leaf enabled { type boolean; default true; description "Globally enables the DHCP client function."; + + } + leaf client-duid { + if-feature "non-temp-addr or prefix-del " + + "or temp-addr and not anon-profile"; + type dhc6:duid; + description + "A single Client DUID that will be used by all of the + client's DHCPv6 enabled interfaces."; + reference "RFC 8415: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6), Section 11"; } list client-if { key if-name; description "The list of interfaces for which the client will be requesting DHCPv6 configuration."; leaf if-name { type if:interface-ref; mandatory true; description "Reference to the interface entry that the requested configuration is relevant to."; } leaf enabled { type boolean; default true; description "Enables the DHCP client function for this interface."; } - leaf duid { + leaf interface-duid { + if-feature "non-temp-addr or prefix-del " + + "or temp-addr and anon-profile"; type dhc6:duid; description - "Client DUID."; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 11"; + "Per-interface Client DUIDs for use with DHCP anonymity + profiles."; + reference "RFC 7844: Anonymity Profiles for DHCP Clients, + Section 3"; } container client-configured-options { description "Definitions for DHCPv6 options that can be be sent by the client. Additional option definitions can be augmented to this location from other YANG modules as required."; uses option-request-option-group; uses dhc6:rapid-commit-option-group; uses user-class-option-group; uses vendor-class-option-group; uses dhc6:vendor-specific-information-option-group; uses dhc6:reconfigure-accept-option-group; } list ia-na { - if-feature non-temporary-address; + if-feature non-temp-addr; key ia-id; description "Configuration relevant for an IA_NA (Identity Association for Non-temporary Addresses)."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 13.1"; leaf ia-id { type uint32; description "A unique identifier for this IA_NA."; @@ -2702,26 +3158,27 @@ contact the server from which the addresses in the IA_NA were obtained to extend the lifetimes of the addresses assigned to the IA_NA."; } leaf lease-t2 { type dhc6:timer-seconds32; description "The time interval after which the client should contact any available server to extend the lifetimes of the addresses assigned to the IA_NA."; + } uses lease-state; } } list ia-ta { - if-feature temporary-address; + if-feature temp-addr; key ia-id; description "Configuration relevant for an IA_TA (Identity Association for Temporary Addresses)."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 13.2"; leaf ia-id { type uint32; description "The unique identifier for this IA_TA."; @@ -2740,34 +3197,45 @@ "Information about an active IA_TA lease."; leaf ia-ta-address { type inet:ipv6-address; description "Address that is currently leased."; } uses lease-state; } } list ia-pd { - if-feature prefix-delegation; + if-feature prefix-del; key ia-id; description "Configuration relevant for an IA_PD (Identity Association for Prefix Delegation)."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 13.3"; leaf ia-id { type uint32; description "The unique identifier for this IA_PD."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 12"; } + leaf prefix-length-hint { + type uint8 { + range "1..128"; + } + description "Prefix-length hint value included + in the messages sent to the server to indicate a + preference for the size of the prefix to be delegated."; + reference "RFC 8415: Dynamic Host Configuration Protocol + + for IPv6 (DHCPv6), Section 18.2.1"; + } container ia-pd-options { description "An augmentation point for additional options that the client will send in the IA_PD-options field of OPTION_IA_TA."; } container lease-state { config "false"; description "Information about an active IA_PD delegated prefix."; @@ -2796,21 +3264,21 @@ } uses message-statistics; } } /* * Notifications */ notification invalid-ia-address-detected { - if-feature "non-temporary-address or temporary-address"; + if-feature "non-temp-addr or temp-addr"; description "Notification sent when an address received in an identity association option is determined invalid. Possible conditions include a duplicate or otherwise illegal address."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 18.2.10.1"; leaf ia-id { type uint32; mandatory true; @@ -2928,477 +3396,69 @@ type dhc6:duid; mandatory true; description "DUID of the server sending the unsuccessful error code."; } uses dhc6:status; } notification server-duid-changed { - if-feature "non-temporary-address or prefix-delegation or " + - "temporary-address"; + if-feature "non-temp-addr or prefix-del or " + + "temp-addr"; description "Notification sent when the client receives a lease from a server with different DUID to the one currently stored by the client, e.g., in response to a Rebind message."; reference "RFC 8415: Dynamic Host Configuration Protocol for IPv6 (DHCPv6), Section 18.2.5"; leaf new-server-duid { type dhc6:duid; mandatory true; description "DUID of the new server."; } leaf previous-server-duid { type dhc6:duid; mandatory true; description "DUID of the previous server."; } leaf lease-ia-na { - if-feature non-temporary-address; + if-feature non-temp-addr; type leafref { path "../../dhcpv6-client/client-if/ia-na/ia-id"; } description "Reference to the IA_NA lease."; } leaf lease-ia-ta { - if-feature temporary-address; + if-feature temp-addr; type leafref { path "../../dhcpv6-client/client-if/ia-ta/ia-id"; } description "Reference to the IA_TA lease."; } leaf lease-ia-pd { - if-feature prefix-delegation; + if-feature prefix-del; type leafref { path "../../dhcpv6-client/client-if/ia-pd/ia-id"; } description "Reference to the IA_PD lease."; } } } -3.4. DHCPv6 Common YANG Module - - This module imports typedefs from [RFC6991]. - - file "ietf-dhcpv6-common@2021-07-02.yang" - - module ietf-dhcpv6-common { - yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common"; - prefix "dhc6"; - - organization - "IETF DHC (Dynamic Host Configuration) Working Group"; - - contact - "WG Web: - WG List: - Author: Yong Cui - Author: Linhui Sun - Editor: Ian Farrer - Author: Sladjana Zeichlin - Author: Zihao He - Author: Michal Nowikowski "; - - description - "This YANG module defines common components used for the - configuration and management of DHCPv6. - - The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', - 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', - 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document - are to be interpreted as described in BCP 14 (RFC 2119) - (RFC 8174) when, and only when, they appear in all - capitals, as shown here. - - Copyright (c) 2021 IETF Trust and the persons identified as - authors of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, is permitted pursuant to, and subject - to the license terms contained in, the Simplified BSD License - set forth in Section 4.c of the IETF Trust's Legal Provisions - Relating to IETF Documents - (https://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC XXXX; see - the RFC itself for full legal notices."; - - revision 2021-07-02 { - description - "Initial Revision."; - reference - "XXXX: YANG Data Model for DHCPv6 Configuration"; - } - - typedef threshold { - type uint8 { - range 1..100; - } - description - "Threshold value in percent."; - } - - typedef timer-seconds32 { - type uint32; - units "seconds"; - description - "Timer value type, in seconds (32-bit range)."; - } - - typedef duid-base { - type string { - pattern '([0-9a-fA-F]{2}){3,130}'; - } - description - "Each DHCP server and client has a DUID (DHCP Unique - Identifier). The DUID consists of a two-octet - type field and an arbitrary length (1-128 octets) content - field. The duid-base type is used by other duid types with - additional pattern constraints. - - Currently, there are four defined types of DUIDs - in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL - and DUID-UUID. DUID-unstructured represents DUIDs which - do not follow any of the defined formats."; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 11 - RFC 6355: Definition of the UUID-Based DHCPv6 Unique - Identifier (DUID-UUID), Section 4"; - } - - typedef duid-llt { - type duid-base { - pattern '0001' - + '[0-9a-fA-F]{12,}'; - } - description - "DUID type 1, based on Link-Layer Address Plus Time - (DUID-LLT). Constructed with a 2-octet hardware type assigned - by IANA, 4-octet containing the time the DUID is generated - (represented in seconds since midnight (UTC), January 1, 2000, - modulo 2^32), and a link-layer address. The address is encoded - without separator characters. For example: - - +------+------+----------+--------------+ - | 0001 | 0006 | 28490058 | 00005E005300 | - +------+------+----------+--------------+ - - This example includes the 2-octet DUID type of 1 (0x01), the - hardware type is 0x06 (IEEE Hardware Types) the creation - time is 0x028490058 (constructed as described above). Finally, - the link-layer address is 0x5E005300 (EUI-48 address - 00-00-5E-00-53-00)"; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 11.2 - IANA 'Hardware Types' registry. - "; - } - - typedef duid-en { - type duid-base { - pattern '0002' - + '[0-9a-fA-F]{4,}'; - } - description - "DUID type 2, assigned by vendor based on Enterprise - Number (DUID-EN). This DUID consists of the 4-octet vendor's - registered Private Enterprise Number as maintained by IANA - followed by a unique identifier assigned by the vendor. For - example: - - +------+----------+------------------+ - | 0002 | 00007ED9 | 0CC084D303000912 | - +------+----------+------------------+ - This example includes the 2-octet DUID type of 2 (0x02), - 4-octets for the Enterprise Number (0x7ED9), followed by - 8-octets of identifier data (0x0CC084D303000912)."; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 11.3 - IANA 'Private Enterprise Numbers' registry. - "; - } - - typedef duid-ll { - type duid-base { - pattern '0003' - + '([0-9a-fA-F]){4,}'; - } - description - "DUID type 3, based on Link-Layer Address (DUID-LL). - Constructed with a 2-octet hardware type assigned - by IANA, and a link-layer address. The address is encoded - without separator characters. For example: - - +------+------+--------------+ - | 0003 | 0006 | 00005E005300 | - +------+------+--------------+ - - This example includes the 2-octet DUID type of 3 (0x03), the - hardware type is 0x06 (IEEE Hardware Types), and the link-layer - - address is 0x5E005300 (EUI-48 address 00-00-5E-00-53-00)"; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 11.4 - IANA 'Hardware Types' registry. - "; - } - - typedef duid-uuid { - type duid-base { - pattern '0004' - + '[0-9a-fA-F]{32}'; - } - description - "DUID type 4, based on Universally Unique Identifier - (DUID-UUID). This type of DUID consists of 16 octets - containing a 128-bit UUID. For example: - - +------+----------------------------------+ - | 0004 | 9f03b182705747e38a1e422910078642 | - +------+----------------------------------+ - This example includes the 2-octet DUID type of 4 (0x04), and - the UUID 9f03b182-7057-47e3-8a1e-422910078642."; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 11.5 - RFC 6355: Definition of the UUID-Based DHCPv6 Unique Identifier - - (DUID-UUID)"; - } - - typedef duid-unstructured { - type duid-base { - pattern '[0-9a-fA-F]{3}' - + '[05-9a-fA-F]' - + '([0-9a-fA-F])*'; - } - description - "Used for DUIDs following any other formats than DUID - types 1-4. For example: - - +----------------------------------+ - | 7b6a164d325946539dc540fb539bc430 | - +----------------------------------+ - - Here, an arbitrary 16-octet value is used. The only constraint - placed on this is that the first 2-octects are not 0x01-0x04 - to avoid collision with the other defined DUID types - (duid-llt, duid-en, duid-ll, or duid-uuid)."; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 11"; - } - - typedef duid { - type union { - type duid-llt; - type duid-en; - type duid-ll; - type duid-uuid; - type duid-unstructured; - } - description - "Represents the DUID and is neutral to the DUID's construction - format."; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 11"; - } - - /* - * Groupings - */ - - grouping status { - description - "Holds information about the most recent status code which - has been sent by the server or received by the client."; - reference "RFC 8415: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6), Section 7.5."; - container status { - description - "Status code information, relating to the success or failure - of operations requested in messages."; - leaf code { - type uint16; - description - "The numeric code for the status encoded in this option. - See the Status Codes registry at - - for the current list of status codes."; - } - leaf message { - type string; - description - "A UTF-8 encoded text string suitable for display to an - end user. It MUST NOT be null-terminated."; - } - } - } - - grouping auth-option-group { - description - "OPTION_AUTH (11) Authentication Option."; - reference "RFC 8415: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6), Section 21.11 - IANA 'Dynamic Host Configuration Protocol (DHCP) Authentication - - Option Name Spaces' registry. - "; - container auth-option { - description - "OPTION_AUTH (11) Authentication Option container."; - leaf protocol { - type uint8; - description - "The authentication protocol used by this Authentication - option."; - } - leaf algorithm { - type uint8; - description - "The algorithm used in the authentication protocol."; - } - leaf rdm { - type uint8; - description - "The Replay Detection Method (RDM) used in this - Authentication option."; - } - leaf replay-detection { - type uint64; - description - "The replay detection information for the RDM."; - } - leaf auth-information { - type string; - description - "The authentication information, as specified by the - protocol and algorithm used in this Authentication - option."; - } - } - } - - grouping status-code-option-group { - description - "OPTION_STATUS_CODE (13) Status Code Option."; - reference "RFC 8415: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6), Section 21.13"; - container status-code-option { - description - "OPTION_STATUS_CODE (13) Status Code Option container."; - leaf status-code { - type uint16; - description - "The numeric code for the status encoded in this option. - See the Status Codes registry at - - for the current list of status codes."; - } - leaf status-message { - type string; - description - "A UTF-8 encoded text string suitable for display to an - end user. It MUST NOT be null-terminated."; - } - } - - } - - grouping rapid-commit-option-group { - description - "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; - reference "RFC 8415: Dynamic Host Configuration Protocol for - IPv6 (DHCPv6), Section 21.14"; - container rapid-commit-option { - presence "Enable sending of this option"; - description - "OPTION_RAPID_COMMIT (14) Rapid Commit Option container."; - } - } - - grouping vendor-specific-information-option-group { - description - "OPTION_VENDOR_OPTS (17) Vendor-specific Information - Option."; - reference "RFC 8415: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6), Section 21.17"; - container vendor-specific-information-options { - description - "OPTION_VENDOR_OPTS (17) Vendor-specific Information - Option container."; - list vendor-specific-information-option { - key enterprise-number; - description - "The vendor-specific information option allows for - multiple instances in a single message. Each list entry - defines the contents of an instance of the option."; - leaf enterprise-number { - type uint32; - description - "The vendor's registered Enterprise Number, as - maintained by IANA."; - reference "IANA 'Private Enterprise Numbers' registry. - "; - } - list vendor-option-data { - key sub-option-code; - description - "Vendor options, interpreted by vendor-specific - client/server functions."; - leaf sub-option-code { - type uint16; - description - "The code for the sub-option."; - } - leaf sub-option-data { - type string { - pattern '([0-9a-fA-F]{2}){0,}'; - } - description - "The data area for the sub-option."; - } - } - } - } - } - - grouping reconfigure-accept-option-group { - description - "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. - A client uses the Reconfigure Accept option to announce to - the server whether the client is willing to accept Reconfigure - messages, and a server uses this option to tell the client - whether or not to accept Reconfigure messages. In the absence - of this option, the default behavior is that the client is - unwilling to accept Reconfigure messages. The presence node - is used to enable the option."; - reference "RFC 8415: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6), Section 21.20"; - container reconfigure-accept-option { - presence "Enable sending of this option"; - description - "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option - container."; - } - } - } - - -4. Security Considerations +5. Security Considerations The YANG modules defined in this document are designed to be accessed via network management protocols such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport is TLS [RFC8446]. The Network Configuration Access Control Model (NACM) [RFC8341] provides the means to restrict access for particular NETCONF or @@ -3435,31 +3495,31 @@ denial of service attack as traffic will no longer be routed to the client. Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments. Therefore, it is important to control read access (e.g., only permitting get, get- config, or notifications) to these data nodes. These subtrees and data nodes can be misused to track the activity of a host: * Information the server holds about clients with active leases: - (dhc6-srv/network-ranges/network-range/address-pools/ address- - pool/active-leases) + (dhc6-srv/allocation-ranges/allocation-range/address-pools/ + address-pool/active-leases) * Information the relay holds about clients with active leases: (dhc6-rly/relay-if/prefix-delegation/) Security considerations related to DHCPv6 are discussed in [RFC8415]. Security considerations given in [RFC7950] are also applicable here. -5. IANA Considerations +6. IANA Considerations This document requests IANA to register the following URIs in the "IETF XML Registry" [RFC3688]: URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server Registrant Contact: The IESG. XML: N/A; the requested URI is an XML namespace. URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay Registrant Contact: The IESG. @@ -3489,28 +3549,28 @@ name: ietf-dhcpv6-client namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client prefix: dhc6-clnt reference: RFC XXXX YANG Data Model for DHCPv6 Configuration name: ietf-dhcpv6-common namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common prefix: dhc6 reference: RFC XXXX YANG Data Model for DHCPv6 Configuration -6. Acknowledgments +7. Acknowledgments The authors would like to thank Qi Sun, Lishan Li, Hao Wang, Tomek Mrugalski, Marcin Siodelski, Bernie Volz, Ted Lemon, Bing Liu, Tom Petch, and Acee Lindem for their valuable comments and contributions to this work. -7. Contributors +8. Contributors The following individuals are co-authors of this document: Yong Cui Tsinghua University Beijing, 100084 P.R. China Email: cuiyong@tsinghua.edu.cn Linhui Sun @@ -3531,23 +3591,23 @@ Beijing, 100084 P.R. China Email: hezihao9512@gmail.com Michal Nowikowski Internet Systems Consortium Gdansk Poland Email: godfryd@isc.org -8. References +9. References -8.1. Normative References +9.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, . @@ -3567,20 +3627,25 @@ . [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, . [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, DOI 10.17487/RFC6991, July 2013, . + [RFC7844] Huitema, C., Mrugalski, T., and S. Krishnan, "Anonymity + Profiles for DHCP Clients", RFC 7844, + DOI 10.17487/RFC7844, May 2016, + . + [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, August 2016, . [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, . [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, @@ -3631,33 +3696,33 @@ Internet Assigned Numbers Authority, "Dynamic Host Configuration Protocol (DHCP) Authentication Option Name Spaces", . [IANA-STATUS] Internet Assigned Numbers Authority, "Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Status Codes", . -8.2. Informative References +9.2. Informative References [RFC3319] Schulzrinne, H. and B. Volz, "Dynamic Host Configuration Protocol (DHCPv6) Options for Session Initiation Protocol (SIP) Servers", RFC 3319, DOI 10.17487/RFC3319, July 2003, . Appendix A. Data Tree Examples This section contains XML examples of data trees for the different DHCPv6 elements. -A.1. DHCPv6 Server Configuration Example +A.1. DHCPv6 Server Configuration Examples The following example shows a basic configuration for a server. The configuration defines: * Enabling the DHCP server function * The server's DUID * An option set (id=1) with configuration for the Solicit Max Retry Timeout (SOL_MAX_RT (82)) option. @@ -3676,42 +3741,42 @@ 1 Example DHCP option set 3600 - + 54000 7200 32400 43200 - + 1 - example-network-range + example-allocation-range 2001:db8::/32 1 1 2001:db8:1:1::/64 2001:db8:1:1::1000 2001:db8:1:1::2000 50 1 - - + + Figure 4: Basic Server Configuration Example XML The following example shows a static host reservation within an address pool. The host's lease timers are configured to be longer than hosts from the pool with dynamically assigned addresses. @@ -3734,44 +3799,44 @@ Figure 5: Server Host Reservation Configuration Example XML The following example shows configuration for a network range and pool to be used for delegating prefixes to clients. In this example, each client will receive a /56 prefix. - The 'max-pd-space-utiliation' is set to 80 so that a 'prefix-pool- + The 'max-pd-space-utilization' is set to 80 so that a 'prefix-pool- utilization-threshold-exceeded' notification will be raised if the number of prefix allocations exceeds this. - - + + 1 prefix-pool-example 2001:db8::/32 54000 7200 32400 43200 0 1 2001:db8:1::/48 56 80 - - + + Figure 6: Server Prefix Delegation Configuration Example XML The next example shows the configuration of a set of options that may be returned to clients, depending on the contents of a received DHCP request message. The option set ID is '1', which will referenced by other places in the configuration (e.g., address pool configuration) as the available options for clients that request them. The example shows how the option definitions can be extended via @@ -3857,21 +3922,21 @@ EXAMPLE-INTERFACE-ID Figure 8: Basic Relay Configuration Example XML -A.3. DHCPv6 Client Configuration Examples +A.3. DHCPv6 Client Configuration Example The following example shows a basic configuration for a DHCP client and its interaction with the ietf-interfaces module. The configuration defines: * Enabling the DHCP relay function globally and for the relevant interface. * References the interface that the client configuration is relevant for via an inteface-ref to the ietf-interfaces module. @@ -3896,24 +3961,24 @@ eth0 ianaift:ethernetCsmacd DHCPv6 Relay Interface true true + 000200090CC084D303000913 eth0 true - 000200090CC084D303000913 17 23 24 82 32473 @@ -4013,21 +4078,21 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2021-07-02 { + revision 2021-10-25 { description "Initial Revision."; reference "XXXX: YANG Data Model for DHCPv6 Configuration"; } /* * Groupings */ @@ -4112,22 +4177,22 @@ So that they can be defined within option sets. However, there are some options which are only applicable for specific deployment scenarios and in these cases it may be more logical to augment the option group to a location relevant for the option. One example for this could be OPTION_PD_EXCLUDE (67). This option is only relevant in combination with a delegated prefix which contains a specific prefix. In this case, the following location for the augmentation may be more suitable: - '/dhc6-srv:dhc6-srv/dhc6-srv:network-ranges/dhc6-srv:network-range/ - dhc6-srv:prefix-pools/dhc6-srv:prefix-pool" + '/dhc6-srv:dhc6-srv/dhc6-srv:allocation-ranges/dhc6-srv:allocation- + range/dhc6-srv:prefix-pools/dhc6-srv:prefix-pool" Appendix C. Example Vendor Specific Server Configuration Module This section shows how to extend the server YANG module defined in this document with vendor specific configuration nodes, e.g., configuring access to a lease storage database. The example module defines additional server attributes such as name and description. Storage for leases is configured using a lease- storage container. It allows storing leases in one of three options: @@ -4182,21 +4247,21 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2021-07-02 { + revision 2021-10-25 { description "Initial Revision."; reference "XXXX: YANG Data Model for DHCPv6 Configuration"; } /* * Groupings */ @@ -4444,27 +4509,27 @@ specification for class selection, it only shows an example how it could be defined. At the end of the example augment statements are used to add the defined class selector rules into the overall DHCPv6 addressing hierarchy. This is done in two main parts: * The augmented class-selector configuration in the main DHCPv6 Server configuration. - * client-class leafrefs augmented to "network-range", "address-pool" - and "pd-pool", pointing to the "client-class-name" that is + * client-class leafrefs augmented to "allocation-range", "address- + pool" and "pd-pool", pointing to the "client-class-name" that is required. The mechanism is as follows: class is associated to client based on rules and then client is allowed to get address(es)/prefix(es) from - given network-range/pool if the class name matches. + given allocation-range/pool if the class name matches. module example-dhcpv6-class-select { yang-version 1.1; namespace "https://example.com/ns/" + "example-dhcpv6-class-select"; prefix "dhc6-class-sel"; import ietf-inet-types { prefix inet; } @@ -4506,21 +4571,21 @@ Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2021-07-02 { + revision 2021-10-25 { description "Initial Revision."; reference "XXXX: YANG Data Model for DHCPv6 Configuration"; } /* * Groupings */ @@ -4724,52 +4789,52 @@ key client-class-name; description "List of the client class identifiers applicable to clients served by this address pool"; uses client-class-id; } } } augment "/dhc6-srv:dhcpv6-server/" + - "dhc6-srv:network-ranges/dhc6-srv:network-range" { + "dhc6-srv:allocation-ranges/dhc6-srv:allocation-range" { description "Augment class selector functions to the DHCPv6 server - network-ranges."; + allocation-ranges."; leaf-list client-class { type leafref { path "/dhc6-srv:dhcpv6-server/dhc6-srv:" + "class-selector/client-classes/class/client-class-name"; } description "Leafrefs to client classes."; } } augment "/dhc6-srv:dhcpv6-server/dhc6-srv:" + - "network-ranges/dhc6-srv:network-range/dhc6-srv:" + + "allocation-ranges/dhc6-srv:allocation-range/dhc6-srv:" + "address-pools/dhc6-srv:address-pool" { description "Augment class selector functions to the DHCPv6 server address-pools."; leaf-list client-class { type leafref { path "/dhc6-srv:dhcpv6-server/dhc6-srv:" + "class-selector/client-classes/class/client-class-name"; } description "Leafrefs to client classes."; } } augment "/dhc6-srv:dhcpv6-server/dhc6-srv:" + - "network-ranges/dhc6-srv:network-range/dhc6-srv:" + + "allocation-ranges/dhc6-srv:allocation-range/dhc6-srv:" + "prefix-pools/dhc6-srv:prefix-pool" { description "Augment class selector functions to the DHCPv6 server prefix-pools."; leaf-list client-class { type leafref { path "/dhc6-srv:dhcpv6-server/dhc6-srv:" + "class-selector/client-classes/class/client-class-name"; } description