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