rfc9243.original   rfc9243.txt 
DHC Working Group I. Farrer, Ed. Internet Engineering Task Force (IETF) I. Farrer, Ed.
Internet-Draft Deutsche Telekom AG Request for Comments: 9243 Deutsche Telekom AG
Intended status: Standards Track 7 March 2022 Category: Standards Track May 2022
Expires: 8 September 2022 ISSN: 2070-1721
YANG Data Model for DHCPv6 Configuration A YANG Data Model for DHCPv6 Configuration
draft-ietf-dhc-dhcpv6-yang-25
Abstract Abstract
This document describes YANG data modules for the configuration and This document describes YANG data models for the configuration and
management of DHCPv6 (Dynamic Host Configuration Protocol for IPv6 management of Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
RFC8415) servers, relays, and clients. (RFC 8415) servers, relays, and clients.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This is an Internet Standards Track document.
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 This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 7841.
This Internet-Draft will expire on 8 September 2022. Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
https://www.rfc-editor.org/info/rfc9243.
Copyright Notice Copyright Notice
Copyright (c) 2022 IETF Trust and the persons identified as the Copyright (c) 2022 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/ Provisions Relating to IETF Documents
license-info) in effect on the date of publication of this document. (https://trustee.ietf.org/license-info) in effect on the date of
Please review these documents carefully, as they describe your rights publication of this document. Please review these documents
and restrictions with respect to this document. Code Components carefully, as they describe your rights and restrictions with respect
extracted from this document must include Simplified BSD License text to this document. Code Components extracted from this document must
as described in Section 4.e of the Trust Legal Provisions and are include Revised BSD License text as described in Section 4.e of the
provided without warranty as described in the Simplified BSD License. Trust Legal Provisions and are provided without warranty as described
in the Revised BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction
1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Scope
1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 3 1.2. Extensibility of the DHCPv6 Server YANG Module
1.2.1. DHCPv6 Option Definitions . . . . . . . . . . . . . . 4 1.2.1. DHCPv6 Option Definitions
1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 2. Terminology
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 6 2.1. Requirements Language
3. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 6 3. DHCPv6 Tree Diagrams
3.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 6 3.1. DHCPv6 Server Tree Diagram
3.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 13 3.2. DHCPv6 Relay Tree Diagram
3.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 16 3.3. DHCPv6 Client Tree Diagram
4. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 20 4. DHCPv6 YANG Modules
4.1. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 20 4.1. DHCPv6 Common YANG Module
4.2. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 29 4.2. DHCPv6 Server YANG Module
4.3. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 50 4.3. DHCPv6 Relay YANG Module
4.4. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 60 4.4. DHCPv6 Client YANG Module
5. Security Considerations . . . . . . . . . . . . . . . . . . . 75 5. Security Considerations
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 77 6. IANA Considerations
6.1. URI Registration . . . . . . . . . . . . . . . . . . . . 77 6.1. URI Registration
6.2. YANG Module Name Registration . . . . . . . . . . . . . . 78 6.2. YANG Module Name Registration
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 78 7. References
8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 78 7.1. Normative References
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.2. Informative References
9.1. Normative References . . . . . . . . . . . . . . . . . . 79 Appendix A. Data Tree Examples
9.2. Informative References . . . . . . . . . . . . . . . . . 82 A.1. DHCPv6 Server Configuration Examples
Appendix A. Data Tree Examples . . . . . . . . . . . . . . . . . 82 A.2. DHCPv6 Relay Configuration Example
A.1. DHCPv6 Server Configuration Examples . . . . . . . . . . 82 A.3. DHCPv6 Client Configuration Example
A.2. DHCPv6 Relay Configuration Example . . . . . . . . . . . 86
A.3. DHCPv6 Client Configuration Example . . . . . . . . . . . 87
Appendix B. Example of Augmenting Additional DHCPv6 Option Appendix B. Example of Augmenting Additional DHCPv6 Option
Definitions . . . . . . . . . . . . . . . . . . . . . . . 90 Definitions
Appendix C. Example Vendor Specific Server Configuration Appendix C. Example Vendor-Specific Server Configuration Module
Module . . . . . . . . . . . . . . . . . . . . . . . . . 93 Appendix D. Example Definition of Class-Selector Configuration
Appendix D. Example definition of class-selector Acknowledgments
configuration . . . . . . . . . . . . . . . . . . . . . . 99 Contributors
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 106 Author's Address
1. Introduction 1. Introduction
DHCPv6 [RFC8415] is used for supplying configuration and other DHCPv6 [RFC8415] is used for supplying configuration and other
relevant parameters to clients in IPv6 networks. This document relevant parameters to clients in IPv6 networks. This document
defines YANG [RFC7950] modules for the configuration and management defines YANG [RFC7950] modules for the configuration and management
of DHCPv6 'element' (servers, relays, and clients) using the Network of DHCPv6 'element' (servers, relays, and clients), using the Network
Configuration Protocol (NETCONF [RFC6241]) or RESTCONF [RFC8040] Configuration Protocol (NETCONF) [RFC6241] or RESTCONF [RFC8040].
protocols.
Separate modules are defined for each element. Additionally, a Separate modules are defined for each element. Additionally, a
'common' module contains typedefs and groupings used by all of the 'common' module contains typedefs and groupings used by all of the
element modules. Appendix A provides XML examples for each of the element modules. Appendix A provides XML examples for each of the
element modules and shows their interaction. element modules and shows their interaction.
The relay and client modules provide configuration which is The relay and client modules provide configuration that is applicable
applicable to devices' interfaces. This is done by importing the to devices' interfaces. This is done by importing the 'ietf-
ietf-interfaces module [RFC8343] and using interface-refs to the interfaces' YANG module [RFC8343] and using interface-refs to the
relevant interface(s). relevant interface(s).
It is worth noting that as DHCPv6 is itself a client configuration It is worth noting that as DHCPv6 is itself a client configuration
protocol, it is not the intention of this document to provide a protocol, it is not the intention of this document to provide a
replacement for the allocation of DHCPv6 assigned addressing and replacement for the allocation of DHCPv6-assigned addressing and
parameters by using NETCONF/YANG. The DHCPv6 client module is parameters by using NETCONF/YANG. The DHCPv6 client module is
intended for the configuration and monitoring of the DHCPv6 client intended for the configuration and monitoring of the DHCPv6 client
function and does not replace DHCPv6 address and parameter function and does not replace DHCPv6 address and parameter
configuration. configuration.
The YANG modules in this document adopt the Network Management The YANG modules in this document adopt the Network Management
Datastore Architecture (NMDA) [RFC8342]. Datastore Architecture (NMDA) [RFC8342].
1.1. Scope 1.1. Scope
[RFC8415] describes the current version of the DHCPv6 base protocol [RFC8415] describes the current version of the DHCPv6 base protocol
specification. A large number of additional specifications have also specification. A large number of additional specifications have also
been published, extending DHCPv6 element functionality and adding new been published, extending DHCPv6 element functionality and adding new
options. The YANG modules contained in this document do not attempt options. The YANG modules contained in this document do not attempt
to capture all of these extensions and additions, rather to model the to capture all of these extensions and additions; rather, they model
DHCPv6 functions and options covered in [RFC8415]. A focus has also the DHCPv6 functions and options covered in [RFC8415]. A focus has
been given on the extensibility of the modules so that they are easy also been given on the extensibility of the modules so that they are
to augment to add additional functionality as required by a easy to augment to add additional functionality as required by a
particular implementation or deployment scenario. particular implementation or deployment scenario.
1.2. Extensibility of the DHCPv6 Server YANG Module 1.2. Extensibility of the DHCPv6 Server YANG Module
The modules in this document only attempt to model DHCPv6-specific The modules in this document only attempt to model DHCPv6-specific
behavior and do not cover the configuration and management of behavior and do not cover the configuration and management of
functionality relevant for specific server implementations. The functionality relevant for specific server implementations. The
level of variance between implementations is too great to attempt to level of variance between implementations is too great to attempt to
standardize them in a way that is useful without being restrictive. standardize them in a way that is useful without being restrictive.
However, it is recognized that implementation-specific configuration However, it is recognized that implementation-specific configuration
and management is also an essential part of DHCP deployment and and management is also an essential part of DHCP deployment and
operations. To resolve this, Appendix C contains an example YANG operations. To resolve this, Appendix C contains an example YANG
module for the configuration of implementation-specific functions, module for the configuration of implementation-specific functions,
illustrating how this functionality can be augmented into the main illustrating how this functionality can be augmented into the main
'ietf-dhcpv6-server.yang' module. 'ietf-dhcpv6-server.yang' module.
In DHCPv6, the concept of 'class selection' for messages received by In DHCPv6, the concept of 'class selection' for messages received by
the server is common. This is the identification and classification the server is common. This is the identification and classification
of messages based on a number of parameters so that the correct of messages based on a number of parameters so that the correct
provisioning information can be supplied. For example, allocating a provisioning information can be supplied, for example, by allocating
prefix from the correct pool, or supplying a set of options relevant a prefix from the correct pool or supplying a set of options relevant
for a specific vendor's client implementation. During the for a specific vendor's client implementation. During the
development of this document, implementations were researched and the development of this document, implementations were researched and the
findings were that while this function is common to all, the method findings were that while this function is common to all, the method
for configuring and implementing this function differs greatly. for configuring and implementing this function differs greatly.
Therefore, configuration of the class selection function has been Therefore, configuration of the class selection function has been
omitted from the DHCPv6 server module to allow implementors to define omitted from the DHCPv6 server module to allow implementors to define
their own suitable YANG modules. Appendix D provides an example of their own suitable YANG modules. Appendix D provides an example of
this, to demonstrate how this can be integrated with the main 'ietf- this, which demonstrates how this can be integrated with the main
dhcpv6-server.yang' module. 'ietf-dhcpv6-server.yang' module.
1.2.1. DHCPv6 Option Definitions 1.2.1. DHCPv6 Option Definitions
A large number of DHCPv6 options have been created in addition to A large number of DHCPv6 options have been created in addition to
those defined in [RFC8415]. As implementations differ widely as to those defined in [RFC8415]. As implementations differ widely as to
which DHCPv6 options they support, the following approach has been which DHCPv6 options they support, the following approach has been
taken to defining options: Only the DHCPv6 options defined in taken to defining options: only the DHCPv6 options defined in
[RFC8415] are included in this document. [RFC8415] are included in this document.
Of these, only the options that require operator configuration are Of these, only the options that require operator configuration are
modeled. For example, OPTION_IA_NA (3) is created by the DHCP server modeled. For example, OPTION_IA_NA (3) is created by the DHCP server
when requested by the client. The contents of the fields in the when requested by the client. The contents of the fields in the
option are based on a number of input configuration parameters which option are based on a number of input configuration parameters that
the server will apply when it receives the request (e.g., the T1/T2 the server will apply when it receives the request (e.g., the T1/T2
timers that are relevant for the pool of addresses). As a result, timers that are relevant for the pool of addresses). As a result,
there are no fields that are directly configurable for the option, so there are no fields that are directly configurable for the option, so
it is not modeled. it is not modeled.
The following table shows the DHCPv6 options that are modeled, the The following table shows the DHCPv6 options that are modeled, the
element(s) they are modeled for, and the relevant YANG module name: element(s) they are modeled for, and the relevant YANG module names:
+---------------------+------+-----+------+-------------------------+ +=====================+======+=====+======+=========================+
| Name |Server|Relay|Client| Module Name | |Name |Server|Relay|Client| Module Name |
+=====================+======+=====+======+=========================+ +=====================+======+=====+======+=========================+
|OPTION_ORO (6) Option| | | X | ietf-dhcpv6-client.yang | |OPTION_ORO (6) Option| | | X | ietf-dhcpv6-client.yang |
| Request Option | | | | | |Request Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
|OPTION_PREFERENCE (7)| X | | | ietf-dhcpv6-server.yang | |OPTION_PREFERENCE (7)| X | | | ietf-dhcpv6-server.yang |
| Preference Option | | | | | |Preference Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_AUTH (11) | X | X | | ietf-dhcpv6-common.yang | |OPTION_AUTH (11) | X | X | | ietf-dhcpv6-common.yang |
|Authentication Option| | | | | |Authentication Option| | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_UNICAST (12) | X | | | ietf-dhcpv6-server.yang | |OPTION_UNICAST (12) | X | | | ietf-dhcpv6-server.yang |
|Server Unicast Option| | | | | |Server Unicast Option| | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_RAPID_COMMIT | X | | X | ietf-dhcpv6-common.yang | |OPTION_RAPID_COMMIT | X | | X | ietf-dhcpv6-common.yang |
| (14) Rapid Commit | | | | | |(14) Rapid Commit | | | | |
| Option | | | | | |Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_USER_CLASS | | | X | ietf-dhcpv6-client.yang | |OPTION_USER_CLASS | | | X | ietf-dhcpv6-client.yang |
| (15) User Class | | | | | |(15) User Class | | | | |
| Option | | | | | |Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_VENDOR_CLASS | | | X | ietf-dhcpv6-client.yang | |OPTION_VENDOR_CLASS | | | X | ietf-dhcpv6-client.yang |
| (16) Vendor Class | | | | | |(16) Vendor Class | | | | |
| Option | | | | | |Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_VENDOR_OPTS | X | | X | ietf-dhcpv6-common.yang | |OPTION_VENDOR_OPTS | X | | X | ietf-dhcpv6-common.yang |
|(17) Vendor-specific | | | | | |(17) Vendor-specific | | | | |
| Information Option | | | | | |Information Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_INTERFACE_ID | | X | | ietf-dhcpv6-relay.yang | |OPTION_INTERFACE_ID | | X | | ietf-dhcpv6-relay.yang |
| (18) Interface-Id | | | | | |(18) Interface-Id | | | | |
| Option | | | | | |Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_RECONF_MSG | X | | | ietf-dhcpv6-server.yang | |OPTION_RECONF_MSG | X | | | ietf-dhcpv6-server.yang |
| (19) Reconfigure | | | | | |(19) Reconfigure | | | | |
| Message Option | | | | | |Message Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
|OPTION_RECONF_ACCEPT | X | | X | ietf-dhcpv6-client.yang | |OPTION_RECONF_ACCEPT | X | | X | ietf-dhcpv6-client.yang |
| (20) Reconfigure | | | | | |(20) Reconfigure | | | | |
| Accept Option | | | | | |Accept Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_INFORMATION | X | | | ietf-dhcpv6-server.yang | |OPTION_INFORMATION | X | | | ietf-dhcpv6-server.yang |
| _REFRESH_TIME (32) | | | | | |_REFRESH_TIME (32) | | | | |
| Information Refresh | | | | | |Information Refresh | | | | |
| Time Option | | | | | |Time Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_SOL_MAX_RT | X | | | ietf-dhcpv6-server.yang | |OPTION_SOL_MAX_RT | X | | | ietf-dhcpv6-server.yang |
| (82) sol max rt | | | | | |(82) sol max rt | | | | |
| Option | | | | | |Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| OPTION_INF_MAX_RT | X | | | ietf-dhcpv6-server.yang | |OPTION_INF_MAX_RT | X | | | ietf-dhcpv6-server.yang |
| (83) inf max rt | | | | | |(83) inf max rt | | | | |
| Option | | | | | |Option | | | | |
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
Table 1: Modeled DHCPv6 Options Table 1: Modeled DHCPv6 Options
Further options definitions can be added using additional YANG Further option definitions can be added using additional YANG modules
modules via augmentation of the relevant element modules from this via augmentation of the relevant element modules from this document.
document. Appendix B contains an example module showing how the Appendix B contains an example module showing how the DHCPv6 option
DHCPv6 option definitions can be extended in this manner. Some definitions can be extended in this manner. Some guidance on how to
guidance on how to write YANG modules for additional DHCPv6 options write YANG modules for additional DHCPv6 options is also provided.
is also provided.
1.3. Terminology 2. Terminology
The reader should be familiar with the YANG data modeling language The reader should be familiar with the YANG data modeling language
defined in [RFC7950]. defined in [RFC7950].
The YANG modules in this document adopt the Network Management The YANG modules in this document adopt NMDA [RFC8342]. The meanings
Datastore Architecture (NMDA) [RFC8342]. The meanings of the symbols of the symbols used in tree diagrams are defined in [RFC8340].
used in tree diagrams are defined in [RFC8340].
The reader should be familiar with DHCPv6 relevant terminology as The reader should be familiar with DHCPv6-relevant terminology
defined in [RFC8415] and other relevant documents. defined in [RFC8415] and other relevant documents.
2. Requirements Language 2.1. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP "OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here. capitals, as shown here.
3. DHCPv6 Tree Diagrams 3. DHCPv6 Tree Diagrams
3.1. DHCPv6 Server Tree Diagram 3.1. DHCPv6 Server Tree Diagram
The tree diagram in Figure 1 provides an overview of the DHCPv6 The tree diagram in Figure 1 provides an overview of the DHCPv6
server module. The tree also includes the common functions module server module. The tree also includes the common functions module
defined in Section 4.1. defined in Section 4.1.
module: ietf-dhcpv6-server module: ietf-dhcpv6-server
+--rw dhcpv6-server +--rw dhcpv6-server
+--rw enabled? boolean +--rw enabled? boolean
+--rw server-duid? dhc6:duid +--rw server-duid? dhc6:duid
+--rw vendor-config +--rw vendor-config
+--rw option-sets +--rw option-sets
| +--rw option-set* [option-set-id] | +--rw option-set* [option-set-id]
| +--rw option-set-id string | +--rw option-set-id string
| +--rw description? string | +--rw description? string
| +--rw preference-option | +--rw preference-option
| | +--rw pref-value? uint8 | | +--rw pref-value? uint8
| +--rw auth-option | +--rw auth-option
| | +--rw algorithm? uint8 | | +--rw algorithm? uint8
| | +--rw rdm? uint8 | | +--rw rdm? uint8
| | +--rw replay-detection? uint64 | | +--rw replay-detection? uint64
| | +--rw (protocol)? | | +--rw (protocol)?
| | +--:(conf-token) | | +--:(conf-token)
| | | +--rw token-auth-information? binary | | | +--rw token-auth-information? binary
| | +--:(rkap) | | +--:(rkap)
| | +--rw datatype? uint8 | | +--rw datatype? uint8
| | +--rw auth-info-value? binary | | +--rw auth-info-value? binary
| +--rw server-unicast-option | +--rw server-unicast-option
| | +--rw server-address? inet:ipv6-address | | +--rw server-address? inet:ipv6-address
| +--rw rapid-commit-option! | +--rw rapid-commit-option!
| +--rw vendor-specific-information-options | +--rw vendor-specific-information-options
| | +--rw vendor-specific-information-option* | | +--rw vendor-specific-information-option*
| | [enterprise-number] | | [enterprise-number]
| | +--rw enterprise-number uint32 | | +--rw enterprise-number uint32
| | +--rw vendor-option-data* [sub-option-code] | | +--rw vendor-option-data* [sub-option-code]
| | +--rw sub-option-code uint16 | | +--rw sub-option-code uint16
| | +--rw sub-option-data? binary | | +--rw sub-option-data? binary
| +--rw reconfigure-message-option | +--rw reconfigure-message-option
| | +--rw msg-type? uint8 | | +--rw msg-type? uint8
| +--rw reconfigure-accept-option! | +--rw reconfigure-accept-option!
| +--rw info-refresh-time-option | +--rw info-refresh-time-option
| | +--rw info-refresh-time? dhc6:timer-seconds32 | | +--rw info-refresh-time? dhc6:timer-seconds32
| +--rw sol-max-rt-option | +--rw sol-max-rt-option
| | +--rw sol-max-rt-value? dhc6:timer-seconds32 | | +--rw sol-max-rt-value? dhc6:timer-seconds32
| +--rw inf-max-rt-option | +--rw inf-max-rt-option
| +--rw inf-max-rt-value? dhc6:timer-seconds32 | +--rw inf-max-rt-value? dhc6:timer-seconds32
+--rw class-selector +--rw class-selector
+--rw allocation-ranges +--rw allocation-ranges
+--rw option-set-id* leafref +--rw option-set-id* leafref
+--rw valid-lifetime? dhc6:timer-seconds32 +--rw valid-lifetime? dhc6:timer-seconds32
+--rw renew-time? dhc6:timer-seconds32 +--rw renew-time? dhc6:timer-seconds32
+--rw rebind-time? dhc6:timer-seconds32 +--rw rebind-time? dhc6:timer-seconds32
+--rw preferred-lifetime? dhc6:timer-seconds32 +--rw preferred-lifetime? dhc6:timer-seconds32
+--rw rapid-commit? boolean +--rw rapid-commit? boolean
+--rw allocation-range* [id] +--rw allocation-range* [id]
| +--rw id string | +--rw id string
| +--rw description? string | +--rw description? string
| +--rw network-prefix inet:ipv6-prefix | +--rw network-prefix inet:ipv6-prefix
| +--rw option-set-id* leafref | +--rw option-set-id* leafref
| +--rw valid-lifetime? dhc6:timer-seconds32 | +--rw valid-lifetime? dhc6:timer-seconds32
| +--rw renew-time? dhc6:timer-seconds32 | +--rw renew-time? dhc6:timer-seconds32
| +--rw rebind-time? dhc6:timer-seconds32 | +--rw rebind-time? dhc6:timer-seconds32
| +--rw preferred-lifetime? dhc6:timer-seconds32 | +--rw preferred-lifetime? dhc6:timer-seconds32
| +--rw rapid-commit? boolean | +--rw rapid-commit? boolean
| +--rw address-pools {na-assignment}? | +--rw address-pools {na-assignment}?
| | +--rw address-pool* [pool-id] | | +--rw address-pool* [pool-id]
| | +--rw pool-id string | | +--rw pool-id string
| | +--rw pool-prefix | | +--rw pool-prefix
| | | inet:ipv6-prefix | | | inet:ipv6-prefix
| | +--rw start-address | | +--rw start-address
| | | inet:ipv6-address-no-zone | | | inet:ipv6-address-no-zone
| | +--rw end-address | | +--rw end-address
| | | inet:ipv6-address-no-zone | | | inet:ipv6-address-no-zone
| | +--rw max-address-utilization? dhc6:threshold | | +--rw max-address-utilization? dhc6:threshold
| | +--rw option-set-id* leafref | | +--rw option-set-id* leafref
| | +--rw valid-lifetime? | | +--rw valid-lifetime?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw renew-time? | | +--rw renew-time?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw rebind-time? | | +--rw rebind-time?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw preferred-lifetime? | | +--rw preferred-lifetime?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw rapid-commit? boolean | | +--rw rapid-commit? boolean
| | +--rw host-reservations | | +--rw host-reservations
| | | +--rw host-reservation* [reserved-addr] | | | +--rw host-reservation* [reserved-addr]
| | | +--rw client-duid? dhc6:duid | | | +--rw client-duid? dhc6:duid
| | | +--rw reserved-addr | | | +--rw reserved-addr
| | | | inet:ipv6-address | | | | inet:ipv6-address
| | | +--rw option-set-id* leafref | | | +--rw option-set-id* leafref
| | | +--rw valid-lifetime? | | | +--rw valid-lifetime?
| | | | dhc6:timer-seconds32 | | | | dhc6:timer-seconds32
| | | +--rw renew-time? | | | +--rw renew-time?
| | | | dhc6:timer-seconds32 | | | | dhc6:timer-seconds32
| | | +--rw rebind-time? | | | +--rw rebind-time?
| | | | dhc6:timer-seconds32 | | | | dhc6:timer-seconds32
| | | +--rw preferred-lifetime? | | | +--rw preferred-lifetime?
| | | | dhc6:timer-seconds32 | | | | dhc6:timer-seconds32
| | | +--rw rapid-commit? boolean | | | +--rw rapid-commit? boolean
| | +--ro active-leases | | +--ro active-leases
| | +--ro total-count uint64 | | +--ro total-count uint64
| | +--ro allocated-count uint64 | | +--ro allocated-count uint64
| | +--ro active-lease* [leased-address] | | +--ro active-lease* [leased-address]
| | +--ro leased-address | | +--ro leased-address
| | | inet:ipv6-address | | | inet:ipv6-address
| | +--ro client-duid? dhc6:duid | | +--ro client-duid? dhc6:duid
| | +--ro ia-id uint32 | | +--ro ia-id uint32
| | +--ro allocation-time? | | +--ro allocation-time?
| | | yang:date-and-time | | | yang:date-and-time
| | +--ro last-renew-rebind? | | +--ro last-renew-rebind?
| | | yang:date-and-time | | | yang:date-and-time
| | +--ro preferred-lifetime? | | +--ro preferred-lifetime?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro valid-lifetime? | | +--ro valid-lifetime?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro lease-t1? | | +--ro lease-t1?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro lease-t2? | | +--ro lease-t2?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro status | | +--ro status
| | +--ro code? uint16 | | +--ro code? uint16
| | +--ro message? string | | +--ro message? string
| +--rw prefix-pools {prefix-delegation}? | +--rw prefix-pools {prefix-delegation}?
| +--rw prefix-pool* [pool-id] | +--rw prefix-pool* [pool-id]
| +--rw pool-id string | +--rw pool-id string
| +--rw pool-prefix | +--rw pool-prefix
| | inet:ipv6-prefix | | inet:ipv6-prefix
| +--rw client-prefix-length uint8 | +--rw client-prefix-length uint8
| +--rw max-pd-space-utilization? dhc6:threshold | +--rw max-pd-space-utilization? dhc6:threshold
| +--rw option-set-id* leafref | +--rw option-set-id* leafref
| +--rw valid-lifetime? | +--rw valid-lifetime?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--rw renew-time? | +--rw renew-time?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--rw rebind-time? | +--rw rebind-time?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--rw preferred-lifetime? | +--rw preferred-lifetime?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--rw rapid-commit? boolean | +--rw rapid-commit? boolean
| +--rw host-reservations | +--rw host-reservations
| | +--rw prefix-reservation* [reserved-prefix] | | +--rw prefix-reservation* [reserved-prefix]
| | | +--rw client-duid? dhc6:duid | | | +--rw client-duid? dhc6:duid
| | | +--rw reserved-prefix | | | +--rw reserved-prefix
| | | | inet:ipv6-prefix | | | | inet:ipv6-prefix
| | | +--rw reserved-prefix-len? uint8 | | | +--rw reserved-prefix-len? uint8
| | +--rw option-set-id* leafref | | +--rw option-set-id* leafref
| | +--rw valid-lifetime? | | +--rw valid-lifetime?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw renew-time? | | +--rw renew-time?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw rebind-time? | | +--rw rebind-time?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw preferred-lifetime? | | +--rw preferred-lifetime?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw rapid-commit? boolean | | +--rw rapid-commit? boolean
| +--ro active-leases | +--ro active-leases
| +--ro total-count uint64 | +--ro total-count uint64
| +--ro allocated-count uint64 | +--ro allocated-count uint64
| +--ro active-lease* [leased-prefix] | +--ro active-lease* [leased-prefix]
| +--ro leased-prefix | +--ro leased-prefix
| | inet:ipv6-prefix | | inet:ipv6-prefix
| +--ro client-duid? dhc6:duid | +--ro client-duid? dhc6:duid
| +--ro ia-id uint32 | +--ro ia-id uint32
| +--ro allocation-time? | +--ro allocation-time?
| | yang:date-and-time | | yang:date-and-time
| +--ro last-renew-rebind? | +--ro last-renew-rebind?
| | yang:date-and-time | | yang:date-and-time
| +--ro preferred-lifetime? | +--ro preferred-lifetime?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--ro valid-lifetime? | +--ro valid-lifetime?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--ro lease-t1? | +--ro lease-t1?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--ro lease-t2? | +--ro lease-t2?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--ro status | +--ro status
| +--ro code? uint16 | +--ro code? uint16
| +--ro message? string | +--ro message? string
+--rw statistics +--rw statistics
+--rw discontinuity-time? yang:date-and-time +--rw discontinuity-time? yang:date-and-time
+--ro solicit-count? yang:counter32 +--ro solicit-count? yang:counter32
+--ro advertise-count? yang:counter32 +--ro advertise-count? yang:counter32
+--ro request-count? yang:counter32 +--ro request-count? yang:counter32
+--ro confirm-count? yang:counter32 +--ro confirm-count? yang:counter32
+--ro renew-count? yang:counter32 +--ro renew-count? yang:counter32
+--ro rebind-count? yang:counter32 +--ro rebind-count? yang:counter32
+--ro reply-count? yang:counter32 +--ro reply-count? yang:counter32
+--ro release-count? yang:counter32 +--ro release-count? yang:counter32
+--ro decline-count? yang:counter32 +--ro decline-count? yang:counter32
+--ro reconfigure-count? yang:counter32 +--ro reconfigure-count? yang:counter32
+--ro information-request-count? yang:counter32 +--ro information-request-count? yang:counter32
+--ro discarded-message-count? yang:counter32 +--ro discarded-message-count? yang:counter32
rpcs: rpcs:
+---x delete-address-lease {na-assignment}? +---x delete-address-lease {na-assignment}?
| +---w input | +---w input
| | +---w lease-address-to-delete leafref | | +---w lease-address-to-delete leafref
| +--ro output | +--ro output
| +--ro return-message? string | +--ro return-message? string
+---x delete-prefix-lease {prefix-delegation}? +---x delete-prefix-lease {prefix-delegation}?
+---w input +---w input
| +---w lease-prefix-to-delete leafref | +---w lease-prefix-to-delete leafref
+--ro output +--ro output
+--ro return-message? string +--ro return-message? string
notifications: notifications:
+---n address-pool-utilization-threshold-exceeded +---n address-pool-utilization-threshold-exceeded
| {na-assignment}? | {na-assignment}?
| +--ro pool-id leafref | +--ro pool-id leafref
| +--ro total-pool-addresses uint64 | +--ro total-pool-addresses uint64
| +--ro max-allocated-addresses uint64 | +--ro max-allocated-addresses uint64
| +--ro allocated-address-count uint64 | +--ro allocated-address-count uint64
+---n prefix-pool-utilization-threshold-exceeded +---n prefix-pool-utilization-threshold-exceeded
| {prefix-delegation}? | {prefix-delegation}?
| +--ro pool-id leafref | +--ro pool-id leafref
| +--ro total-pool-prefixes uint64 | +--ro total-pool-prefixes uint64
| +--ro max-allocated-prefixes uint64 | +--ro max-allocated-prefixes uint64
| +--ro allocated-prefixes-count uint64 | +--ro allocated-prefixes-count uint64
+---n invalid-client-detected +---n invalid-client-detected
| +--ro message-type? enumeration | +--ro message-type? enumeration
| +--ro duid? dhc6:duid | +--ro duid? dhc6:duid
| +--ro description? string | +--ro description? string
+---n decline-received {na-assignment}? +---n decline-received {na-assignment}?
| +--ro duid? dhc6:duid | +--ro duid? dhc6:duid
| +--ro declined-resources* [] | +--ro declined-resources* []
| +--ro (resource-type)? | +--ro (resource-type)?
| +--:(declined-address) | +--:(declined-address)
| | +--ro address? inet:ipv6-address | | +--ro address? inet:ipv6-address
| +--:(declined-prefix) | +--:(declined-prefix)
| +--ro prefix? inet:ipv6-prefix | +--ro prefix? inet:ipv6-prefix
+---n non-success-code-sent +---n non-success-code-sent
+--ro duid? dhc6:duid +--ro duid? dhc6:duid
+--ro status +--ro status
+--ro code? uint16 +--ro code? uint16
+--ro message? string +--ro message? string
Figure 1: DHCPv6 Server Data Module Structure Figure 1: DHCPv6 Server Data Module Structure
Descriptions of important nodes: Descriptions of important nodes:
enabled: This enables/disables the function of the DHCPv6 server.
* enabled: Enables/disables the function of the DHCPv6 server. dhcpv6-server: This container holds the server's DHCPv6-specific
configuration.
* dhcpv6-server: This container holds the server's DHCPv6 specific
configuration.
* server-duid: Each server must have a DUID (DHCP Unique Identifier)
to identify itself to clients. A DUID consists of a two-octet
type field and an arbitrary length (of no more than 128-octets)
content field. Currently there are four DUID types defined 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.
* vendor-config: This container is provided as a location for server-duid: Each server must have a DHCP Unique Identifier
additional implementation-specific YANG nodes for the (DUID) to identify itself to clients. A DUID consists of a
configuration of the device to be augmented. See Appendix C for 2-octet type field and an arbitrary length (of no more than 128
an example of such a module. octets) content field. Currently, there are four DUID types
defined 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.
* option-sets: The server can be configured with multiple option- vendor-config: This container is provided as a location for
sets. These are groups of DHCPv6 options with common parameters additional implementation-specific YANG nodes for the
which will be supplied to clients on request. The 'option-set-id' configuration of the device to be augmented. See Appendix C
field is used to reference an option-set elsewhere in the server's for an example of such a module.
configuration.
* option-set: Holds configuration parameters for DHCPv6 options. option-sets: The server can be configured with multiple option-
The initial set of applicable option definitions are defined here sets. These are groups of DHCPv6 options with common
and additional options that are also relevant to the relay and/or parameters that will be supplied to clients on request. The
client are imported from the 'ietf-dhcpv6-common' module. Where option-set-id field is used to reference an option-set
needed, other DHCPv6 option modules can be augmented as they are elsewhere in the server's configuration.
defined.
* class-selector: This is provided as a location for additional option-set: This holds configuration parameters for DHCPv6
implementation specific YANG nodes for vendor specific class options. The initial set of applicable option definitions are
selector nodes to be augmented. See Appendix D for an example of defined here, and additional options that are also relevant to
this. 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.
* allocation-ranges: A hierarchical model is used for the allocation class-selector: This is provided as a location for additional
of addresses and prefixes. The top level 'allocation-ranges' implementation-specific YANG nodes for vendor-specific class
container holds global configuration parameters. Under this, the selector nodes to be augmented. See Appendix D for an example
'allocation-range' list is used for specifying IPv6 prefixes and of this.
additional, prefix specific parameters.
* address-pools: Used for IA_NA and IA_TA pool allocations with a allocation-ranges: A hierarchical model is used for the
container for defining host reservations. State information about allocation of addresses and prefixes. The top-level
active leases from each pool is also located here. 'allocation-ranges' container holds global configuration
parameters. Under this, the 'allocation-range' list is used
for specifying IPv6 prefixes and additional prefix-specific
parameters.
* prefix-pools: Defines pools to be used for prefix delegation to address-pools: This is used for Identity Association for Non-
clients. Static host reservations can also be configured. As temporary Addresses (IA_NA) and Identity Association for
prefix delegation is not supported by all DHCPv6 server Temporary Addresses (IA_TA) pool allocations with a container
implementations, it is enabled by a feature statement. for defining host reservations. State information about active
leases from each pool is also located here.
Information about RPCs prefix-pools: This 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.
* delete-address-lease: Allows the deletion of a lease for an Information about RPCs:
individual IPv6 address from the server's lease database. delete-address-lease: This allows the deletion of a lease for an
individual IPv6 address from the server's lease database.
* delete-prefix-lease: Allows the deletion of a lease for an delete-prefix-lease: This allows the deletion of a lease for an
individual IPv6 prefix from the server's lease database. individual IPv6 prefix from the server's lease database.
Information about notifications: Information about notifications:
address/prefix-pool-utilization-threshold-exceeded: This is
raised when the number of leased addresses or prefixes in a
pool exceeds the configured usage threshold.
* address/prefix-pool-utilization-threshold-exceeded: Raised when invalid-client-detected: This is raised when the server detects
the number of leased addresses or prefixes in a pool exceeds the an invalid client. A description of the error and message type
configured usage threshold. that has generated the notification can be included.
* 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 decline-received: This is raised when a DHCPv6 Decline message is
from a client. received from a client.
* non-success-code-sent: Raised when there is a status message for a non-success-code-sent: This is raised when there is a status
failure. message for a failure.
3.2. DHCPv6 Relay Tree Diagram 3.2. DHCPv6 Relay Tree Diagram
The tree diagram in Figure 2 provides an overview of the DHCPv6 relay The tree diagram in Figure 2 provides an overview of the DHCPv6 relay
module. The tree also includes the common functions module defined module. The tree also includes the common functions module defined
in Section 4.1. in Section 4.1.
The RPCs in the module are taken from requirements defined in The RPCs in the module are taken from requirements defined in
[RFC8987]. [RFC8987].
module: ietf-dhcpv6-relay module: ietf-dhcpv6-relay
+--rw dhcpv6-relay +--rw dhcpv6-relay
+--rw enabled? boolean +--rw enabled? boolean
+--rw relay-if* [if-name] +--rw relay-if* [if-name]
| +--rw if-name if:interface-ref | +--rw if-name if:interface-ref
| +--rw enabled? boolean | +--rw enabled? boolean
| +--rw destination-address* inet:ipv6-address | +--rw destination-address* inet:ipv6-address
| +--rw link-address? inet:ipv6-address | +--rw link-address? inet:ipv6-address
| +--rw relay-options | +--rw relay-options
| | +--rw auth-option | | +--rw auth-option
| | | +--rw algorithm? uint8 | | | +--rw algorithm? uint8
| | | +--rw rdm? uint8 | | | +--rw rdm? uint8
| | | +--rw replay-detection? uint64 | | | +--rw replay-detection? uint64
| | | +--rw (protocol)? | | | +--rw (protocol)?
| | | +--:(conf-token) | | | +--:(conf-token)
| | | | +--rw token-auth-information? binary | | | | +--rw token-auth-information? binary
| | | +--:(rkap) | | | +--:(rkap)
| | | +--rw datatype? uint8 | | | +--rw datatype? uint8
| | | +--rw auth-info-value? binary | | | +--rw auth-info-value? binary
| | +--rw interface-id-option | | +--rw interface-id-option
| | +--rw interface-id? binary | | +--rw interface-id? binary
| +--rw statistics | +--rw statistics
| | +--rw discontinuity-time? | | +--rw discontinuity-time?
| | | yang:date-and-time | | | yang:date-and-time
| | +--ro solicit-received-count? | | +--ro solicit-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro advertise-sent-count? | | +--ro advertise-sent-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro request-received-count? | | +--ro request-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro confirm-received-count? | | +--ro confirm-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro renew-received-count? | | +--ro renew-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro rebind-received-count? | | +--ro rebind-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro reply-sent-count? | | +--ro reply-sent-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro release-received-count? | | +--ro release-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro decline-received-count? | | +--ro decline-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro reconfigure-sent-count? | | +--ro reconfigure-sent-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro information-request-received-count? | | +--ro information-request-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro unknown-message-received-count? | | +--ro unknown-message-received-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro unknown-message-sent-count? | | +--ro unknown-message-sent-count?
| | | yang:counter32 | | | yang:counter32
| | +--ro discarded-message-count? | | +--ro discarded-message-count?
| | yang:counter32 | | yang:counter32
| +--rw prefix-delegation! {prefix-delegation}? | +--rw prefix-delegation! {prefix-delegation}?
| +--ro pd-leases* [ia-pd-prefix] | +--ro pd-leases* [ia-pd-prefix]
| +--ro ia-pd-prefix inet:ipv6-prefix | +--ro ia-pd-prefix inet:ipv6-prefix
| +--ro last-renew? yang:date-and-time | +--ro last-renew? yang:date-and-time
| +--ro client-peer-address? inet:ipv6-address | +--ro client-peer-address? inet:ipv6-address
| +--ro client-duid? dhc6:duid | +--ro client-duid? dhc6:duid
| +--ro server-duid? dhc6:duid | +--ro server-duid? dhc6:duid
+--rw statistics +--rw statistics
+--ro relay-forward-sent-count? +--ro relay-forward-sent-count?
| yang:counter32 | yang:counter32
+--ro relay-forward-received-count? +--ro relay-forward-received-count?
| yang:counter32 | yang:counter32
+--ro relay-reply-received-count? +--ro relay-reply-received-count?
| yang:counter32 | yang:counter32
+--ro relay-forward-unknown-sent-count? +--ro relay-forward-unknown-sent-count?
| yang:counter32 | yang:counter32
+--ro relay-forward-unknown-received-count? +--ro relay-forward-unknown-received-count?
| yang:counter32 | yang:counter32
+--ro discarded-message-count? +--ro discarded-message-count?
yang:counter32 yang:counter32
rpcs: rpcs:
+---x clear-prefix-entry {prefix-delegation}? +---x clear-prefix-entry {prefix-delegation}?
| +---w input | +---w input
| | +---w lease-prefix leafref | | +---w lease-prefix leafref
| +--ro output | +--ro output
| +--ro return-message? string | +--ro return-message? string
+---x clear-client-prefixes {prefix-delegation}? +---x clear-client-prefixes {prefix-delegation}?
| +---w input | +---w input
| | +---w client-duid dhc6:duid | | +---w client-duid dhc6:duid
| +--ro output | +--ro output
| +--ro return-message? string | +--ro return-message? string
+---x clear-interface-prefixes {prefix-delegation}? +---x clear-interface-prefixes {prefix-delegation}?
+---w input +---w input
| +---w interface -> /dhcpv6-relay/relay-if/if-name | +---w interface -> /dhcpv6-relay/relay-if/if-name
+--ro output +--ro output
+--ro return-message? string +--ro return-message? string
notifications: notifications:
+---n relay-event +---n relay-event
+--ro topology-change +--ro topology-change
+--ro relay-if-name? +--ro relay-if-name?
| -> /dhcpv6-relay/relay-if/if-name | -> /dhcpv6-relay/relay-if/if-name
+--ro last-ipv6-addr? inet:ipv6-address +--ro last-ipv6-addr? inet:ipv6-address
Figure 2: DHCPv6 Relay Data Module Structure Figure 2: DHCPv6 Relay Data Module Structure
Descriptions of important nodes: Descriptions of important nodes:
enabled: This globally enables/disables all DHCPv6 relay
functions.
* enabled: Globally enables/disables all DHCPv6 relay functions. dhcpv6-relay: This container holds the relay's DHCPv6-specific
configuration.
* dhcpv6-relay: This container holds the relay's DHCPv6-specific
configuration.
* relay-if: As a relay may have multiple client-facing interfaces,
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 relay functions for the relay-if: As a relay may have multiple client-facing interfaces,
specific interface. 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.
* destination-addresses: Defines a list of IPv6 addresses that enabled: This enables/disables all DHCPv6 relay functions for the
client messages will be relayed to. May include unicast or specific interface.
multicast addresses.
* link-address: Configures the value that the relay will put into destination-addresses: This defines a list of IPv6 addresses that
the link-address field of Relay-Forward messages. client messages will be relayed to, which may include unicast
or multicast addresses.
* prefix-delegation: As prefix delegation is not supported by all link-address: This configures the value that the relay will put
DHCPv6 relay implementations, it is enabled by this feature into the link-address field of Relay-Forward messages.
statement where required.
* pd-leases: Contains read-only nodes for holding information about prefix-delegation: As prefix delegation is not supported by all
active delegated prefix leases. DHCPv6 relay implementations, it is enabled by this feature
statement where required.
* relay-options: Holds configuration parameters for DHCPv6 options pd-leases: This contains read-only nodes for holding information
which can be sent by the relay. The initial set of applicable about active delegated prefix leases.
option definitions are defined here and additional options that
are also relevant to the server and/or client are imported from
the 'ietf-dhcpv6-common' module. Where needed, other DHCPv6
option modules can be augmented as they are defined.
Information about RPCs relay-options: This holds configuration parameters for DHCPv6
options that can be sent by the relay. The initial set of
applicable option definitions are defined here, and additional
options that are also relevant to the server and/or client are
imported from the 'ietf-dhcpv6-common' module. Where needed,
other DHCPv6 option modules can be augmented as they are
defined.
* clear-prefix-entry: Allows the removal of a delegated lease entry Information about RPCs:
from the relay. clear-prefix-entry: This allows the removal of a delegated lease
entry from the relay.
* clear-client-prefixes: Allows the removal of all of the delegated clear-client-prefixes: This allows the removal of all of the
lease entries for a single client (referenced by client DUID) from delegated lease entries for a single client (referenced by
the relay. client DUID) from the relay.
* clear-interface-prefixes: Allows the removal of all of the clear-interface-prefixes: This allows the removal of all of the
delegated lease entries from an interface on the relay. delegated lease entries from an interface on the relay.
Information about notifications: Information about notifications:
topology-change: This is raised when the topology of the relay
* topology-change: Raised when the topology of the relay agent is agent is changed, e.g., a client-facing interface is
changed, e.g., a client facing interface is reconfigured. reconfigured.
3.3. DHCPv6 Client Tree Diagram 3.3. DHCPv6 Client Tree Diagram
The tree diagram in Figure 3 provides an overview of the DHCPv6 The tree diagram in Figure 3 provides an overview of the DHCPv6
client module. The tree also includes the common functions module client module. The tree also includes the common functions module
defined in Section 4.1. defined in Section 4.1.
module: ietf-dhcpv6-client module: ietf-dhcpv6-client
+--rw dhcpv6-client +--rw dhcpv6-client
+--rw enabled? boolean +--rw enabled? boolean
skipping to change at page 19, line 22 skipping to change at line 871
+--ro lease-ia-ta? +--ro lease-ia-ta?
| -> /dhcpv6-client/client-if/ia-ta/ia-id | -> /dhcpv6-client/client-if/ia-ta/ia-id
| {temp-addr}? | {temp-addr}?
+--ro lease-ia-pd? +--ro lease-ia-pd?
-> /dhcpv6-client/client-if/ia-pd/ia-id -> /dhcpv6-client/client-if/ia-pd/ia-id
{prefix-delegation}? {prefix-delegation}?
Figure 3: DHCPv6 Client Data Module Structure Figure 3: DHCPv6 Client Data Module Structure
Descriptions of important nodes: Descriptions of important nodes:
enabled: This globally enables/disables all DHCPv6 client
functions.
* enabled: Globally enables/disables all DHCPv6 client functions. dhcpv6-client: This container holds the client's DHCPv6-specific
configuration.
* dhcpv6-client: This container holds the client's DHCPv6 specific
configuration.
* client-if: As a client may have multiple interfaces requesting client-if: As a client may have multiple interfaces requesting
configuration over DHCP, they are configured in a list. The if- configuration over DHCP, they are configured in a list. The
name leaf is the key and is an interface-ref to the applicable 'if-name' leaf is the key and is an interface-ref to the
interface defined by the 'ietf-interfaces' YANG module. applicable interface defined by the 'ietf-interfaces' YANG
module.
* enabled: Enables/disables all DHCPv6 client function for the enabled: This enables/disables all DHCPv6 client function for the
specific interface. specific interface.
* client-duid/interface-duid: The DUID (DHCP Unique Identifier) is client-duid/interface-duid: The DUID is used to identify the
used to identify the client to servers and relays. A DUID client to servers and relays. A DUID consists of a 2-octet
consists of a two-octet type field and an arbitrary length (1-128 type field and an arbitrary length (1-128 octets) content
octets) content field. Currently there are four DUID types field. Currently, there are four DUID types defined in
defined in [RFC8415] and [RFC6355]. The DUID may be configured [RFC8415] and [RFC6355]. The DUID may be configured using the
using the format for one of these types, or using the format for one of these types or using the 'unstructured'
'unstructured' format. The DUID type definitions are imported format. The DUID type definitions are imported from the 'ietf-
from the 'ietf-dhcpv6-common.yang' module. [IANA-HARDWARE-TYPES] dhcpv6-common.yang' module. [IANA-HARDWARE-TYPES] and
and [IANA-PEN] are referenced for the relevant DUID types. A DUID [IANA-PEN] are referenced for the relevant DUID types. A DUID
only needs to be configured if the client is requesting addresses only needs to be configured if the client is requesting
and/or prefixes from the server. Presence of the 'client-duid' or addresses and/or prefixes from the server. Presence of the
'interface-duid' leaves is conditional on at least one of the 'client-duid' or 'interface-duid' leaves is conditional on at
'non-temp-addr', 'temp-addr', or 'prefix-delegation' features least one of the 'non-temp-addr', 'temp-addr', or 'prefix-
being enabled. Additionally, if the 'anon-profile' [RFC7844] delegation' features being enabled. Additionally, if the
feature is enabled, a unique DUID can be configured per DHCP 'anon-profile' [RFC7844] feature is enabled, a unique DUID can
enabled interface using the 'interface-duid' leaf, otherwise there be configured per a DHCP-enabled interface using the
is a global 'client-duid' leaf. 'interface-duid' leaf; otherwise, there is a global 'client-
duid' leaf.
* client-configured-options: Holds configuration parameters for client-configured-options: This holds configuration parameters
DHCPv6 options which can be sent by the client. The initial set for DHCPv6 options that can be sent by the client. The initial
of applicable option definitions are defined here and additional set of applicable option definitions are defined here, and
options that are also relevant to the relay and/or server are additional options that are also relevant to the relay and/or
imported from the 'ietf-dhcpv6-common' module. Where needed, server are imported from the 'ietf-dhcpv6-common' module.
other DHCPv6 option modules can be augmented as they are defined. Where needed, other DHCPv6 option modules can be augmented as
they are defined.
* ia-na, ia-ta, ia-pd: Contains configuration nodes relevant for ia-na, ia-ta, ia-pd: These contain configuration nodes relevant
requesting one or more of each of the lease types. Read-only for requesting one or more of each of the lease types. Read-
nodes related to the active leases for each type are also located only nodes related to the active leases for each type are also
here. As these lease types may not be supported by all DHCPv6 located here. As these lease types may not be supported by all
client implementations, they are enabled via individual feature DHCPv6 client implementations, they are enabled via individual
statements. Stateless DHCP ([RFC8415] Section 6.1) is configured feature statements. Stateless DHCP (Section 6.1 of [RFC8415])
when all address and prefix features are disabled. is configured when all address and prefix features are
disabled.
Information about notifications: Information about notifications:
invalid-ia-detected: This is raised when the identity association
of the client can be proved to be invalid. Possible conditions
include duplicated address, illegal address, etc.
* invalid-ia-detected: Raised when the identity association of the retransmission-failed: This is raised when the retransmission
client can be proved to be invalid. Possible conditions include: mechanism defined in [RFC8415] has failed.
duplicated address, illegal address, etc.
* retransmission-failed: Raised when the retransmission mechanism
defined in [RFC8415] has failed.
4. DHCPv6 YANG Modules 4. DHCPv6 YANG Modules
4.1. DHCPv6 Common YANG Module 4.1. DHCPv6 Common YANG Module
This module imports typedefs from [RFC6991]. This module imports typedefs from [RFC6991].
<CODE BEGINS> file "ietf-dhcpv6-common@2022-03-07.yang" <CODE BEGINS> file "ietf-dhcpv6-common@2022-05-04.yang"
module ietf-dhcpv6-common { module ietf-dhcpv6-common {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common";
prefix "dhc6"; prefix "dhc6";
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
skipping to change at page 21, line 46 skipping to change at line 976
Copyright (c) 2022 IETF Trust and the persons identified as Copyright (c) 2022 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 9243
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself (https://www.rfc-editor.org/info/rfc9243); see the RFC itself
for full legal notices."; for full legal notices.";
revision 2022-03-07 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "RFC 9243: A YANG Data Model for DHCPv6 Configuration";
} }
typedef threshold { typedef threshold {
type uint8 { type uint8 {
range 1..100; range 1..100;
} }
description description
"Threshold value in percent."; "Threshold value in percent.";
} }
typedef timer-seconds32 { typedef timer-seconds32 {
type uint32; type uint32;
units "seconds"; units "seconds";
description description
"Timer value type, in seconds (32-bit range)."; "Timer value type in seconds (32-bit range).";
} }
typedef duid-base { typedef duid-base {
type string { type string {
pattern '([0-9a-fA-F]{2}){3,130}'; pattern '([0-9a-fA-F]{2}){3,130}';
} }
description description
"Each DHCP server and client has a DUID (DHCP Unique "Each DHCP server and client has a DHCP Unique Identifier
Identifier). The DUID consists of a two-octet type field (DUID). The DUID consists of a 2-octet type field
and an arbitrary length (1-128 octets) content field. and an arbitrary length (1-128 octets) content field.
The duid-base type is used by other duid types with The duid-base type is used by other duid types with
additional pattern constraints. additional pattern constraints.
Currently, there are four defined types of DUIDs Currently, there are four defined types of DUIDs
in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL and in RFCs 8415 and 6355 -- DUID-LLT, DUID-EN, DUID-LL, and
DUID-UUID. DUID-unstructured represents DUIDs which do not DUID-UUID. DUID-unstructured represents DUIDs that do not
follow any of the defined formats. follow any of the defined formats.
Type 'string' is used to represent the hexadecimal DUID value Type 'string' is used to represent the hexadecimal DUID value
so that pattern constraints can be applied."; so that pattern constraints can be applied.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11 IPv6 (DHCPv6), Section 11
RFC 6355: Definition of the UUID-Based DHCPv6 Unique RFC 6355: Definition of the UUID-Based DHCPv6 Unique
Identifier (DUID-UUID), Section 4"; Identifier (DUID-UUID), Section 4";
} }
typedef duid-llt { typedef duid-llt {
type duid-base { type duid-base {
pattern '0001' pattern '0001'
+ '[0-9a-fA-F]{12,}'; + '[0-9a-fA-F]{12,}';
} }
description description
"DUID type 1, based on Link-Layer Address Plus Time "DUID type 1, based on Link-Layer Address Plus Time
(DUID-LLT). Constructed with a 2-octet hardware type assigned (DUID-LLT). Constructed with a 2-octet hardware type assigned
by IANA, 4-octets containing the time the DUID is generated by IANA, 4 octets containing the time the DUID is generated
(represented in seconds since midnight (UTC), January 1, 2000, (represented in seconds since midnight (UTC), January 1, 2000,
modulo 2^32), and a link-layer address. The address is encoded modulo 2^32), and a link-layer address. The address is encoded
without separator characters. For example: without separator characters. For example:
+------+------+----------+--------------+ +------+------+----------+--------------+
| 0001 | 0006 | 28490058 | 00005E005300 | | 0001 | 0006 | 28490058 | 00005E005300 |
+------+------+----------+--------------+ +------+------+----------+--------------+
This example includes the 2-octet DUID type of 1 (0x01), the This example includes the 2-octet DUID type of 1 (0x01); the
hardware type is 0x06 (IEEE Hardware Types) the creation hardware type is 0x06 (IEEE Hardware Types), and the creation
time is 0x28490058 (constructed as described above). Finally, time is 0x28490058 (constructed as described above). Finally,
the link-layer address is 0x5E005300 (EUI-48 address the link-layer address is 0x5E005300 (EUI-48 address
00-00-5E-00-53-00)"; 00-00-5E-00-53-00).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.2 IPv6 (DHCPv6), Section 11.2
IANA 'Hardware Types' registry. IANA 'Hardware Types' registry
<https://www.iana.org/assignments/arp-parameters>"; <https://www.iana.org/assignments/arp-parameters>";
} }
typedef duid-en { typedef duid-en {
type duid-base { type duid-base {
pattern '0002' pattern '0002'
+ '[0-9a-fA-F]{8,}'; + '[0-9a-fA-F]{8,}';
} }
description description
"DUID type 2, assigned by vendor based on Enterprise "DUID type 2, assigned by vendor based on Enterprise
Number (DUID-EN). This DUID consists of the 4-octet vendor's Number (DUID-EN). This DUID consists of the 4-octet vendor's
registered Private Enterprise Number as maintained by IANA registered Private Enterprise Number, as maintained by IANA,
followed by a unique identifier assigned by the vendor. For followed by a unique identifier assigned by the vendor. For
example: example:
+------+----------+------------------+ +------+----------+------------------+
| 0002 | 00007ED9 | 0CC084D303000912 | | 0002 | 00007ED9 | 0CC084D303000912 |
+------+----------+------------------+ +------+----------+------------------+
This example includes the 2-octet DUID type of 2 (0x02), This example includes the 2-octet DUID type of 2 (0x02),
4-octets for the Enterprise Number (0x7ED9), followed by 4 octets for the Enterprise Number (0x7ED9), followed by
8-octets of identifier data (0x0CC084D303000912)."; 8 octets of identifier data (0x0CC084D303000912).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.3 IPv6 (DHCPv6), Section 11.3
IANA 'Private Enterprise Numbers' registry. IANA 'Private Enterprise Numbers' registry
<https://www.iana.org/assignments/enterprise-numbers>"; <https://www.iana.org/assignments/enterprise-numbers>";
} }
typedef duid-ll { typedef duid-ll {
type duid-base { type duid-base {
pattern '0003' pattern '0003'
+ '([0-9a-fA-F]){4,}'; + '([0-9a-fA-F]){4,}';
} }
description description
"DUID type 3, based on Link-Layer Address (DUID-LL). "DUID type 3, based on Link-Layer Address (DUID-LL).
Constructed with a 2-octet hardware type assigned Constructed with a 2-octet hardware type assigned
by IANA, and a link-layer address. The address is encoded by IANA and a link-layer address. The address is encoded
without separator characters. For example: without separator characters. For example:
+------+------+--------------+ +------+------+--------------+
| 0003 | 0006 | 00005E005300 | | 0003 | 0006 | 00005E005300 |
+------+------+--------------+ +------+------+--------------+
This example includes the 2-octet DUID type of 3 (0x03), the This example includes the 2-octet DUID type of 3 (0x03); the
hardware type is 0x06 (IEEE Hardware Types), and the hardware type is 0x06 (IEEE Hardware Types), and the
link-layer address is 0x5E005300 (EUI-48 address link-layer address is 0x5E005300 (EUI-48 address
00-00-5E-00-53-00)"; 00-00-5E-00-53-00).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.4 IPv6 (DHCPv6), Section 11.4
IANA 'Hardware Types' registry. IANA 'Hardware Types' registry
<https://www.iana.org/assignments/arp-parameters>"; <https://www.iana.org/assignments/arp-parameters>";
} }
typedef duid-uuid { typedef duid-uuid {
type duid-base { type duid-base {
pattern '0004' pattern '0004'
+ '[0-9a-fA-F]{32}'; + '[0-9a-fA-F]{32}';
} }
description description
"DUID type 4, based on Universally Unique Identifier "DUID type 4, based on Universally Unique Identifier
(DUID-UUID). This type of DUID consists of 16 octets (DUID-UUID). This type of DUID consists of 16 octets
containing a 128-bit UUID. For example: containing a 128-bit UUID. For example:
+------+----------------------------------+ +------+----------------------------------+
| 0004 | 9f03b182705747e38a1e422910078642 | | 0004 | 9f03b182705747e38a1e422910078642 |
+------+----------------------------------+ +------+----------------------------------+
This example includes the 2-octet DUID type of 4 (0x04), and This example includes the 2-octet DUID type of 4 (0x04) and
the UUID 9f03b182-7057-47e3-8a1e-422910078642."; the UUID 9f03b182-7057-47e3-8a1e-422910078642.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.5 IPv6 (DHCPv6), Section 11.5
RFC 6355: Definition of the UUID-Based DHCPv6 Unique RFC 6355: Definition of the UUID-Based DHCPv6 Unique
Identifier (DUID-UUID)"; Identifier (DUID-UUID)";
} }
typedef duid-unstructured { typedef duid-unstructured {
type duid-base { type duid-base {
pattern '(000[1-4].*)' { pattern '(000[1-4].*)' {
modifier invert-match; modifier invert-match;
} }
} }
description description
"Used for DUIDs following any other formats than DUID "Used for DUIDs following any formats other than DUID
types 1-4. For example: types 1-4. For example:
+----------------------------------+ +----------------------------------+
| 7b6a164d325946539dc540fb539bc430 | | 7b6a164d325946539dc540fb539bc430 |
+----------------------------------+ +----------------------------------+
Here, an arbitrary 16-octet value is used. The only constraint Here, an arbitrary 16-octet value is used. The only constraint
placed on this is that the first 2-octects are not 0x01-0x04 placed on this is that the first 2 octets are not 0x01-0x04
to avoid collision with the other defined DUID types to avoid collision with the other defined DUID types
(duid-llt, duid-en, duid-ll, or duid-uuid)."; (duid-llt, duid-en, duid-ll, or duid-uuid).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
typedef duid { typedef duid {
type union { type union {
type duid-llt; type duid-llt;
type duid-en; type duid-en;
skipping to change at page 25, line 46 skipping to change at line 1169
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
/* /*
* Groupings * Groupings
*/ */
grouping status { grouping status {
description description
"Holds information about the most recent status code which "Holds information about the most recent status code that
has been sent by the server or received by the client."; has been sent by the server or received by the client.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 7.5."; for IPv6 (DHCPv6), Section 7.5.";
container status { container status {
description description
"Status code information, relating to the success or failure "Status code information, relating to the success or failure
of operations requested in messages."; of operations requested in messages.";
leaf code { leaf code {
type uint16; type uint16;
description description
"The numeric code for the status encoded in this option. "The numeric code for the status encoded in this option.
See the Status Codes registry at See the 'Status Codes' registry at
<https://www.iana.org/assignments/dhcpv6-parameters> <https://www.iana.org/assignments/dhcpv6-parameters>
for the current list of status codes."; for the current list of status codes.";
} }
leaf message { leaf message {
type string; type string;
description description
"A UTF-8 encoded text string suitable for display to an "A UTF-8-encoded text string suitable for display to an
end user. It MUST NOT be null-terminated."; end user. It MUST NOT be null terminated.";
} }
} }
} }
grouping auth-option-group { grouping auth-option-group {
description description
"OPTION_AUTH (11) Authentication Option."; "OPTION_AUTH (11) Authentication Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.11 for IPv6 (DHCPv6), Section 21.11
RFC 3118: Authentication for DHCP Messages RFC 3118: Authentication for DHCP Messages
IANA 'Dynamic Host Configuration Protocol (DHCP) IANA 'Dynamic Host Configuration Protocol (DHCP)
Authentication Option Name Spaces' registry. Authentication Option Name Spaces' registry
<https://www.iana.org/assignments/auth-namespaces>"; <https://www.iana.org/assignments/auth-namespaces>";
container auth-option { container auth-option {
description description
"OPTION_AUTH (11) Authentication Option."; "OPTION_AUTH (11) Authentication Option.";
leaf algorithm { leaf algorithm {
type uint8; type uint8;
description description
"The algorithm used in the authentication protocol."; "The algorithm used in the authentication protocol.";
} }
leaf rdm { leaf rdm {
skipping to change at page 27, line 5 skipping to change at line 1224
"The Replay Detection Method (RDM) used in this "The Replay Detection Method (RDM) used in this
Authentication option."; Authentication option.";
} }
leaf replay-detection { leaf replay-detection {
type uint64; type uint64;
description description
"The replay detection information for the RDM."; "The replay detection information for the RDM.";
} }
choice protocol { choice protocol {
description description
"The authentication protocol used in the option. Namespace "The authentication protocol used in the option. Protocol
values 1 (delayed authentication) and 2 (Delayed Namespace Values 1 (delayed authentication) and 2 (Delayed
Authentication (Obsolete) are not applicable and so are Authentication (Obsolete)) are not applicable and so are
not modeled."; not modeled.";
case conf-token { case conf-token {
leaf token-auth-information { leaf token-auth-information {
type binary; type binary;
description description
"Protocol Namespace Value 0. The authentication "Protocol Namespace Value 0. The authentication
information, as specified by the protocol and information, as specified by the protocol and
algorithm used in this Authentication option."; algorithm used in this Authentication option.";
} }
} }
case rkap { case rkap {
description description
"Protocol Namespace Value 3. RKAP provides protection "Protocol Namespace Value 3. The Reconfigure Key
against misconfiguration of a client caused by a Authentication Protocol (RKAP) provides protection against
Reconfigure message sent by a malicious DHCP server."; misconfiguration of a client caused by a Reconfigure
message sent by a malicious DHCP server.";
leaf datatype { leaf datatype {
type uint8 { type uint8 {
range "1 .. 2"; range "1 .. 2";
} }
description description
"Type of data in the Value field carried in this "Type of data in the Value field carried in this
option. option.
1 Reconfigure key value (used in the Reply 1 Reconfigure key value (used in the Reply
message). message).
2 HMAC-MD5 digest of the message (used in 2 HMAC-MD5 digest of the message (used in
the Reconfigure message)."; the Reconfigure message).";
} }
leaf auth-info-value { leaf auth-info-value {
type binary { type binary {
length 16; length 16;
} }
description description
"Data as defined by the Type field. A 16-octet field."; "Data, as defined by the Type field. A 16-octet field.";
} }
} }
} }
} }
} }
grouping rapid-commit-option-group { grouping rapid-commit-option-group {
description description
"OPTION_RAPID_COMMIT (14) Rapid Commit Option."; "OPTION_RAPID_COMMIT (14) Rapid Commit Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
skipping to change at page 28, line 4 skipping to change at line 1272
} }
} }
} }
} }
grouping rapid-commit-option-group { grouping rapid-commit-option-group {
description description
"OPTION_RAPID_COMMIT (14) Rapid Commit Option."; "OPTION_RAPID_COMMIT (14) Rapid Commit Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.14"; IPv6 (DHCPv6), Section 21.14";
container rapid-commit-option { container rapid-commit-option {
presence "Enable sending of this option"; presence "Enable sending of this option";
description description
"OPTION_RAPID_COMMIT (14) Rapid Commit Option."; "OPTION_RAPID_COMMIT (14) Rapid Commit Option.";
} }
} }
grouping vendor-specific-information-option-group { grouping vendor-specific-information-option-group {
description description
"OPTION_VENDOR_OPTS (17) Vendor-specific Information "OPTION_VENDOR_OPTS (17) Vendor-specific Information
Option."; Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.17"; for IPv6 (DHCPv6), Section 21.17";
container vendor-specific-information-options { container vendor-specific-information-options {
description description
"OPTION_VENDOR_OPTS (17) Vendor-specific Information "OPTION_VENDOR_OPTS (17) Vendor-specific Information
Option."; Option.";
list vendor-specific-information-option { list vendor-specific-information-option {
key enterprise-number; key enterprise-number;
description description
"The Vendor-specific Information option allows for "The Vendor-specific Information Option allows for
multiple instances in a single message. Each list entry multiple instances in a single message. Each list entry
defines the contents of an instance of the option."; defines the contents of an instance of the option.";
leaf enterprise-number { leaf enterprise-number {
type uint32; type uint32;
description description
"The vendor's registered Enterprise Number, as "The vendor's registered Enterprise Number, as
maintained by IANA."; maintained by IANA.";
reference "IANA 'Private Enterprise Numbers' registry. reference "IANA 'Private Enterprise Numbers' registry
<https://www.iana.org/assignments/enterprise-numbers>"; <https://www.iana.org/assignments/enterprise-numbers>";
} }
list vendor-option-data { list vendor-option-data {
key sub-option-code; key sub-option-code;
description description
"Vendor options, interpreted by vendor-specific "Vendor options, interpreted by vendor-specific
client/server functions."; client/server functions.";
leaf sub-option-code { leaf sub-option-code {
type uint16; type uint16;
description description
skipping to change at page 29, line 4 skipping to change at line 1320
description description
"The code for the sub-option."; "The code for the sub-option.";
} }
leaf sub-option-data { leaf sub-option-data {
type binary; type binary;
description description
"The data area for the sub-option."; "The data area for the sub-option.";
} }
} }
} }
} }
} }
grouping reconfigure-accept-option-group { grouping reconfigure-accept-option-group {
description description
"OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option.
A client uses the Reconfigure Accept option to announce to A client uses the Reconfigure Accept Option to announce to
the server whether the client is willing to accept Reconfigure the server whether or not the client is willing to accept
messages, and a server uses this option to tell the client Reconfigure messages, and a server uses this option to tell
whether or not to accept Reconfigure messages. In the absence the client whether or not to accept Reconfigure messages. In
of this option, the default behavior is that the client is the absence of this option, the default behavior is that the
unwilling to accept Reconfigure messages. The presence node client is unwilling to accept Reconfigure messages. The
is used to enable the option."; presence node is used to enable the option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.20"; for IPv6 (DHCPv6), Section 21.20";
container reconfigure-accept-option { container reconfigure-accept-option {
presence "Enable sending of this option"; presence "Enable sending of this option";
description description
"OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option."; "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option.";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4.2. DHCPv6 Server YANG Module 4.2. DHCPv6 Server YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991] and [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-server@2022-03-07.yang"
<CODE BEGINS> file "ietf-dhcpv6-server@2022-05-04.yang"
module ietf-dhcpv6-server { module ietf-dhcpv6-server {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server";
prefix "dhc6-srv"; prefix "dhc6-srv";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-dhcpv6-common { import ietf-dhcpv6-common {
prefix dhc6; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC 9243: A YANG Data Model for DHCPv6 Configuration";
} }
import ietf-netconf-acm { import ietf-netconf-acm {
prefix nacm; prefix nacm;
reference reference
"RFC 8341: Network Configuration Access Control Model"; "RFC 8341: Network Configuration Access Control Model";
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
skipping to change at page 30, line 42 skipping to change at line 1405
Copyright (c) 2022 IETF Trust and the persons identified as Copyright (c) 2022 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 9243
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself (https://www.rfc-editor.org/info/rfc9243); see the RFC itself
for full legal notices."; for full legal notices.";
revision 2022-03-07 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Features * Features
*/ */
feature na-assignment { feature na-assignment {
description description
"Denotes that the server implements DHCPv6 non-temporary "Denotes that the server implements DHCPv6 non-temporary
address assignment."; address assignment.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.2"; IPv6 (DHCPv6), Section 6.2";
skipping to change at page 31, line 37 skipping to change at line 1449
grouping resource-config { grouping resource-config {
description description
"Nodes that are reused at multiple levels in the DHCPv6 "Nodes that are reused at multiple levels in the DHCPv6
server's addressing hierarchy."; server's addressing hierarchy.";
leaf-list option-set-id { leaf-list option-set-id {
type leafref { type leafref {
path "/dhcpv6-server/option-sets/option-set/option-set-id"; path "/dhcpv6-server/option-sets/option-set/option-set-id";
} }
description description
"The ID field of relevant set of DHCPv6 options (option-set) "The ID field of the relevant set of DHCPv6 options
to be provisioned to clients using the allocation-range."; (option-set) to be provisioned to clients using the
allocation-range.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"Valid lifetime for the Identity Association (IA)."; "Valid lifetime for the Identity Association (IA).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 12.1"; IPv6 (DHCPv6), Section 12.1";
} }
leaf renew-time { leaf renew-time {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
skipping to change at page 32, line 16 skipping to change at line 1477
leaf rebind-time { leaf rebind-time {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"Rebind (T2) time."; "Rebind (T2) time.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 4.2"; IPv6 (DHCPv6), Section 4.2";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"Preferred lifetime for the Identity Association (IA)."; "Preferred lifetime for the IA.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 12.1"; IPv6 (DHCPv6), Section 12.1";
} }
leaf rapid-commit { leaf rapid-commit {
type boolean; type boolean;
description description
"When set to 'true', Specifies that client-server exchanges "When set to 'true', specifies that client-server exchanges
involving two messages is supported."; involving two messages is supported.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 5.1"; IPv6 (DHCPv6), Section 5.1";
} }
} }
grouping lease-information { grouping lease-information {
description description
"Binding information for each client that has been allocated "Binding information for each client that has been allocated
an IPv6 address or prefix."; an IPv6 address or prefix.";
skipping to change at page 32, line 45 skipping to change at line 1506
type dhc6:duid; type dhc6:duid;
description description
"Client DUID."; "Client DUID.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
leaf ia-id { leaf ia-id {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"Client's IAID"; "Client's Identity Association IDentifier (IAID).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 12"; IPv6 (DHCPv6), Section 12";
} }
leaf allocation-time { leaf allocation-time {
type yang:date-and-time; type yang:date-and-time;
description description
"Time and date that the lease was made."; "Time and date that the lease was made.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18"; IPv6 (DHCPv6), Section 18";
} }
skipping to change at page 33, line 35 skipping to change at line 1544
"The valid lifetime for the lease expressed in seconds."; "The valid lifetime for the lease expressed in seconds.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6"; IPv6 (DHCPv6), Section 6";
} }
leaf lease-t1 { leaf lease-t1 {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"The time interval after which the client should contact "The time interval after which the client should contact
the server from which the addresses in the IA_NA were the server from which the addresses in the IA_NA were
obtained to extend the lifetimes of the addresses assigned obtained to extend the lifetimes of the addresses assigned
to the IA_PD."; to the Identity Association for Prefix Delegation (IA_PD).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 4.2"; IPv6 (DHCPv6), Section 4.2";
} }
leaf lease-t2 { leaf lease-t2 {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"The time interval after which the client should contact "The time interval after which the client should contact
any available server to extend the lifetimes of the any available server to extend the lifetimes of the
addresses assigned to the IA_PD."; addresses assigned to the IA_PD.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
skipping to change at page 36, line 4 skipping to change at line 1657
} }
grouping preference-option-group { grouping preference-option-group {
description description
"OPTION_PREFERENCE (7) Preference Option."; "OPTION_PREFERENCE (7) Preference Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.8"; IPv6 (DHCPv6), Section 21.8";
container preference-option { container preference-option {
description description
"OPTION_PREFERENCE (7) Preference Option."; "OPTION_PREFERENCE (7) Preference Option.";
leaf pref-value { leaf pref-value {
type uint8; type uint8;
description description
"The preference value for the server in this message. A "The preference value for the server in this message. A
1-octet unsigned integer."; 1-octet unsigned integer.";
} }
} }
} }
grouping server-unicast-option-group { grouping server-unicast-option-group {
description description
"OPTION_UNICAST (12) Server Unicast Option."; "OPTION_UNICAST (12) Server Unicast Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.12"; IPv6 (DHCPv6), Section 21.12";
skipping to change at page 36, line 42 skipping to change at line 1694
description description
"OPTION_RECONF_MSG (19) Reconfigure Message Option."; "OPTION_RECONF_MSG (19) Reconfigure Message Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.19"; IPv6 (DHCPv6), Section 21.19";
container reconfigure-message-option { container reconfigure-message-option {
description description
"OPTION_RECONF_MSG (19) Reconfigure Message Option."; "OPTION_RECONF_MSG (19) Reconfigure Message Option.";
leaf msg-type { leaf msg-type {
type uint8; type uint8;
description description
"5 for Renew message, 6 for Rebind message, 11 for "5 for Renew message, 6 for Rebind message, and 11 for
Information-request message."; Information-request message.";
} }
} }
} }
grouping info-refresh-time-option-group { grouping info-refresh-time-option-group {
description description
"OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh
Time Option."; Time Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
skipping to change at page 38, line 28 skipping to change at line 1778
leaf server-duid { leaf server-duid {
type dhc6:duid; type dhc6:duid;
description description
"DUID of the server."; "DUID of the server.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
container vendor-config { container vendor-config {
description description
"This container provides a location for augmenting vendor "This container provides a location for augmenting vendor
or implementation specific configuration nodes."; or implementation-specific configuration nodes.";
} }
container option-sets { container option-sets {
description description
"A server may allow different option sets to be configured "A server may allow different option sets to be configured
for clients matching specific parameters such as topological for clients matching specific parameters, such as topological
location or client type. The 'option-set' list is a set of location or client type. The 'option-set' list is a set of
options and their contents that will be returned to options and their contents that will be returned to
clients."; clients.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21"; IPv6 (DHCPv6), Section 21";
list option-set { list option-set {
key option-set-id; key option-set-id;
description description
"YANG definitions for DHCPv6 options are contained in "YANG definitions for DHCPv6 options are contained in
separate YANG modules and augmented to this container as separate YANG modules and augmented to this container as
required."; required.";
skipping to change at page 39, line 27 skipping to change at line 1825
uses inf-max-rt-option-group; uses inf-max-rt-option-group;
} }
} }
container class-selector { container class-selector {
description description
"DHCPv6 servers use a 'class-selector' function in order "DHCPv6 servers use a 'class-selector' function in order
to identify and classify incoming client messages to identify and classify incoming client messages
so that they can be given the correct configuration. so that they can be given the correct configuration.
The mechanisms used for implementing this function vary The mechanisms used for implementing this function vary
greatly between different implementations such it is not greatly between different implementations; as such, it is
possible to include in this module. This container provides not possible to include them in this module. This container
a location for server implementors to augment their own provides a location for server implementors to augment their
class-selector YANG."; own class-selector YANG.";
} }
container allocation-ranges { container allocation-ranges {
description description
"This model is based on an address and parameter "This model is based on an address and parameter
allocation hierarchy. The top level is 'global' - which allocation hierarchy. The top level is 'global' -- which
is defined as the container for all allocation-ranges. Under is defined as the container for all allocation-ranges. Under
this are the individual allocation-ranges."; this are the individual allocation-ranges.";
uses resource-config; uses resource-config;
list allocation-range { list allocation-range {
key id; key id;
description description
"Network-ranges are identified by the 'id' key."; "Network ranges are identified by the 'id' key.";
leaf id { leaf id {
type string; type string;
mandatory true; mandatory true;
description description
"Unique identifier for the allocation range."; "Unique identifier for the allocation range.";
} }
leaf description { leaf description {
type string; type string;
description description
"Description for the allocation range."; "Description for the allocation range.";
skipping to change at page 40, line 34 skipping to change at line 1880
leaf pool-id { leaf pool-id {
type string; type string;
mandatory true; mandatory true;
description description
"Unique identifier for the pool."; "Unique identifier for the pool.";
} }
leaf pool-prefix { leaf pool-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description description
"IPv6 prefix for the pool. Should be contained "IPv6 prefix for the pool. Should be contained
within the network-prefix, if configured."; within the network-prefix if configured.";
} }
leaf start-address { leaf start-address {
type inet:ipv6-address-no-zone; type inet:ipv6-address-no-zone;
mandatory true; mandatory true;
description description
"Starting IPv6 address for the pool."; "Starting IPv6 address for the pool.";
} }
leaf end-address { leaf end-address {
type inet:ipv6-address-no-zone; type inet:ipv6-address-no-zone;
mandatory true; mandatory true;
description description
"Ending IPv6 address for the pool."; "Ending IPv6 address for the pool.";
} }
leaf max-address-utilization { leaf max-address-utilization {
type dhc6:threshold; type dhc6:threshold;
description description
"Maximum amount of the addresses in the "Maximum amount of the addresses in the
pool which can be simultaneously allocated, pool that can be simultaneously allocated,
calculated as a percentage of the available calculated as a percentage of the available
addresses (end-address minus start-address plus addresses (end-address minus start-address plus
one), rouded up. Used to set the value for the one), and rounded up. Used to set the value for
address-pool-utilization-threshold-exceeded the address-pool-utilization-threshold-exceeded
notification"; notification.";
} }
uses resource-config; uses resource-config;
container host-reservations { container host-reservations {
description description
"Configuration for host reservations from the "Configuration for host reservations from the
address pool."; address pool.";
list host-reservation { list host-reservation {
key reserved-addr; key reserved-addr;
description description
"List of host reservations."; "List of host reservations.";
skipping to change at page 42, line 37 skipping to change at line 1979
leaf pool-id { leaf pool-id {
type string; type string;
mandatory true; mandatory true;
description description
"Unique identifier for the pool."; "Unique identifier for the pool.";
} }
leaf pool-prefix { leaf pool-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description description
"IPv6 prefix for the pool. Should be contained "IPv6 prefix for the pool. Should be contained
within the network-prefix, if configured."; within the network-prefix if configured.";
} }
leaf client-prefix-length { leaf client-prefix-length {
type uint8 { type uint8 {
range "1 .. 128"; range "1 .. 128";
} }
mandatory true; mandatory true;
description description
"Length of the prefixes that will be delegated "Length of the prefixes that will be delegated
to clients."; to clients.";
} }
leaf max-pd-space-utilization { leaf max-pd-space-utilization {
type dhc6:threshold; type dhc6:threshold;
description description
"Maximum amount of the prefixes in the pool which "Maximum amount of the prefixes in the pool that
can be simultaneously allocated, calculated as a can be simultaneously allocated, calculated as a
percentage of the available prefixes, rounded up. percentage of the available prefixes, and rounded up.
Used to set the value for the Used to set the value for the
prefix-pool-utilization-threshold-exceeded prefix-pool-utilization-threshold-exceeded
notification"; notification.";
} }
uses resource-config; uses resource-config;
container host-reservations { container host-reservations {
description description
"Configuration for host reservations from the "Configuration for host reservations from the
prefix pool."; prefix pool.";
list prefix-reservation { list prefix-reservation {
key reserved-prefix; key reserved-prefix;
description description
"Reserved prefix reservation."; "Reserved prefix reservation.";
leaf client-duid { leaf client-duid {
type dhc6:duid; type dhc6:duid;
description description
"Client DUID for the reservation."; "Client DUID for the reservation.";
} }
leaf reserved-prefix { leaf reserved-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"Reserved IPv6 prefix"; "Reserved IPv6 prefix.";
} }
leaf reserved-prefix-len { leaf reserved-prefix-len {
type uint8; type uint8;
description description
"Reserved IPv6 prefix length."; "Reserved IPv6 prefix length.";
} }
} }
uses resource-config; uses resource-config;
} }
container active-leases { container active-leases {
skipping to change at page 44, line 40 skipping to change at line 2078
/* /*
* RPCs * RPCs
*/ */
rpc delete-address-lease { rpc delete-address-lease {
nacm:default-deny-all; nacm:default-deny-all;
if-feature na-assignment; if-feature na-assignment;
description description
"Deletes a client's active address lease from the server's "Deletes a client's active address lease from the server's
lease database. Note this will not cause the address to be lease database. Note that this will not cause the address
revoked from the client, and the lease may be refreshed or to be revoked from the client, and the lease may be refreshed
renewed by the client."; or renewed by the client.";
input { input {
leaf lease-address-to-delete { leaf lease-address-to-delete {
type leafref { type leafref {
path "/dhcpv6-server/allocation-ranges/" + path "/dhcpv6-server/allocation-ranges/" +
"allocation-range/address-pools/address-pool" + "allocation-range/address-pools/address-pool" +
"/active-leases/active-lease/leased-address"; "/active-leases/active-lease/leased-address";
} }
mandatory true; mandatory true;
description description
"IPv6 address of an active lease that will be "IPv6 address of an active lease that will be
deleted from the server."; deleted from the server.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a "Response message from the server. If available, a
language identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
rpc delete-prefix-lease { rpc delete-prefix-lease {
nacm:default-deny-all; nacm:default-deny-all;
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Deletes a client's active prefix lease from the server's "Deletes a client's active prefix lease from the server's
lease database. Note, this will not cause the prefix to be lease database. Note that this will not cause the prefix
revoked from the client, and the lease may be refreshed or to be revoked from the client, and the lease may be refreshed
renewed by the client."; or renewed by the client.";
input { input {
leaf lease-prefix-to-delete { leaf lease-prefix-to-delete {
type leafref { type leafref {
path "/dhcpv6-server/allocation-ranges/" + path "/dhcpv6-server/allocation-ranges/" +
"allocation-range/prefix-pools/prefix-pool" + "allocation-range/prefix-pools/prefix-pool" +
"/active-leases/active-lease/leased-prefix"; "/active-leases/active-lease/leased-prefix";
} }
mandatory true; mandatory true;
description description
"IPv6 prefix of an active lease that will be deleted "IPv6 prefix of an active lease that will be deleted
from the server."; from the server.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a "Response message from the server. If available, a
language identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
/* /*
* Notifications * Notifications
*/ */
notification address-pool-utilization-threshold-exceeded { notification address-pool-utilization-threshold-exceeded {
if-feature na-assignment; if-feature na-assignment;
description description
"Notification sent when the address pool "Notification sent when the address pool
utilization exceeds the threshold configured in utilization exceeds the threshold configured in
max-address-utilization."; max-address-utilization.";
skipping to change at page 46, line 37 skipping to change at line 2172
mandatory true; mandatory true;
description description
"Total number of addresses in the pool (end-address minus "Total number of addresses in the pool (end-address minus
start-address plus one)."; start-address plus one).";
} }
leaf max-allocated-addresses { leaf max-allocated-addresses {
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Maximum number of addresses that can be simultaneously "Maximum number of addresses that can be simultaneously
allocated from the pool. This value may be less than count allocated from the pool. This value may be less than the
of total addresses. Calculated as the count of total addresses. Calculated as the
max-address-utilization (percentage) of the max-address-utilization (percentage) of the
total-pool-addresses, rounded up."; total-pool-addresses and rounded up.";
} }
leaf allocated-address-count { leaf allocated-address-count {
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Number of addresses allocated from the pool."; "Number of addresses allocated from the pool.";
} }
} }
notification prefix-pool-utilization-threshold-exceeded { notification prefix-pool-utilization-threshold-exceeded {
skipping to change at page 47, line 28 skipping to change at line 2211
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Total number of prefixes in the pool."; "Total number of prefixes in the pool.";
} }
leaf max-allocated-prefixes { leaf max-allocated-prefixes {
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Maximum number of prefixes that can be simultaneously "Maximum number of prefixes that can be simultaneously
allocated from the pool. This value may be less than allocated from the pool. This value may be less than
count of total prefixes. Calculated as the the count of total prefixes. Calculated as the
max-prefix-utilization (percentage) of the max-prefix-utilization (percentage) of the
total-pool-prefixes, rounded up."; total-pool-prefixes and rounded up.";
} }
leaf allocated-prefixes-count { leaf allocated-prefixes-count {
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Number of prefixes allocated from the pool."; "Number of prefixes allocated from the pool.";
} }
} }
notification invalid-client-detected { notification invalid-client-detected {
skipping to change at page 50, line 7 skipping to change at line 2330
description description
"Client DUID."; "Client DUID.";
} }
uses dhc6:status; uses dhc6:status;
} }
} }
<CODE ENDS> <CODE ENDS>
4.3. DHCPv6 Relay YANG Module 4.3. DHCPv6 Relay YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991] and [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-relay@2022-03-07.yang"
<CODE BEGINS> file "ietf-dhcpv6-relay@2022-05-04.yang"
module ietf-dhcpv6-relay { module ietf-dhcpv6-relay {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay";
prefix "dhc6-rly"; prefix "dhc6-rly";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-dhcpv6-common { import ietf-dhcpv6-common {
prefix dhc6; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC 9243: A YANG Data Model for DHCPv6 Configuration";
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
reference reference
"RFC 8343: A YANG Data Model for Interface Management"; "RFC 8343: A YANG Data Model for Interface Management";
} }
import ietf-netconf-acm { import ietf-netconf-acm {
prefix nacm; prefix nacm;
reference reference
"RFC 8341: Network Configuration Access Control Model"; "RFC 8341: Network Configuration Access Control Model";
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
skipping to change at page 51, line 30 skipping to change at line 2401
Copyright (c) 2022 IETF Trust and the persons identified as Copyright (c) 2022 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 9243
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself (https://www.rfc-editor.org/info/rfc9243); see the RFC itself
for full legal notices."; for full legal notices.";
revision 2022-03-07 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Features * Features
*/ */
feature prefix-delegation { feature prefix-delegation {
description description
"Enable if the relay functions as a delegating router for "Enable if the relay functions as a delegating router for
DHCPv6 prefix delegation."; DHCPv6 prefix delegation.";
skipping to change at page 57, line 7 skipping to change at line 2665
type boolean; type boolean;
description description
"Enables the DHCP relay function for this interface."; "Enables the DHCP relay function for this interface.";
} }
leaf-list destination-address { leaf-list destination-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Each DHCPv6 relay agent may be configured with a list "Each DHCPv6 relay agent may be configured with a list
of destination addresses for relayed messages. of destination addresses for relayed messages.
The list may include unicast addresses, multicast The list may include unicast addresses, multicast
addresses or other valid addresses."; addresses, or other valid addresses.";
} }
leaf link-address { leaf link-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"An address that may be used by the server to identify "An address that may be used by the server to identify
the link on which the client is located."; the link on which the client is located.";
} }
container relay-options { container relay-options {
description description
"Definitions for DHCPv6 options that can be sent "Definitions for DHCPv6 options that can be sent
skipping to change at page 58, line 6 skipping to change at line 2712
/* /*
* RPCs * RPCs
*/ */
rpc clear-prefix-entry { rpc clear-prefix-entry {
nacm:default-deny-all; nacm:default-deny-all;
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Clears an entry for an active delegated prefix "Clears an entry for an active delegated prefix
from the relay."; from the relay.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4"; Section 4.4";
input { input {
leaf lease-prefix { leaf lease-prefix {
type leafref { type leafref {
path "/dhcpv6-relay/relay-if/prefix-delegation" + path "/dhcpv6-relay/relay-if/prefix-delegation" +
"/pd-leases/ia-pd-prefix"; "/pd-leases/ia-pd-prefix";
} }
mandatory true; mandatory true;
description description
"IPv6 prefix of an active lease entry that will "IPv6 prefix of an active lease entry that will
be deleted from the relay."; be deleted from the relay.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a language "Response message from the server. If available, a
identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
rpc clear-client-prefixes { rpc clear-client-prefixes {
nacm:default-deny-all; nacm:default-deny-all;
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Clears all active prefix entries for a single client."; "Clears all active prefix entries for a single client.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4"; Section 4.4";
input { input {
leaf client-duid { leaf client-duid {
type dhc6:duid; type dhc6:duid;
mandatory true; mandatory true;
description description
"DUID of the client."; "DUID of the client.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a "Response message from the server. If available, a
language identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
rpc clear-interface-prefixes { rpc clear-interface-prefixes {
nacm:default-deny-all; nacm:default-deny-all;
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Clears all delegated prefix bindings from an "Clears all delegated prefix bindings from an
interface on the relay."; interface on the relay.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4"; Section 4.4";
input { input {
leaf interface { leaf interface {
type leafref { type leafref {
path "/dhcpv6-relay/relay-if/if-name"; path "/dhcpv6-relay/relay-if/if-name";
} }
mandatory true; mandatory true;
description description
"Reference to the relay interface that will have all "Reference to the relay interface that will have all
active prefix delegation bindings deleted."; active prefix delegation bindings deleted.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a "Response message from the server. If available, a
language identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
/* /*
* Notifications * Notifications
*/ */
notification relay-event { notification relay-event {
description description
"DHCPv6 relay event notifications."; "DHCPv6 relay event notifications.";
container topology-change { container topology-change {
description description
"Raised if the entry for an interface with DHCPv6 related "Raised if the entry for an interface with DHCPv6-related
configuration or state is removed from if:interface-refs."; configuration or state is removed from if:interface-refs.";
leaf relay-if-name { leaf relay-if-name {
type leafref { type leafref {
path "/dhcpv6-relay/relay-if/if-name"; path "/dhcpv6-relay/relay-if/if-name";
} }
description description
"Name of the interface that has been removed."; "Name of the interface that has been removed.";
} }
leaf last-ipv6-addr { leaf last-ipv6-addr {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Last IPv6 address configured on the interface."; "Last IPv6 address configured on the interface.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4.4. DHCPv6 Client YANG Module 4.4. DHCPv6 Client YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991] and [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-client@2022-03-07.yang"
<CODE BEGINS> file "ietf-dhcpv6-client@2022-05-04.yang"
module ietf-dhcpv6-client { module ietf-dhcpv6-client {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client";
prefix "dhc6-clnt"; prefix "dhc6-clnt";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-dhcpv6-common { import ietf-dhcpv6-common {
prefix dhc6; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC 9243: A YANG Data Model for DHCPv6 Configuration";
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
reference reference
"RFC 8343: A YANG Data Model for Interface Management"; "RFC 8343: A YANG Data Model for Interface Management";
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
description description
"This YANG module defines components necessary for the "This YANG module defines components necessary for the
skipping to change at page 61, line 43 skipping to change at line 2892
Copyright (c) 2022 IETF Trust and the persons identified as Copyright (c) 2022 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 9243
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself (https://www.rfc-editor.org/info/rfc9243); see the RFC itself
for full legal notices."; for full legal notices.";
revision 2022-03-07 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Features * Features
*/ */
feature non-temp-addr { feature non-temp-addr {
description description
"Denotes that the client supports DHCPv6 non-temporary address "Denotes that the client supports DHCPv6 non-temporary address
allocations."; allocations.";
skipping to change at page 65, line 24 skipping to change at line 3065
leaf server-duid { leaf server-duid {
type dhc6:duid; type dhc6:duid;
description description
"DUID of the leasing server."; "DUID of the leasing server.";
} }
uses dhc6:status; uses dhc6:status;
} }
grouping option-request-option-group { grouping option-request-option-group {
description description
"OPTION_ORO (6) Option Request Option. A client MUST include "OPTION_ORO (6) Option Request Option. A client MUST include
an Option Request option in a Solicit, Request, Renew, an Option Request Option in a Solicit, Request, Renew,
Rebind, or Information-request message to inform the server Rebind, or Information-request message to inform the server
about options the client wants the server to send to the about options the client wants the server to send to the
client."; client.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Sections 21.23, 21.24, 21.25, & 21.7"; IPv6 (DHCPv6), Sections 21.23, 21.24, 21.25, & 21.7";
container option-request-option { container option-request-option {
description description
"OPTION_ORO (6) Option Request Option."; "OPTION_ORO (6) Option Request Option.";
leaf-list oro-option { leaf-list oro-option {
type uint16; type uint16;
description description
"List of options that the client is requesting, "List of options that the client is requesting,
identified by option code. This list MUST include the identified by option code. This list MUST include the
code for option SOL_MAX_RT (82) when included in a code for option SOL_MAX_RT (82) when included in a
Solicit-message. If this option is being sent in an Solicit message. If this option is being sent in an
Information-request message, then the code for option Information-request message, then the code for option
OPTION_INFORMATION_REFRESH_TIME (32) and INF_MAX_RT (83) OPTION_INFORMATION_REFRESH_TIME (32) and INF_MAX_RT (83)
MUST be included."; MUST be included.";
} }
} }
} }
grouping user-class-option-group { grouping user-class-option-group {
description description
"OPTION_USER_CLASS (15) User Class Option"; "OPTION_USER_CLASS (15) User Class Option";
skipping to change at page 66, line 17 skipping to change at line 3106
description description
"OPTION_USER_CLASS (15) User Class Option."; "OPTION_USER_CLASS (15) User Class Option.";
list user-class-data-instance { list user-class-data-instance {
key user-class-data-id; key user-class-data-id;
min-elements 1; min-elements 1;
description description
"The user classes of which the client is a member."; "The user classes of which the client is a member.";
leaf user-class-data-id { leaf user-class-data-id {
type uint8; type uint8;
description description
"User class data ID"; "User class data ID.";
} }
leaf user-class-data { leaf user-class-data {
type binary; type binary;
description description
"Opaque field representing a User Class of which the "Opaque field representing a User Class of which the
client is a member."; client is a member.";
} }
} }
} }
} }
grouping vendor-class-option-group { grouping vendor-class-option-group {
description description
"OPTION_VENDOR_CLASS (16) Vendor Class Option"; "OPTION_VENDOR_CLASS (16) Vendor Class Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.16"; for IPv6 (DHCPv6), Section 21.16";
container vendor-class-option { container vendor-class-option {
description description
"OPTION_VENDOR_CLASS (16) Vendor Class Option."; "OPTION_VENDOR_CLASS (16) Vendor Class Option.";
list vendor-class-option-instances { list vendor-class-option-instances {
key enterprise-number; key enterprise-number;
description description
"The vendor class option allows for multiple instances "The vendor class option allows for multiple instances
in a single message. Each list entry defines the contents in a single message. Each list entry defines the contents
of an instance of the option."; of an instance of the option.";
leaf enterprise-number { leaf enterprise-number {
type uint32; type uint32;
description description
"The vendor's registered Enterprise Number as "The vendor's registered Enterprise Number, as
maintained by IANA."; maintained by IANA.";
} }
list vendor-class-data-element { list vendor-class-data-element {
key vendor-class-data-id; key vendor-class-data-id;
description description
"The vendor classes of which the client is a member."; "The vendor classes of which the client is a member.";
leaf vendor-class-data-id { leaf vendor-class-data-id {
type uint8; type uint8;
description description
"Vendor class data ID"; "Vendor class data ID.";
} }
leaf vendor-class-data { leaf vendor-class-data {
type binary; type binary;
description description
"Opaque field representing a vendor class of which "Opaque field representing a vendor class of which
the client is a member."; the client is a member.";
} }
} }
} }
} }
skipping to change at page 67, line 39 skipping to change at line 3176
type boolean; type boolean;
default true; default true;
description description
"Globally enables the DHCP client function."; "Globally enables the DHCP client function.";
} }
leaf client-duid { leaf client-duid {
if-feature "(non-temp-addr or prefix-delegation " + if-feature "(non-temp-addr or prefix-delegation " +
"or temp-addr) and not anon-profile"; "or temp-addr) and not anon-profile";
type dhc6:duid; type dhc6:duid;
description description
"A single Client DUID that will be used by all of the "A single client DUID that will be used by all of the
client's DHCPv6 enabled interfaces."; client's DHCPv6-enabled interfaces.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
list client-if { list client-if {
key if-name; key if-name;
description description
"The list of interfaces for which the client will "The list of interfaces for which the client will
be requesting DHCPv6 configuration."; be requesting DHCPv6 configuration.";
leaf if-name { leaf if-name {
type if:interface-ref; type if:interface-ref;
skipping to change at page 68, line 19 skipping to change at line 3204
type boolean; type boolean;
default true; default true;
description description
"Enables the DHCP client function for this interface."; "Enables the DHCP client function for this interface.";
} }
leaf interface-duid { leaf interface-duid {
if-feature "(non-temp-addr or prefix-delegation " + if-feature "(non-temp-addr or prefix-delegation " +
"or temp-addr) and anon-profile"; "or temp-addr) and anon-profile";
type dhc6:duid; type dhc6:duid;
description description
"Per-interface Client DUIDs for use with DHCP anonymity "Per-interface client DUIDs for use with DHCP anonymity
profiles."; profiles.";
reference "RFC 7844: Anonymity Profiles for DHCP Clients, reference "RFC 7844: Anonymity Profiles for DHCP Clients,
Section 3"; Section 3";
} }
container client-configured-options { container client-configured-options {
description description
"Definitions for DHCPv6 options that can be be sent by "Definitions for DHCPv6 options that can be be sent by
the client. Additional option definitions can be the client. Additional option definitions can be
augmented to this location from other YANG modules as augmented to this location from other YANG modules as
required."; required.";
uses option-request-option-group; uses option-request-option-group;
uses dhc6:rapid-commit-option-group; uses dhc6:rapid-commit-option-group;
uses user-class-option-group; uses user-class-option-group;
uses vendor-class-option-group; uses vendor-class-option-group;
uses dhc6:vendor-specific-information-option-group; uses dhc6:vendor-specific-information-option-group;
uses dhc6:reconfigure-accept-option-group; uses dhc6:reconfigure-accept-option-group;
} }
list ia-na { list ia-na {
if-feature non-temp-addr; if-feature non-temp-addr;
key ia-id; key ia-id;
description description
"Configuration relevant for an IA_NA (Identity Association "Configuration relevant for an Identity Association
for Non-temporary Addresses)."; for Non-temporary Addresses (IA_NA).";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 13.1"; for IPv6 (DHCPv6), Section 13.1";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
description description
"A unique identifier for this IA_NA."; "A unique identifier for this IA_NA.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 12"; for IPv6 (DHCPv6), Section 12";
} }
container ia-na-options { container ia-na-options {
skipping to change at page 69, line 41 skipping to change at line 3274
contact any available server to extend the lifetimes contact any available server to extend the lifetimes
of the addresses assigned to the IA_NA."; of the addresses assigned to the IA_NA.";
} }
uses lease-state; uses lease-state;
} }
} }
list ia-ta { list ia-ta {
if-feature temp-addr; if-feature temp-addr;
key ia-id; key ia-id;
description description
"Configuration relevant for an IA_TA (Identity Association "Configuration relevant for an Identity Association
for Temporary Addresses)."; for Temporary Addresses (IA_TA).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 13.2"; IPv6 (DHCPv6), Section 13.2";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
description description
"The unique identifier for this IA_TA."; "The unique identifier for this IA_TA.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 12"; for IPv6 (DHCPv6), Section 12";
} }
container ia-ta-options { container ia-ta-options {
skipping to change at page 70, line 26 skipping to change at line 3307
description description
"Address that is currently leased."; "Address that is currently leased.";
} }
uses lease-state; uses lease-state;
} }
} }
list ia-pd { list ia-pd {
if-feature prefix-delegation; if-feature prefix-delegation;
key ia-id; key ia-id;
description description
"Configuration relevant for an IA_PD (Identity Association "Configuration relevant for an Identity Association
for Prefix Delegation)."; for Prefix Delegation (IA_PD).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 13.3"; IPv6 (DHCPv6), Section 13.3";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
description description
"The unique identifier for this IA_PD."; "The unique identifier for this IA_PD.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 12"; for IPv6 (DHCPv6), Section 12";
} }
leaf prefix-length-hint { leaf prefix-length-hint {
skipping to change at page 71, line 9 skipping to change at line 3338
} }
container ia-pd-options { container ia-pd-options {
description description
"An augmentation point for additional options that the "An augmentation point for additional options that the
client will send in the IA_PD-options field of client will send in the IA_PD-options field of
OPTION_IA_TA."; OPTION_IA_TA.";
} }
container lease-state { container lease-state {
config "false"; config "false";
description description
"Information about an active IA_PD delegated prefix."; "Information about an active IA_PD-delegated prefix.";
leaf ia-pd-prefix { leaf ia-pd-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"Delegated prefix that is currently leased."; "Delegated prefix that is currently leased.";
} }
leaf lease-t1 { leaf lease-t1 {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"The time interval after which the client should "The time interval after which the client should
contact the server from which the addresses in the contact the server from which the addresses in the
skipping to change at page 72, line 9 skipping to change at line 3386
description description
"Notification sent when an address received in an identity "Notification sent when an address received in an identity
association option is determined invalid. Possible conditions association option is determined invalid. Possible conditions
include a duplicate or otherwise illegal address."; include a duplicate or otherwise illegal address.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18.2.10.1"; IPv6 (DHCPv6), Section 18.2.10.1";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"IA-ID"; "IAID.";
} }
leaf ia-na-t1-timer { leaf ia-na-t1-timer {
type uint32; type uint32;
description description
"The value of the T1 time field for non-temporary address "The value of the T1 time field for non-temporary address
allocations (OPTION_IA_NA)."; allocations (OPTION_IA_NA).";
} }
leaf ia-na-t2-timer { leaf ia-na-t2-timer {
type uint32; type uint32;
description description
"The value of the preferred-lifetime field for non-temporary "The value of the preferred-lifetime field for non-temporary
address allocations (OPTION_IA_NA)."; address allocations (OPTION_IA_NA).";
} }
leaf invalid-address { leaf invalid-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"The IP address which has been detected to be invalid."; "The IP address that has been detected to be invalid.";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type uint32; type uint32;
description description
"The value of the preferred-lifetime field in "The value of the preferred-lifetime field in
OPTION_IAADDR."; OPTION_IAADDR.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type uint32; type uint32;
description description
skipping to change at page 75, line 33 skipping to change at line 3554
} }
description description
"Reference to the IA_PD lease."; "Reference to the IA_PD lease.";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
5. Security Considerations 5. Security Considerations
The YANG modules defined in this document are designed to be accessed The YANG modules specified in this document define schema for data
via network management protocols such as NETCONF [RFC6241] or that is designed to be accessed via network management protocols such
RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
layer, and the mandatory-to-implement secure transport is Secure is the secure transport layer, and the mandatory-to-implement secure
Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
mandatory-to-implement secure transport is TLS [RFC8446]. is HTTPS, and the mandatory-to-implement secure transport is TLS
[RFC8446].
The Network Configuration Access Control Model (NACM) [RFC8341] The Network Configuration Access Control Model (NACM) [RFC8341]
provides the means to restrict access for particular NETCONF or provides the means to restrict access for particular NETCONF or
RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or
RESTCONF protocol operations and content. RESTCONF protocol operations and content.
All data nodes defined in the YANG modules which can be created, There are a number of data nodes defined in these YANG modules that
modified, and deleted (i.e., config true, which is the default) are are writable/creatable/deletable (i.e., config true, which is the
considered sensitive. Write operations (e.g., edit-config) to these default). These data nodes may be considered sensitive or vulnerable
data nodes without proper protection can have a negative effect on in some network environments. Write operations (e.g., edit-config)
network operations. to these data nodes without proper protection can have a negative
effect on network operations. These are the subtrees and data nodes
and their sensitivity/vulnerability:
The RPCs for deleting/clearing active address and prefix entries in The RPCs for deleting/clearing active address and prefix entries in
the server and relay modules are particularly sensitive. These RPCs the server and relay modules are particularly sensitive. These RPCs
use 'nacm:default-deny-all'. use 'nacm:default-deny-all'.
An attacker with read/write access to the DHCPv6 server can undertake An attacker with read/write access to the DHCPv6 server can undertake
various attacks, such as: various attacks, such as:
* Denial of service attacks, such as disabling the DHCP server * Denial-of-Service (DoS) attacks, such as disabling the DHCP server
sevice, or removing address/prefix pool configuration. service or removing address/prefix pool configuration and
* Various attacks based on re-configuring the contents of DHCPv6 * Various attacks based on reconfiguring the contents of DHCPv6
options, leading to several types of security or privacy threats. options, leading to several types of security or privacy threats.
These options could redirect clients to services under an These options could redirect clients to services under an
attacker's control. For example, changing the address of a DNS attacker's control, for example, by changing the address of a DNS
server supplied in a DHCP option to point to a rogue server. server supplied in a DHCP option to point to a rogue server.
An attacker sending DHCPv6 messages which cause the server to An attacker sending DHCPv6 messages that cause the server to generate
generate 'invalid-client-detected' and 'decline-received' 'invalid-client-detected' and 'decline-received' notifications could
notifications could be used as a DoS attack. Such an attack could be be used as a DoS attack. Such an attack could be mitigated by the
mitigated by the NETCONF client unsubscribing from the affected NETCONF client unsubscribing from the affected notifications.
notifications.
An attacker with read/write access the DHCPv6 relay can undertake An attacker with read/write access to the DHCPv6 relay can undertake
various attacks, such as: various attacks, such as:
* Denial of service attacks, based on disabling the DHCP relay * DoS attacks, based on disabling the DHCP relay function or
function, or modifying the relay's "destination-address" to a non- modifying the relay's "destination-address" to a non-existent
existant address. address,
* Modifying the relay's "destination-address" to send messages to a * modifying the relay's "destination-address" to send messages to a
rogue DHCPv6 server. rogue DHCPv6 server, and
* Deleting information about a client's delegated prefix, causing a * deleting information about a client's delegated prefix, causing a
denial of service attack as traffic will no longer be routed to DoS attack, as traffic will no longer be routed to the client.
the client.
Some of the readable data nodes in this YANG module may be considered Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. Therefore, it sensitive or vulnerable in some network environments. It is thus
is important to control read access (e.g., via get, get-config, or important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These subtrees and data nodes can notification) to these data nodes. These are the subtrees and data
be misused to track the activity or fingerprint the device type of nodes and their sensitivity/vulnerability:
the host:
The following subtrees and data nodes can be misused to track the
activity or fingerprint the device type of the host:
* Information the server holds about clients with active leases: * Information the server holds about clients with active leases:
(dhc6-srv/allocation-ranges/allocation-range/address-pools/ (dhc6-srv/allocation-ranges/allocation-range/address-pools/
address-pool/active-leases) address-pool/active-leases)
* Information the relay holds about clients with active leases: * Information the relay holds about clients with active leases:
(dhc6-rly/relay-if/prefix-delegation/) (dhc6-rly/relay-if/prefix-delegation/)
Information about a server's configured address and prefix pools may Information about a server's configured address and prefix pools may
be used by an attacker for network reconnaissance [RFC7707]. The be used by an attacker for network reconnaissance [RFC7707]. The
skipping to change at page 77, line 38 skipping to change at line 3655
Security considerations related to DHCPv6 are discussed in [RFC8415]. Security considerations related to DHCPv6 are discussed in [RFC8415].
Security considerations given in [RFC7950] are also applicable here. Security considerations given in [RFC7950] are also applicable here.
6. IANA Considerations 6. IANA Considerations
This document registers four URIs and four YANG modules. This document registers four URIs and four YANG modules.
6.1. URI Registration 6.1. URI Registration
This document requests IANA to register the following four URIs in Per this document, IANA has registered the following four URIs in the
the "IETF XML Registry" [RFC3688]: "ns" subregistry within the "IETF XML Registry" [RFC3688]:
URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
6.2. YANG Module Name Registration 6.2. YANG Module Name Registration
This document registers the following four YANG modules in the "YANG Per this document, IANA has registered the following four YANG
Module Names" registry [RFC6020]. modules in the "YANG Module Names" subregistry [RFC6020] within the
"YANG Parameters" registry.
name: ietf-dhcpv6-server name: ietf-dhcpv6-server
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server
maintained by IANA: N
prefix: dhc6-srv prefix: dhc6-srv
reference: RFC XXXX YANG Data Model for DHCPv6 Configuration reference: RFC 9243
name: ietf-dhcpv6-relay name: ietf-dhcpv6-relay
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay
maintained by IANA: N
prefix: dhc6-rly prefix: dhc6-rly
reference: RFC XXXX YANG Data Model for DHCPv6 Configuration reference: RFC 9243
name: ietf-dhcpv6-client name: ietf-dhcpv6-client
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client
maintained by IANA: N
prefix: dhc6-clnt prefix: dhc6-clnt
reference: RFC XXXX YANG Data Model for DHCPv6 Configuration reference: RFC 9243
name: ietf-dhcpv6-common name: ietf-dhcpv6-common
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common
maintained by IANA: N
prefix: dhc6 prefix: dhc6
reference: RFC XXXX YANG Data Model for DHCPv6 Configuration reference: RFC 9243
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, Acee Lindem, and Benjamin Kaduk for their valuable comments
and contributions to this work.
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
Tsinghua University
Beijing, 100084
P.R. China
Email: lh.sunlinh@gmail.com
Sladjana Zechlin
Deutsche Telekom AG
CTO-IPT, Landgrabenweg 151
53227, Bonn
Germany
Email: sladjana.zechlin@telekom.de
Zihao He
Tsinghua University
Beijing, 100084
P.R. China
Email: hezihao9512@gmail.com
Michal Nowikowski
Internet Systems Consortium
Gdansk
Poland
Email: godfryd@isc.org
9. References 7. References
9.1. Normative References 7.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC2277] Alvestrand, H., "IETF Policy on Character Sets and [RFC2277] Alvestrand, H., "IETF Policy on Character Sets and
Languages", BCP 18, RFC 2277, DOI 10.17487/RFC2277, Languages", BCP 18, RFC 2277, DOI 10.17487/RFC2277,
January 1998, <https://www.rfc-editor.org/info/rfc2277>. January 1998, <https://www.rfc-editor.org/info/rfc2277>.
skipping to change at page 81, line 35 skipping to change at line 3799
"Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)",
RFC 8415, DOI 10.17487/RFC8415, November 2018, RFC 8415, DOI 10.17487/RFC8415, November 2018,
<https://www.rfc-editor.org/info/rfc8415>. <https://www.rfc-editor.org/info/rfc8415>.
[RFC8987] Farrer, I., Kottapalli, N., Hunek, M., and R. Patterson, [RFC8987] Farrer, I., Kottapalli, N., Hunek, M., and R. Patterson,
"DHCPv6 Prefix Delegating Relay Requirements", RFC 8987, "DHCPv6 Prefix Delegating Relay Requirements", RFC 8987,
DOI 10.17487/RFC8987, February 2021, DOI 10.17487/RFC8987, February 2021,
<https://www.rfc-editor.org/info/rfc8987>. <https://www.rfc-editor.org/info/rfc8987>.
[IANA-HARDWARE-TYPES] [IANA-HARDWARE-TYPES]
Internet Assigned Numbers Authority, "Hardware Types", IANA, "Hardware Types",
<https://www.iana.org/assignments/arp-parameters>. <https://www.iana.org/assignments/arp-parameters>.
[IANA-PEN] Internet Assigned Numbers Authority, "Private Enterprise [IANA-PEN] IANA, "Private Enterprise Numbers",
Numbers",
<https://www.iana.org/assignments/enterprise-numbers>. <https://www.iana.org/assignments/enterprise-numbers>.
[IANA-DHCPV6-OPTION-CODES] [IANA-DHCPV6-OPTION-CODES]
Internet Assigned Numbers Authority, "DHCPv6 Option IANA, "Option Codes",
Codes",
<https://www.iana.org/assignments/dhcpv6-parameters>. <https://www.iana.org/assignments/dhcpv6-parameters>.
[IANA-DHCP-AUTH-NAMESPACES] [IANA-DHCP-AUTH-NAMESPACES]
Internet Assigned Numbers Authority, "Dynamic Host IANA, "Dynamic Host Configuration Protocol (DHCP)
Configuration Protocol (DHCP) Authentication Option Name Authentication Option Name Spaces",
Spaces", <https://www.iana.org/assignments/auth-namespaces>.
<https://www.iana.org/assignments/auth-namespaces>>.
9.2. Informative References 7.2. Informative References
[RFC3319] Schulzrinne, H. and B. Volz, "Dynamic Host Configuration [RFC3319] Schulzrinne, H. and B. Volz, "Dynamic Host Configuration
Protocol (DHCPv6) Options for Session Initiation Protocol Protocol (DHCPv6) Options for Session Initiation Protocol
(SIP) Servers", RFC 3319, DOI 10.17487/RFC3319, July 2003, (SIP) Servers", RFC 3319, DOI 10.17487/RFC3319, July 2003,
<https://www.rfc-editor.org/info/rfc3319>. <https://www.rfc-editor.org/info/rfc3319>.
[RFC7707] Gont, F. and T. Chown, "Network Reconnaissance in IPv6 [RFC7707] Gont, F. and T. Chown, "Network Reconnaissance in IPv6
Networks", RFC 7707, DOI 10.17487/RFC7707, March 2016, Networks", RFC 7707, DOI 10.17487/RFC7707, March 2016,
<https://www.rfc-editor.org/info/rfc7707>. <https://www.rfc-editor.org/info/rfc7707>.
[RFC7824] Krishnan, S., Mrugalski, T., and S. Jiang, "Privacy [RFC7824] Krishnan, S., Mrugalski, T., and S. Jiang, "Privacy
Considerations for DHCPv6", RFC 7824, Considerations for DHCPv6", RFC 7824,
DOI 10.17487/RFC7824, May 2016, DOI 10.17487/RFC7824, May 2016,
<https://www.rfc-editor.org/info/rfc7824>. <https://www.rfc-editor.org/info/rfc7824>.
[I-D.ietf-netconf-tls-client-server] [GROUPINGS-TLS]
Watsen, K., "YANG Groupings for TLS Clients and TLS Watsen, K., "YANG Groupings for TLS Clients and TLS
Servers", Work in Progress, Internet-Draft, draft-ietf- Servers", Work in Progress, Internet-Draft, draft-ietf-
netconf-tls-client-server-26, 14 December 2021, netconf-tls-client-server-27, 7 March 2022,
<https://tools.ietf.org/html/draft-ietf-netconf-tls- <https://datatracker.ietf.org/doc/html/draft-ietf-netconf-
client-server-26>. tls-client-server-27>.
Appendix A. Data Tree Examples Appendix A. Data Tree Examples
This section contains XML examples of data trees for the different This section contains XML examples of data trees for the different
DHCPv6 elements. DHCPv6 elements.
A.1. DHCPv6 Server Configuration Examples A.1. DHCPv6 Server Configuration Examples
The following example shows a basic configuration for a server. The The following example shows a basic configuration for a server. The
configuration defines: configuration defines:
* Enabling the DHCP server function. * enabling the DHCP server function,
* The server's DUID. * the server's DUID,
* An option set (id=1) with configuration for the Solicit Max Retry * an option set (id=1) with configuration for the Solicit Max Retry
Timeout (SOL_MAX_RT (82)) option. Timeout (SOL_MAX_RT (82)) option,
* A single network range (2001:db8::/32). * a single network range (2001:db8::/32), and
* A single address pool, with start and end addresses, relevant * a single address pool, with start and end addresses, relevant
lease timers and an option-set-id of "1" referencing the option lease timers, and an option-set-id of "1" referencing the option
set configured above. set configured above.
<dhcpv6-server <dhcpv6-server
xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"> xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server">
<enabled>true</enabled> <enabled>true</enabled>
<server-duid>000200090CC084D303000912</server-duid> <server-duid>000200090CC084D303000912</server-duid>
<vendor-config/> <vendor-config/>
<option-sets> <option-sets>
<option-set> <option-set>
<option-set-id>1</option-set-id> <option-set-id>1</option-set-id>
<description>Example DHCP option set</description> <description>Example DHCP option set</description>
<sol-max-rt-option> <sol-max-rt-option>
<sol-max-rt-value>3600</sol-max-rt-value> <sol-max-rt-value>3600</sol-max-rt-value>
</sol-max-rt-option> </sol-max-rt-option>
</option-set> </option-set>
</option-sets> </option-sets>
<class-selector/> <class-selector/>
<allocation-ranges> <allocation-ranges>
<valid-lifetime>54000</valid-lifetime> <valid-lifetime>54000</valid-lifetime>
<renew-time>7200</renew-time> <renew-time>7200</renew-time>
<rebind-time>32400</rebind-time> <rebind-time>32400</rebind-time>
<preferred-lifetime>43200</preferred-lifetime> <preferred-lifetime>43200</preferred-lifetime>
<allocation-range> <allocation-range>
<id>1</id> <id>1</id>
<description>example-allocation-range</description> <description>example-allocation-range</description>
<network-prefix>2001:db8::/32</network-prefix> <network-prefix>2001:db8::/32</network-prefix>
<option-set-id>1</option-set-id> <option-set-id>1</option-set-id>
<address-pools>
<address-pool>
<pool-id>1</pool-id>
<pool-prefix>2001:db8:1:1::/64</pool-prefix>
<start-address>2001:db8:1:1::1000</start-address>
<end-address>2001:db8:1:1::2000</end-address>
<max-address-utilization>50</max-address-utilization>
<option-set-id>1</option-set-id>
</address-pool>
</address-pools>
</allocation-range>
</allocation-ranges>
</dhcpv6-server>
Figure 4: Basic Server Configuration Example XML
The following example configuration snippet 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.
<address-pools> <address-pools>
<address-pool> <address-pool>
<pool-id>1</pool-id> <pool-id>1</pool-id>
<pool-prefix>2001:db8:1:1::/64</pool-prefix> <pool-prefix>2001:db8:1:1::/64</pool-prefix>
<start-address>2001:db8:1:1::1000</start-address> <start-address>2001:db8:1:1::1000</start-address>
<end-address>2001:db8:1:1::2000</end-address> <end-address>2001:db8:1:1::2000</end-address>
<max-address-utilization>50</max-address-utilization> <max-address-utilization>50</max-address-utilization>
<option-set-id>1</option-set-id> <option-set-id>1</option-set-id>
<host-reservations>
<host-reservation>
<reserved-addr>2001:db8:1:1::1001</reserved-addr>
<client-duid>00052001db81</client-duid>
<option-set-id>1</option-set-id>
<valid-lifetime>604800</valid-lifetime>
<renew-time>86400</renew-time>
<rebind-time>172800</rebind-time>
<preferred-lifetime>345600</preferred-lifetime>
</host-reservation>
</host-reservations>
</address-pool> </address-pool>
</address-pools> </address-pools>
</allocation-range>
</allocation-ranges>
</dhcpv6-server>
Figure 4: Basic Server Configuration Example XML
The following example configuration snippet 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.
<address-pools>
<address-pool>
<pool-id>1</pool-id>
<pool-prefix>2001:db8:1:1::/64</pool-prefix>
<start-address>2001:db8:1:1::1000</start-address>
<end-address>2001:db8:1:1::2000</end-address>
<max-address-utilization>50</max-address-utilization>
<option-set-id>1</option-set-id>
<host-reservations>
<host-reservation>
<reserved-addr>2001:db8:1:1::1001</reserved-addr>
<client-duid>00052001db81</client-duid>
<option-set-id>1</option-set-id>
<valid-lifetime>604800</valid-lifetime>
<renew-time>86400</renew-time>
<rebind-time>172800</rebind-time>
<preferred-lifetime>345600</preferred-lifetime>
</host-reservation>
</host-reservations>
</address-pool>
</address-pools>
Figure 5: Server Host Reservation Configuration Example XML Snippet Figure 5: Server Host Reservation Configuration Example XML Snippet
The following example configuration snippet shows a network range and The following example configuration snippet shows a network range and
pool to be used for delegating prefixes to clients. In this example, pool to be used for delegating prefixes to clients. In this example,
each client will receive a /56 prefix. each client will receive a /56 prefix.
The 'max-pd-space-utilization' is set to 80 percent so that a The 'max-pd-space-utilization' is set to 80 percent so that a
'prefix-pool-utilization-threshold-exceeded' notification will be 'prefix-pool-utilization-threshold-exceeded' notification will be
raised if the number of prefix allocations exceeds this. raised if the number of prefix allocations exceeds this.
<allocation-ranges> <allocation-ranges>
<allocation-range> <allocation-range>
<id>1</id> <id>1</id>
<description>prefix-pool-example</description> <description>prefix-pool-example</description>
<network-prefix>2001:db8::/32</network-prefix> <network-prefix>2001:db8::/32</network-prefix>
<prefix-pools> <prefix-pools>
<valid-lifetime>54000</valid-lifetime> <valid-lifetime>54000</valid-lifetime>
<renew-time>7200</renew-time> <renew-time>7200</renew-time>
<rebind-time>32400</rebind-time> <rebind-time>32400</rebind-time>
<preferred-lifetime>43200</preferred-lifetime> <preferred-lifetime>43200</preferred-lifetime>
<prefix-pool> <prefix-pool>
<pool-id>0</pool-id> <pool-id>0</pool-id>
<option-set-id>1</option-set-id> <option-set-id>1</option-set-id>
<pool-prefix>2001:db8:1::/48</pool-prefix> <pool-prefix>2001:db8:1::/48</pool-prefix>
<client-prefix-length>56</client-prefix-length> <client-prefix-length>56</client-prefix-length>
<max-pd-space-utilization>80</max-pd-space-utilization> <max-pd-space-utilization>80</max-pd-space-utilization>
</prefix-pool> </prefix-pool>
</prefix-pools> </prefix-pools>
</allocation-range> </allocation-range>
</allocation-ranges> </allocation-ranges>
Figure 6: Server Prefix Delegation Configuration Example XML Snippet Figure 6: Server Prefix Delegation Configuration Example XML Snippet
The next example configuration snippet shows a set of options that The next example configuration snippet shows a set of options that
may be returned to clients, depending on the contents of a received may be returned to clients, depending on the contents of a received
DHCP request message. The option set ID is '1', which will DHCP request message. The option set ID is '1', which will be
referenced by other places in the configuration (e.g., address pool referenced by other places in the configuration (e.g., address pool
configuration) as the available options for clients that request configuration) as the available options for clients that request
them. them.
The example shows how the option definitions can be extended via The example shows how the option definitions can be extended via
augmentation. In this case, "OPTION_SIP_SERVER_D (21) SIP Servers augmentation. In this case, "OPTION_SIP_SERVER_D (21) SIP Servers
Domain-Name List" from the example module in Appendix B has been Domain-Name List" from the example module in Appendix B has been
augmented to the server's option set. augmented to the server's option set.
<option-sets> <option-sets>
skipping to change at page 86, line 48 skipping to change at line 4016
Figure 7: Server Option Set Configuration Example XML Snippet Figure 7: Server Option Set Configuration Example XML Snippet
A.2. DHCPv6 Relay Configuration Example A.2. DHCPv6 Relay Configuration Example
The following example shows a basic configuration for a single DHCP The following example shows a basic configuration for a single DHCP
relay interface and its interaction with the ietf-interfaces module. relay interface and its interaction with the ietf-interfaces module.
The configuration shows two XML documents, one for ietf-interfaces The configuration shows two XML documents, one for ietf-interfaces
and a second for ietf-dhcpv6-relay, defining: and a second for ietf-dhcpv6-relay, defining:
* Configuring an interface using the ietf-interfaces module that the * configuring an interface using the ietf-interfaces module that the
relay configuration will be applied to. relay configuration will be applied to,
* Enabling the DHCP relay function globally and for the relevant * enabling the DHCP relay function globally and for the relevant
interface. interface,
* Referencing the interface that the relay configuration is relevant * referencing the interface that the relay configuration is relevant
for via an inteface-ref to the ietf-interfaces module. for via an interface-ref to the ietf-interfaces module,
* Defining two destination addresses that incoming DHCP messages * defining two destination addresses that incoming DHCP messages
will be relayed to. will be relayed to,
* Configures the link-address value that will be sent in the relay- * configuring the link-address value that will be sent in the relay-
forward message. forward message, and
* Configuring a value for the Interface ID Option * configuring a value for the Interface ID Option
(OPTION_INTERFACE_ID (18)), which will be included in the relay (OPTION_INTERFACE_ID (18)), which will be included in the relay
forward message. forward message.
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type"> xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">
<interface> <interface>
<name>eth0</name> <name>eth0</name>
<type>ianaift:ethernetCsmacd</type> <type>ianaift:ethernetCsmacd</type>
<description>DHCPv6 Relay Interface</description> <description>DHCPv6 Relay Interface</description>
<enabled>true</enabled> <enabled>true</enabled>
skipping to change at page 87, line 51 skipping to change at line 4068
</relay-if> </relay-if>
</dhcpv6-relay> </dhcpv6-relay>
Figure 8: Basic Relay Configuration Example XML Figure 8: Basic Relay Configuration Example XML
A.3. DHCPv6 Client Configuration Example A.3. DHCPv6 Client Configuration Example
The following example shows a basic configuration for a DHCP client The following example shows a basic configuration for a DHCP client
and its interaction with the ietf-interfaces module. The and its interaction with the ietf-interfaces module. The
configuration shows two XML documents, one for ietf-interfaces and a configuration shows two XML documents, one for ietf-interfaces and a
second for ietf-dhcpv6-client defining: second for ietf-dhcpv6-client, defining:
* Configuring an interface using the ietf-interfaces module that the * configuring an interface using the ietf-interfaces module that the
client configuration will be applied to. client configuration will be applied to,
* Enabling the DHCP client function globally and for the relevant * enabling the DHCP client function globally and for the relevant
interface. interface,
* References the interface that the client configuration is relevant * referencing the interface that the client configuration is
for via an inteface-ref to the ietf-interfaces module. relevant for via an interface-ref to the ietf-interfaces module,
* Sets the DUID for the DHCPv6 enabled interface. * setting the DUID for the DHCPv6-enabled interface,
* Configures a list of option codes that will be requested by the * configuring a list of option codes that will be requested by the
client in its Option Request Option (OPTION_ORO (5)). client in its Option Request Option (OPTION_ORO (5)),
* Configures a single instance of the Vendor-specific Information * configuring a single instance of the Vendor-specific Information
Option (OPTION_VENDOR_OPTS (17)) with a single sub-option data Option (OPTION_VENDOR_OPTS (17)) with a single sub-option data
item. item,
* Requests a non-temporary IPv6 address (IA_NA) with an identity * requesting a non-temporary IPv6 address (IA_NA) with an identity
association interface identifier of 1. association interface identifier of 1, and
* Requests an IPv6 delegated prefix address (IA_PD) with an identity * requesting an IPv6 delegated prefix address (IA_PD) with an
association interface identifier of 2. identity association interface identifier of 2.
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type"> xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">
<interface> <interface>
<name>eth0</name> <name>eth0</name>
<type>ianaift:ethernetCsmacd</type> <type>ianaift:ethernetCsmacd</type>
<description>DHCPv6 Relay Interface</description> <description>DHCPv6 Relay Interface</description>
<enabled>true</enabled> <enabled>true</enabled>
</interface> </interface>
</interfaces> </interfaces>
<dhcpv6-client <dhcpv6-client
xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"> xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client">
<enabled>true</enabled> <enabled>true</enabled>
<client-if> <client-if>
<if-name>eth0</if-name> <if-name>eth0</if-name>
<enabled>true</enabled> <enabled>true</enabled>
<interface-duid>000200090CC084D303000913</interface-duid> <interface-duid>000200090CC084D303000913</interface-duid>
<client-configured-options> <client-configured-options>
<option-request-option> <option-request-option>
<oro-option>17</oro-option> <oro-option>17</oro-option>
<oro-option>23</oro-option> <oro-option>23</oro-option>
<oro-option>24</oro-option> <oro-option>24</oro-option>
<oro-option>82</oro-option> <oro-option>82</oro-option>
</option-request-option> </option-request-option>
<vendor-specific-information-options> <vendor-specific-information-options>
<vendor-specific-information-option> <vendor-specific-information-option>
<enterprise-number>32473</enterprise-number> <enterprise-number>32473</enterprise-number>
<vendor-option-data> <vendor-option-data>
<sub-option-code>1</sub-option-code> <sub-option-code>1</sub-option-code>
<sub-option-data>abcd1234</sub-option-data> <sub-option-data>abcd1234</sub-option-data>
</vendor-option-data> </vendor-option-data>
</vendor-specific-information-option> </vendor-specific-information-option>
</vendor-specific-information-options> </vendor-specific-information-options>
</client-configured-options> </client-configured-options>
<ia-na> <ia-na>
<ia-id>1</ia-id> <ia-id>1</ia-id>
</ia-na> </ia-na>
<ia-pd> <ia-pd>
<ia-id>2</ia-id> <ia-id>2</ia-id>
</ia-pd> </ia-pd>
</client-if> </client-if>
</dhcpv6-client> </dhcpv6-client>
Figure 9: Basic Client Configuration Example XML Figure 9: Basic Client Configuration Example XML
Appendix B. Example of Augmenting Additional DHCPv6 Option Definitions Appendix B. Example of Augmenting Additional DHCPv6 Option Definitions
The following section provides a example of how the DHCPv6 option The following section provides an example of how the DHCPv6 option
definitions can be extended to include additional options. It is definitions can be extended to include additional options. It is
expected that additional specification documents will be published expected that additional specification documents will be published
for this in the future. for this in the future.
The example defines YANG models for OPTION_SIP_SERVER_D (21) and The example defines YANG modules for OPTION_SIP_SERVER_D (21) and
OPTION_SIP_SERVER_D (22) defined in [RFC3319]. Example XML OPTION_SIP_SERVER_D (22) as specified in [RFC3319]. An example XML
configuration, showing the interworking with other modules is configuration, showing the interworking with other modules, is
provided in Figure 7. provided in Figure 7.
The module is constructed as follows: The module is constructed as follows:
* The module is named using a meaningful, shortened version of the * The module is named using a meaningful, shortened version of the
document name in which the DHCP option format is specified. document name in which the DHCP option format is specified.
* A separate grouping is used to define each option. * A separate grouping is used to define each option.
* The name of the option is taken from the registered IANA name for * The name of the option is taken from the registered IANA name for
the option, with an '-option' suffix added. the option, with an '-option' suffix added.
* The description field is taken from the relevant option code name * The description field is taken from the relevant option code name
and number. and number.
* The reference section is the number and name of the RFC in which * The reference section is the number and name of the RFC in which
the DHCPv6 option is defined. the DHCPv6 option is defined.
* The remaining fields match the fields in the DHCP option. They * The remaining fields match the fields in the DHCP option. They
are in the same order as defined in the DHCP option. Where-ever are in the same order as defined in the DHCP option. Wherever
possible, the format that is defined for the DHCP field should be possible, the format that is defined for the DHCP field should be
matched by the relevant YANG type. matched by the relevant YANG type.
* Fields which can have multiple entries or instances are defined * Fields that can have multiple entries or instances are defined
using list or leaf-list nodes. using list or leaf-list nodes.
Below the groupings for option definitions, augment statements are Below the groupings for option definitions, augment statements are
used to add the option definitions for use in the relevant DHCP used to add the option definitions for use in the relevant DHCP
element's module (server, relay and/or client). element's module (server, relay, and/or client).
module example-dhcpv6-opt-sip-serv {
yang-version 1.1;
namespace "https://example.com/ns/" +
"example-dhcpv6-opt-sip-serv";
prefix "sip-srv";
import ietf-inet-types { <CODE BEGINS>
prefix inet; module example-dhcpv6-opt-sip-serv {
yang-version 1.1;
namespace "https://example.com/ns/" +
"example-dhcpv6-opt-sip-serv";
prefix "sip-srv";
} import ietf-inet-types {
prefix inet;
}
import ietf-dhcpv6-server { import ietf-dhcpv6-server {
prefix dhc6-srv; prefix dhc6-srv;
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
description description
"This YANG module contains DHCPv6 options defined in RFC 8415 "This YANG module contains DHCPv6 options defined in RFC 8415
that can be used by DHCPv6 servers. that can be used by DHCPv6 servers.
Copyright (c) 2022 IETF Trust and the persons identified as Copyright (c) 2022 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 9243
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself (https://www.rfc-editor.org/info/rfc9243); see the RFC itself
for full legal notices."; for full legal notices.";
revision 2022-03-07 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Groupings * Groupings
*/ */
grouping sip-server-domain-name-list-option-group { grouping sip-server-domain-name-list-option-group {
description
"OPTION_SIP_SERVER_D (21) SIP Servers Domain-Name List.";
reference "RFC 3319: Dynamic Host Configuration Protocol
(DHCPv6) Options for Session Initiation Protocol (SIP)
Servers";
container sip-server-domain-name-list-option {
description description
"OPTION_SIP_SERVER_D (21) SIP Servers Domain-Name List"; "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List
reference "RFC 3319: Dynamic Host Configuration Protocol Option.";
(DHCPv6) Options for Session Initiation Protocol (SIP) list sip-server {
Servers"; key sip-serv-id;
container sip-server-domain-name-list-option { description
"SIP server information.";
leaf sip-serv-id {
type uint8;
description
"SIP server list identifier.";
}
leaf sip-serv-domain-name {
type inet:domain-name;
description
"SIP server domain name.";
}
}
}
}
grouping sip-server-address-list-option-group {
description
"OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List.";
reference "RFC 3319: Dynamic Host Configuration Protocol
(DHCPv6) Options for Session Initiation Protocol (SIP)
Servers";
container sip-server-address-list-option {
description description
"OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List
Option."; Option.";
list sip-server { list sip-server {
key sip-serv-id; key sip-serv-id;
description description
"SIP server information."; "SIP server information.";
leaf sip-serv-id { leaf sip-serv-id {
type uint8; type uint8;
description description
"SIP server list identifier."; "SIP server list entry identifier.";
} }
leaf sip-serv-domain-name { leaf sip-serv-addr {
type inet:domain-name; type inet:ipv6-address;
description description
"SIP server domain name."; "SIP server IPv6 address.";
} }
} }
} }
} }
grouping sip-server-address-list-option-group {
description
"OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List";
reference "RFC 3319: Dynamic Host Configuration Protocol
(DHCPv6) Options for Session Initiation Protocol (SIP)
Servers";
container sip-server-address-list-option {
description
"OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List
Option.";
list sip-server {
key sip-serv-id;
description
"SIP server information.";
leaf sip-serv-id {
type uint8;
description
"SIP server list entry identifier.";
}
leaf sip-serv-addr {
type inet:ipv6-address;
description
"SIP server IPv6 address.";
}
}
}
}
/* /*
* Augmentations * Augmentations
*/ */
augment "/dhc6-srv:dhcpv6-server/dhc6-srv:option-sets/" + augment "/dhc6-srv:dhcpv6-server/dhc6-srv:option-sets/" +
"dhc6-srv:option-set" { "dhc6-srv:option-set" {
description description
"Augment the option definition groupings to the server "Augment the option definition groupings to the server
module."; module.";
uses sip-server-domain-name-list-option-group; uses sip-server-domain-name-list-option-group;
uses sip-server-address-list-option-group; uses sip-server-address-list-option-group;
} }
} }
<CODE ENDS>
The correct location to augment the new option definition(s) will The correct location to augment the new option definition(s) will
vary according to the specific rules defined for the use of that vary according to the specific rules defined for the use of that
specific option. For example, for options which will be augmented specific option. For example, for options that will be augmented
into the ietf-dhcpv6-server module, in many cases, these will be into the ietf-dhcpv6-server module, in many cases, these will be
augmented to: augmented to:
'/dhc6-srv:dhc6-srv/dhc6-srv:option-sets/dhc6-srv:option-set' '/dhc6-srv:dhc6-srv/dhc6-srv:option-sets/dhc6-srv:option-set'
So that they can be defined within option sets. However, there are so that they can be defined within option sets. However, there are
some options which are only applicable for specific deployment some options that are only applicable for specific deployment
scenarios and in these cases it may be more logical to augment the scenarios, and in these cases, it may be more logical to augment the
option group to a location relevant for the option. option group to a location relevant for the option.
One example for this could be OPTION_PD_EXCLUDE (67). This option is One example for this could be OPTION_PD_EXCLUDE (67). This option is
only relevant in combination with a delegated prefix which contains a only relevant in combination with a delegated prefix that contains a
specific prefix. In this case, the following location for the specific prefix. In this case, the following location for the
augmentation may be more suitable: augmentation may be more suitable:
'/dhc6-srv:dhc6-srv/dhc6-srv:allocation-ranges/dhc6-srv:allocation- '/dhc6-srv:dhc6-srv/dhc6-srv:allocation-ranges/dhc6-srv:allocation-
range/dhc6-srv:prefix-pools/dhc6-srv:prefix-pool" range/dhc6-srv:prefix-pools/dhc6-srv:prefix-pool'
Appendix C. Example Vendor Specific Server Configuration Module Appendix C. Example Vendor-Specific Server Configuration Module
This section shows how to extend the server YANG module defined in This section shows how to extend the server YANG module defined in
this document with vendor specific configuration nodes, e.g., this document with vendor-specific configuration nodes, e.g.,
configuring access to a lease storage database. configuring access to a lease storage database.
The example module defines additional server attributes such as name The example module defines additional server attributes, such as name
and description. Storage for leases is configured using a lease- and description. Storage for leases is configured using a lease-
storage container. It allows storing leases in one of three options: storage container. It allows storing leases in one of three options:
memory (memfile), MySQL and PostgreSQL. For each case, the necessary memory (memfile), MySQL, and PostgreSQL. For each case, the
configuration parameters are provided. necessary configuration parameters are provided.
For simplicity, this example module assumes that the DHCPv6 server is For simplicity, this example module assumes that the DHCPv6 server is
colocated with the MySQL or PostgreSQL database server and can serve colocated with the MySQL or PostgreSQL database server and can serve
traffic securely on the localhost without additional cryptographic traffic securely on the localhost without additional cryptographic
protection. In a production deployment, these functions would likely protection. In a production deployment, these functions would likely
not be colocated and thus use TLS to secure the database connection not be colocated and thus use TLS to secure the database connection
between the DHCPv6 server and database server. A YANG module for between the DHCPv6 server and database server. A YANG module for
configuring TLS is defined in [I-D.ietf-netconf-tls-client-server]. configuring TLS is defined in [GROUPINGS-TLS].
At the end there is an augment statement which adds the vendor At the end, there is an augment statement that adds the vendor-
specific configuration defined in "dhcpv6-server-config:config" under specific configuration defined in "dhcpv6-server-config:config" under
the "/dhcpv6-server:config/dhcpv6-server:vendor-config" mount point. the "/dhcpv6-server:config/dhcpv6-server:vendor-config" mount point.
module example-dhcpv6-server-conf { <CODE BEGINS>
yang-version 1.1; module example-dhcpv6-server-conf {
namespace "https://example.com/ns/" + yang-version 1.1;
"example-dhcpv6-server-conf"; namespace "https://example.com/ns/" +
prefix "dhc6-srv-conf"; "example-dhcpv6-server-conf";
prefix "dhc6-srv-conf";
import ietf-inet-types {
prefix inet;
}
import ietf-interfaces { import ietf-inet-types {
prefix if; prefix inet;
} }
import ietf-dhcpv6-server { import ietf-interfaces {
prefix dhc6-srv; prefix if;
} }
organization import ietf-dhcpv6-server {
"IETF DHC (Dynamic Host Configuration) Working Group"; prefix dhc6-srv;
}
contact organization
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "IETF Dynamic Host Configuration (DHC) Working Group";
WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>";
description contact
"This YANG module defines components for the configuration and "WG Web: <https://datatracker.ietf.org/wg/dhc/>
management of vendor/implementation specific DHCPv6 server WG List: <mailto:dhcwg@ietf.org>
functionality. As this functionality varies greatly between Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
different implementations, the module is provided as an example Author: Linhui Sun <lh.sunlinh@gmail.com>
only. Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>";
Copyright (c) 2022 IETF Trust and the persons identified as description
authors of the code. All rights reserved. "This YANG module defines components for the configuration and
management of vendor-/implementation-specific DHCPv6 server
functionality. As this functionality varies greatly between
different implementations, the module is provided as an example
only.
Redistribution and use in source and binary forms, with or Copyright (c) 2022 IETF Trust and the persons identified as
without modification, is permitted pursuant to, and subject to authors of the code. All rights reserved.
the license terms contained in, the Revised 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 Redistribution and use in source and binary forms, with or
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself without modification, is permitted pursuant to, and subject to
for full legal notices."; the license terms contained in, the Revised 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).
revision 2022-03-07 { This version of this YANG module is part of RFC 9243
description (https://www.rfc-editor.org/info/rfc9243); see the RFC itself
"Initial Revision."; for full legal notices.";
reference
"XXXX: YANG Data Model for DHCPv6 Configuration";
}
/* revision 2022-05-04 {
* Groupings description
*/ "Initial revision.";
reference
"9243: A YANG Data Model for DHCPv6 Configuration";
}
grouping config { /*
description * Groupings
"Parameters necessary for the configuration of a DHCPv6 */
server";
container serv-attributes {
description
"Contains basic attributes necessary for running a DHCPv6
server.";
leaf name {
type string;
description
"Name of the DHCPv6 server.";
}
leaf description {
type string;
description
"Description of the DHCPv6 server.";
}
leaf ipv6-listen-port {
type uint16;
default 547;
description
"UDP port that the server will listen on.";
}
choice listening-interfaces {
default all-interfaces;
description
"Configures which interface or addresses the server will
listen for incoming messages on.";
case all-interfaces {
container all-interfaces {
presence true;
description
"Configures the server to listen for incoming messages
on all IPv6 addresses (unicast and multicast) on all of
its network interfaces.";
}
}
case interface-list {
leaf-list interfaces {
type if:interface-ref;
description
"List of interfaces on which the server will listen
for incoming messages. Messages addressed to any
valid IPv6 address (unicast and multicast) will be
received.";
}
}
case address-list {
leaf-list address-list {
type inet:ipv6-address;
description
"List of IPv6 address(es) on which the server will
listen for incoming DHCPv6 messages.";
}
}
}
leaf-list interfaces-config {
type if:interface-ref;
default "if:interfaces/if:interface/if:name";
description
"A leaf list of interfaces on which the server should
listen.";
}
container lease-storage {
description
"Configures how the server will store leases.";
choice storage-type {
description
"The type of storage that will be used for lease
information.";
case memfile {
description
"Configuration for storing leases information in a
Comma-Separated Value (CSV) file.";
leaf memfile-name {
type string;
description
"Specifies the absolute location of the lease file.
The format of the string follow the semantics of
the relevant operating system.";
}
leaf memfile-lfc-interval {
type uint64;
description
"Specifies the interval in seconds, at which the
server will perform a lease file cleanup (LFC).";
}
}
case mysql {
leaf mysql-name {
type string;
description
"Name of the MySQL database, running on the
localhost.";
}
leaf mysql-username {
type string;
description
"User name of the account under which the server
will access the database.";
}
leaf mysql-password {
type string;
description
"Password of the account under which the server
will access the database.";
}
leaf mysql-port {
type inet:port-number;
default 3306;
description
"If the database is located on a different system,
the port number may be specified.";
}
leaf mysql-lfc-interval {
type uint64;
description
"Specifies the interval in seconds, at which the
server will perform a lease file cleanup (LFC).";
}
leaf mysql-connect-timeout {
type uint64;
description
"Defines the timeout interval for connecting to the
database. A longer interval can be specified if the
database is remote.";
}
}
case postgresql {
leaf postgresql-name {
type string;
description
"Name of the PostgreSQL database, running on the
localhost.";
}
leaf postgresql-username {
type string;
description
"User name of the account under which the server
will access the database";
}
leaf postgresql-password {
type string;
description
"Password of the account under which the server
will access the database";
}
leaf postgresql-port {
type inet:port-number;
default 5432;
description
"If the database is located on a different system,
the port number may be specified";
}
leaf postgresql-lfc-interval {
type uint64;
description
"Specifies the interval in seconds, at which the
server will perform a lease file cleanup (LFC)";
} grouping config {
leaf postgresql-connect-timeout { description
type uint64; "Parameters necessary for the configuration of a DHCPv6
description server.";
"Defines the timeout interval for connecting to the container serv-attributes {
database. A longer interval can be specified if the description
database is remote."; "Contains basic attributes necessary for running a DHCPv6
} server.";
} leaf name {
} type string;
} description
} "Name of the DHCPv6 server.";
} }
leaf description {
type string;
description
"Description of the DHCPv6 server.";
}
leaf ipv6-listen-port {
type uint16;
default 547;
description
"UDP port that the server will listen on.";
}
choice listening-interfaces {
default all-interfaces;
description
"Configures which interface or addresses the server will
listen for incoming messages on.";
case all-interfaces {
container all-interfaces {
presence true;
description
"Configures the server to listen for incoming messages
on all IPv6 addresses (unicast and multicast) on all of
its network interfaces.";
}
}
case interface-list {
leaf-list interfaces {
type if:interface-ref;
description
"List of interfaces on which the server will listen
for incoming messages. Messages addressed to any
valid IPv6 address (unicast and multicast) will be
received.";
}
}
case address-list {
leaf-list address-list {
type inet:ipv6-address;
description
"List of IPv6 address(es) on which the server will
listen for incoming DHCPv6 messages.";
}
}
}
leaf-list interfaces-config {
type if:interface-ref;
default "if:interfaces/if:interface/if:name";
description
"A leaf list of interfaces on which the server should
listen.";
}
container lease-storage {
description
"Configures how the server will store leases.";
choice storage-type {
description
"The type of storage that will be used for lease
information.";
case memfile {
description
"Configuration for storing leases information in a
Comma-Separated Value (CSV) file.";
leaf memfile-name {
type string;
description
"Specifies the absolute location of the lease file.
The format of the string follows the semantics of
the relevant operating system.";
}
leaf memfile-lfc-interval {
type uint64;
description
"Specifies the interval in seconds, at which the
server will perform a lease file cleanup (LFC).";
}
}
case mysql {
leaf mysql-name {
type string;
description
"Name of the MySQL database, running on the
localhost.";
}
leaf mysql-username {
type string;
description
"User name of the account under which the server
will access the database.";
}
leaf mysql-password {
type string;
description
"Password of the account under which the server
will access the database.";
}
leaf mysql-port {
type inet:port-number;
default 3306;
description
"If the database is located on a different system,
the port number may be specified.";
}
leaf mysql-lfc-interval {
type uint64;
description
"Specifies the interval in seconds, at which the
server will perform a LFC.";
}
leaf mysql-connect-timeout {
type uint64;
description
"Defines the timeout interval for connecting to the
database. A longer interval can be specified if the
database is remote.";
}
}
case postgresql {
leaf postgresql-name {
type string;
description
"Name of the PostgreSQL database, running on the
localhost.";
}
leaf postgresql-username {
type string;
description
"User name of the account under which the server
will access the database.";
}
leaf postgresql-password {
type string;
description
"Password of the account under which the server
will access the database.";
}
leaf postgresql-port {
type inet:port-number;
default 5432;
description
"If the database is located on a different system,
the port number may be specified.";
}
leaf postgresql-lfc-interval {
type uint64;
description
"Specifies the interval in seconds, at which the
server will perform a LFC.";
}
leaf postgresql-connect-timeout {
type uint64;
description
"Defines the timeout interval for connecting to the
database. A longer interval can be specified if the
database is remote.";
}
}
}
}
}
}
/* /*
* Augmentations * Augmentations
*/ */
augment "/dhc6-srv:dhcpv6-server/dhc6-srv:vendor-config" { augment "/dhc6-srv:dhcpv6-server/dhc6-srv:vendor-config" {
description description
"Augment the server specific YANG to the ietf-dhcpv6-server "Augment the server-specific YANG module to the
module."; ietf-dhcpv6-server module.";
uses config; uses config;
} }
} }
<CODE ENDS>
Appendix D. Example definition of class-selector configuration Appendix D. Example Definition of Class-Selector Configuration
The module "ietf-example-dhcpv6-class-selector" provides an example The module "ietf-example-dhcpv6-class-selector" provides an example
of how vendor-specific class selection configuration can be modeled of how vendor-specific class selection configuration can be modeled
and integrated with the "ietf-dhcpv6-server" module defined in this and integrated with the "ietf-dhcpv6-server" module defined in this
document. document.
The example module defines "client-class-names" with associated The example module defines "client-class-names" with associated
matching rules. A client can be classified based on "client-id", matching rules. A client can be classified based on the "client-id",
"interface-id" (ingress interface of the client's messages), packet's "interface-id" (ingress interface of the client's messages), packet's
source or destination address, relay link address, relay link source or destination address, relay link address, relay link
interface-id and more. Actually, there are endless methods for interface-id, and more. Actually, there are endless methods for
classifying clients. So this standard does not try to provide full classifying clients. So this standard does not try to provide full
specification for class selection, it only shows an example of how it specification for class selection; it only shows an example of how it
could be defined. could be defined.
At the end of the example augment statements are used to add the At the end of the example, augment statements are used to add the
defined class selector rules into the overall DHCPv6 addressing defined class selector rules into the overall DHCPv6 addressing
hierarchy. This is done in two main parts: hierarchy. This is done in two main parts:
* The augmented class-selector configuration in the main DHCPv6 * the augmented class-selector configuration in the main DHCPv6
Server configuration. Server configuration
* client-class leafrefs augmented to "allocation-range", "address- * client-class leafrefs augmented to "allocation-range", "address-
pool" and "pd-pool", pointing to the "client-class-name" that is pool", and "pd-pool", pointing to the "client-class-name" that is
required. required
The mechanism is as follows: class is associated to client based on The mechanism is as follows: class is associated to a client based on
rules and then client is allowed to get address(es)/prefix(es) from a rules, and then a client is allowed to get an address(es) or a
given allocation-range/pool if the class name matches. prefix(es) from a given allocation-range/pool if the class name
matches.
module example-dhcpv6-class-select { <CODE BEGINS>
yang-version 1.1; module example-dhcpv6-class-select {
namespace "https://example.com/ns/" + yang-version 1.1;
"example-dhcpv6-class-select"; namespace "https://example.com/ns/" +
prefix "dhc6-class-sel"; "example-dhcpv6-class-select";
prefix "dhc6-class-sel";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
} }
import ietf-dhcpv6-common { import ietf-dhcpv6-common {
prefix dhc6; prefix dhc6;
} }
import ietf-dhcpv6-server { import ietf-dhcpv6-server {
prefix dhc6-srv; prefix dhc6-srv;
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
description description
"This YANG module defines components for the definition and "This YANG module defines components for the definition and
configuration of the client class selector function for a configuration of the client class selector function for a
DHCPv6 server. As this functionality varies greatly between DHCPv6 server. As this functionality varies greatly between
different implementations, the module provided as an example different implementations, the module provided as an example
only. only.
Copyright (c) 2022 IETF Trust and the persons identified as Copyright (c) 2022 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC 9243
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself (https://www.rfc-editor.org/info/rfc9243); see the RFC itself
for full legal notices."; for full legal notices.";
revision 2022-03-07 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Groupings * Groupings
*/ */
grouping client-class-id { grouping client-class-id {
description description
"Definitions of client message classification for "Definitions of client message classification for
authorization and assignment purposes."; authorization and assignment purposes.";
leaf client-class-name { leaf client-class-name {
type string; type string;
mandatory true; mandatory true;
description description
"Unique Identifier for client class identification list "Unique identifier for client class identification list
entries."; entries.";
} }
choice id-type { choice id-type {
mandatory true; mandatory true;
description description
"Definitions for different client identifier types."; "Definitions for different client identifier types.";
case client-id-id { case client-id-id {
leaf client-id { leaf client-id {
type string; type string;
mandatory true; mandatory true;
description description
"String literal client identifier."; "String literal client identifier.";
}
description
"Client class selection based on a string literal client
identifier.";
}
case received-interface-id {
description
"Client class selection based on the incoming interface
of the DHCPv6 message.";
leaf received-interface {
type if:interface-ref;
description
"Reference to the interface entry for the incoming
DHCPv6 message.";
}
}
case packet-source-address-id {
description
"Client class selection based on the source address of
the DHCPv6 message.";
leaf packet-source-address {
type inet:ipv6-address;
mandatory true;
description
"Source address of the DHCPv6 message.";
}
}
case packet-destination-address-id {
description
"Client class selection based on the destination address
of the DHCPv6 message.";
leaf packet-destination-address {
type inet:ipv6-address;
mandatory true;
description
"Destination address of the DHCPv6 message.";
}
}
case relay-link-address-id {
description
"Client class selection based on the prefix of the
link-address field in the relay agent message header.";
leaf relay-link-address {
type inet:ipv6-prefix;
mandatory true;
description
"Prefix of the link-address field in the relay agent
message header.";
}
}
case relay-peer-address-id {
description
"Client class selection based on the value of the
peer-address field in the relay agent message header.";
leaf relay-peer-address {
type inet:ipv6-prefix;
mandatory true;
description
"Prefix of the peer-address field in the relay agent
message header.";
}
}
case relay-interface-id {
description
"Client class selection based on a received instance of
OPTION_INTERFACE_ID (18).";
leaf relay-interface {
type string;
description
"An opaque value of arbitrary length generated by the
relay agent to identify one of the relay agent's
interfaces.";
}
}
case user-class-option-id {
description
"Client class selection based on the value of the
OPTION_USER_CLASS (15) and its user-class-data field.";
leaf user-class-data {
type string;
mandatory true;
description
"User Class value to match.";
}
}
case vendor-class-present-id {
description
"Client class selection based on the presence of
OPTION_VENDOR_CLASS (16) in the received message.";
leaf vendor-class-present {
type boolean;
mandatory true;
description
"Presence of OPTION_VENDOR_CLASS (16) in the received
message.";
}
}
case vendor-class-option-enterprise-number-id {
description
"Client class selection based on the value of the
enterprise-number field in OPTION_VENDOR_CLASS (16).";
leaf vendor-class-option-enterprise-number {
type uint32;
mandatory true;
description
"Value of the enterprise-number field.";
}
}
case vendor-class-option-data {
description
"Client class selection based on the value of a data
field within a vendor-class-data entry for a matching
enterprise-number field in OPTION_VENDOR_CLASS (16).";
container vendor-class-option-data {
description
"Vendor class option data container.";
leaf enterprise-number {
type uint32;
description
"The vendor's registered Enterprise Number, as
maintained by IANA.";
}
leaf vendor-class-data-id {
type uint8;
description
"Vendor class data ID.";
}
leaf vendor-class-data {
type string;
description
"Opaque field for matching the client's vendor class
data.";
}
}
}
case client-duid-id {
description
"Client class selection based on the value of the
received client DUID.";
leaf duid {
type dhc6:duid;
description
"Client DUID.";
}
}
}
}
} /*
description * Augmentations
"Client class selection based on a string literal client */
identifier.";
}
case received-interface-id {
description
"Client class selection based on the incoming interface
of the DHCPv6 message.";
leaf received-interface {
type if:interface-ref;
description
"Reference to the interface entry for the incoming
DHCPv6 message.";
}
}
case packet-source-address-id {
description
"Client class selection based on the source address of
the DHCPv6 message.";
leaf packet-source-address {
type inet:ipv6-address;
mandatory true;
description
"Source address of the DHCPv6 message.";
}
}
case packet-destination-address-id {
description
"Client class selection based on the destination address
of the DHCPv6 message.";
leaf packet-destination-address {
type inet:ipv6-address;
mandatory true;
description
"Destination address of the DHCPv6 message.";
}
}
case relay-link-address-id {
description
"Client class selection based on the prefix of the
link-address field in the relay agent message header.";
leaf relay-link-address {
type inet:ipv6-prefix;
mandatory true;
description
"Prefix of the link-address field in the relay agent
message header.";
} augment "/dhc6-srv:dhcpv6-server/dhc6-srv:class-selector" {
} description
case relay-peer-address-id { "Augment class selector functions to the DHCPv6 server
description module.";
"Client class selection based on the value of the container client-classes {
peer-address field in the relay agent message header."; description
leaf relay-peer-address { "Client classes to augment.";
type inet:ipv6-prefix; list class {
mandatory true; key client-class-name;
description description
"Prefix of the peer-address field in the relay agent "List of the client class identifiers applicable to
message header."; clients served by this address pool.";
} uses client-class-id;
} }
case relay-interface-id { }
description }
"Client class selection based on a received instance of
OPTION_INTERFACE_ID (18).";
leaf relay-interface {
type string;
description
"An opaque value of arbitrary length generated by the
relay agent to identify one of the relay agent's
interfaces.";
}
}
case user-class-option-id {
description
"Client class selection based on the value of the
OPTION_USER_CLASS (15) and its user-class-data field.";
leaf user-class-data {
type string;
mandatory true;
description
"User Class value to match.";
}
}
case vendor-class-present-id {
description
"Client class selection based on the presence of
OPTION_VENDOR_CLASS (16) in the received message.";
leaf vendor-class-present {
type boolean;
mandatory true;
description
"Presence of OPTION_VENDOR_CLASS (16) in the received
message.";
}
} augment "/dhc6-srv:dhcpv6-server/" +
case vendor-class-option-enterprise-number-id { "dhc6-srv:allocation-ranges/dhc6-srv:allocation-range" {
description description
"Client class selection based on the value of the "Augment class selector functions to the DHCPv6 server
enterprise-number field in OPTION_VENDOR_CLASS (16)."; allocation-ranges.";
leaf vendor-class-option-enterprise-number { leaf-list client-class {
type uint32; type leafref {
mandatory true; path "/dhc6-srv:dhcpv6-server/dhc6-srv:" +
description "class-selector/client-classes/class/client-class-name";
"Value of the enterprise-number field."; }
} description
} "Leafrefs to client classes.";
case vendor-class-option-data { }
description }
"Client class selection based on the value of a data
field within a vendor-class-data entry for a matching
enterprise-number field in OPTION_VENDOR_CLASS (16).";
container vendor-class-option-data {
description
"Vendor class option data container.";
leaf enterprise-number {
type uint32;
description
"The vendor's registered Enterprise Number as
maintained by IANA.";
}
leaf vendor-class-data-id {
type uint8;
description
"Vendor class data ID";
}
leaf vendor-class-data {
type string;
description
"Opaque field for matching the client's vendor class
data.";
}
}
}
case client-duid-id {
description
"Client class selection based on the value of the
received client DUID.";
leaf duid {
type dhc6:duid;
description
"Client DUID.";
}
} augment "/dhc6-srv:dhcpv6-server/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:" +
* Augmentations "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
"Leafrefs to client classes.";
}
}
}
<CODE ENDS>
augment "/dhc6-srv:dhcpv6-server/dhc6-srv:class-selector" { Acknowledgments
description
"Augment class selector functions to the DHCPv6 server
module.";
container client-classes {
description
"Client classes to augment.";
list class {
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/" + The authors would like to thank Qi Sun, Lishan Li, Hao Wang, Tomek
"dhc6-srv:allocation-ranges/dhc6-srv:allocation-range" { Mrugalski, Marcin Siodelski, Bernie Volz, Ted Lemon, Bing Liu, Tom
description Petch, Acee Lindem, and Benjamin Kaduk for their valuable comments
"Augment class selector functions to the DHCPv6 server and contributions to this work.
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:" + Contributors
"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:" + The following individuals are coauthors of this document:
"allocation-ranges/dhc6-srv:allocation-range/dhc6-srv:" +
"prefix-pools/dhc6-srv:prefix-pool" { Yong Cui
description Tsinghua University
"Augment class selector functions to the DHCPv6 Beijing,
server prefix-pools."; 100084
leaf-list client-class { China
type leafref { Email: cuiyong@tsinghua.edu.cn
path "/dhc6-srv:dhcpv6-server/dhc6-srv:" +
"class-selector/client-classes/class/client-class-name"; Linhui Sun
} Tsinghua University
description Beijing,
"Leafrefs to client classes."; 100084
} China
} Email: lh.sunlinh@gmail.com
}
Sladjana Zechlin
Deutsche Telekom AG
CTO-IPT, Landgrabenweg 151
53227, Bonn
Germany
Email: sladjana.zechlin@telekom.de
Zihao He
Tsinghua University
Beijing,
100084
China
Email: hezihao9512@gmail.com
Michal Nowikowski
Internet Systems Consortium
Gdansk
Poland
Email: godfryd@isc.org
Author's Address Author's Address
Ian Farrer (editor) Ian Farrer (editor)
Deutsche Telekom AG Deutsche Telekom AG
TAI, Landgrabenweg 151 TAI, Landgrabenweg 151
53227 Bonn 53227 Bonn
Germany Germany
Email: ian.farrer@telekom.de Email: ian.farrer@telekom.de
 End of changes. 345 change blocks. 
1693 lines changed or deleted 1693 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/

mirror server hosted at Truenetwork, Russian Federation.