draft-ietf-dhc-dhcpv6-yang-19.txt   draft-ietf-dhc-dhcpv6-yang-20.txt 
DHC Working Group I. Farrer, Ed. DHC Working Group I. Farrer, Ed.
Internet-Draft Deutsche Telekom AG Internet-Draft Deutsche Telekom AG
Intended status: Standards Track 17 March 2021 Intended status: Standards Track 1 June 2021
Expires: 18 September 2021 Expires: 3 December 2021
YANG Data Model for DHCPv6 Configuration YANG Data Model for DHCPv6 Configuration
draft-ietf-dhc-dhcpv6-yang-19 draft-ietf-dhc-dhcpv6-yang-20
Abstract Abstract
This document describes YANG data modules for the configuration and This document describes YANG data modules for the configuration and
management of DHCPv6 (Dynamic Host Configuration Protocol for IPv6) management of DHCPv6 (Dynamic Host Configuration Protocol for IPv6)
servers, relays, and clients. servers, relays, and clients.
Requirements Language Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
skipping to change at page 1, line 40 skipping to change at page 1, line 40
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 18 September 2021. This Internet-Draft will expire on 3 December 2021.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2021 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 (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document. license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text extracted from this document must include Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License. provided without warranty as described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 3 1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 4
1.2.1. DHCPv6 Option Definitions . . . . . . . . . . . . . . 4 1.2.1. DHCPv6 Option Definitions . . . . . . . . . . . . . . 4
1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6
2. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 6 2. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 6
2.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 6 2.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 6
2.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 13 2.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 13
2.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 16 2.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 16
3. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 19 3. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 19
3.1. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 19 3.1. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 19
3.2. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 38 3.2. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 39
3.3. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 48 3.3. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 48
3.4. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 62 3.4. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 63
4. Security Considerations . . . . . . . . . . . . . . . . . . . 69 4. Security Considerations . . . . . . . . . . . . . . . . . . . 71
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 70 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 72
6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 71 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 73
7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 71 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 73
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 72 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.1. Normative References . . . . . . . . . . . . . . . . . . 72 8.1. Normative References . . . . . . . . . . . . . . . . . . 74
8.2. Informative References . . . . . . . . . . . . . . . . . 74 8.2. Informative References . . . . . . . . . . . . . . . . . 76
Appendix A. Example of Augmenting Additional DHCPv6 Option Appendix A. Data Tree Examples . . . . . . . . . . . . . . . . . 77
Definitions . . . . . . . . . . . . . . . . . . . . . . . 75 A.1. DHCPv6 Server Configuration Example . . . . . . . . . . . 77
Appendix B. Example Vendor Specific Server Configuration A.2. DHCPv6 Relay Configuration Example . . . . . . . . . . . 81
Module . . . . . . . . . . . . . . . . . . . . . . . . . 79 A.3. DHCPv6 Client Configuration Examples . . . . . . . . . . 82
Appendix C. Example definition of class selector Appendix B. Example of Augmenting Additional DHCPv6 Option
configuration . . . . . . . . . . . . . . . . . . . . . . 86 Definitions . . . . . . . . . . . . . . . . . . . . . . . 85
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 93 Appendix C. Example Vendor Specific Server Configuration
Module . . . . . . . . . . . . . . . . . . . . . . . . . 88
Appendix D. Example definition of class-selector
configuration . . . . . . . . . . . . . . . . . . . . . . 95
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 102
1. Introduction 1. Introduction
DHCPv6 [RFC8415] is widely used for supplying configuration and other DHCPv6 [RFC8415] is widely 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. 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. element modules. Appendix A provides XML examples for each of the
element modules and shows their interaction.
The relay and client modules provide configuration which is
applicable device's interfaces. This is done by importing the ietf-
interfaces module [RFC8343] and using interface-refs to the 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 play a part in the normal DHCPv6 message flow. function and does not replace DHCPv6 address and parameter
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 to model the
DHCPv6 functions and options covered in [RFC8415]. A focus has also DHCPv6 functions and options covered in [RFC8415]. A focus has also
been given on the extensibility of the modules so that it is easy to been given on the extensibility of the modules so that they are easy
augment in additional functionality as required by a particular to augment to add additional functionality as required by a
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 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 B 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, allocating a
prefix from the correct pool, or supplying a set of options relevant 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, research has been carried out into a development of this document, implementations were researched and the
number of vendor's class selection implementations and the findings findings were that while this function is common to all, the method
were that while this function is common to all, the method for for configuring and implementing this function differs greatly.
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 module. Appendix C provides an example of their own suitable YANG modules. Appendix D provides an example of
this, to demonstrate how this is can be integrated with the main this, to demonstrate how this is can be integrated with the main
'ietf-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
modelled. E.g. OPTION_IA_NA (3) is created by the DHCP server when modelled. For example, OPTION_IA_NA (3) is created by the DHCP
requested by the client. The contents of the fields in the option server when requested by the client. The contents of the fields in
are based on a number of input configuration parameters which the the option are based on a number of input configuration parameters
server will apply when it receives the request (e.g., the T1/T2 which the server will apply when it receives the request (e.g., the
timers that are relevant for the pool of addresses). As a result, T1/T2 timers that are relevant for the pool of addresses). As a
there are no fields that are directly configurable in the option, so result, there are no fields that are directly configurable for the
it is not modelled. option, so it is not modelled.
The following table shows the DHCPv6 options that are modelled, the The following table shows the DHCPv6 options that are modeled, the
element(s) they are sent by, and the relevant YANG module name: element(s) they are sent by, and the relevant YANG module name:
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| 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 | | | | |
skipping to change at page 5, line 46 skipping to change at page 6, line 20
+---------------------+------+-----+------+-------------------------+ +---------------------+------+-----+------+-------------------------+
| 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: Modelled DHCPv6 Options Table 1: Modeled DHCPv6 Options
Further options definitions can be added using additional YANG Further options definitions can be added using additional YANG
modules via augmentation into the relevant element modules from this modules via augmentation of the relevant element modules from this
document. Appendix A contains an example module showing how the document. Appendix B contains an example module showing how the
DHCPv6 option definitions can be extended in this manner. Some DHCPv6 option definitions can be extended in this manner. Some
guidance on how to write YANG modules for additional DHCPv6 options guidance on how to write YANG modules for additional DHCPv6 options
is also provided. is also provided.
1.3. Terminology 1.3. Terminology
The reader should be familiar with the YANG data modelling 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 the Network Management
Datastore Architecture (NMDA) [RFC8342]. The meanings of the symbols Datastore Architecture (NMDA) [RFC8342]. The meanings 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 as
defined in [RFC8415] and other relevant documents. defined in [RFC8415] and other relevant documents.
2. DHCPv6 Tree Diagrams 2. DHCPv6 Tree Diagrams
2.1. DHCPv6 Server Tree Diagram 2.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
Section 3.4. Section 3.4.
module: ietf-dhcpv6-server module: ietf-dhcpv6-server
+--rw dhcpv6-server +--rw dhcpv6-server
+--rw enabled? boolean +--rw enabled? boolean
+--rw server-duid? dhcpv6-common: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 uint32 | +--rw option-set-id uint32
| +--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 protocol? uint8 | | +--rw protocol? uint8
| | +--rw algorithm? uint8 | | +--rw algorithm? uint8
| | +--rw rdm? uint8 | | +--rw rdm? uint8
| | +--rw replay-detection? uint64 | | +--rw replay-detection? uint64
| | +--rw auth-information? string | | +--rw auth-information? string
| +--rw server-unicast-option | +--rw server-unicast-option
| | +--rw server-address? inet:ipv6-address | | +--rw server-address? inet:ipv6-address
| +--rw status-code-option | +--rw status-code-option
| | +--rw status-code? uint16 | | +--rw status-code? uint16
| | +--rw status-message? string | | +--rw status-message? string
| +--rw rapid-commit-option! | +--rw rapid-commit-option!
| +--rw vendor-specific-information-option | +--rw vendor-specific-information-options
| | +--rw vendor-specific-information-option-instances* | | +--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? string | | +--rw sub-option-data? string
| +--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? | | +--rw info-refresh-time? dhc6:timer-seconds32
| | dhcpv6-common:timer-seconds32
| +--rw sol-max-rt-option | +--rw sol-max-rt-option
| | +--rw sol-max-rt-value? | | +--rw sol-max-rt-value? dhc6:timer-seconds32
| | dhcpv6-common:timer-seconds32
| +--rw inf-max-rt-option | +--rw inf-max-rt-option
| +--rw inf-max-rt-value? | +--rw inf-max-rt-value? dhc6:timer-seconds32
| dhcpv6-common:timer-seconds32
+--rw class-selector +--rw class-selector
+--rw network-ranges +--rw network-ranges
+--rw option-set-id* leafref +--rw option-set-id* leafref
+--rw valid-lifetime? +--rw valid-lifetime? dhc6:timer-seconds32
| dhcpv6-common:timer-seconds32 +--rw renew-time? dhc6:timer-seconds32
+--rw renew-time? +--rw rebind-time? dhc6:timer-seconds32
| dhcpv6-common:timer-seconds32 +--rw preferred-lifetime? dhc6:timer-seconds32
+--rw rebind-time?
| dhcpv6-common:timer-seconds32
+--rw preferred-lifetime?
| dhcpv6-common:timer-seconds32
+--rw rapid-commit? boolean +--rw rapid-commit? boolean
+--rw network-range* [id] +--rw network-range* [id]
| +--rw id uint32 | +--rw id uint32
| +--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? | +--rw valid-lifetime? dhc6:timer-seconds32
| | dhcpv6-common:timer-seconds32 | +--rw renew-time? dhc6:timer-seconds32
| +--rw renew-time? | +--rw rebind-time? dhc6:timer-seconds32
| | dhcpv6-common:timer-seconds32 | +--rw preferred-lifetime? dhc6:timer-seconds32
| +--rw rebind-time?
| | dhcpv6-common:timer-seconds32
| +--rw preferred-lifetime?
| | dhcpv6-common:timer-seconds32
| +--rw rapid-commit? boolean | +--rw rapid-commit? boolean
| +--rw address-pools | +--rw address-pools
| | +--rw address-pool* [pool-id] | | +--rw address-pool* [pool-id]
| | +--rw pool-id uint32 | | +--rw pool-id uint32
| | +--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 | | +--rw max-address-utilization? dhc6:threshold
| | | dhcpv6-common:threshold
| | +--rw option-set-id* leafref | | +--rw option-set-id* leafref
| | +--rw valid-lifetime? | | +--rw valid-lifetime?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw renew-time? | | +--rw renew-time?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw rebind-time? | | +--rw rebind-time?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw preferred-lifetime? | | +--rw preferred-lifetime?
| | | dhcpv6-common: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? | | | +--rw client-duid? dhc6:duid
| | | | dhcpv6-common: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?
| | | | dhcpv6-common:timer-seconds32 | | | | dhc6:timer-seconds32
| | | +--rw renew-time? | | | +--rw renew-time?
| | | | dhcpv6-common:timer-seconds32 | | | | dhc6:timer-seconds32
| | | +--rw rebind-time? | | | +--rw rebind-time?
| | | | dhcpv6-common:timer-seconds32 | | | | dhc6:timer-seconds32
| | | +--rw preferred-lifetime? | | | +--rw preferred-lifetime?
| | | | dhcpv6-common: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? | | +--ro client-duid? dhc6:duid
| | | dhcpv6-common:duid | | +--ro ia-id uint32
| | +--ro iaid 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?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro valid-lifetime? | | +--ro valid-lifetime?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro lease-t1? | | +--ro lease-t1?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro lease-t2? | | +--ro lease-t2?
| | dhcpv6-common:timer-seconds32 | | dhc6:timer-seconds32
| +--rw prefix-pools {prefix-delegation}? | +--rw prefix-pools {prefix-delegation}?
| +--rw prefix-pool* [pool-id] | +--rw prefix-pool* [pool-id]
| +--rw pool-id uint32 | +--rw pool-id uint32
| +--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 | +--rw max-pd-space-utilization? dhc6:threshold
| | dhcpv6-common:threshold
| +--rw option-set-id* leafref | +--rw option-set-id* leafref
| +--rw valid-lifetime? | +--rw valid-lifetime?
| | dhcpv6-common:timer-seconds32 | | dhc6:timer-seconds32
| +--rw renew-time? | +--rw renew-time?
| | dhcpv6-common:timer-seconds32 | | dhc6:timer-seconds32
| +--rw rebind-time? | +--rw rebind-time?
| | dhcpv6-common:timer-seconds32 | | dhc6:timer-seconds32
| +--rw preferred-lifetime? | +--rw preferred-lifetime?
| | dhcpv6-common: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? | | | +--rw client-duid? dhc6:duid
| | | | dhcpv6-common: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?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw renew-time? | | +--rw renew-time?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw rebind-time? | | +--rw rebind-time?
| | | dhcpv6-common:timer-seconds32 | | | dhc6:timer-seconds32
| | +--rw preferred-lifetime? | | +--rw preferred-lifetime?
| | | dhcpv6-common: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? | +--ro client-duid? dhc6:duid
| | dhcpv6-common:duid | +--ro ia-id uint32
| +--ro iaid 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?
| | dhcpv6-common:timer-seconds32 | | dhc6:timer-seconds32
| +--ro valid-lifetime? | +--ro valid-lifetime?
| | dhcpv6-common:timer-seconds32 | | dhc6:timer-seconds32
| +--ro lease-t1? | +--ro lease-t1?
| | dhcpv6-common:timer-seconds32 | | dhc6:timer-seconds32
| +--ro lease-t2? | +--ro lease-t2?
| dhcpv6-common:timer-seconds32 | dhc6:timer-seconds32
+--ro solicit-count? uint32 +--ro solicit-count? uint32
+--ro advertise-count? uint32 +--ro advertise-count? uint32
+--ro request-count? uint32 +--ro request-count? uint32
+--ro confirm-count? uint32 +--ro confirm-count? uint32
+--ro renew-count? uint32 +--ro renew-count? uint32
+--ro rebind-count? uint32 +--ro rebind-count? uint32
+--ro reply-count? uint32 +--ro reply-count? uint32
+--ro release-count? uint32 +--ro release-count? uint32
+--ro decline-count? uint32 +--ro decline-count? uint32
+--ro reconfigure-count? uint32 +--ro reconfigure-count? uint32
skipping to change at page 11, line 11 skipping to change at page 11, line 15
| +--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? dhcpv6-common:duid | +--ro duid? dhc6:duid
| +--ro description? string | +--ro description? string
+---n decline-received +---n decline-received
| +--ro duid? dhcpv6-common: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 status-code uint16 +--ro status-code uint16
+--ro duid? dhcpv6-common:duid +--ro duid? dhc6:duid
Figure 1: DHCPv6 Server Data Module Structure Figure 1: DHCPv6 Server Data Module Structure
Descriptions of important nodes: Descriptions of important nodes:
* enabled: 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 * dhcpv6-server: This container holds the server's DHCPv6 specific
configuration. configuration.
* server-duid: Each server must have a DUID (DHCP Unique Identifier) * server-duid: Each server must have a DUID (DHCP Unique Identifier)
to identify itself to clients. A DUID consists of a two-octet to identify itself to clients. A DUID consists of a two-octet
type field and an arbitrary length (of no more than 128-bytes) type field and an arbitrary length (of no more than 128-octets)
content field. Currently there are four defined types of DUIDs in content field. Currently there are four defined types of DUIDs in
[RFC8415] and [RFC6355]. The DUID may be configured using the [RFC8415] and [RFC6355]. The DUID may be configured using the
format for one of these types, or using the 'unstructured' format. format for one of these types, or using the 'unstructured' format.
The DUID type definitions are imported from the 'ietf- The DUID type definitions are imported from the 'ietf-
dhcpv6-common.yang' module. [IANA-HARDWARE-TYPES] and [IANA-PEN] dhcpv6-common.yang' module. [IANA-HARDWARE-TYPES] and [IANA-PEN]
are referenced for the relevant DUID types. are referenced for the relevant DUID types.
* vendor-config: This container is provided as a location for * vendor-config: This container is provided as a location for
additional implementation specific YANG nodes for the additional implementation-specific YANG nodes for the
configuration of the device to be augmented. See Appendix B for configuration of the device to be augmented. See Appendix C for
an example of such a module. an example of such a module.
* option-sets: The server can be configured with multiple option- * option-sets: The server can be configured with multiple option-
sets. These are groups of DHCPv6 options with common parameters sets. These are groups of DHCPv6 options with common parameters
which will be supplied to clients on request. The 'option-set-id' which will be supplied to clients on request. The 'option-set-id'
field is used to reference an option-set elsewhere in the server's field is used to reference an option-set elsewhere in the server's
configuration. configuration.
* option-set: Holds configuration parameters for DHCPv6 options. * option-set: Holds configuration parameters for DHCPv6 options.
The initial set of applicable option definitions are defined here The initial set of applicable option definitions are defined here
and additional options that are also relevant to the relay and/or and additional options that are also relevant to the relay and/or
client are imported from the 'ietf-dhcpv6-common' module. Where client are imported from the 'ietf-dhcpv6-common' module. Where
needed, other DHCPv6 option modules can be augmented as they are needed, other DHCPv6 option modules can be augmented as they are
defined. defined.
* class-selector: This is provided as a location for additional * class-selector: This is provided as a location for additional
implementation specific YANG nodes for vendor specific class implementation specific YANG nodes for vendor specific class
selector nodes to be augmented. See Appendix C for an example of selector nodes to be augmented. See Appendix D for an example of
this. this.
* network-ranges: A hierarchical model is used for the allocation of * network-ranges: A hierarchical model is used for the allocation of
addresses and prefixes. At the top level 'network-ranges' holds addresses and prefixes. At the top level, 'network-ranges' holds
global configuration parameters. Under this, a list of 'network- global configuration parameters. Under this, a list of 'network-
ranges' can be defined. Inside 'network-rages', 'address-pools' ranges' can be defined. Inside 'network-rages', 'address-pools'
(for IA_NA and IA_TA allocations), and 'prefix-pools' (for IA_PD (for IA_NA and IA_TA allocations), and 'prefix-pools' (for IA_PD
allocation) are defined. Finally within the pools, specific host- allocation) are defined. Finally within the pools, specific host-
reservations are held. reservations are held.
* prefix-pools: Defines pools to be used for prefix delegation to * prefix-pools: Defines pools to be used for prefix delegation to
clients. As prefix delegation is not supported by all DHCPv6 clients. As prefix delegation is not supported by all DHCPv6
server implementations, it is enabled by a feature statement. server implementations, it is enabled by a feature statement.
Information about notifications: Information about notifications:
* address/prefix-pool-utilization-threshold-exceeded: Raised when * address/prefix-pool-utilization-threshold-exceeded: Raised when
number of leased addresses or prefixes exceeds the configured the number of leased addresses or prefixes exceeds the configured
usage threshold. usage threshold.
* invalid-client-detected: Raised when the server detects an invalid * invalid-client-detected: Raised when the server detects an invalid
client. A description of the error that has generated the client. A description of the error and message type that has
notification can be included. generated the notification can be included.
* decline-received: Raised when a DHCPv6 Decline message is received * decline-received: Raised when a DHCPv6 Decline message is received
from a client. from a client.
* non-success-code-sent: Raised when a status message is raised for * non-success-code-sent: Raised when a status message is raised for
an error. an error.
Information about RPCs Information about RPCs
* delete-address-lease: Allows the deletion of a lease for an * delete-address-lease: Allows the deletion of a lease for an
individual IPv6 address from the server's lease database. individual IPv6 address from the server's lease database.
skipping to change at page 13, line 23 skipping to change at page 13, line 23
module. The tree also includes the common functions module module. The tree also includes the common functions module
Section 3.4. Section 3.4.
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 | +--rw if-name
| | if:interface-ref | | if:interface-ref
| +--rw enabled? boolean | +--rw enabled? boolean
| +--rw destination-addresses* | +--rw destination-address*
| | inet:ipv6-address
| +--rw link-address?
| | inet:ipv6-address | | inet:ipv6-address
| +--rw link-address? string
| +--rw relay-options | +--rw relay-options
| | +--rw auth-option | | +--rw auth-option
| | | +--rw protocol? uint8 | | | +--rw protocol? uint8
| | | +--rw algorithm? uint8 | | | +--rw algorithm? uint8
| | | +--rw rdm? uint8 | | | +--rw rdm? uint8
| | | +--rw replay-detection? uint64 | | | +--rw replay-detection? uint64
| | | +--rw auth-information? string | | | +--rw auth-information? string
| | +--rw status-code-option | | +--rw status-code-option
| | | +--rw status-code? uint16 | | | +--rw status-code? uint16
| | | +--rw status-message? string | | | +--rw status-message? string
skipping to change at page 14, line 9 skipping to change at page 14, line 10
| +--ro reconfigure-sent-count? uint32 | +--ro reconfigure-sent-count? uint32
| +--ro information-request-received-count? uint32 | +--ro information-request-received-count? uint32
| +--ro unknown-message-received-count? uint32 | +--ro unknown-message-received-count? uint32
| +--ro unknown-message-sent-count? uint32 | +--ro unknown-message-sent-count? uint32
| +--ro discarded-message-count? uint32 | +--ro discarded-message-count? uint32
| +--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? dhcpv6-common:duid | +--ro client-duid? dhc6:duid
| +--ro server-duid? dhcpv6-common:duid | +--ro server-duid? dhc6:duid
+--ro relay-forward-sent-count? uint32 +--ro relay-forward-sent-count? uint32
+--ro relay-forward-received-count? uint32 +--ro relay-forward-received-count? uint32
+--ro relay-reply-received-count? uint32 +--ro relay-reply-received-count? uint32
+--ro relay-forward-unknown-sent-count? uint32 +--ro relay-forward-unknown-sent-count? uint32
+--ro relay-forward-unknown-received-count? uint32 +--ro relay-forward-unknown-received-count? uint32
+--ro discarded-message-count? uint32 +--ro discarded-message-count? uint32
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 dhcpv6-common: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 | +---w interface
| -> ../../dhcpv6-relay/relay-if/if-name | -> ../../dhcpv6-relay/relay-if/if-name
+--ro output +--ro output
+--ro return-message? string +--ro return-message? string
notifications: notifications:
skipping to change at page 14, line 49 skipping to change at page 14, line 50
+--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: 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 * dhcpv6-relay: This container holds the relay's DHCPv6-specific
configuration. configuration.
* relay-if: As a relay may have multiple client-facing interfaces, * 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 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- an interface-ref to the applicable interface defined by the 'ietf-
interfaces' YANG module. interfaces' YANG module.
* enabled: Enables/disables all DHCPv6 relay function for the * enabled: Enables/disables all DHCPv6 relay function for the
specific interface. specific interface.
skipping to change at page 15, line 37 skipping to change at page 15, line 37
* relay-options: Holds configuration parameters for DHCPv6 options * relay-options: Holds configuration parameters for DHCPv6 options
which can be sent by the relay. The initial set of applicable which can be sent by the relay. The initial set of applicable
option definitions are defined here and additional options that option definitions are defined here and additional options that
are also relevant to the server and/or client are imported from are also relevant to the server and/or client are imported from
the 'ietf-dhcpv6-common' module. Where needed, other DHCPv6 the 'ietf-dhcpv6-common' module. Where needed, other DHCPv6
option modules can be augmented as they are defined. option modules can be augmented as they are defined.
Information about notifications: Information about notifications:
* topology-changed: Raised when the topology of the relay agent is * topology-changed: Raised when the topology of the relay agent is
changed, e.g. a client facing interface is reconfigured. changed, e.g., a client facing interface is reconfigured.
Information about RPCs Information about RPCs
* clear-prefix-lease: Allows the removal of a delegated lease entry * clear-prefix-lease: Allows the removal of a delegated lease entry
from the relay. from the relay.
* clear-client-prefixes: Allows the removal of all of the delegated * clear-client-prefixes: Allows the removal of all of the delegated
lease entries for a single client (referenced by client DUID) from lease entries for a single client (referenced by client DUID) from
the relay. the relay.
* clear-interface-prefixes: Allows the removal of all of the * clear-interface-prefixes: 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.
2.3. DHCPv6 Client Tree Diagram 2.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
Section 3.4. defined in Section 3.4.
module: ietf-dhcpv6-client module: ietf-dhcpv6-client
+--rw dhcpv6-client +--rw dhcpv6-client
+--rw enabled? boolean +--rw enabled? boolean
+--rw client-if* [if-name] +--rw client-if* [if-name]
+--rw if-name if:interface-ref +--rw if-name if:interface-ref
+--rw enabled? boolean +--rw enabled? boolean
+--rw duid? dhcpv6-common:duid +--rw duid? dhc6:duid
+--rw client-configured-options +--rw client-configured-options
| +--rw option-request-option | +--rw option-request-option
| | +--rw oro-option* uint16 | | +--rw oro-option* uint16
| +--rw status-code-option | +--rw status-code-option
| | +--rw status-code? uint16 | | +--rw status-code? uint16
| | +--rw status-message? string | | +--rw status-message? string
| +--rw rapid-commit-option! | +--rw rapid-commit-option!
| +--rw user-class-option! | +--rw user-class-option!
| | +--rw user-class-data-instances* | | +--rw user-class-data-instance*
| | [user-class-data-id] | | [user-class-data-id]
| | +--rw user-class-data-id uint8 | | +--rw user-class-data-id uint8
| | +--rw user-class-data? string | | +--rw user-class-data? string
| +--rw vendor-class-option | +--rw vendor-class-option
| | +--rw vendor-class-option-instances* | | +--rw vendor-class-option-instances*
| | [enterprise-number] | | [enterprise-number]
| | +--rw enterprise-number uint32 | | +--rw enterprise-number uint32
| | +--rw vendor-class* [vendor-class-datum-id] | | +--rw vendor-class-data-element*
| | +--rw vendor-class-datum-id uint8 | | [vendor-class-data-id]
| | +--rw vendor-class-datum? string | | +--rw vendor-class-data-id uint8
| +--rw vendor-specific-information-option | | +--rw vendor-class-data? string
| | +--rw vendor-specific-information-option-instances* | +--rw vendor-specific-information-options
| | [enterprise-number] | | +--rw vendor-specific-information-option*
| | +--rw enterprise-number uint32 | | [enterprise-number]
| | +--rw vendor-option-data* [sub-option-code] | | +--rw enterprise-number uint32
| | +--rw sub-option-code uint16 | | +--rw vendor-option-data* [sub-option-code]
| | +--rw sub-option-data? string | | +--rw sub-option-code uint16
| +--rw reconfigure-accept-option! | | +--rw sub-option-data? string
+--rw ia-na* [iaid] | +--rw reconfigure-accept-option!
| +--rw iaid uint32 +--rw ia-na* [ia-id]
| +--rw ia-na-options | +--rw ia-id uint32
| +--ro lease-state | +--rw ia-na-options
| +--ro ia-na-address? inet:ipv6-address | +--ro lease-state
| +--ro preferred-lifetime? | +--ro ia-na-address? inet:ipv6-address
| | dhcpv6-common:timer-seconds32 | +--ro preferred-lifetime? dhc6:timer-seconds32
| +--ro valid-lifetime? | +--ro valid-lifetime? dhc6:timer-seconds32
| | dhcpv6-common:timer-seconds32 | +--ro lease-t1? dhc6:timer-seconds32
| +--ro lease-t1? | +--ro lease-t2? dhc6:timer-seconds32
| | dhcpv6-common:timer-seconds32 | +--ro allocation-time? yang:date-and-time
| +--ro lease-t2? | +--ro last-renew-rebind? yang:date-and-time
| | dhcpv6-common:timer-seconds32 | +--ro server-duid? dhc6:duid
| +--ro allocation-time? yang:date-and-time +--rw ia-ta* [ia-id]
| +--ro last-renew-rebind? yang:date-and-time | +--rw ia-id uint32
| +--ro server-duid? dhcpv6-common:duid | +--rw ia-ta-options
+--rw ia-ta* [iaid] | +--ro lease-state
| +--rw iaid uint32 | +--ro ia-ta-address? inet:ipv6-address
| +--rw ia-ta-options | +--ro preferred-lifetime? dhc6:timer-seconds32
| +--ro lease-state | +--ro valid-lifetime? dhc6:timer-seconds32
| +--ro ia-ta-address? inet:ipv6-address | +--ro allocation-time? yang:date-and-time
| +--ro preferred-lifetime? | +--ro last-renew-rebind? yang:date-and-time
| | dhcpv6-common:timer-seconds32 | +--ro server-duid? dhc6:duid
| +--ro valid-lifetime? +--rw ia-pd* [ia-id]
| | dhcpv6-common:timer-seconds32 | +--rw ia-id uint32
| +--ro allocation-time? yang:date-and-time | +--rw ia-pd-options
| +--ro last-renew-rebind? yang:date-and-time | +--ro lease-state
| +--ro server-duid? dhcpv6-common:duid | +--ro ia-pd-prefix? inet:ipv6-prefix
+--rw ia-pd* [iaid] | +--ro preferred-lifetime? dhc6:timer-seconds32
| +--rw iaid uint32 | +--ro valid-lifetime? dhc6:timer-seconds32
| +--rw ia-pd-options | +--ro lease-t1? dhc6:timer-seconds32
| +--ro lease-state | +--ro lease-t2? dhc6:timer-seconds32
| +--ro ia-pd-prefix? inet:ipv6-prefix | +--ro allocation-time? yang:date-and-time
| +--ro preferred-lifetime? | +--ro last-renew-rebind? yang:date-and-time
| | dhcpv6-common:timer-seconds32 | +--ro server-duid? dhc6:duid
| +--ro valid-lifetime? +--ro solicit-count? uint32
| | dhcpv6-common:timer-seconds32 +--ro advertise-count? uint32
| +--ro lease-t1? +--ro request-count? uint32
| | dhcpv6-common:timer-seconds32 +--ro confirm-count? uint32
| +--ro lease-t2? +--ro renew-count? uint32
| | dhcpv6-common:timer-seconds32 +--ro rebind-count? uint32
| +--ro allocation-time? yang:date-and-time +--ro reply-count? uint32
| +--ro last-renew-rebind? yang:date-and-time +--ro release-count? uint32
| +--ro server-duid? dhcpv6-common:duid +--ro decline-count? uint32
+--ro solicit-count? uint32 +--ro reconfigure-count? uint32
+--ro advertise-count? uint32 +--ro information-request-count? uint32
+--ro request-count? uint32
+--ro confirm-count? uint32
+--ro renew-count? uint32
+--ro rebind-count? uint32
+--ro reply-count? uint32
+--ro release-count? uint32
+--ro decline-count? uint32
+--ro reconfigure-count? uint32
+--ro information-request-count? uint32
notifications: notifications:
+---n invalid-ia-address-detected +---n invalid-ia-address-detected
| +--ro iaid uint32 | +--ro ia-id uint32
| +--ro ia-na-t1-timer? uint32 | +--ro ia-na-t1-timer? uint32
| +--ro ia-na-t2-timer? uint32 | +--ro ia-na-t2-timer? uint32
| +--ro invalid-address? inet:ipv6-address | +--ro invalid-address? inet:ipv6-address
| +--ro preferred-lifetime? uint32 | +--ro preferred-lifetime? uint32
| +--ro valid-lifetime? uint32 | +--ro valid-lifetime? uint32
| +--ro ia-options? binary | +--ro ia-options? binary
| +--ro description? string | +--ro description? string
+---n transmission-failed +---n transmission-failed
| +--ro failure-type enumeration | +--ro failure-type enumeration
| +--ro description? string | +--ro description? string
+---n unsuccessful-status-code +---n unsuccessful-status-code
| +--ro status-code uint16 | +--ro status-code uint16
| +--ro server-duid dhcpv6-common:duid | +--ro server-duid dhc6:duid
+---n server-duid-changed +---n server-duid-changed
+--ro new-server-duid dhcpv6-common:duid +--ro new-server-duid dhc6:duid
+--ro previous-server-duid dhcpv6-common:duid +--ro previous-server-duid dhc6:duid
+--ro lease-ia-na? +--ro lease-ia-na?
| -> /dhcpv6-client/client-if/ia-na/iaid | -> /dhcpv6-client/client-if/ia-na/ia-id
+--ro lease-ia-ta? +--ro lease-ia-ta?
| -> /dhcpv6-client/client-if/ia-ta/iaid | -> /dhcpv6-client/client-if/ia-ta/ia-id
+--ro lease-ia-pd? +--ro lease-ia-pd?
-> /dhcpv6-client/client-if/ia-pd/iaid -> /dhcpv6-client/client-if/ia-pd/ia-id
Figure 3: DHCPv6 Client Data Module Structure Figure 3: DHCPv6 Client Data Module Structure
Descriptions of important nodes: Descriptions of important nodes:
* enabled: 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 * dhcpv6-client: This container holds the client's DHCPv6 specific
configuration. 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 if-
name leaf is the key and is an interface-ref to the applicable name leaf is the key and is an interface-ref to the applicable
interface defined by the 'ietf-interfaces' YANG module. interface defined by the 'ietf-interfaces' YANG module.
* enabled: Enables/disables all DHCPv6 client function for the * enabled: Enables/disables all DHCPv6 client function for the
specific interface. specific interface.
* client-duid: Each client must have a DUID (DHCP Unique Identifier) * client-duid: Each client must have a DUID (DHCP Unique Identifier)
to identify itself to servers and relays. A DUID consists of a to identify itself to servers and relays. A DUID consists of a
two-octet type field and an arbitrary length (of no more than two-octet type field and an arbitrary length (1-128 octets)
128-bytes) content field. Currently there are four defined types content field. Currently there are four defined types of DUIDs in
of DUIDs 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' format.
'unstructured' format. The DUID type definitions are imported 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 [IANA-PEN]
and [IANA-PEN] are referenced for the relevant DUID types. are referenced for the relevant DUID types.
* client-configured-options: Holds configuration parameters for * client-configured-options: Holds configuration parameters for
DHCPv6 options which can be sent by the client. The initial set DHCPv6 options which can be sent by the client. The initial set
of applicable option definitions are defined here and additional of applicable option definitions are defined here and additional
options that are also relevant to the relay and/or server are options that are also relevant to the relay and/or server are
imported from the 'ietf-dhcpv6-common' module. Where needed, imported from the 'ietf-dhcpv6-common' module. Where needed,
other DHCPv6 option modules can be augmented as they are defined. 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: Contains configuration nodes relevant for
requesting one or more of each of the lease types. Read-only requesting one or more of each of the lease types. Read-only
nodes related to the active lease are also located here. nodes related to the active leases for each type are also located
here.
Information about notifications: Information about notifications:
* invalid-ia-detected: Raised when the identity association of the * invalid-ia-detected: Raised when the identity association of the
client can be proved to be invalid. Possible conditions include: client can be proved to be invalid. Possible conditions include:
duplicated address, illegal address, etc. duplicated address, illegal address, etc.
* retransmission-failed: Raised when the retransmission mechanism * retransmission-failed: Raised when the retransmission mechanism
defined in [RFC8415] has failed. defined in [RFC8415] has failed.
3. DHCPv6 YANG Modules 3. DHCPv6 YANG Modules
3.1. DHCPv6 Server YANG Module 3.1. DHCPv6 Server YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991], [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-server@2021-03-17.yang" <CODE BEGINS> file "ietf-dhcpv6-server@2021-06-01.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 "dhcpv6-server"; 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
skipping to change at page 20, line 4 skipping to change at page 19, line 49
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 dhcpv6-common; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC XXXX: To be updated on publication";
} }
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";
} }
skipping to change at page 20, line 32 skipping to change at page 20, line 27
contact contact
"WG Web: <http://datatracker.ietf.org/wg/dhc/> "WG Web: <http://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 "This YANG module defines components for the description
configuration and management of DHCPv6 servers. "This YANG module defines components for the configuration
and management of DHCPv6 servers.
Copyright (c) 2021 IETF Trust and the persons identified as Copyright (c) 2021 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 without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-03-17 {
description "Version update for draft -19 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-19";
}
revision 2021-02-22 {
description "Version update for draft -18 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-18";
}
revision 2021-01-29 {
description "Version update for draft -17 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-17";
}
revision 2021-01-06 {
description "Version update for draft -16 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-16";
}
revision 2020-12-22 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-15";
}
revision 2020-12-10 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-13";
}
revision 2020-12-01 {
description "Version update for draft -12 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-12";
}
revision 2020-05-26 {
description "Version update for draft -11 publication and
to align revisions across the different modules.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11";
}
revision 2019-12-02 {
description "Major reworking of the module.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-10";
}
revision 2018-09-04 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2018-03-04 {
description "Resolved most issues on the DHC official
github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2017-12-22 {
description "Resolve most issues on Ian's github.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2017-11-24 { revision 2017-11-24 {
description "First version of the separated server specific description
YANG model."; "First version of the separated server specific YANG model.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
/* /*
* Features * Features
*/ */
feature prefix-delegation { feature prefix-delegation {
description "Denotes that the server implements DHCPv6 prefix description
"Denotes that the server implements DHCPv6 prefix
delegation."; delegation.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.3"; IPv6 (DHCPv6), Section 6.3";
} }
/* /*
* Groupings * Groupings
*/ */
grouping resource-config { grouping resource-config {
description "Nodes that are reused at multiple levels in the description
DHCPv6 server's addressing hierarchy."; "Nodes that are reused at multiple levels in the DHCPv6
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 "The ID field of relevant set of DHCPv6 options description
(option-set) to be provisioned to clients of this "The ID field of relevant set of DHCPv6 options (option-set)
network-range."; to be provisioned to clients using the network-range.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "Valid lifetime for the Identity Association description
(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 6"; IPv6 (DHCPv6), Section 6";
} }
leaf renew-time { leaf renew-time {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "Renew (T1) time."; description
"Renew (T1) 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 rebind-time { leaf rebind-time {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "Rebind (T2) time."; description
"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 dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "Preferred lifetime for the Identity Association description
(IA)."; "Preferred 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 6"; IPv6 (DHCPv6), Section 6";
} }
leaf rapid-commit { leaf rapid-commit {
type boolean; type boolean;
description "When set to 'true', Specifies that the pool description
supports client-server exchanges involving two messages."; "When set to 'true', Specifies that the pool supports
client-server exchanges involving two messages.";
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 "Binding information for each client that has description
been allocated an IPv6 address or prefix."; "Binding information for each client that has been allocated
an IPv6 address or prefix.";
leaf client-duid { leaf client-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "Client DUID."; description
"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 iaid { leaf ia-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "Client's IAID"; description
"Client's 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 "Time and date that the lease was made."; description
"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";
} }
leaf last-renew-rebind { leaf last-renew-rebind {
type yang:date-and-time; type yang:date-and-time;
description "Time of the last successful renew or description
rebind."; "Time of the last successful renew or rebind.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18"; IPv6 (DHCPv6), Section 18";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The preferred lifetime expressed in description
seconds."; "The preferred lifetime 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 valid-lifetime { leaf valid-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The valid lifetime for the lease expressed description
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 dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The time interval after which the client description
should contact the server from which the addresses "The time interval after which the client should contact
in the IA_NA were obtained to extend the lifetimes the server from which the addresses in the IA_NA were
of the addresses assigned to the IA_PD."; obtained to extend the lifetimes of the addresses assigned
to the 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 dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The time interval after which the client description
should contact any available server to extend "The time interval after which the client should contact
the lifetimes of the addresses assigned to the any available server to extend the lifetimes of 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
IPv6 (DHCPv6), Section 4.2"; IPv6 (DHCPv6), Section 4.2";
} }
} }
grouping message-stats { grouping message-stats {
description "Counters for DHCPv6 messages."; description
"Counters for DHCPv6 messages.";
leaf solicit-count { leaf solicit-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Solicit (1) messages received."; description
"Number of Solicit (1) messages received.";
} }
leaf advertise-count { leaf advertise-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Advertise (2) messages sent."; description
"Number of Advertise (2) messages sent.";
} }
leaf request-count { leaf request-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Request (3) messages received."; description
"Number of Request (3) messages received.";
} }
leaf confirm-count { leaf confirm-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Confirm (4) messages received."; description
"Number of Confirm (4) messages received.";
} }
leaf renew-count { leaf renew-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Renew (5) messages received."; description
"Number of Renew (5) messages received.";
} }
leaf rebind-count { leaf rebind-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Rebind (6) messages received."; description
"Number of Rebind (6) messages received.";
} }
leaf reply-count { leaf reply-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Reply (7) messages sent."; description
"Number of Reply (7) messages sent.";
} }
leaf release-count { leaf release-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Release (8) messages received."; description
"Number of Release (8) messages received.";
} }
leaf decline-count { leaf decline-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Decline (9) messages received."; description
"Number of Decline (9) messages received.";
} }
leaf reconfigure-count { leaf reconfigure-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Reconfigure (10) messages sent."; description
"Number of Reconfigure (10) messages sent.";
} }
leaf information-request-count { leaf information-request-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Information-request (11) messages description
"Number of Information-request (11) messages
received."; received.";
} }
} }
grouping preference-option-group { grouping preference-option-group {
description "OPTION_PREFERENCE (7) Preference Option."; description
"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 "OPTION_PREFERENCE (7) Preference Option description
"OPTION_PREFERENCE (7) Preference Option
container."; container.";
leaf pref-value { leaf pref-value {
type uint8; type uint8;
description "The preference value for the server in this description
"The preference value for the server in this
message. A 1-octet unsigned integer."; message. A 1-octet unsigned integer.";
} }
} }
} }
grouping server-unicast-option-group { grouping server-unicast-option-group {
description "OPTION_UNICAST (12) Server Unicast Option."; description
"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";
container server-unicast-option { container server-unicast-option {
description "OPTION_UNICAST (12) Server Unicast Option description
container."; "OPTION_UNICAST (12) Server Unicast Option container.";
leaf server-address { leaf server-address {
type inet:ipv6-address; type inet:ipv6-address;
description "The 128-bit address to which the client description
should send messages delivered using unicast."; "The 128-bit address to which the client should send
messages delivered using unicast.";
} }
} }
} }
grouping reconfigure-message-option-group { grouping reconfigure-message-option-group {
description "OPTION_RECONF_MSG (19) Reconfigure Message description
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 "OPTION_RECONF_MSG (19) Reconfigure Message description
Option."; "OPTION_RECONF_MSG (19) Reconfigure Message Option.";
leaf msg-type { leaf msg-type {
type uint8; type uint8;
description "5 for Renew message, 6 for Rebind message, description
11 for Information-request message."; "5 for Renew message, 6 for Rebind message, 11 for
Information-request message.";
} }
} }
} }
grouping info-refresh-time-option-group { grouping info-refresh-time-option-group {
description "OPTION_INFORMATION_REFRESH_TIME (32) description
Information Refresh Time Option."; "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh
Time Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.23"; IPv6 (DHCPv6), Section 21.23";
container info-refresh-time-option { container info-refresh-time-option {
description "OPTION_INFORMATION_REFRESH_TIME (32) description
"OPTION_INFORMATION_REFRESH_TIME (32)
Information Refresh Time option container."; Information Refresh Time option container.";
leaf info-refresh-time { leaf info-refresh-time {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "Time duration relative to the current time, description
expressed in units of seconds."; "Time duration relative to the current time, expressed
in units of seconds.";
} }
} }
} }
grouping sol-max-rt-option-group { grouping sol-max-rt-option-group {
description "OPTION_SOL_MAX_RT (82) sol max rt Option."; description
"OPTION_SOL_MAX_RT (82) SOL_MAX_RT Option (Max Solicit timeout
value).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.24"; IPv6 (DHCPv6), Section 21.24";
container sol-max-rt-option { container sol-max-rt-option {
description "OPTION_SOL_MAX_RT (82) sol max rt option description
container."; "OPTION_SOL_MAX_RT (82) SOL_MAX_RT option container.";
leaf sol-max-rt-value { leaf sol-max-rt-value {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "sol max rt value"; description
"sol max rt value";
} }
} }
} }
grouping inf-max-rt-option-group { grouping inf-max-rt-option-group {
description "OPTION_INF_MAX_RT (83) inf max rt Option."; description
"OPTION_INF_MAX_RT (83) INF_MAX_RT Option (Max
Information-request timeout value).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.25"; IPv6 (DHCPv6), Section 21.25";
container inf-max-rt-option { container inf-max-rt-option {
description "OPTION_INF_MAX_RT (83) inf max rt option description
"OPTION_INF_MAX_RT (83) inf max rt option
container."; container.";
leaf inf-max-rt-value { leaf inf-max-rt-value {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "inf max rt value"; description
"inf max rt value";
} }
} }
} }
/* /*
* Data Nodes * Data Nodes
*/ */
container dhcpv6-server { container dhcpv6-server {
description "Configuration nodes for the DHCPv6 server."; description
"Configuration nodes for the DHCPv6 server.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18.3"; IPv6 (DHCPv6), Section 18.3";
leaf enabled { leaf enabled {
type boolean; type boolean;
default true; description
description "Enables the DHCP server function."; "Enables the DHCP server function.";
} }
leaf server-duid { leaf server-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "DUID of the server."; description
"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 "This container provides a location for description
"This container provides a location for
augmenting vendor or implementation specific augmenting vendor or implementation specific
configuration nodes."; configuration nodes.";
} }
container option-sets { container option-sets {
description "A server may allow different option sets description
"A server may allow different option sets
to be configured for clients matching specific parameters to be configured for clients matching specific parameters
such as topological location or client type. The such as topological location or client type. The
'option-set' list is a set of options and their 'option-set' list is a set of options and their
contents that will be returned to clients."; contents that will be returned to 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 "YANG definitions for DHCPv6 options are description
"YANG definitions for DHCPv6 options are
contained in separate YANG modules and augmented to this contained in separate YANG modules and augmented to this
container as required."; container as required.";
leaf option-set-id { leaf option-set-id {
type uint32; type uint32;
description "Option set identifier."; description
"Option set identifier.";
} }
leaf description { leaf description {
type string; type string;
description "An optional field for storing additional description
information relevant to the option set."; "An optional field for storing additional information
relevant to the option set.";
} }
uses preference-option-group; uses preference-option-group;
uses dhcpv6-common:auth-option-group; uses dhc6:auth-option-group;
uses server-unicast-option-group; uses server-unicast-option-group;
uses dhcpv6-common:status-code-option-group; uses dhc6:status-code-option-group;
uses dhcpv6-common:rapid-commit-option-group; uses dhc6:rapid-commit-option-group;
uses dhcpv6-common:vendor-specific-information-option-group; uses dhc6:vendor-specific-information-option-group;
uses reconfigure-message-option-group; uses reconfigure-message-option-group;
uses dhcpv6-common:reconfigure-accept-option-group; uses dhc6:reconfigure-accept-option-group;
uses info-refresh-time-option-group; uses info-refresh-time-option-group;
uses sol-max-rt-option-group; uses sol-max-rt-option-group;
uses inf-max-rt-option-group; uses inf-max-rt-option-group;
} }
} }
container class-selector { container class-selector {
description "DHCPv6 servers use a 'class-selector' function description
in order to identify and classify incoming client messages "DHCPv6 servers use a 'class-selector' function in order
to identify and classify incoming client messages
so that they can be given the correct configuration. 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 that they greatly between different implementations such it is not
are not possible to include in this module. This container possible to include in this module. This container provides
provides a location for server implementors to augment a location for server implementors to augment their own
their own class-selector YANG."; class-selector YANG.";
} }
container network-ranges { container network-ranges {
description "This model is based on an address and parameter description
"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 network-ranges. Under is defined as the container for all network-ranges. Under
this are the individual network-ranges."; this are the individual network-ranges.";
uses resource-config; uses resource-config;
list network-range { list network-range {
key id; key id;
description "Network-ranges are identified by the description
'id' key."; "Network-ranges are identified by the 'id' key.";
leaf id { leaf id {
type uint32; type uint32;
mandatory true; mandatory true;
description "Unique identifier for the network range."; description
"Unique identifier for the network range.";
} }
leaf description { leaf description {
type string; type string;
mandatory true; description
description "Description for the network range."; "Description for the network range.";
} }
leaf network-prefix { leaf network-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "Network prefix."; description
"Network prefix.";
} }
uses resource-config; uses resource-config;
container address-pools { container address-pools {
description "Configuration for the DHCPv6 server's description
"Configuration for the DHCPv6 server's
address pools."; address pools.";
list address-pool { list address-pool {
key pool-id; key pool-id;
description "List of address pools for allocation to description
clients, distinguished by 'pool-id'."; "List of address pools for allocation to clients,
distinguished by 'pool-id'.";
leaf pool-id { leaf pool-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "Unique identifier for the pool."; description
"Unique identifier for the pool.";
} }
leaf pool-prefix { leaf pool-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "IPv6 prefix for the pool."; description
"IPv6 prefix for the pool.";
} }
leaf start-address { leaf start-address {
type inet:ipv6-address-no-zone; type inet:ipv6-address-no-zone;
mandatory true; mandatory true;
description "Start IPv6 address for the pool."; description
"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 "End IPv6 address for the pool."; description
"Ending IPv6 address for the pool.";
} }
leaf max-address-utilization { leaf max-address-utilization {
type dhcpv6-common:threshold; type dhc6:threshold;
mandatory true; description
description "Maximum amount of the addresses in the "Maximum amount of the addresses in the
pool which can be simultaneously allocated, pool which can be simultaneously allocated,
calculated as a percentage of the available calculated as a percentage of the available
addresses (end-address minus start-address)."; addresses (end-address minus start-address plus
one).";
} }
uses resource-config; uses resource-config;
container host-reservations { container host-reservations {
description "Configuration for host reservations from description
the address pool."; "Configuration for host reservations from the
address pool.";
list host-reservation { list host-reservation {
key reserved-addr; key reserved-addr;
description "List of host reservations."; description
"List of host reservations.";
leaf client-duid { leaf client-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "Client DUID for the reservation."; description
"Client DUID for the reservation.";
} }
leaf reserved-addr { leaf reserved-addr {
type inet:ipv6-address; type inet:ipv6-address;
description "Reserved IPv6 address."; description
"Reserved IPv6 address.";
} }
uses resource-config; uses resource-config;
} }
} }
container active-leases { container active-leases {
config false; config false;
description "Holds state related to active client description
"Holds state related to active client
leases."; leases.";
leaf total-count { leaf total-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "The total number of addresses in the description
"The total number of addresses in the
pool."; pool.";
} }
leaf allocated-count { leaf allocated-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "The number of addresses or prefixes description
"The number of addresses or prefixes
in the pool that are currently allocated."; in the pool that are currently allocated.";
} }
list active-lease { list active-lease {
key leased-address; key leased-address;
description "List of active address leases."; description
"List of active address leases.";
leaf leased-address { leaf leased-address {
type inet:ipv6-address; type inet:ipv6-address;
description "Active address lease entry."; description
"Active address lease entry.";
} }
uses lease-information; uses lease-information;
} }
} }
} }
} }
container prefix-pools { container prefix-pools {
if-feature prefix-delegation; if-feature prefix-delegation;
description "Configuration for the DHCPv6 server's description
prefix pools."; "Configuration for the DHCPv6 server's prefix pools.";
list prefix-pool { list prefix-pool {
key pool-id; key pool-id;
description "List of prefix pools for allocation to description
"List of prefix pools for allocation to
clients, distinguished by 'pool-id'."; clients, distinguished by 'pool-id'.";
leaf pool-id { leaf pool-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "Unique identifier for the pool."; description
"Unique identifier for the pool.";
} }
leaf pool-prefix { leaf pool-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "IPv6 prefix for the pool."; description
"IPv6 prefix for the pool.";
} }
leaf client-prefix-length { leaf client-prefix-length {
type uint8; type uint8 {
range "1 .. 128";
}
mandatory true; mandatory true;
description "Length of the prefixes that will be description
delegated to clients."; "Length of the prefixes that will be delegated
to clients.";
} }
leaf max-pd-space-utilization { leaf max-pd-space-utilization {
type dhcpv6-common:threshold; type dhc6:threshold;
mandatory true; description
description "Maximum amount of the prefixes in the "Maximum amount of the prefixes in the
pool which can be simultaneously allocated, pool which can be simultaneously allocated,
calculated as a percentage of the available calculated as a percentage of the available
prefixes, rounded up."; prefixes, rounded up.";
} }
uses resource-config; uses resource-config;
container host-reservations { container host-reservations {
description "Configuration for host reservations description
from the prefix pool."; "Configuration for host reservations from the
prefix pool.";
list prefix-reservation { list prefix-reservation {
key reserved-prefix; key reserved-prefix;
description "reserved prefix reservation"; description
"Reserved prefix reservation.";
leaf client-duid { leaf client-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "Client DUID for the reservation."; description
"Client DUID for the reservation.";
} }
leaf reserved-prefix { leaf reserved-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description "Reserved IPv6 prefix"; description
"Reserved IPv6 prefix";
} }
leaf reserved-prefix-len { leaf reserved-prefix-len {
type uint8; type uint8;
description "Reserved IPv6 prefix length."; description
"Reserved IPv6 prefix length.";
} }
} }
uses resource-config; uses resource-config;
} }
container active-leases { container active-leases {
config false; config false;
description "Holds state related to for active client description
prefix leases."; "Holds state related to active client prefix
leases.";
leaf total-count { leaf total-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "The total number of prefixes in description
the pool."; "The total number of prefixes in the pool.";
} }
leaf allocated-count { leaf allocated-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "The number of prefixes in the pool description
that are currently allocated."; "The number of prefixes in the pool that are
currently allocated.";
} }
list active-lease { list active-lease {
key leased-prefix; key leased-prefix;
description "List of active prefix leases."; description
"List of active prefix leases.";
leaf leased-prefix { leaf leased-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description "Active leased prefix entry."; description
"Active leased prefix entry.";
} }
uses lease-information; uses lease-information;
} }
} }
} }
} }
} }
uses message-stats; uses message-stats;
} }
} }
/* /*
* Notifications * Notifications
*/ */
notification address-pool-utilization-threshold-exceeded { notification address-pool-utilization-threshold-exceeded {
description "Notification sent when the address pool description
"Notification sent when the address pool
utilization exceeds the threshold configured in utilization exceeds the threshold configured in
max-address-utilization."; max-address-utilization.";
leaf pool-id { leaf pool-id {
type leafref { type leafref {
path "/dhcpv6-server/network-ranges/network-range/" + path "/dhcpv6-server/network-ranges/network-range/" +
"address-pools/address-pool/pool-id"; "address-pools/address-pool/pool-id";
} }
mandatory true; mandatory true;
description "Leafref to the address pool that the notification description
"Leafref to the address pool that the notification
is being generated for."; is being generated for.";
} }
leaf total-pool-addresses { leaf total-pool-addresses {
type uint64; type uint64;
mandatory true; mandatory true;
description "Total number of addresses in the pool description
(end-address minus start-address)."; "Total number of addresses in the pool
(end-address minus start-address plus one).";
} }
leaf max-allocated-addresses { leaf max-allocated-addresses {
type uint64; type uint64;
mandatory true; mandatory true;
description "Maximum number of addresses that can be description
simultaneously allocated from the pool. This value may be "Maximum number of addresses that can be simultaneously
less than count of total addresses. Calculated as the allocated from the pool. This value may be less than
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, rounded up.";
} }
leaf allocated-address-count { leaf allocated-address-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "Number of addresses allocated from the pool."; description
"Number of addresses allocated from the pool.";
} }
} }
notification prefix-pool-utilization-threshold-exceeded { notification prefix-pool-utilization-threshold-exceeded {
if-feature prefix-delegation; if-feature prefix-delegation;
description "Notification sent when the prefix pool description
utilization exceeds the threshold configured in "Notification sent when the prefix pool utilization
exceeds the threshold configured in
max-pd-space-utilization."; max-pd-space-utilization.";
leaf pool-id { leaf pool-id {
type leafref { type leafref {
path "/dhcpv6-server/network-ranges/network-range/" + path "/dhcpv6-server/network-ranges/network-range/" +
"prefix-pools/prefix-pool/pool-id"; "prefix-pools/prefix-pool/pool-id";
} }
mandatory true; mandatory true;
description "Unique identifier for the pool."; description
"Unique identifier for the pool.";
} }
leaf total-pool-prefixes { leaf total-pool-prefixes {
type uint64; type uint64;
mandatory true; mandatory true;
description "Total number of prefixes in the pool."; description
"Total number of prefixes in the pool.";
} }
leaf max-allocated-prefixes { leaf max-allocated-prefixes {
type uint64; type uint64;
mandatory true; mandatory true;
description "Maximum number of prefixes that can be description
simultaneously allocated from the pool. This value may be "Maximum number of prefixes that can be simultaneously
less than count of total prefixes. Calculated as the allocated from the pool. This value may be less than
max-precfix-utilization (percentage) of the count of total prefixes. Calculated as the
max-prefix-utilization (percentage) of the
total-pool-prefixes, rounded up."; total-pool-prefixes, rounded up.";
} }
leaf allocated-prefixes-count { leaf allocated-prefixes-count {
type uint64; type uint64;
mandatory true; mandatory true;
description "Number of prefixes allocated from the pool."; description
"Number of prefixes allocated from the pool.";
} }
} }
notification invalid-client-detected { notification invalid-client-detected {
description "Notification sent when the server detects an description
"Notification sent when the server detects an
invalid client."; invalid client.";
leaf message-type { leaf message-type {
type enumeration { type enumeration {
enum solicit { enum solicit {
description "Solicit (1) message."; description
"Solicit (1) message.";
} }
enum request { enum request {
description "Request (3) message."; description
"Request (3) message.";
} }
enum confirm { enum confirm {
description "Confirm (4) message."; description
"Confirm (4) message.";
} }
enum renew { enum renew {
description "Renew (5) message."; description
"Renew (5) message.";
} }
enum rebind { enum rebind {
description "Rebind (6) message."; description
"Rebind (6) message.";
} }
enum release { enum release {
description "Release (8) message."; description
"Release (8) message.";
} }
enum decline { enum decline {
description "Decline (9) message."; description
"Decline (9) message.";
} }
enum info-request { enum info-request {
description "Information request (11) message."; description
"Information request (11) message.";
} }
} }
description "The message type received by the server that description
has caused the error."; "The message type received by the server that has caused
the error.";
} }
leaf duid { leaf duid {
type dhcpv6-common:duid; type dhc6:duid;
description "Client DUID."; description
"Client DUID.";
} }
leaf description { leaf description {
type string; type string;
description "Description of the event (e.g. and error code or description
log message)."; "Description of the event (e.g., and error code or log
message).";
} }
} }
notification decline-received { notification decline-received {
description "Notification sent when the server has received a description
"Notification sent when the server has received a
Decline (9) message from a client."; Decline (9) message from a client.";
leaf duid { leaf duid {
type dhcpv6-common:duid; type dhc6:duid;
description "Client DUID."; description
"Client DUID.";
} }
list declined-resources { list declined-resources {
description "List of declined addresses and/or prefixes."; description
"List of declined addresses and/or prefixes.";
choice resource-type { choice resource-type {
description "Type of resource that has been declined."; description
"Type of resource that has been declined.";
case declined-address { case declined-address {
leaf address { leaf address {
type inet:ipv6-address; type inet:ipv6-address;
description "Address that has been declined."; description
"Address that has been declined.";
} }
} }
case declined-prefix { case declined-prefix {
leaf prefix { leaf prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description "Prefix that has been declined."; description
"Prefix that has been declined.";
} }
} }
} }
} }
} }
notification non-success-code-sent { notification non-success-code-sent {
description "Notification sent when the server responded description
"Notification sent when the server responded
to a client with non-success status code."; to a client with non-success status code.";
leaf status-code { leaf status-code {
type uint16; type uint16;
mandatory true; mandatory true;
description "Status code returned to the client."; description
"Status code returned to the client.";
} }
leaf duid { leaf duid {
type dhcpv6-common:duid; type dhc6:duid;
description "Client DUID."; description
"Client DUID.";
} }
} }
/* /*
* RPCs * RPCs
*/ */
rpc delete-address-lease { rpc delete-address-lease {
nacm:default-deny-all; nacm:default-deny-all;
description "Deletes a client's active address lease from the description
server's lease database. Note, this will not cause the address "Deletes a client's active address lease from the
server's lease database. Note this will not cause the address
to be revoked from the client, and the lease may be refreshed to be revoked from the client, and the lease may be refreshed
or 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/network-ranges/network-range" + path "../../dhcpv6-server/network-ranges/network-range" +
"/address-pools/address-pool/active-leases/active-lease" "/address-pools/address-pool/active-leases" +
+ "/active-lease/leased-address";
"/leased-address";
} }
mandatory true; mandatory true;
description "IPv6 address of an active lease that will be description
"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 "Response message from the server."; description
"Response message from the server.";
} }
} }
} }
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 "Deletes a client's active prefix lease from the description
"Deletes a client's active prefix lease from the
server's lease database. Note, this will not cause the prefix server's lease database. Note, this will not cause the prefix
to be revoked from the client, and the lease may be refreshed to be revoked from the client, and the lease may be refreshed
or 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/network-ranges/network-range" + path "../../dhcpv6-server/network-ranges/network-range" +
"/prefix-pools/prefix-pool/active-leases/active-lease" + "/prefix-pools/prefix-pool/active-leases/active-lease" +
"/leased-prefix"; "/leased-prefix";
} }
mandatory true; mandatory true;
description "IPv6 prefix of an active lease that will be description
deleted from the server."; "IPv6 prefix of an active lease that will be deleted
from the server.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description "Response message from the server."; description
"Response message from the server.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
3.2. DHCPv6 Relay YANG Module 3.2. DHCPv6 Relay YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991], [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-relay@2021-03-17.yang" <CODE BEGINS> file "ietf-dhcpv6-relay@2021-06-01.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 "dhcpv6-relay"; 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 dhcpv6-common; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC XXXX: To be updated on publication";
} }
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";
} }
skipping to change at page 39, line 29 skipping to change at page 40, line 33
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 without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-03-17 {
description "Version update for draft -19 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-19";
}
revision 2021-02-22 {
description "Version update for draft -18 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-18";
}
revision 2021-01-29 {
description "Version update for draft -17 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-17";
}
revision 2021-01-06 {
description "Version update for draft -16 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-16";
}
revision 2020-12-22 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-15";
}
revision 2020-12-10 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-13";
}
revision 2020-12-01 {
description "Version update for draft -12 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-12";
}
revision 2020-05-26 {
description "Version update for draft -11 publication and
to align revisions across the different modules.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11";
}
revision 2019-09-20 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-10";
}
revision 2018-03-04 {
description "Resolved most issues on the DHC official
github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2017-12-22 {
description
"Resolve most issues on Ians Github.";
reference
"I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2017-11-24 { revision 2017-11-24 {
description description
"First version of the separated relay specific "First version of the separated relay specific YANG model.";
YANG model.";
reference reference
"I-D: draft-ietf-dhc-dhcpv6-yang"; "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
/* /*
* Features * Features
*/ */
feature prefix-delegation { feature prefix-delegation {
description "Enable if the relay functions as a delegating router description
for DHCPv6 prefix delegation."; "Enable if the relay functions as a delegating router for
DHCPv6 prefix delegation.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.3"; IPv6 (DHCPv6), Section 6.3";
} }
/* /*
* Groupings * Groupings
*/ */
grouping pd-lease-state { grouping pd-lease-state {
description "State data for the relay."; description
"State data for the relay.";
list pd-leases { list pd-leases {
key ia-pd-prefix; key ia-pd-prefix;
config false; config false;
description "Information about an active IA_PD prefix description
"Information about an active IA_PD prefix
delegation."; delegation.";
leaf ia-pd-prefix { leaf ia-pd-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description "Prefix that is delegated."; description
"Prefix that is delegated.";
} }
leaf last-renew { leaf last-renew {
type yang:date-and-time; type yang:date-and-time;
description "Time of the last successful refresh or renew description
of the delegated prefix."; "Time of the last successful refresh or renew of the
delegated prefix.";
} }
leaf client-peer-address { leaf client-peer-address {
type inet:ipv6-address; type inet:ipv6-address;
description "Peer-address of the client."; description
"Peer-address of the leasing client.";
} }
leaf client-duid { leaf client-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "DUID of the leasing client."; description
"DUID of the leasing client.";
} }
leaf server-duid { leaf server-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "DUID of the delegating server."; description
"DUID of the delegating server.";
} }
} }
} }
grouping message-statistics { grouping message-statistics {
description "Contains counters for the different DHCPv6 description
"Contains counters for the different DHCPv6
message types."; message types.";
leaf solicit-received-count { leaf solicit-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Solicit (1) messages received."; description
"Number of Solicit (1) messages received.";
} }
leaf advertise-sent-count { leaf advertise-sent-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Advertise (2) messages sent."; description
"Number of Advertise (2) messages sent.";
} }
leaf request-received-count { leaf request-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Request (3) messages received."; description
"Number of Request (3) messages received.";
} }
leaf confirm-received-count { leaf confirm-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Confirm (4) messages received."; description
"Number of Confirm (4) messages received.";
} }
leaf renew-received-count { leaf renew-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Renew (5) messages received."; description
"Number of Renew (5) messages received.";
} }
leaf rebind-received-count { leaf rebind-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Rebind (6) messages received."; description
"Number of Rebind (6) messages received.";
} }
leaf reply-sent-count { leaf reply-sent-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Reply (7) messages received."; description
"Number of Reply (7) messages received.";
} }
leaf release-received-count { leaf release-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Release (8) messages sent."; description
"Number of Release (8) messages sent.";
} }
leaf decline-received-count { leaf decline-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Decline (9) messages sent."; description
"Number of Decline (9) messages sent.";
} }
leaf reconfigure-sent-count { leaf reconfigure-sent-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Reconfigure (10) messages sent."; description
"Number of Reconfigure (10) messages sent.";
} }
leaf information-request-received-count { leaf information-request-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Information-request (11) messages description
"Number of Information-request (11) messages
received."; received.";
} }
leaf unknown-message-received-count { leaf unknown-message-received-count {
type uint32; type uint32;
config "false"; config "false";
description description
"Number of messages of unknown type that have been "Number of messages of unknown type that have
received."; been received.";
} }
leaf unknown-message-sent-count { leaf unknown-message-sent-count {
type uint32; type uint32;
config "false"; config "false";
description description
"Number of messages of unknown type that have been sent."; "Number of messages of unknown type that have
been sent.";
} }
leaf discarded-message-count { leaf discarded-message-count {
type uint32; type uint32;
config "false"; config "false";
description description
"Number of messages that have been discarded for any "Number of messages that have been discarded
reason."; for any reason.";
} }
} }
grouping global-statistics { grouping global-statistics {
description "Global statistics for the device."; description
"Global statistics for the device.";
leaf relay-forward-sent-count { leaf relay-forward-sent-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Relay-forward (12) messages sent."; description
"Number of Relay-forward (12) messages sent.";
} }
leaf relay-forward-received-count { leaf relay-forward-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Relay-forward (12) messages received."; description
"Number of Relay-forward (12) messages received.";
} }
leaf relay-reply-received-count { leaf relay-reply-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Relay-reply (13) messages received."; description
"Number of Relay-reply (13) messages received.";
} }
leaf relay-forward-unknown-sent-count { leaf relay-forward-unknown-sent-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Relay-forward (12) messages containing description
"Number of Relay-forward (12) messages containing
a message of unknown type sent."; a message of unknown type sent.";
} }
leaf relay-forward-unknown-received-count { leaf relay-forward-unknown-received-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Relay-forward (12) messages containing description
"Number of Relay-forward (12) messages containing
a message of unknown type received."; a message of unknown type received.";
} }
leaf discarded-message-count { leaf discarded-message-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of messages that have been discarded description
"Number of messages that have been discarded
for any reason."; for any reason.";
} }
} }
grouping interface-id-option-group { grouping interface-id-option-group {
description "OPTION_INTERFACE_ID (18) Interface-Id Option."; description
"OPTION_INTERFACE_ID (18) Interface-Id Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.18"; IPv6 (DHCPv6), Section 21.18";
container interface-id-option { container interface-id-option {
description "OPTION_INTERFACE_ID (18) Interface-Id Option description
"OPTION_INTERFACE_ID (18) Interface-Id Option
container."; container.";
leaf interface-id { leaf interface-id {
type string; type string;
description "An opaque value of arbitrary length generated description
by the relay agent to identify one of the relay agent's "An opaque value of arbitrary length generated by the
relay agent to identify one of the relay agent's
interfaces."; interfaces.";
} }
} }
} }
/* /*
* Data Nodes * Data Nodes
*/ */
container dhcpv6-relay { container dhcpv6-relay {
description description
"This container contains the configuration data nodes for "This container contains the configuration data nodes
the relay."; for the relay.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 19"; IPv6 (DHCPv6), Section 19";
leaf enabled { leaf enabled {
type boolean; type boolean;
default true; description
description "Globally enables the DHCP relay function."; "Globally enables the DHCP relay function.";
} }
list relay-if { list relay-if {
key if-name; key if-name;
description "List of interfaces configured for DHCPv6 description
"List of interfaces configured for DHCPv6
relaying."; relaying.";
leaf if-name { leaf if-name {
type if:interface-ref; type if:interface-ref;
description "interface-ref to the relay interface."; description
"interface-ref to the relay interface.";
} }
leaf enabled { leaf enabled {
type boolean; type boolean;
default true; description
description "Enables the DHCP relay function for this "Enables the DHCP relay function for this
interface."; interface.";
} }
leaf-list destination-addresses { leaf-list destination-address {
type inet:ipv6-address; type inet:ipv6-address;
description "Each DHCPv6 relay agent may be configured with description
a list of destination addresses for relayed messages. "Each DHCPv6 relay agent may be configured with a list
The list may include unicast addresses, multicast addresses of destination addresses for relayed messages.
or other valid addresses."; The list may include unicast addresses, multicast
addresses or other valid addresses.";
} }
leaf link-address { leaf link-address {
type string { type inet:ipv6-address;
pattern '[0-9a-fA-F]{32}'; description
} "An address that may be used by the server to identify
description "An address that may be used by the server the link on which the client is located.";
to identify the link on which the client is located."; }
}
container relay-options { container relay-options {
description "Definitions for DHCPv6 options that can be sent description
by the relay are augmented to this location from other YANG "Definitions for DHCPv6 options that can be sent
modules as required."; by the relay are augmented to this location from other
uses dhcpv6-common:auth-option-group; YANG modules as required.";
uses dhcpv6-common:status-code-option-group; uses dhc6:auth-option-group;
uses dhc6:status-code-option-group;
uses interface-id-option-group; uses interface-id-option-group;
} }
uses message-statistics; uses message-statistics;
container prefix-delegation { container prefix-delegation {
if-feature prefix-delegation; if-feature prefix-delegation;
presence "Enables prefix delegation for this interface."; presence "Enables prefix delegation for this interface.";
description "Controls and holds state information for prefix description
"Controls and holds state information for prefix
delegation."; delegation.";
uses pd-lease-state; uses pd-lease-state;
} }
} }
uses global-statistics; uses global-statistics;
} }
/* /*
* 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 "Raised if the entry for an interface with DHCPv6 description
"Raised if the entry for an interface with DHCPv6
related configuration or state is removed from related configuration or state is removed from
if:interface-refs."; 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 "Name of the interface that has been removed."; description
"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 "Last IPv6 address configured on the interface."; description
"Last IPv6 address configured on the interface.";
} }
} }
} }
/* /*
* 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 "Clears an entry for an active delegated prefix description
"Clears an entry for an active delegated prefix
from the relay."; from the relay.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC8987: 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/pd-leases/" path "/dhcpv6-relay/relay-if/prefix-delegation" +
+ "/pd-leases/ia-pd-prefix";
"ia-pd-prefix";
} }
mandatory true; mandatory true;
description "IPv6 prefix of an active lease entry that will description
"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 "Response message from the relay."; description
"Response message from the relay.";
} }
} }
} }
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 "Clears all active prefix entries for a single description
client."; "Clears all active prefix entries for a single client.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4"; Section 4.4";
input { input {
leaf client-duid { leaf client-duid {
type dhcpv6-common:duid; type dhc6:duid;
mandatory true; mandatory true;
description "DUID of the client ."; description
"DUID of the client.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description "Response message from the relay."; description
"Response message from the relay.";
} }
} }
} }
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 "Clears all delegated prefix bindings from an description
"Clears all delegated prefix bindings from an
interface on the relay."; interface on the relay.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC8987: 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 "Reference to the relay interface that will have description
all active prefix delegation bindings deleted."; "Reference to the relay interface that will have all
active prefix delegation bindings deleted.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description "Response message from the relay."; description
"Response message from the relay.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
3.3. DHCPv6 Client YANG Module 3.3. DHCPv6 Client YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991], [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-client@2021-03-17.yang" <CODE BEGINS> file "ietf-dhcpv6-client@2021-06-01.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 "dhcpv6-client"; prefix "dhcpv6-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 dhcpv6-common; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC XXXX: To be updated on publication";
} }
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";
} }
skipping to change at page 49, line 33 skipping to change at page 50, line 25
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 without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-03-17 {
description "Version update for draft -19 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-19";
}
revision 2021-02-22 {
description "Version update for draft -18 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-18";
}
revision 2021-01-29 {
description "Version update for draft -17 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-17";
}
revision 2021-01-06 {
description "Version update for draft -16 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-16";
}
revision 2020-12-22 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-15";
}
revision 2020-12-10 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-13";
}
revision 2020-12-01 {
description "Version update for draft -12 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-12";
}
revision 2020-05-26 {
description "Version update for draft -11 publication and
to align revisions across the different modules.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11";
}
revision 2019-09-20 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-10";
}
revision 2018-09-04 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2018-03-04 {
description "Resolved most issues on the DHC official github";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2017-12-22 {
description "Resolve most issues on Ian's Github.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2017-11-24 { revision 2017-11-24 {
description "First version of the separated client specific description
YANG model."; "First version of the separated client specific YANG model.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
/* /*
* Groupings * Groupings
*/ */
grouping message-statistics { grouping message-statistics {
description "Counters for DHCPv6 messages."; description
"Counters for DHCPv6 messages.";
leaf solicit-count { leaf solicit-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Solicit (1) messages sent."; description
"Number of Solicit (1) messages sent.";
} }
leaf advertise-count { leaf advertise-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Advertise (2) messages received."; description
"Number of Advertise (2) messages received.";
} }
leaf request-count { leaf request-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Request (3) messages sent."; description
"Number of Request (3) messages sent.";
} }
leaf confirm-count { leaf confirm-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Confirm (4) messages sent."; description
"Number of Confirm (4) messages sent.";
} }
leaf renew-count { leaf renew-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Renew (5) messages sent."; description
"Number of Renew (5) messages sent.";
} }
leaf rebind-count { leaf rebind-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Rebind (6) messages sent."; description
"Number of Rebind (6) messages sent.";
} }
leaf reply-count { leaf reply-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Reply (7) messages received."; description
"Number of Reply (7) messages received.";
} }
leaf release-count { leaf release-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Release (8) messages sent."; description
"Number of Release (8) messages sent.";
} }
leaf decline-count { leaf decline-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Decline (9) messages sent."; description
"Number of Decline (9) messages sent.";
} }
leaf reconfigure-count { leaf reconfigure-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Reconfigure (10) messages received."; description
"Number of Reconfigure (10) messages received.";
} }
leaf information-request-count { leaf information-request-count {
type uint32; type uint32;
config "false"; config "false";
description "Number of Information-request (11) messages description
"Number of Information-request (11) messages
sent."; sent.";
} }
} }
grouping option-request-option-group { grouping option-request-option-group {
description "OPTION_ORO (6) Option Request Option. A client description
MUST include an Option Request option in a Solicit, Request, "OPTION_ORO (6) Option Request Option. A client MUST include
Renew, Rebind, or Information-request message to inform an Option Request option in a Solicit, Request, Renew,
the server about options the client wants the server to send Rebind, or Information-request message to inform the server
to the client."; about options the client wants the server to send to the
client.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.7"; IPv6 (DHCPv6), Section 21.7";
container option-request-option { container option-request-option {
description "OPTION_ORO (6) Option Request Option container."; description
"OPTION_ORO (6) Option Request Option container.";
leaf-list oro-option { leaf-list oro-option {
type uint16; type uint16;
description "List of options that the client is requesting, description
"List of options that the client is requesting,
identified by option code"; identified by option code";
} }
} }
} }
grouping user-class-option-group { grouping user-class-option-group {
description "OPTION_USER_CLASS (15) User Class Option"; description
"OPTION_USER_CLASS (15) User Class Option";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.15"; for IPv6 (DHCPv6), Section 21.15";
container user-class-option { container user-class-option {
presence "Configures the option"; presence "Configures the option";
description "OPTION_USER_CLASS (15) User Class Option description
"OPTION_USER_CLASS (15) User Class Option
container."; container.";
list user-class-data-instances { list user-class-data-instance {
key user-class-data-id; key user-class-data-id;
min-elements 1; min-elements 1;
description "The user classes of which the client description
"The user classes of which the client
is a member."; is a member.";
leaf user-class-data-id { leaf user-class-data-id {
type uint8; type uint8;
description "User class data ID"; description
"User class data ID";
} }
leaf user-class-data { leaf user-class-data {
type string; type string;
description "Opaque field representing a User Class description
"Opaque field representing a User Class
of which the client is a member."; of which the client is a member.";
} }
} }
} }
} }
grouping vendor-class-option-group { grouping vendor-class-option-group {
description "OPTION_VENDOR_CLASS (16) Vendor Class Option"; description
"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 "OPTION_VENDOR_CLASS (16) Vendor Class Option description
"OPTION_VENDOR_CLASS (16) Vendor Class Option
container."; container.";
list vendor-class-option-instances { list vendor-class-option-instances {
key enterprise-number; key enterprise-number;
description "The vendor class option allows for multiple description
"The vendor class option allows for multiple
instances in a single message. Each list entry defines instances in a single message. Each list entry defines
the contents of an instance of the option."; the contents of an instance of the option.";
leaf enterprise-number { leaf enterprise-number {
type uint32; type uint32;
description "The vendor's registered Enterprise Number description
as maintained by IANA."; "The vendor's registered Enterprise Number as
maintained by IANA.";
} }
list vendor-class { list vendor-class-data-element {
key vendor-class-datum-id; key vendor-class-data-id;
description "The vendor classes of which the client is description
a member."; "The vendor classes of which the client is a member.";
leaf vendor-class-datum-id { leaf vendor-class-data-id {
type uint8; type uint8;
description "Vendor class datum ID"; description
"Vendor class data ID";
} }
leaf vendor-class-datum { leaf vendor-class-data {
type string; type string;
description "Opaque field representing a vendor class description
of which the client is a member."; "Opaque field representing a vendor class of which
the client is a member.";
} }
} }
} }
} }
} }
/* /*
* Data Nodes * Data Nodes
*/ */
container dhcpv6-client { container dhcpv6-client {
description "DHCPv6 client configuration and state."; description
"DHCPv6 client configuration and state.";
leaf enabled { leaf enabled {
type boolean; type boolean;
default true; default true;
description "Globally enables the DHCP client function."; description
"Globally enables the DHCP client function.";
} }
list client-if { list client-if {
key if-name; key if-name;
description "The list of interfaces that the client will be description
requesting DHCPv6 configuration for."; "The list of interfaces for which the client will
be requesting DHCPv6 configuration.";
leaf if-name { leaf if-name {
type if:interface-ref; type if:interface-ref;
mandatory true; mandatory true;
description "Reference to the interface entry that description
the requested configuration is relevant to."; "Reference to the interface entry that the requested
configuration is relevant to.";
} }
leaf enabled { leaf enabled {
type boolean; type boolean;
default true; default true;
description "Enables the DHCP client function for this description
interface."; "Enables the DHCP client function for this interface.";
} }
leaf duid { leaf duid {
type dhcpv6-common:duid; type dhc6:duid;
description "Client DUID."; description
"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";
} }
container client-configured-options { container client-configured-options {
description " Definitions for DHCPv6 options that can be be description
sent by the client. Additional option definitions can be "Definitions for DHCPv6 options that can be be sent by
the client. Additional option definitions can be
augmented to this location from other YANG modules as augmented to this location from other YANG modules as
required."; required.";
uses option-request-option-group; uses option-request-option-group;
uses dhcpv6-common:status-code-option-group; uses dhc6:status-code-option-group;
uses dhcpv6-common: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 dhcpv6-common:vendor-specific-information-option-group; uses dhc6:vendor-specific-information-option-group;
uses dhcpv6-common:reconfigure-accept-option-group; uses dhc6:reconfigure-accept-option-group;
} }
list ia-na { list ia-na {
key iaid; key ia-id;
description "Configuration relevant for an IA_NA."; description
"Configuration relevant for an IA_NA (Identity Association
for Non-temporary Addresses).";
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 iaid { leaf ia-id {
type uint32; type uint32;
description "A unique identifier for this IA_NA."; description
"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 {
description "An augmentation point for additional options description
"An augmentation point for additional options
that the client may send in the IA_NA-options field that the client may send in the IA_NA-options field
of OPTION_IA_NA."; of OPTION_IA_NA.";
} }
container lease-state { container lease-state {
config "false"; config "false";
description "Information about the active IA_NA lease."; description
"Information about the active IA_NA lease.";
leaf ia-na-address { leaf ia-na-address {
type inet:ipv6-address; type inet:ipv6-address;
description "Address that is currently leased."; description
"Address that is currently leased.";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The preferred lifetime for the leased description
address expressed in units of seconds."; "The preferred lifetime for the leased address
expressed in seconds.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The valid lifetime for the leased address description
expressed in units of seconds."; "The valid lifetime for the leased address expressed
in seconds.";
} }
leaf lease-t1 { leaf lease-t1 {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The time interval after which the client description
should contact the server from which the addresses "The time interval after which the client should
in the IA_NA were obtained to extend the lifetimes contact the server from which the addresses in the
of the addresses assigned to the IA_NA."; IA_NA were obtained to extend the lifetimes of the
addresses assigned to the IA_NA.";
} }
leaf lease-t2 { leaf lease-t2 {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The time interval after which the client description
should contact any available server to extend "The time interval after which the client should
the lifetimes of the addresses assigned to the IA_NA."; contact any available server to extend the lifetimes
of the addresses assigned to the IA_NA.";
} }
leaf allocation-time { leaf allocation-time {
type yang:date-and-time; type yang:date-and-time;
description "Time and date that the address was first description
leased."; "Time and date that the address was first leased.";
} }
leaf last-renew-rebind { leaf last-renew-rebind {
type yang:date-and-time; type yang:date-and-time;
description "Time of the last successful renew or rebind description
of the leased address."; "Time of the last successful renew or rebind of the
leased address.";
} }
leaf server-duid { leaf server-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "DUID of the leasing server."; description
"DUID of the leasing server.";
} }
} }
} }
list ia-ta { list ia-ta {
key iaid; key ia-id;
description "Configuration relevant for an IA_TA."; description
"Configuration relevant for an IA_TA (Identity Association
for Temporary Addresses).";
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 iaid { leaf ia-id {
type uint32; type uint32;
description "The unique identifier for this IA_TA."; description
"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 {
description "An augmentation point for additional options description
"An augmentation point for additional options
that the client may send in the IA_TA-options field that the client may send in the IA_TA-options field
of OPTION_IA_TA."; of OPTION_IA_TA.";
} }
container lease-state { container lease-state {
config "false"; config "false";
description "Information about an active IA_TA lease."; description
"Information about an active IA_TA lease.";
leaf ia-ta-address { leaf ia-ta-address {
type inet:ipv6-address; type inet:ipv6-address;
description "Address that is currently leased."; description
"Address that is currently leased.";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The preferred lifetime for the leased description
address expressed in units of seconds."; "The preferred lifetime for the leased address
expressed in seconds.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The valid lifetime for the leased address description
expressed in units of seconds."; "The valid lifetime for the leased address expressed
in seconds.";
} }
leaf allocation-time { leaf allocation-time {
type yang:date-and-time; type yang:date-and-time;
description "Time and date that the address was first description
leased."; "Time and date that the address was first leased.";
} }
leaf last-renew-rebind { leaf last-renew-rebind {
type yang:date-and-time; type yang:date-and-time;
description "Time of the last successful renew or rebind description
of the address."; "Time of the last successful renew or rebind of the
address.";
} }
leaf server-duid { leaf server-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "DUID of the leasing server."; description
"DUID of the leasing server.";
} }
} }
} }
list ia-pd { list ia-pd {
key iaid; key ia-id;
description "Configuration relevant for an IA_PD."; description
"Configuration relevant for an IA_PD (Identity Association
for Prefix Delegation).";
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 iaid { leaf ia-id {
type uint32; type uint32;
description "The unique identifier for this IA_PD."; description
"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";
} }
container ia-pd-options { container ia-pd-options {
description "An augmentation point for additional options description
that the client will send in the IA_PD-options field "An augmentation point for additional options that the
of OPTION_IA_TA."; client will send in the IA_PD-options field of
OPTION_IA_TA.";
} }
container lease-state { container lease-state {
config "false"; config "false";
description "Information about an active IA_PD delegated description
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 "Delegated prefix that is currently leased."; description
"Delegated prefix that is currently leased.";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The preferred lifetime for the leased prefix description
expressed in units of seconds."; "The preferred lifetime for the leased prefix expressed
in units of seconds.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The valid lifetime for the leased prefix description
expressed in units of seconds."; "The valid lifetime for the leased prefix expressed
in units of seconds.";
} }
leaf lease-t1 { leaf lease-t1 {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The time interval after which the client description
should contact the server from which the addresses "The time interval after which the client should
in the IA_NA were obtained to extend the lifetimes contact the server from which the addresses in the
of the addresses assigned to the IA_PD."; IA_NA were obtained to extend the lifetimes of the
addresses assigned to the IA_PD.";
} }
leaf lease-t2 { leaf lease-t2 {
type dhcpv6-common:timer-seconds32; type dhc6:timer-seconds32;
description "The time interval after which the client description
should contact any available server to extend "The time interval after which the client should
the lifetimes of the addresses assigned to the IA_PD."; contact any available server to extend the lifetimes
of the addresses assigned to the IA_PD.";
} }
leaf allocation-time { leaf allocation-time {
type yang:date-and-time; type yang:date-and-time;
description "Time and date that the prefix was first description
leased."; "Time and date that the prefix was first leased.";
} }
leaf last-renew-rebind { leaf last-renew-rebind {
type yang:date-and-time; type yang:date-and-time;
description "Time of the last successful renew or rebind description
of the delegated prefix."; "Time of the last successful renew or rebind of the
delegated prefix.";
} }
leaf server-duid { leaf server-duid {
type dhcpv6-common:duid; type dhc6:duid;
description "DUID of the delegating server."; description
"DUID of the delegating server.";
} }
} }
} }
uses message-statistics; uses message-statistics;
} }
} }
/* /*
* Notifications * Notifications
*/ */
notification invalid-ia-address-detected { notification invalid-ia-address-detected {
description "Notification sent when an address received description
in an identity association option can be proved to be invalid. "Notification sent when an address received
in an identity association option is determined invalid.
Possible conditions include a duplicate or otherwise illegal Possible conditions include a duplicate or otherwise illegal
address."; 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 iaid { leaf ia-id {
type uint32; type uint32;
mandatory true; mandatory true;
description "IAID"; description
"IA-ID";
} }
leaf ia-na-t1-timer { leaf ia-na-t1-timer {
type uint32; type uint32;
description "The value of the T1 time field for non-tempory description
address allocations (OPTION_IA_NA)."; "The value of the T1 time field for non-temporary address
allocations (OPTION_IA_NA).";
} }
leaf ia-na-t2-timer { leaf ia-na-t2-timer {
type uint32; type uint32;
description "The value of the preferred-lifetime field for description
non-tempory address allocations (OPTION_IA_NA)."; "The value of the preferred-lifetime field for non-temporary
address allocations (OPTION_IA_NA).";
} }
leaf invalid-address { leaf invalid-address {
type inet:ipv6-address; type inet:ipv6-address;
description "The IP address which has been detected to be description
invalid."; "The IP address which has been detected to be invalid.";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type uint32; type uint32;
description "The value of the preferred-lifetime field in description
"The value of the preferred-lifetime field in
OPTION_IAADDR."; OPTION_IAADDR.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type uint32; type uint32;
description "The value of the valid-lifetime field in description
OPTION_IAADDR."; "The value of the valid-lifetime field in OPTION_IAADDR.";
} }
leaf ia-options { leaf ia-options {
type binary; type binary;
description "A copy of the contents of the IAaddr-options description
field."; "A copy of the contents of the IAaddr-options field.";
} }
leaf description { leaf description {
type string; type string;
description "Description of the event."; description
"Description of the invalid Identity Association (IA)
detection error.";
} }
} }
notification transmission-failed { notification transmission-failed {
description "Notification sent when the transmission or description
retransmission of a message fails."; "Notification sent when the transmission or retransmission
of a message fails.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 7.6"; IPv6 (DHCPv6), Section 7.6";
leaf failure-type { leaf failure-type {
type enumeration { type enumeration {
enum "solicit-timeout" { enum "solicit-timeout" {
description "Max Solicit timeout value (SOL_MAX_RT) description
exceeded."; "Max Solicit timeout value (SOL_MAX_RT) exceeded.";
} }
enum "request-timeout" { enum "request-timeout" {
description "Max Request timeout value (REQ_MAX_RT) description
exceeded."; "Max Request timeout value (REQ_MAX_RT) exceeded.";
} }
enum "request-retries-exceeded" { enum "request-retries-exceeded" {
description "Max Request retry attempts (REC_MAX_RC) description
exceeded."; "Max Request retry attempts (REC_MAX_RC) exceeded.";
} }
enum "confirm-duration-exceeded" { enum "confirm-duration-exceeded" {
description "Max Confirm duration (CNF_MAX_RD) description
exceeded."; "Max Confirm duration (CNF_MAX_RD) exceeded.";
} }
enum "renew-timeout" { enum "renew-timeout" {
description "Max Renew timeout value (REN_MAX_RT) description
exceeded."; "Max Renew timeout value (REN_MAX_RT) exceeded.";
} }
enum "rebind-timeout" { enum "rebind-timeout" {
description "Max Rebind timeout value (REB_MAX_RT) description
"Max Rebind timeout value (REB_MAX_RT)
exceeded."; exceeded.";
} }
enum "info-request-timeout" { enum "info-request-timeout" {
description "Max Information-request timeout value description
(INF_MAX_RT) exceeded."; "Max Information-request timeout value (INF_MAX_RT)
exceeded.";
} }
enum "release-retries-exceeded" { enum "release-retries-exceeded" {
description "Max Release retry attempts (REL_MAX_RC) description
exceeded."; "Max Release retry attempts (REL_MAX_RC) exceeded.";
} }
enum "decline-retries-exceeded" { enum "decline-retries-exceeded" {
description "Max Decline retry attempts (DEC_MAX_RT) description
exceeded."; "Max Decline retry attempts (DEC_MAX_RT) exceeded.";
} }
} }
mandatory true; mandatory true;
description "Description of the failure."; description
"Description of the failure.";
} }
leaf description { leaf description {
type string; type string;
description "Information related to the failure, such as description
number of retries and timer values."; "Information related to the failure, such as number of
retries and timer values.";
} }
} }
notification unsuccessful-status-code { notification unsuccessful-status-code {
description "Notification sent when the client receives a message description
that includes an unsuccessful Status Code option."; "Notification sent when the client receives a message that
includes an unsuccessful Status Code option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.13"; IPv6 (DHCPv6), Section 21.13";
leaf status-code { leaf status-code {
type uint16; type uint16;
mandatory true; mandatory true;
description "Unsuccessful status code received by a client."; description
"Unsuccessful status code received by a client.";
} }
leaf server-duid { leaf server-duid {
type dhcpv6-common:duid; type dhc6:duid;
mandatory true; mandatory true;
description "DUID of the server sending the unsuccessful description
"DUID of the server sending the unsuccessful
error code."; error code.";
} }
} }
notification server-duid-changed { notification server-duid-changed {
description "Notification sent when the client receives a lease description
"Notification sent when the client receives a lease
from a server with different DUID to the one currently stored from a server with different DUID to the one currently stored
by the client, e.g. in response to a Rebind message."; by the client, e.g., in response to a Rebind message.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18.2.5"; IPv6 (DHCPv6), Section 18.2.5";
leaf new-server-duid { leaf new-server-duid {
type dhcpv6-common:duid; type dhc6:duid;
mandatory true; mandatory true;
description "DUID of the new server."; description
"DUID of the new server.";
} }
leaf previous-server-duid { leaf previous-server-duid {
type dhcpv6-common:duid; type dhc6:duid;
mandatory true; mandatory true;
description "DUID of the previous server."; description
"DUID of the previous server.";
} }
leaf lease-ia-na { leaf lease-ia-na {
type leafref { type leafref {
path "/dhcpv6-client/client-if/ia-na/iaid"; path "/dhcpv6-client/client-if/ia-na/ia-id";
} }
description "Reference to the IA_NA lease."; description
"Reference to the IA_NA lease.";
} }
leaf lease-ia-ta { leaf lease-ia-ta {
type leafref { type leafref {
path "/dhcpv6-client/client-if/ia-ta/iaid"; path "/dhcpv6-client/client-if/ia-ta/ia-id";
} }
description "Reference to the IA_TA lease."; description
"Reference to the IA_TA lease.";
} }
leaf lease-ia-pd { leaf lease-ia-pd {
type leafref { type leafref {
path "/dhcpv6-client/client-if/ia-pd/iaid"; path "/dhcpv6-client/client-if/ia-pd/ia-id";
} }
description "Reference to the IA_PD lease."; description
"Reference to the IA_PD lease.";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
3.4. DHCPv6 Common YANG Module 3.4. DHCPv6 Common YANG Module
This module imports typedefs from [RFC6991]. This module imports typedefs from [RFC6991].
<CODE BEGINS> file "ietf-dhcpv6-common@2021-03-17.yang" <CODE BEGINS> file "ietf-dhcpv6-common@2021-06-01.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 "dhcpv6-common"; prefix "dhc6";
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF DHC (Dynamic Host Configuration) Working Group";
contact contact
"WG Web: <http://datatracker.ietf.org/wg/dhc/> "WG Web: <http://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 "This YANG module defines common components description
used for the configuration and management of DHCPv6. "This YANG module defines common components used for the
configuration and management of DHCPv6.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
are to be interpreted as described in BCP 14 (RFC 2119) are to be interpreted as described in BCP 14 (RFC 2119)
(RFC 8174) when, and only when, they appear in all (RFC 8174) when, and only when, they appear in all
capitals, as shown here. capitals, as shown here.
Copyright (c) 2021 IETF Trust and the persons identified as Copyright (c) 2021 IETF Trust and the persons identified as
authors of the code. All rights reserved. authors of the code. All rights reserved.
skipping to change at page 62, line 52 skipping to change at page 64, line 21
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 without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-03-17 {
description "Version update for draft -19 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-19";
}
revision 2021-02-22 {
description "Version update for draft -18 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-18";
}
revision 2021-01-29 {
description "Version update for draft -17 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-17";
}
revision 2021-01-06 {
description "Version update for draft -16 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-16";
}
revision 2020-12-22 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-15";
}
revision 2020-12-10 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-13";
}
revision 2020-12-01 {
description "Version update for draft -12 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-12";
}
revision 2020-05-26 {
description "Version update for draft -11 publication and
to align revisions across the different modules.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11";
}
revision 2018-09-04 {
description "";
reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
revision 2018-01-30 { revision 2018-01-30 {
description "Initial revision"; description
"Initial revision";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
typedef threshold { typedef threshold {
type union { type uint8 {
type uint16 { range 1..100;
range 0..100;
}
type enumeration {
enum "disabled" {
description "No threshold.";
}
}
} }
description "Threshold value in percent."; description
"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-zA-F]{2}){3,130}'; pattern '([0-9a-fA-F]{2}){3,130}';
} }
description "Each DHCP server and client has a DUID (DHCP description
Unique Identifier). The DUID consists of a two-octet "Each DHCP server and client has a DUID (DHCP Unique
type field and an arbitrary length (between 1 and 128 octets) Identifier). The DUID consists of a two-octet
content field. Currently, there are four defined types of type field and an arbitrary length (1-128 octets) content
DUIDs in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL field. The duid-base type provides the
Currently, there are four defined types of DUIDs
in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL
and DUID-UUID. DUID-unstructured represents DUIDs which and DUID-UUID. DUID-unstructured represents DUIDs which
do not follow any of the defined formats."; do not follow any of the defined formats.";
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 "DUID type 1, based on Link-Layer Address Plus Time description
"DUID type 1, based on Link-Layer Address Plus Time
(DUID-LLT). Constructed with a 2-byte hardware type assigned (DUID-LLT). Constructed with a 2-byte hardware type assigned
by IANA, 4-bytes containing the time the DUID is generated by IANA, 4-bytes 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."; without separator characters. For example:
+------+----+----------+--------------+
| 0001 | 06 | 28490058 | 00005E005300 |
+------+----+----------+--------------+
This example includes the 2-octet DUID type of 1 (0001), the
hardware type is 06 (IEEE Hardware Types) the creation
time is 0x284900580 (constructed as described above). Finally,
the link-layer address is 00005E005300 (EUI-48 address
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]{4,}'; + '[0-9a-fA-F]{4,}';
} }
description "DUID type 2, assigned by vendor based on Enterprise description
"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."; followed by a unique identifier assigned by the vendor. For
example:
+------+------+------------------+
| 0002 | 0009 | 0CC084D303000912 |
+------+------+------------------+
This example includes the 2-octet DUID type of 2 (0002),
4-octets for the Enterprise Number (0009), followed by 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 "DUID type 3, based on Link-Layer Address (DUID-LL). description
"DUID type 3, based on Link-Layer Address (DUID-LL).
Constructed with a 2-byte hardware type assigned Constructed with a 2-byte 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."; without separator characters. For example:
+------+----+--------------+
| 0003 | 06 | 00005E005300 |
+------+----+--------------+
This example includes the 2-octet DUID type of 3 (0003), the
hardware type is 06 (IEEE Hardware Types), and the link-layer
address is 00005E005300 (EUI-48 address 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 "DUID type 4, based on Universally Unique Identifier description
"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."; containing a 128-bit UUID. For example:
+------+----------------------------------+
| 0004 | 9f03b182705747e38a1e422910078642 |
+------+----------------------------------+
This example includes the 2-octet DUID type of 4 (0004), and
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 Identifier RFC 6355: Definition of the UUID-Based DHCPv6 Unique Identifier
(DUID-UUID)"; (DUID-UUID)";
} }
typedef duid-unstructured { typedef duid-unstructured {
type duid-base { type duid-base {
pattern '^[0-9a-fA-F]{3}' pattern '[0-9a-fA-F]{3}'
+ '[05-9a-fA-F]' + '[05-9a-fA-F]'
+ '([0-1a-fA-F])*'; + '([0-9a-fA-F])*';
} }
description "Used for DUIDs following any other formats than description
DUID types 1-4."; "Used for DUIDs following any other formats than DUID
types 1-4. For example:
+----------------------------------+
| 7b6a164d325946539dc540fb539bc430 |
+----------------------------------+
Here, an arbitrary 16-octet value is used. The only constraint
placed on this is that the first 2-octects are not 0001-0004
to avoid collision with the other defined DUID types
(duid-llt, duid-en, duid-ll, or duid-uuid).";
reference "RFC 8415: Dynamic Host Configuration Protocol for 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;
type duid-ll; type duid-ll;
type duid-uuid; type duid-uuid;
type duid-unstructured; type duid-unstructured;
} }
description "Represents the DUID and is neutral to the DUID's description
construction format."; "Represents the DUID and is neutral to the DUID's construction
format.";
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 auth-option-group { grouping auth-option-group {
description "OPTION_AUTH (11) Authentication Option."; description
"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
IANA 'Dynamic Host Configuration Protocol (DHCP) Authentication IANA 'Dynamic Host Configuration Protocol (DHCP) Authentication
Option Name Spaces' registry. 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 "OPTION_AUTH (11) Authentication Option description
container."; "OPTION_AUTH (11) Authentication Option container.";
leaf protocol { leaf protocol {
type uint8; type uint8;
description "The authentication protocol used by this description
Authentication option."; "The authentication protocol used by this Authentication
option.";
} }
leaf algorithm { leaf algorithm {
type uint8; type uint8;
description "The algorithm used in the authentication description
protocol."; "The algorithm used in the authentication protocol.";
} }
leaf rdm { leaf rdm {
type uint8; type uint8;
description "The Replay Detection Method (RDM) used description
in this Authentication option."; "The Replay Detection Method (RDM) used in this
Authentication option.";
} }
leaf replay-detection { leaf replay-detection {
type uint64; type uint64;
description "The replay detection information for the RDM."; description
"The replay detection information for the RDM.";
} }
leaf auth-information { leaf auth-information {
type string; type string;
description "The authentication information, as specified description
by the protocol and algorithm used in this Authentication "The authentication information, as specified by the
protocol and algorithm used in this Authentication
option."; option.";
} }
} }
} }
grouping status-code-option-group { grouping status-code-option-group {
description "OPTION_STATUS_CODE (13) Status Code Option."; description
"OPTION_STATUS_CODE (13) Status Code Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.13"; for IPv6 (DHCPv6), Section 21.13";
container status-code-option { container status-code-option {
description "OPTION_STATUS_CODE (13) Status Code Option description
container."; "OPTION_STATUS_CODE (13) Status Code Option container.";
leaf status-code { leaf status-code {
type uint16; type uint16;
description "The numeric code for the status encoded description
in this option. See the Status Codes registry at "The numeric code for the status encoded in this option.
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 status-message { leaf status-message {
type string; type string;
description "A UTF-8 encoded text string suitable for description
display to an end user. MUST NOT be null-terminated."; "A UTF-8 encoded text string suitable for display to an
end user. It MUST NOT be null-terminated.";
} }
} }
} }
grouping rapid-commit-option-group { grouping rapid-commit-option-group {
description "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; description
"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 "OPTION_RAPID_COMMIT (14) Rapid Commit Option description
container."; "OPTION_RAPID_COMMIT (14) Rapid Commit Option container.";
} }
} }
grouping vendor-specific-information-option-group { grouping vendor-specific-information-option-group {
description "OPTION_VENDOR_OPTS (17) Vendor-specific description
Information Option."; "OPTION_VENDOR_OPTS (17) Vendor-specific Information
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-option { container vendor-specific-information-options {
description "OPTION_VENDOR_OPTS (17) Vendor-specific description
Information Option container."; "OPTION_VENDOR_OPTS (17) Vendor-specific Information
list vendor-specific-information-option-instances { Option container.";
list vendor-specific-information-option {
key enterprise-number; key enterprise-number;
description "The vendor specific information option allows description
for multiple instances in a single message. Each list entry "The vendor-specific information option allows for
multiple instances in a single message. Each list entry
defines the contents of an instance of the option."; defines the contents of an instance of the option.";
leaf enterprise-number { leaf enterprise-number {
type uint32; type uint32;
description "The vendor's registered Enterprise Number, description
as maintained by IANA."; "The vendor's registered Enterprise Number, as
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 "Vendor options, interpreted by vendor-specific description
"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 "The code for the sub-option."; description
"The code for the sub-option.";
} }
leaf sub-option-data { leaf sub-option-data {
type string { type string {
pattern '([0-9a-zA-F]{2}){,65535}'; pattern '([0-9a-fA-F]{2}){0,}';
} }
description "The data area for the sub-option."; description
"The data area for the sub-option.";
} }
} }
} }
} }
} }
grouping reconfigure-accept-option-group { grouping reconfigure-accept-option-group {
description "OPTION_RECONF_ACCEPT (20) Reconfigure Accept description
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 the client is willing to accept Reconfigure
messages, and a server uses this option to tell the client messages, and a server uses this option to tell the client
whether or not to accept Reconfigure messages. In the absence whether or not to accept Reconfigure messages. In the absence
of this option, the default behavior is that the client is of this option, the default behavior is that the client is
unwilling to accept Reconfigure messages. The presence node unwilling to accept Reconfigure messages. The presence node
is used to enable the option."; 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 "OPTION_RECONF_ACCEPT (20) Reconfigure Accept description
Option container."; "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option
container.";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4. Security Considerations 4. Security Considerations
The YANG modules defined in this document are designed to be accessed The YANG modules defined in this document are designed to be accessed
via network management protocols such as NETCONF [RFC6241] or via network management protocols such as NETCONF [RFC6241] or
RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport
skipping to change at page 70, line 12 skipping to change at page 71, line 46
in the server and relay modules are particularly sensitive, these use in the server and relay modules are particularly sensitive, these use
'nacm:default-deny-all'. 'nacm:default-deny-all'.
An attacker who is able to access the DHCPv6 server can undertake An attacker who is able to access the DHCPv6 server can undertake
various attacks, such as: various attacks, such as:
* Denial of service attacks, based on re-configuring messages to a * Denial of service attacks, based on re-configuring messages to a
rogue DHCPv6 server. rogue DHCPv6 server.
* Various attacks based on re-configuring the contents of DHCPv6 * Various attacks based on re-configuring the contents of DHCPv6
options. E.g., changing the address of a the DNS server supplied options. For example, changing the address of a the DNS server
in a DHCP option to point to a rogue server. supplied in a DHCP option to point to a rogue server.
An attacker who is able to access the DHCPv6 relay can undertake An attacker who is able to access the DHCPv6 relay can undertake
various attacks, such as: various attacks, such as:
* Re-configuring the relay's destination address to send messages to * Re-configuring the relay's destination address to send messages to
a rogue DHCPv6 server. a rogue DHCPv6 server.
* 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 denial of service 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. Therefore, it
is important to control read access (e.g., only permitting get, get- is important to control read access (e.g., only permitting get, get-
config, or notifications) to these data nodes. These subtrees and config, or notifications) to these data nodes. These subtrees and
data nodes can be misused to track the activity of a host: data nodes can be misused to track the activity of a host:
* Information the server holds about clients with active leases: * Information the server holds about clients with active leases:
(dhcpv6-server/network-ranges/network-range/ address-pools/ (dhc6-srv/network-ranges/network-range/address-pools/ address-
address-pool/active-leases) pool/active-leases)
* Information the relay holds about clients with active leases: * Information the relay holds about clients with active leases:
(dhcpv6-relay/relay-if/prefix-delegation/) (dhc6-rly/relay-if/prefix-delegation/)
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.
5. IANA Considerations 5. IANA Considerations
This document requests IANA to register the following URIs in the This document requests IANA to register the following URIs in the
"IETF XML Registry" [RFC3688]: "IETF XML Registry" [RFC3688]:
skipping to change at page 71, line 41 skipping to change at page 73, line 28
reference: RFC XXXX YANG Data Model for DHCPv6 Configuration reference: RFC XXXX YANG Data Model for DHCPv6 Configuration
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
prefix: dhcpv6-common prefix: dhcpv6-common
reference: RFC XXXX YANG Data Model for DHCPv6 Configuration reference: RFC XXXX YANG Data Model for DHCPv6 Configuration
6. Acknowledgments 6. Acknowledgments
The authors would like to thank Qi Sun, Lishan Li, Hao Wang, Tomek The authors would like to thank Qi Sun, Lishan Li, Hao Wang, Tomek
Mrugalski, Marcin Siodelski, Bernie Volz, Ted Lemon, Bing Liu, and Mrugalski, Marcin Siodelski, Bernie Volz, Ted Lemon, Bing Liu, Tom
Tom Petch for their valuable comments and contributions to this work. Petch, and Acee Lindem for their valuable comments and contributions
to this work.
7. Contributors 7. Contributors
The following individuals are co-authors of this document: The following individuals are co-authors of this document:
Yong Cui Yong Cui
Tsinghua University Tsinghua University
Beijing, 100084 Beijing, 100084
P.R. China P.R. China
Email: cuiyong@tsinghua.edu.cn Email: cuiyong@tsinghua.edu.cn
skipping to change at page 75, line 5 skipping to change at page 77, line 5
Configuration Protocol for IPv6 (DHCPv6) Status Codes", Configuration Protocol for IPv6 (DHCPv6) Status Codes",
<https://www.iana.org/assignments/dhcpv6-parameters>. <https://www.iana.org/assignments/dhcpv6-parameters>.
8.2. Informative References 8.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>.
Appendix A. Example of Augmenting Additional DHCPv6 Option Definitions Appendix A. Data Tree Examples
This section contains XML examples of data trees for the different
DHCPv6 elements.
A.1. DHCPv6 Server Configuration Example
The following example shows a basic configuration for a server. The
configuration defines:
* Enabling the DHCP server function
* The server's DUID
* An option set (id=1) with configuration for the Solicit Max Retry
Timeout (SOL_MAX_RT (82)) option.
* A single network range (2001:db8::/32)
* A single address pool, with start and end addresses, relevant
lease timers and an option-set-id of "1" referencing the option
set configured above.
<dhcpv6-server
xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server">
<enabled>true</enabled>
<server-duid>000200090CC084D303000912</server-duid>
<vendor-config/>
<option-sets>
<option-set>
<option-set-id>1</option-set-id>
<description>Example DHCP option set</description>
<sol-max-rt-option>
<sol-max-rt-value>3600</sol-max-rt-value>
</sol-max-rt-option>
</option-set>
</option-sets>
<class-selector/>
<network-ranges>
<valid-lifetime>54000</valid-lifetime>
<renew-time>7200</renew-time>
<rebind-time>32400</rebind-time>
<preferred-lifetime>43200</preferred-lifetime>
<network-range>
<id>1</id>
<description>example-network-range</description>
<network-prefix>2001:db8::/32</network-prefix>
<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>
</network-range>
</network-ranges>
</dhcpv6-server>
Figure 4: Basic Server Configuration Example XML
The following example shows a static host reservation within an
address pool. The host's lease timers are configured to be longer
than hosts from the pool with dynamically assigned addresses.
<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: Host Reservation Configuration Example XML
The following example shows configuration for a network range and
pool to be used for delegating prefixes to clients. In this example,
each client will receive a /56 prefix.
The 'max-pd-space-utiliation' is set to 80 so that a 'prefix-pool-
utilization-threshold-exceeded' notification will be raised.
<network-ranges>
<network-range>
<id>1</id>
<description>prefix-pool-example</description>
<network-prefix>2001:db8::/32</network-prefix>
<prefix-pools>
<valid-lifetime>54000</valid-lifetime>
<renew-time>7200</renew-time>
<rebind-time>32400</rebind-time>
<preferred-lifetime>43200</preferred-lifetime>
<prefix-pool>
<pool-id>0</pool-id>
<option-set-id>1</option-set-id>
<pool-prefix>2001:db8:1::/48</pool-prefix>
<client-prefix-length>56</client-prefix-length>
<max-pd-space-utilization>80</max-pd-space-utilization>
</prefix-pool>
</prefix-pools>
</network-range>
</network-ranges>
Figure 6: Prefix Delegation Configuration Example XML
The next example shows the configuration of a set of options that may
be returned to clients, depending on the contents of a received DHCP
request message. The option set ID is '1', which will referenced by
other places in the configuration (e.g., address pool configuration)
as the available options for clients that request them.
The example contains 2 instances of the Vendor Specific Information
Option (OPTION_VENDOR_OPTS (17)) to show how options which allow for
multiple instances are configured.
<option-sets>
<option-set>
<option-set-id>1</option-set-id>
<description>Example DHCP option set</description>
<vendor-specific-information-options>
<vendor-specific-information-option>
<enterprise-number>9</enterprise-number>
<vendor-option-data>
<sub-option-code>01</sub-option-code>
<sub-option-data>1234abcd</sub-option-data>
</vendor-option-data>
<vendor-option-data>
<sub-option-code>02</sub-option-code>
<sub-option-data>abcd1234</sub-option-data>
</vendor-option-data>
</vendor-specific-information-option>
<vendor-specific-information-option>
<enterprise-number>10</enterprise-number>
<vendor-option-data>
<sub-option-code>01</sub-option-code>
<sub-option-data>4321dcba</sub-option-data>
</vendor-option-data>
<vendor-option-data>
<sub-option-code>02</sub-option-code>
<sub-option-data>dcba4321</sub-option-data>
</vendor-option-data>
</vendor-specific-information-option>
</vendor-specific-information-options>
<sol-max-rt-option>
<sol-max-rt-value>3600</sol-max-rt-value>
</sol-max-rt-option>
</option-set>
</option-sets>
Figure 7: Option Set Configuration Example XML
A.2. DHCPv6 Relay Configuration Example
The following example shows a basic configuration for a single DHCP
relay interface and its interaction with the ietf-interfaces module.
The configuration defines:
* Enabling the DHCP relay function globally and for the relevant
interface.
* Referencing the interface that the relay configuration is relevant
for via an inteface-ref to the ietf-interfaces module.
* Defining two destination addresses that incoming DHCP messages
will be relayed to.
* Configures the link-address value that will be sent in the relay-
forward message.
* Configuring a value for the Interface ID Option
(OPTION_INTERFACE_ID (18)), which will be included in the relay
forward message.
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">
<interface>
<name>eth0</name>
<type>ianaift:ethernetCsmacd</type>
<description>DHCPv6 Relay Interface</description>
<enabled>true</enabled>
</interface>
</interfaces>
<dhcpv6-relay xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay">
<enabled>true</enabled>
<relay-if>
<if-name>eth0</if-name>
<enabled>true</enabled>
<destination-address>2001:db8:2::1</destination-address>
<destination-address>2001:db8:2::2</destination-address>
<link-address>2001:db8:3::1</link-address>
<relay-options>
<interface-id-option>
<interface-id>EXAMPLE-INTERFACE-ID</interface-id>
</interface-id-option>
</relay-options>
</relay-if>
</dhcpv6-relay>
Figure 8: Basic Relay Configuration Example XML
A.3. DHCPv6 Client Configuration Examples
The following example shows a basic configuration for a DHCP client
and its interaction with the ietf-interfaces module. The
configuration defines:
* Enabling the DHCP relay function globally and for the relevant
interface.
* References the interface that the client configuration is relevant
for via an inteface-ref to the ietf-interfaces module.
* Sets the client's DUID.
* Configures a list of option codes that will be requested by the
client in its Option Request Option (OPTION_ORO (5)).
* Configures a single instance of the Vendor-specific Information
Option (OPTION_VENDOR_OPTS (17)) with a single sub-option data
item.
* Requests a non-temporary IPv6 address (IA_NA) with an identity
association interface identifier of 00000001.
* Requests an IPv6 delegated prefix address (IA_PD) with an identity
association interface identifier of 00000002.
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">
<interface>
<name>eth0</name>
<type>ianaift:ethernetCsmacd</type>
<description>DHCPv6 Relay Interface</description>
<enabled>true</enabled>
</interface>
</interfaces>
<dhcpv6-client xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"
>
<enabled>true</enabled>
<client-if>
<if-name>eth0</if-name>
<enabled>true</enabled>
<duid>000200090CC084D303000913</duid>
<client-configured-options>
<option-request-option>
<oro-option>17</oro-option>
<oro-option>23</oro-option>
<oro-option>24</oro-option>
<oro-option>82</oro-option>
</option-request-option>
<vendor-specific-information-options>
<vendor-specific-information-option>
<enterprise-number>9</enterprise-number>
<vendor-option-data>
<sub-option-code>01</sub-option-code>
<sub-option-data>abcd1234</sub-option-data>
</vendor-option-data>
</vendor-specific-information-option>
</vendor-specific-information-options>
</client-configured-options>
<ia-na>
<ia-id>00000001</ia-id>
</ia-na>
<ia-pd>
<ia-id>00000002</ia-id>
</ia-pd>
</client-if>
</dhcpv6-client>
Figure 9: Basic Server Configuration Example XML
Appendix B. Example of Augmenting Additional DHCPv6 Option Definitions
The following section provides a example of how the DHCPv6 option The following section provides a 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 models for OPTION_SIP_SERVER_D (21) and
OPTION_SIP_SERVER_D (22) defined in [RFC3319]. The module is OPTION_SIP_SERVER_D (22) defined in [RFC3319]. The module is
constructed as follows: constructed as follows:
skipping to change at page 75, line 42 skipping to change at page 85, line 42
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 which 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).
<CODE BEGINS> file "ietf-example-dhcpv6-opt-sip-serv@2021-03-17.yang" module example-dhcpv6-opt-sip-serv {
yang-version 1.1;
module ietf-example-dhcpv6-opt-sip-serv { namespace "https://example.com/ns/" +
yang-version 1.1; "example-dhcpv6-opt-sip-serv";
namespace "urn:ietf:params:xml:ns:yang:" + prefix "sip-srv";
"ietf-example-dhcpv6-opt-sip-serv";
prefix "sip-srv";
import ietf-inet-types {
prefix inet;
}
import ietf-dhcpv6-server {
prefix dhcpv6-server;
}
organization
"IETF DHC (Dynamic Host Configuration) Working Group";
contact
"WG Web: <http://datatracker.ietf.org/wg/dhc/>
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 "This YANG module contains DHCPv6 options defined
in RFC 3319 that can be used by DHCPv6 servers.
Copyright (c) 2021 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see import ietf-inet-types {
the RFC itself for full legal notices."; prefix inet;
}
revision 2021-03-17 { import ietf-dhcpv6-server {
description "Version update for draft -19 publication."; prefix dhc6-srv;
reference "I-D: draft-ietf-dhc-dhcpv6-yang-19"; }
}
revision 2021-02-22 { organization
description "Version update for draft -18 publication."; "IETF DHC (Dynamic Host Configuration) Working Group";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-18";
}
revision 2021-01-29 { contact
description "Version update for draft -17 publication."; "WG Web: <http://datatracker.ietf.org/wg/dhc/>
reference "I-D: draft-ietf-dhc-dhcpv6-yang-17"; WG List: <mailto:dhcwg@ietf.org>
} Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
revision 2021-01-06 { Author: Linhui Sun <lh.sunlinh@gmail.com>
description "Version update for draft -16 publication."; Editor: Ian Farrer <ian.farrer@telekom.de>
reference "I-D: draft-ietf-dhc-dhcpv6-yang-16"; Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
} Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>";
revision 2020-12-22 { description
description "Version update for draft -13 publication."; "This YANG module contains DHCPv6 options defined in RFC 8415
reference "I-D: draft-ietf-dhc-dhcpv6-yang-15"; that can be used by DHCPv6 servers.
}
revision 2020-12-10 { Copyright (c) 2021 IETF Trust and the persons identified as
description "Version update for draft -13 publication."; authors of the code. All rights reserved.
reference "I-D: draft-ietf-dhc-dhcpv6-yang-13";
}
revision 2020-12-01 { Redistribution and use in source and binary forms, with or
description "Version update for draft -12 publication."; without modification, is permitted pursuant to, and subject
reference "I-D: draft-ietf-dhc-dhcpv6-yang-12"; to the license terms contained in, the Simplified BSD License
} set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
revision 2020-05-26 { This version of this YANG module is part of RFC XXXX; see
description "Version update for draft -11 publication and the RFC itself for full legal notices.";
to align revisions across the different modules.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11";
}
revision 2019-10-18 { revision 2019-10-18 {
description "Initial version."; description
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; "Initial version.";
} reference "I-D: draft-ietf-dhc-dhcpv6-yang";
}
/* /*
* 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 description
List"; "OPTION_SIP_SERVER_D (21) SIP Servers Domain-Name List";
reference "RFC 3319: Dynamic Host Configuration Protocol reference "RFC 3319: Dynamic Host Configuration Protocol
(DHCPv6) Options for Session Initiation Protocol (SIP) (DHCPv6) Options for Session Initiation Protocol (SIP)
Servers"; Servers";
container sip-server-domain-name-list-option { container sip-server-domain-name-list-option {
description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name description
List container."; "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List
list sip-server { container.";
key sip-serv-id; list sip-server {
description "SIP server information."; key sip-serv-id;
leaf sip-serv-id { description
type uint8; "SIP server information.";
description "SIP server list identifier identifier."; leaf sip-serv-id {
} type uint8;
leaf sip-serv-domain-name { description
type inet:domain-name; "SIP server list identifier identifier.";
description "SIP server domain name."; }
leaf sip-serv-domain-name {
type inet:domain-name;
description
"SIP server domain name.";
}
} }
} }
} }
}
grouping sip-server-address-list-option-group { grouping sip-server-address-list-option-group {
description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address description
List"; "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List";
reference "RFC 3319: Dynamic Host Configuration Protocol reference "RFC 3319: Dynamic Host Configuration Protocol
(DHCPv6) Options for Session Initiation Protocol (SIP) (DHCPv6) Options for Session Initiation Protocol (SIP)
Servers"; Servers";
container sip-server-address-list-option { container sip-server-address-list-option {
description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address description
List container."; "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List
list sip-server { container.";
key sip-serv-id; list sip-server {
description "SIP server information."; key sip-serv-id;
leaf sip-serv-id { description
type uint8; "SIP server information.";
description "SIP server list entry identifier."; leaf sip-serv-id {
} type uint8;
leaf sip-serv-addr { description
type inet:ipv6-address; "SIP server list entry identifier.";
description "SIP server IPv6 address."; }
leaf sip-serv-addr {
type inet:ipv6-address;
description
"SIP server IPv6 address.";
}
} }
} }
} }
}
/* /*
* Augmentations * Augmentations
*/ */
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/" +
"dhcpv6-server:option-set" { augment "/dhc6-srv:dhcpv6-server/dhc6-srv:option-sets/" +
description "Augment the option definition groupings to the "dhc6-srv:option-set" {
server module."; description
uses sip-server-domain-name-list-option-group; "Augment the option definition groupings to the server
uses sip-server-address-list-option-group; module.";
uses sip-server-domain-name-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. E.g. for options which will be augmented into the specific option. For example, for options which will be augmented
ietf-dhcpv6-server module, in many cases, these will be augmented to: into the ietf-dhcpv6-server module, in many cases, these will be
augmented to:
'/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/\ dhcpv6- '/dhc6-srv:dhc6-srv/dhc6-srv:option-sets/dhc6-srv:option-set'
server: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 which 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 which 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:
'/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/\ dhcpv6- '/dhc6-srv:dhc6-srv/dhc6-srv:network-ranges/dhc6-srv:network-range/
server:network-range/dhcpv6-server:prefix-pools/\ dhcpv6- dhc6-srv:prefix-pools/dhc6-srv:prefix-pool"
server:prefix-pool"
Appendix B. 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 PosgreSQL. For each case, the necessary memory (memfile), MySQL and PosgreSQL. For each case, the necessary
configuration parameters are provided. configuration parameters are provided.
At the end there is an augment statement which adds the vendor At the end there is an augment statement which 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.
<CODE BEGINS> file "ietf-example-dhcpv6-server-conf@2021-03-17.yang" module example-dhcpv6-server-conf {
module ietf-example-dhcpv6-server-conf {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:" + namespace "https://example.com/ns/" +
"ietf-example-dhcpv6-server-conf"; "example-dhcpv6-server-conf";
prefix "dhcpv6-server-config"; prefix "dhc6-srv-conf";
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-server { import ietf-dhcpv6-server {
prefix dhcpv6-server; prefix dhc6-srv;
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF DHC (Dynamic Host Configuration) Working Group";
contact contact
"WG Web: <http://datatracker.ietf.org/wg/dhc/> "WG Web: <http://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 "This YANG module defines components for the description
configuration and management of vendor/implementation specific "This YANG module defines components for the configuration and
DHCPv6 server functionality. As this functionality varies management of vendor/implementation specific DHCPv6 server
greatly between different implementations, the module functionality. As this functionality varies greatly between
provided as an example only. different implementations, the module is provided as an example
only.
Copyright (c) 2021 IETF Trust and the persons identified as Copyright (c) 2021 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 without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-03-17 {
description "Version update for draft -19 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-19";
}
revision 2021-02-22 {
description "Version update for draft -18 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-18";
}
revision 2021-01-29 {
description "Version update for draft -17 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-17";
}
revision 2021-01-06 {
description "Version update for draft -16 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-16";
}
revision 2020-12-22 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-15";
}
revision 2020-12-10 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-13";
}
revision 2020-12-01 {
description "Version update for draft -12 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-12";
}
revision 2020-05-26 {
description "Version update for draft -11 publication and
to align revisions across the different modules.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11";
}
revision 2019-06-04 { revision 2019-06-04 {
description ""; description
"Initial revision.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
/* /*
* Groupings * Groupings
*/ */
grouping config { grouping config {
description "Parameters necessary for the configuration of a description
DHCPv6 server"; "Parameters necessary for the configuration of a DHCPv6
server";
container serv-attributes { container serv-attributes {
description "Contains basic attributes necessary for running a description
DHCPv6 server."; "Contains basic attributes necessary for running a DHCPv6
server.";
leaf name { leaf name {
type string; type string;
description "Name of the DHCPv6 server."; description
"Name of the DHCPv6 server.";
} }
leaf description { leaf description {
type string; type string;
description "Description of the DHCPv6 server."; description
"Description of the DHCPv6 server.";
} }
leaf ipv6-listen-port { leaf ipv6-listen-port {
type uint16; type uint16;
default 547; default 547;
description "UDP port that the server will listen on."; description
"UDP port that the server will listen on.";
} }
choice listening-interfaces { choice listening-interfaces {
default all-interfaces; default all-interfaces;
description "Configures which interface or addresses the description
server will listen for incoming messages on."; "Configures which interface or addresses the server will
listen for incoming messages on.";
case all-interfaces { case all-interfaces {
container all-interfaces { container all-interfaces {
presence true; presence true;
description "Configures the server to listen for description
incoming messages on all IPv6 addresses (unicast and "Configures the server to listen for incoming messages
multicast) on all of its network interfaces."; on all IPv6 addresses (unicast and multicast) on all of
its network interfaces.";
} }
} }
case interface-list { case interface-list {
leaf-list interfaces { leaf-list interfaces {
type if:interface-ref; type if:interface-ref;
description "List of interfaces that the server will description
listen for incoming messages on. Messages addressed "List of interfaces on which the server will listen for
to any valid IPv6 address (unicast and multicast) will
be received."; incoming messages. Messages addressed to any
valid IPv6 address (unicast and multicast) will be
received.";
} }
} }
case address-list { case address-list {
leaf-list address-list { leaf-list address-list {
type inet:ipv6-address; type inet:ipv6-address;
description "List of IPv6 address(es) that the server description
will listen for incoming messages on."; "List of IPv6 address(es) on which the server will
listen for incoming DHCPv6 messages.";
} }
} }
} }
leaf-list interfaces-config { leaf-list interfaces-config {
type if:interface-ref; type if:interface-ref;
default "if:interfaces/if:interface/if:name"; default "if:interfaces/if:interface/if:name";
description "A leaf list to denote which one or more description
interfaces the server should listen on."; "A leaf list of interfaces on which the server should
listen.";
} }
container lease-storage { container lease-storage {
description "Configures how the server will stores leases."; description
"Configures how the server will stores leases.";
choice storage-type { choice storage-type {
description "The type storage that will be used for lease description
"The type storage that will be used for lease
information."; information.";
case memfile { case memfile {
description "Configuration for storing leases information description
in a CSV file."; "Configuration for storing leases information in a
Comma-Separated Value (CSV) file.";
leaf memfile-name { leaf memfile-name {
type string; type string;
description "Specifies the absolute location description
of the lease file. The format of the string follow "Specifies the absolute location of the lease file.
the semantics of the relevant operating system."; The format of the string follow the semantics of
the relevant operating system.";
} }
leaf memfile-lfc-interval { leaf memfile-lfc-interval {
type uint64; type uint64;
description "Specifies the interval in seconds, description
at which the server will perform a lease file cleanup "Specifies the interval in seconds, at which the
(LFC)."; server will perform a lease file cleanup (LFC).";
} }
} }
case mysql { case mysql {
leaf mysql-name { leaf mysql-name {
type string; type string;
description "Name of the database."; description
"Name of the database.";
} }
choice mysql-host { choice mysql-host {
description "Define host or address for MySQL server."; description
"Define host or address for MySQL server.";
case mysql-server-hostname { case mysql-server-hostname {
leaf mysql-hostname { leaf mysql-hostname {
type inet:domain-name; type inet:domain-name;
default "localhost"; default "localhost";
description "If the database is located on a description
different system to the DHCPv6 server, the "If the database is located on a different
domain name can be specified."; system to the DHCPv6 server, the domain name can
be specified.";
} }
} }
case mysql-server-address { case mysql-server-address {
leaf mysql-address { leaf mysql-address {
type inet:ip-address; type inet:ip-address;
default "::"; default "::";
description "Configure the location of the description
database using an IP (v6 or v6) literal "Configure the location of the database using
address"; an IP (v6 or v6) literal address";
} }
} }
} }
leaf mysql-username { leaf mysql-username {
type string; type string;
description "User name of the account under which the description
server will access the database."; "User name of the account under which the server
will access the database.";
} }
leaf mysql-password { leaf mysql-password {
type string; type string;
description "Password of the account under which description
the server will access the database."; "Password of the account under which the server
will access the database.";
} }
leaf mysql-port { leaf mysql-port {
type inet:port-number; type inet:port-number;
default 5432; default 5432;
description "If the database is located on a different description
system, the port number may be specified."; "If the database is located on a different system,
the port number may be specified.";
} }
leaf mysql-lfc-interval { leaf mysql-lfc-interval {
type uint64; type uint64;
description "Specifies the interval in seconds, description
at which the server will perform a lease file cleanup "Specifies the interval in seconds, at which the
(LFC)."; server will perform a lease file cleanup (LFC).";
} }
leaf mysql-connect-timeout { leaf mysql-connect-timeout {
type uint64; type uint64;
description "Defines the timeout interval for description
connecting to the database. A longer interval can "Defines the timeout interval for connecting to the
be specified if the database is remote."; database. A longer interval can be specified if the
database is remote.";
} }
} }
case postgresql { case postgresql {
choice postgresql-host { choice postgresql-host {
description "Define host or address for postgresql description
server."; "Define host or address for postgresql server.";
case postgresql-server-hostname { case postgresql-server-hostname {
leaf postgresql-hostname { leaf postgresql-hostname {
type inet:domain-name; type inet:domain-name;
default "localhost"; default "localhost";
description "If the database is located on a description
different system to the DHCPv6 server, the "If the database is located on a different system
domain name can be specified.";
to the DHCPv6 server, the domain name can be
specified.";
} }
} }
case postgresql-server-address { case postgresql-server-address {
leaf postgresql-address { leaf postgresql-address {
type inet:ip-address; type inet:ip-address;
default "::"; default "::";
description "Configure the location of the database description
using an IP (v6 or v6) literal address"; "Configure the location of the database using
an IP (v6 or v6) literal address";
} }
} }
} }
leaf postgresql-username { leaf postgresql-username {
type string; type string;
description "User name of the account under which description
the server will access the database"; "User name of the account under which the server
will access the database";
} }
leaf postgresql-password { leaf postgresql-password {
type string; type string;
description "Password of the account under which description
the server will access the database"; "Password of the account under which the server
will access the database";
} }
leaf postgresql-port { leaf postgresql-port {
type inet:port-number; type inet:port-number;
default 5432; default 5432;
description "If the database is located on a different description
system, the port number may be specified"; "If the database is located on a different system,
the port number may be specified";
} }
leaf postgresql-lfc-interval { leaf postgresql-lfc-interval {
type uint64; type uint64;
description "Specifies the interval in seconds, description
at which the server will perform a lease file cleanup "Specifies the interval in seconds, at which the
(LFC)"; server will perform a lease file cleanup (LFC)";
} }
leaf postgresql-connect-timeout { leaf postgresql-connect-timeout {
type uint64; type uint64;
description "Defines the timeout interval for description
connecting to the database. A longer interval can "Defines the timeout interval for connecting to the
be specified if the database is remote."; database. A longer interval can be specified if the
database is remote.";
} }
} }
} }
} }
} }
} }
/* /*
* Augmentations * Augmentations
*/ */
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:vendor-config" augment "/dhc6-srv:dhcpv6-server/dhc6-srv:vendor-config" {
{ description
description "Augment the server specific YANG to the "Augment the server specific YANG to the ietf-dhcpv6-server
ietf-dhcpv6-server module."; module.";
uses dhcpv6-server-config:config; uses config;
} }
} }
<CODE ENDS>
Appendix C. 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 modelled of how vendor-specific class selection configuration can be modelled
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 "client-id",
"interface-id" (ingress interface of the client's messages), packets "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 how it specification for class selection, it only shows an example how it
can 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 "network-range", "address-pool" * client-class leafrefs augmented to "network-range", "address-pool"
and "pd-pool", pointing to the "client-class-name" that is 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 client based on
rules and then client is allowed to get address(es)/prefix(es) from rules and then client is allowed to get address(es)/prefix(es) from
given network-range/pool if the class name matches. given network-range/pool if the class name matches.
<CODE BEGINS> file "ietf-example-dhcpv6-class-select@2021-03-17.yang" module example-dhcpv6-class-select {
module ietf-example-dhcpv6-class-select {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:" + namespace "https://example.com/ns/" +
"ietf-example-dhcpv6-class-select"; "example-dhcpv6-class-select";
prefix "dhcpv6-class-selector"; 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 dhcpv6-common; prefix dhc6;
} }
import ietf-dhcpv6-server { import ietf-dhcpv6-server {
prefix dhcpv6-server; prefix dhc6-srv;
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF DHC (Dynamic Host Configuration) Working Group";
contact contact
"WG Web: <http://datatracker.ietf.org/wg/dhc/> "WG Web: <http://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 "This YANG module defines components for the description
definition and configuration of the client class selector functio "This YANG module defines components for the definition and
n configuration of the client class selector function for a
for a DHCPv6 server. As this functionality varies greatly betwee DHCPv6 server. As this functionality varies greatly between
n
different implementations, the module provided as an example different implementations, the module provided as an example
only. only.
Copyright (c) 2021 IETF Trust and the persons identified as Copyright (c) 2021 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 without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-03-17 {
description "Version update for draft -19 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-19";
}
revision 2021-02-22 {
description "Version update for draft -18 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-18";
}
revision 2021-01-29 {
description "Version update for draft -17 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-17";
}
revision 2021-01-06 {
description "Version update for draft -16 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-16";
}
revision 2020-12-22 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-15";
}
revision 2020-12-10 {
description "Version update for draft -13 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-13";
}
revision 2020-12-01 {
description "Version update for draft -12 publication.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-12";
}
revision 2020-05-26 {
description "Version update for draft -11 publication and
to align revisions across the different modules.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11";
}
revision 2019-06-13 { revision 2019-06-13 {
description ""; description
"Initial version.";
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; reference "I-D: draft-ietf-dhc-dhcpv6-yang";
} }
/* /*
* Groupings * Groupings
*/ */
grouping client-class-id { grouping client-class-id {
description "Definitions of client message classification for description
"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;
description "Unique Identifier for client class identification description
list entries."; "Unique Identifier for client class identification list
entries.";
} }
choice id-type { choice id-type {
mandatory true; mandatory true;
description "Definitions for different client identifier description
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 "String literal client identifier."; description
"String literal client identifier.";
} }
description "Client class selection based on a string literal description
client identifier."; "Client class selection based on a string literal client
identifier.";
} }
case received-interface-id { case received-interface-id {
description "Client class selection based on the incoming description
interface of the DHCPv6 message."; "Client class selection based on the incoming interface
of the DHCPv6 message.";
leaf received-interface { leaf received-interface {
type if:interface-ref; type if:interface-ref;
description "Reference to the interface entry description
for the incoming DHCPv6 message."; "Reference to the interface entry for the incoming
DHCPv6 message.";
} }
} }
case packet-source-address-id { case packet-source-address-id {
description "Client class selection based on the source description
address of the DHCPv6 message."; "Client class selection based on the source address of
the DHCPv6 message.";
leaf packet-source-address { leaf packet-source-address {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description "Source address of the DHCPv6 message."; description
"Source address of the DHCPv6 message.";
} }
} }
case packet-destination-address-id { case packet-destination-address-id {
description "Client class selection based on the destination description
address of the DHCPv6 message."; "Client class selection based on the destination address
of the DHCPv6 message.";
leaf packet-destination-address { leaf packet-destination-address {
type inet:ipv6-address; type inet:ipv6-address;
mandatory true; mandatory true;
description "Destination address of the DHCPv6 message."; description
"Destination address of the DHCPv6 message.";
} }
} }
case relay-link-address-id { case relay-link-address-id {
description "Client class selection based on the prefix description
of the link-address field in the relay agent message "Client class selection based on the prefix of the
header."; link-address field in the relay agent message header.";
leaf relay-link-address { leaf relay-link-address {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "Prefix of the link-address field in the relay description
agent message header."; "Prefix of the link-address field in the relay agent
message header.";
} }
} }
case relay-peer-address-id { case relay-peer-address-id {
description "Client class selection based on the value of the description
"Client class selection based on the value of the
peer-address field in the relay agent message header."; peer-address field in the relay agent message header.";
leaf relay-peer-address { leaf relay-peer-address {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description "Prefix of the peer-address field description
in the relay agent message header."; "Prefix of the peer-address field in the relay agent
message header.";
} }
} }
case relay-interface-id { case relay-interface-id {
description "Client class selection based on the incoming description
"Client class selection based on the incoming
interface-id option."; interface-id option.";
leaf relay-interface { leaf relay-interface {
type string; type string;
description "Reference to the interface entry description
for the incoming DHCPv6 message."; "Reference to the interface entry for the incoming
DHCPv6 message.";
} }
} }
case user-class-option-id { case user-class-option-id {
description "Client class selection based on the value of the description
"Client class selection based on the value of the
OPTION_USER_CLASS(15) and its user-class-data field."; OPTION_USER_CLASS(15) and its user-class-data field.";
leaf user-class-data { leaf user-class-data {
type string; type string;
mandatory true; mandatory true;
description "Value of the enterprise-number field."; description
"Value of the enterprise-number field.";
} }
} }
case vendor-class-present-id { case vendor-class-present-id {
description "Client class selection based on the presence of description
"Client class selection based on the presence of
OPTION_VENDOR_CLASS(16) in the received message."; OPTION_VENDOR_CLASS(16) in the received message.";
leaf vendor-class-present { leaf vendor-class-present {
type boolean; type boolean;
mandatory true; mandatory true;
description "Presence of OPTION_VENDOR_CLASS(16) description
in the received message."; "Presence of OPTION_VENDOR_CLASS(16) in the received
message.";
} }
} }
case vendor-class-option-enterprise-number-id { case vendor-class-option-enterprise-number-id {
description "Client class selection based on the value of the description
"Client class selection based on the value of the
enterprise-number field in OPTION_VENDOR_CLASS(16)."; enterprise-number field in OPTION_VENDOR_CLASS(16).";
leaf vendor-class-option-enterprise-number { leaf vendor-class-option-enterprise-number {
type uint32; type uint32;
mandatory true; mandatory true;
description "Value of the enterprise-number field."; description
"Value of the enterprise-number field.";
} }
} }
case vendor-class-option-data-id { case vendor-class-option-data-id {
description "Client class selection based on the value description
of a data field within a vendor-class-data entry "Client class selection based on the value of a data
for a matching enterprise-number field field within a vendor-class-data entry for a matching
in OPTION_VENDOR_CLASS(16)."; enterprise-number field in OPTION_VENDOR_CLASS(16).";
container vendor-class-option-data { container vendor-class-option-data {
description "Vendor class option data container."; description
"Vendor class option data container.";
leaf vendor-class-option-enterprise-number { leaf vendor-class-option-enterprise-number {
type uint32; type uint32;
mandatory true; mandatory true;
description "Value of the enterprise-number field description
for matching the data contents."; "Value of the enterprise-number field for matching
the data contents.";
} }
leaf vendor-class-data { leaf vendor-class-data {
type string; type string;
mandatory true; mandatory true;
description "Vendor class data to match."; description
"Vendor class data to match.";
} }
} }
} }
case remote-id { case remote-id {
description "Client class selection based on the value description
of Remote-ID ."; "Client class selection based on the value of Remote-ID.";
container remote-id { container remote-id {
description "Remote-id client class selector container."; description
"Remote-id client class selector container.";
leaf vendor-class-option-enterprise-number { leaf vendor-class-option-enterprise-number {
type uint32; type uint32;
mandatory true; mandatory true;
description "Value of the enterprise-number field description
for matching the data contents."; "Value of the enterprise-number field for matching the
data contents.";
} }
leaf remote-id { leaf remote-id {
type string; type string;
mandatory true; mandatory true;
description "Remote-ID data to match."; description
"Remote-ID data to match.";
} }
} }
} }
case client-duid-id { case client-duid-id {
description "Client class selection based on the value description
of the received client DUID."; "Client class selection based on the value of the
received client DUID.";
leaf duid { leaf duid {
type dhcpv6-common:duid; type dhc6:duid;
description "Client DUID."; description
"Client DUID.";
} }
} }
} }
} }
/* /*
* Augmentations * Augmentations
*/ */
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-selector" augment "/dhc6-srv:dhcpv6-server/dhc6-srv:class-selector" {
{ description
description "Augment class selector functions to the DHCPv6 "Augment class selector functions to the DHCPv6 server
server module."; module.";
container client-classes { container client-classes {
description "Client classes to augment."; description
"Client classes to augment.";
list class { list class {
key client-class-name; key client-class-name;
description "List of the client class identifiers applicable description
to clients served by this address pool"; "List of the client class identifiers applicable to
uses dhcpv6-class-selector:client-class-id; clients served by this address pool";
uses client-class-id;
} }
} }
} }
augment "/dhcpv6-server:dhcpv6-server/" + augment "/dhc6-srv:dhcpv6-server/" +
"dhcpv6-server:network-ranges/dhcpv6-server:network-range" { "dhc6-srv:network-ranges/dhc6-srv:network-range" {
description "Augment class selector functions to the DHCPv6 description
server network-ranges."; "Augment class selector functions to the DHCPv6 server
network-ranges.";
leaf-list client-class { leaf-list client-class {
type leafref { type leafref {
path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + path "/dhc6-srv:dhcpv6-server/dhc6-srv:" +
"class-selector/client-classes/class/client-class-name"; "class-selector/client-classes/class/client-class-name";
} }
description "Leafrefs to client classes."; description
"Leafrefs to client classes.";
} }
} }
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + augment "/dhc6-srv:dhcpv6-server/dhc6-srv:" +
"network-ranges/dhcpv6-server:network-range/dhcpv6-server:" + "network-ranges/dhc6-srv:network-range/dhc6-srv:" +
"address-pools/dhcpv6-server:address-pool" { "address-pools/dhc6-srv:address-pool" {
description "Augment class selector functions to the DHCPv6 description
server address-pools."; "Augment class selector functions to the DHCPv6 server
address-pools.";
leaf-list client-class { leaf-list client-class {
type leafref { type leafref {
path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + path "/dhc6-srv:dhcpv6-server/dhc6-srv:" +
"class-selector/client-classes/class/client-class-name"; "class-selector/client-classes/class/client-class-name";
} }
description "Leafrefs to client classes."; description
"Leafrefs to client classes.";
} }
} }
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + augment "/dhc6-srv:dhcpv6-server/dhc6-srv:" +
"network-ranges/dhcpv6-server:network-range/dhcpv6-server:" + "network-ranges/dhc6-srv:network-range/dhc6-srv:" +
"prefix-pools/dhcpv6-server:prefix-pool" { "prefix-pools/dhc6-srv:prefix-pool" {
description "Augment class selector functions to the DHCPv6 description
"Augment class selector functions to the DHCPv6
server prefix-pools."; server prefix-pools.";
leaf-list client-class { leaf-list client-class {
type leafref { type leafref {
path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:" + path "/dhc6-srv:dhcpv6-server/dhc6-srv:" +
"class-selector/client-classes/class/client-class-name"; "class-selector/client-classes/class/client-class-name";
} }
description "Leafrefs to client classes."; description
"Leafrefs to client classes.";
} }
} }
} }
<CODE ENDS>
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. 598 change blocks. 
1500 lines changed or deleted 1816 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/