rfc9243.original.xml   rfc9243.xml 
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> <!DOCTYPE rfc [
<?rfc strict="yes" ?> <!ENTITY nbsp "&#160;">
<?rfc toc="yes"?> <!ENTITY zwsp "&#8203;">
<?rfc tocdepth="4"?> <!ENTITY nbhy "&#8209;">
<?rfc symrefs="yes"?> <!ENTITY wj "&#8288;">
<?rfc sortrefs="yes" ?> ]>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?> <!-- [rfced] "sortRefs" was set to "false" in the submitted XML file. May we alp
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> habetize the references (i.e., set "sortRefs" to "true"), or would you like to l
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" submissionType="I eave it as is?
ETF" docName="draft-ietf-dhc-dhcpv6-yang-25" ipr="trust200902" version="3"> -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" submissionType="I
ETF" consensus="true" number="9243" docName="draft-ietf-dhc-dhcpv6-yang-25" obso
letes="" updates="" ipr="trust200902" xml:lang="en" tocInclude="true" symRefs="t
rue" sortRefs="false" version="3">
<!-- xml2rfc v2v3 conversion 2.30.0 --> <!-- xml2rfc v2v3 conversion 2.30.0 -->
<front> <front>
<title abbrev="DHCPv6 YANG Model">YANG Data Model for DHCPv6
<!--[rfced] We note that most of the recently published RFCs containing
YANG modules format their titles as "A YANG Data Model for...", for example:
RFC 9094 - A YANG Data Model for Wavelength Switched Optical Networks (WSONs
)
RFC 9093 - A YANG Data Model for Layer 0 Types
RFC 9067 - A YANG Data Model for Routing Policy
Therefore, we have updated the title as follows. Please review and let us know
of any objections.
Original:
YANG Data Model for DHCPv6 Configuration
Current:
A YANG Data Model for DHCPv6 Configuration
-->
<title abbrev="DHCPv6 YANG Model">A YANG Data Model for DHCPv6
Configuration</title> Configuration</title>
<seriesInfo name="Internet-Draft" value="draft-ietf-dhc-dhcpv6-yang-25"/> <seriesInfo name="RFC" value="9243"/>
<author fullname="Ian Farrer" role="editor" initials="I." surname="Farrer"> <author fullname="Ian Farrer" role="editor" initials="I." surname="Farrer">
<organization>Deutsche Telekom AG</organization> <organization>Deutsche Telekom AG</organization>
<address> <address>
<postal> <postal>
<street>TAI, Landgrabenweg 151</street> <street>TAI, Landgrabenweg 151</street>
<city>Bonn</city> <city>Bonn</city>
<code>53227</code> <code>53227</code>
<country>Germany</country> <country>Germany</country>
</postal> </postal>
<email>ian.farrer@telekom.de</email> <email>ian.farrer@telekom.de</email>
</address> </address>
</author> </author>
<date year="2022"/> <date year="2022" month="May"/>
<workgroup>DHC Working Group</workgroup> <workgroup>DHC Working Group</workgroup>
<!-- [rfced] Please insert any keywords (beyond those that appear in
the title) for use on https://www.rfc-editor.org/search. -->
<abstract> <abstract>
<t>This document describes YANG data modules for the configuration <t>This document describes YANG data models for the configuration
and management of DHCPv6 (Dynamic Host Configuration Protocol and management of Dynamic Host Configuration Protocol
for IPv6 RFC8415) servers, relays, and clients. for IPv6 (DHCPv6) (RFC 8415) servers, relays, and clients.
</t> </t>
</abstract> </abstract>
</front> </front>
<middle> <middle>
<section anchor="introduction"> <section anchor="introduction">
<name>Introduction</name> <name>Introduction</name>
<t>DHCPv6 <xref target="RFC8415"/> is used for supplying <t>DHCPv6 <xref target="RFC8415"/> is used for supplying
configuration and other relevant parameters to clients in IPv6 configuration and other relevant parameters to clients in IPv6
networks. This document defines YANG <xref target="RFC7950"/> networks.
<!--[rfced] We removed "protocol" at the end of this sentence to
avoid redundancy; please let us know of any concerns. Also, should
"element" be plural? If not, should "a" follow "of" (e.g. "of a
DHCPv6 'element'")?
Original:
This document
defines YANG [RFC7950] modules for the configuration and management
of DHCPv6 'element' (servers, relays, and clients) using the Network
Configuration Protocol (NETCONF [RFC6241]) or RESTCONF [RFC8040]
protocols.
Perhaps:
This document
defines YANG [RFC7950] modules for the configuration and management
of DHCPv6 'elements' (servers, relays, and clients), using the Network
Configuration Protocol (NETCONF) [RFC6241] or RESTCONF [RFC8040].
-->
This document defines YANG <xref target="RFC7950"/>
modules for the configuration and management of DHCPv6 modules for the configuration and management of DHCPv6
'element' (servers, relays, and clients) using the Network 'element' (servers, relays, and clients), using the Network
Configuration Protocol (NETCONF <xref target="RFC6241"/>) Configuration Protocol (NETCONF) <xref target="RFC6241"/>
or RESTCONF <xref target="RFC8040"/> or RESTCONF <xref target="RFC8040"/>.</t>
protocols.</t>
<t>Separate modules are defined for each element. Additionally, <t>Separate modules are defined for each element. Additionally,
a 'common' module contains typedefs and groupings used by all a 'common' module contains typedefs and groupings used by all
of the element modules. <xref target="yang-usage-examples"/> of the element modules. <xref target="yang-usage-examples"/>
provides XML examples for each of the element modules and provides XML examples for each of the element modules and
shows their interaction. shows their interaction.
</t> </t>
<t>The relay and client modules provide configuration which is <t>The relay and client modules provide configuration that is
applicable to devices' interfaces. This is done by importing the applicable to devices' interfaces. This is done by importing the
ietf-interfaces module <xref target="RFC8343"/> and using 'ietf-interfaces' YANG module <xref target="RFC8343"/> and using
interface-refs to the relevant interface(s). interface-refs to the relevant interface(s).
</t> </t>
<t>It is worth noting that as DHCPv6 is itself a client <t>It is worth noting that as DHCPv6 is itself a client
configuration protocol, it is not the intention of this document configuration protocol, it is not the intention of this document
to provide a replacement for the allocation of DHCPv6 assigned to provide a replacement for the allocation of DHCPv6-assigned
addressing and parameters by using NETCONF/YANG. The DHCPv6 addressing and parameters by using NETCONF/YANG. The DHCPv6
client module is intended for the configuration and monitoring client module is intended for the configuration and monitoring
of the DHCPv6 client function and does not replace DHCPv6 of the DHCPv6 client function and does not replace DHCPv6
address and parameter configuration. address and parameter configuration.
</t> </t>
<t>The YANG modules in this document adopt the Network <t>The YANG modules in this document adopt the Network
Management Datastore Architecture (NMDA) Management Datastore Architecture (NMDA)
<xref target="RFC8342"/>. <xref target="RFC8342"/>.
</t> </t>
<section> <section>
<name>Scope</name> <name>Scope</name>
<t><xref target="RFC8415"/> describes the current version of the <t><xref target="RFC8415"/> describes the current version of the
DHCPv6 base protocol specification. A large number of DHCPv6 base protocol specification. A large number of
additional specifications have also been published, extending additional specifications have also been published, extending
DHCPv6 element functionality and adding new options. The YANG DHCPv6 element functionality and adding new options. The YANG
modules contained in this document do not attempt to capture modules contained in this document do not attempt to capture
all of these extensions and additions, rather to model the all of these extensions and additions; rather, they model the
DHCPv6 functions and options covered in DHCPv6 functions and options covered in
<xref target="RFC8415"/>. A focus has also been given on the <xref target="RFC8415"/>. A focus has also been given on the
extensibility of the modules so that they are easy to augment extensibility of the modules so that they are easy to augment
to add additional functionality as required by a particular to add additional functionality as required by a particular
implementation or deployment scenario. implementation or deployment scenario.
</t> </t>
</section> </section>
<section> <section>
<name>Extensibility of the DHCPv6 Server YANG Module</name> <name>Extensibility of the DHCPv6 Server YANG Module</name>
<t>The modules in this document only attempt to model <t>The modules in this document only attempt to model
skipping to change at line 108 skipping to change at line 151
deployment and operations. To resolve this, deployment and operations. To resolve this,
<xref target="vendor-specific-configuration-example"/> <xref target="vendor-specific-configuration-example"/>
contains an example YANG module for the configuration of contains an example YANG module for the configuration of
implementation-specific functions, illustrating how this implementation-specific functions, illustrating how this
functionality can be augmented into the main functionality can be augmented into the main
'ietf-dhcpv6-server.yang' module. 'ietf-dhcpv6-server.yang' module.
</t> </t>
<t>In DHCPv6, the concept of 'class selection' for messages <t>In DHCPv6, the concept of 'class selection' for messages
received by the server is common. This is the identification received by the server is common. This is the identification
and classification of messages based on a number of parameters and classification of messages based on a number of parameters
so that the correct provisioning information can be supplied. so that the correct provisioning information can be supplied,
For example, allocating a prefix from the correct pool, or for example, by allocating a prefix from the correct pool or
supplying a set of options relevant for a specific vendor's supplying a set of options relevant for a specific vendor's
client implementation. During the development of this client implementation. During the development of this
document, implementations were researched and the findings document, implementations were researched and the findings
were that while this function is common to all, the method were that while this function is common to all, the method
for configuring and implementing this function differs for configuring and implementing this function differs
greatly. Therefore, configuration of the class selection greatly. Therefore, configuration of the class selection
function has been omitted from the DHCPv6 server module to function has been omitted from the DHCPv6 server module to
allow implementors to define their own suitable YANG modules. allow implementors to define their own suitable YANG modules.
<xref target="class-selector-example"/> provides an <xref target="class-selector-example"/> provides an
example of this, to demonstrate how this can be example of this, which demonstrates how this can be
integrated with the main 'ietf-dhcpv6-server.yang' module. integrated with the main 'ietf-dhcpv6-server.yang' module.
</t> </t>
<section> <section>
<name>DHCPv6 Option Definitions</name> <name>DHCPv6 Option Definitions</name>
<t> <t>
A large number of DHCPv6 options have been created in A large number of DHCPv6 options have been created in
addition to those defined in <xref target="RFC8415"/>. As addition to those defined in <xref target="RFC8415"/>. As
implementations differ widely as to which DHCPv6 options implementations differ widely as to which DHCPv6 options
they support, the following approach has been taken to they support, the following approach has been taken to
defining options: Only the DHCPv6 options defined in defining options: only the DHCPv6 options defined in
<xref target="RFC8415"/> are included in this document. <xref target="RFC8415"/> are included in this document.
</t> </t>
<t>Of these, only the options that require operator <t>Of these, only the options that require operator
configuration are modeled. For example, OPTION_IA_NA (3) configuration are modeled. For example, OPTION_IA_NA (3)
is created by the DHCP server when requested by the client. is created by the DHCP server when requested by the client.
The contents of the fields in the option are based on a The contents of the fields in the option are based on a
number of input configuration parameters which the server number of input configuration parameters that the server
will apply when it receives the request (e.g., the T1/T2 will apply when it receives the request (e.g., the T1/T2
timers that are relevant for the pool of addresses). As a timers that are relevant for the pool of addresses). As a
result, there are no fields that are directly configurable result, there are no fields that are directly configurable
for the option, so it is not modeled. for the option, so it is not modeled.
</t> </t>
<t>The following table shows the DHCPv6 options that are <t>The following table shows the DHCPv6 options that are
modeled, the element(s) they are modeled for, and the modeled, the element(s) they are modeled for, and the
relevant YANG module name: relevant YANG module names:
</t> </t>
<table anchor="option-tab"> <table anchor="option-tab">
<name>Modeled DHCPv6 Options</name> <name>Modeled DHCPv6 Options</name>
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Server</th> <th>Server</th>
<th>Relay</th> <th>Relay</th>
<th>Client</th> <th>Client</th>
<th>Module Name</th> <th>Module Name</th>
skipping to change at line 262 skipping to change at line 305
</tr> </tr>
<tr> <tr>
<td>OPTION_INF_MAX_RT (83) inf max rt Option</td> <td>OPTION_INF_MAX_RT (83) inf max rt Option</td>
<td align="center">X</td> <td align="center">X</td>
<td align="center"/> <td align="center"/>
<td align="center"/> <td align="center"/>
<td>ietf-dhcpv6-server.yang</td> <td>ietf-dhcpv6-server.yang</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t>Further options definitions can be added using additional <t>Further option definitions can be added using additional
YANG modules via augmentation of the relevant element YANG modules via augmentation of the relevant element
modules from this document. modules from this document.
<xref target="example-dhcp-options-extension"/> contains an <xref target="example-dhcp-options-extension"/> contains an
example module showing how the DHCPv6 option definitions can example module showing how the DHCPv6 option definitions can
be extended in this manner. Some guidance on how to write be extended in this manner. Some guidance on how to write
YANG modules for additional DHCPv6 options is also provided. YANG modules for additional DHCPv6 options is also provided.
</t> </t>
</section> </section>
</section> </section>
</section>
<section anchor="terminology"> <section anchor="terminology">
<name>Terminology</name> <name>Terminology</name>
<t>The reader should be familiar with the YANG data modeling <t>The reader should be familiar with the YANG data modeling
language defined in <xref target="RFC7950"/>. language defined in <xref target="RFC7950"/>.
</t> </t>
<t>The YANG modules in this document adopt the Network <t>The YANG modules in this document adopt NMDA
Management Datastore Architecture (NMDA)
<xref target="RFC8342"/>. The meanings of the symbols used <xref target="RFC8342"/>. The meanings of the symbols used
in tree diagrams are defined in <xref target="RFC8340"/>. in tree diagrams are defined in <xref target="RFC8340"/>.
</t> </t>
<t>The reader should be familiar with DHCPv6 relevant <t>The reader should be familiar with DHCPv6-relevant
terminology as defined in <xref target="RFC8415"/> and other terminology defined in <xref target="RFC8415"/> and other
relevant documents.</t> relevant documents.</t>
</section>
</section>
<section anchor="req-lang"> <section anchor="req-lang">
<name>Requirements Language</name> <name>Requirements Language</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and >REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
"OPTIONAL" in this document are to be interpreted as described in "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDE
D</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
"<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as desc
ribed in
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and
only when, they appear in all capitals, as shown here.</t> only when, they appear in all capitals, as shown here.</t>
</section> </section>
</section>
<section anchor="tree-diagrams"> <section anchor="tree-diagrams">
<name>DHCPv6 Tree Diagrams</name> <name>DHCPv6 Tree Diagrams</name>
<section anchor="dhcpv6-server-tree"> <section anchor="dhcpv6-server-tree">
<name>DHCPv6 Server Tree Diagram</name> <name>DHCPv6 Server Tree Diagram</name>
<t>The tree diagram in <xref target="server-structure"/> <t>The tree diagram in <xref target="server-structure"/>
provides an overview of the DHCPv6 server module. The tree provides an overview of the DHCPv6 server module. The tree
also includes the common functions module defined in also includes the common functions module defined in
<xref target="common-module"/>. <xref target="common-module"/>.
</t> </t>
<figure anchor="server-structure"> <figure anchor="server-structure">
<name>DHCPv6 Server Data Module Structure</name> <name>DHCPv6 Server Data Module Structure</name>
<artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6- <sourcecode type="yangtree"><![CDATA[
server.yang.tree.clean.xml">
<![CDATA[
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
skipping to change at line 537 skipping to change at line 578
| +--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
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
<t>Descriptions of important nodes:</t> <dl newline="true" spacing="normal">
<ul spacing="normal"> <dt>Descriptions of important nodes:</dt>
<li>enabled: Enables/disables the function of the DHCPv6 <dd><dl newline="false" spacing="normal">
<dt>enabled:</dt><dd>This enables/disables the function of the DHCPv6
server. server.
</li> </dd>
<li>dhcpv6-server: This container holds the server's DHCPv6 <dt>dhcpv6-server:</dt><dd> This container holds the server's
specific configuration.</li> DHCPv6-specific configuration.</dd>
<li>server-duid: Each server must have a DUID (DHCP Unique <dt>server-duid:</dt><dd> Each server must have a DHCP Unique
Identifier) to identify itself to clients. A DUID consists Identifier (DUID) to identify itself to clients. A DUID consists
of a two-octet type field and an arbitrary length (of no of a 2-octet type field and an arbitrary length (of no
more than 128-octets) content field. Currently there are more than 128 octets) content field. Currently, there are
four DUID types defined in <xref target="RFC8415"/> and four DUID types defined in <xref target="RFC8415"/> and
<xref target="RFC6355"/>. The DUID may be configured using <xref target="RFC6355"/>. The DUID may be configured using
the format for one of these types, or using the the format for one of these types or using the
'unstructured' format. The DUID type definitions are 'unstructured' format. The DUID type definitions are
imported from the 'ietf-dhcpv6-common.yang' module. imported from the 'ietf-dhcpv6-common.yang' module.
<xref target="IANA-HARDWARE-TYPES"/> and <xref target="IANA-HARDWARE-TYPES"/> and
<xref target="IANA-PEN"/> are referenced for the relevant <xref target="IANA-PEN"/> are referenced for the relevant
DUID types. DUID types.
</li> </dd>
<li>vendor-config: This container is provided as a location <dt>vendor-config:</dt><dd> This container is provided as a location
for additional implementation-specific YANG nodes for the for additional implementation-specific YANG nodes for the
configuration of the device to be augmented. See configuration of the device to be augmented. See
<xref target="vendor-specific-configuration-example"/> for <xref target="vendor-specific-configuration-example"/> for
an example of such a module. an example of such a module.
</li> </dd>
<li>option-sets: The server can be configured with <dt>option-sets:</dt><dd> The server can be configured with
multiple option-sets. These are groups of DHCPv6 options multiple option-sets. These are groups of DHCPv6 options
with common parameters which will be supplied to clients on with common parameters that will be supplied to clients on
request. The 'option-set-id' field is used to reference an request. The option-set-id field is used to reference an
option-set elsewhere in the server's configuration. option-set elsewhere in the server's configuration.
</li> </dd>
<li>option-set: Holds configuration parameters for DHCPv6 <dt>option-set:</dt><dd> This holds configuration parameters for DHCPv
6
options. The initial set of applicable option definitions options. The initial set of applicable option definitions
are defined here and additional options that are also are defined here, and additional options that are also
relevant to the relay and/or client are imported from relevant to the relay and/or client are imported from
the 'ietf-dhcpv6-common' module. Where needed, other DHCPv6 the 'ietf-dhcpv6-common' module. Where needed, other DHCPv6
option modules can be augmented as they are defined. option modules can be augmented as they are defined.
</li> </dd>
<li>class-selector: This is provided as a location for <dt>class-selector:</dt><dd> This is provided as a location for
additional implementation specific YANG nodes for vendor additional implementation-specific YANG nodes for vendor-specific
specific class selector nodes to be augmented. See class selector nodes to be augmented. See
<xref target="class-selector-example"/> for an example of <xref target="class-selector-example"/> for an example of
this. this.
</li> </dd>
<li>allocation-ranges: A hierarchical model is used <dt>allocation-ranges:</dt><dd> A hierarchical model is used
for the allocation of addresses and prefixes. The top for the allocation of addresses and prefixes. The top-level
level 'allocation-ranges' container holds global 'allocation-ranges' container holds global
configuration parameters. Under this, the configuration parameters. Under this, the
'allocation-range' list is used for specifying IPv6 'allocation-range' list is used for specifying IPv6
prefixes and additional, prefix specific parameters. prefixes and additional prefix-specific parameters.
</li> </dd>
<li>address-pools: Used for IA_NA and IA_TA pool allocations <dt>address-pools:</dt><dd> This is used for Identity
Association for Non-temporary Addresses (IA_NA) and Identity
Association for Temporary Addresses (IA_TA) pool allocations
with a container for defining host reservations. State with a container for defining host reservations. State
information about active leases from each pool is also information about active leases from each pool is also
located here. located here.
</li> </dd>
<li>prefix-pools: Defines pools to be used for prefix <dt>prefix-pools:</dt><dd> This defines pools to be used for prefix
delegation to clients. Static host reservations can also delegation to clients. Static host reservations can also
be configured. As prefix delegation is not supported be configured. As prefix delegation is not supported
by all DHCPv6 server implementations, it is enabled by a by all DHCPv6 server implementations, it is enabled by a
feature statement.</li> feature statement.</dd>
</ul> </dl></dd></dl>
<t>Information about RPCs</t> <dl newline="true" spacing="normal">
<ul spacing="normal"> <dt>Information about RPCs:</dt>
<li>delete-address-lease: Allows the deletion of a lease for <dd><dl newline="false" spacing="normal">
<dt>delete-address-lease:</dt><dd> This allows the deletion of a lease
for
an individual IPv6 address from the server's lease database. an individual IPv6 address from the server's lease database.
</li> </dd>
<li>delete-prefix-lease: Allows the deletion of a lease for <dt>delete-prefix-lease:</dt><dd> This allows the deletion of a lease
for
an individual IPv6 prefix from the server's lease database. an individual IPv6 prefix from the server's lease database.
</li> </dd>
</ul> </dl></dd></dl>
<t>Information about notifications:</t> <dl newline="true" spacing="normal">
<ul spacing="normal"> <dt>Information about notifications:</dt>
<li>address/prefix-pool-utilization-threshold-exceeded: Raised <dd><dl>
<dt>address/prefix-pool-utilization-threshold-exceeded:</dt><dd> This
is raised
when the number of leased addresses or prefixes in a pool when the number of leased addresses or prefixes in a pool
exceeds the configured usage threshold. exceeds the configured usage threshold.
</li> </dd>
<li>invalid-client-detected: Raised when the server detects an <dt>invalid-client-detected:</dt><dd> This is raised when the server d
etects an
invalid client. A description of the error and message invalid client. A description of the error and message
type that has generated the notification can be included. type that has generated the notification can be included.
</li> </dd>
<li>decline-received: Raised when a DHCPv6 Decline message is <dt>decline-received:</dt><dd> This is raised when a DHCPv6 Decline me
ssage is
received from a client. received from a client.
</li> </dd>
<li>non-success-code-sent: Raised when there is a status <dt>non-success-code-sent:</dt><dd> This is raised when there is a sta
tus
message for a failure. message for a failure.
</li> </dd>
</ul> </dl></dd></dl>
</section> </section>
<section anchor="dhcpv6-relay-tree"> <section anchor="dhcpv6-relay-tree">
<name>DHCPv6 Relay Tree Diagram</name> <name>DHCPv6 Relay Tree Diagram</name>
<t>The tree diagram in <xref target="relay-structure"/> provides <t>The tree diagram in <xref target="relay-structure"/> provides
an overview of the DHCPv6 relay module. The tree also includes an overview of the DHCPv6 relay module. The tree also includes
the common functions module defined in the common functions module defined in
<xref target="common-module"/>. <xref target="common-module"/>.
</t> </t>
<t>The RPCs in the module are taken from requirements defined <t>The RPCs in the module are taken from requirements defined
in <xref target="RFC8987"/>. in <xref target="RFC8987"/>.
</t> </t>
<figure anchor="relay-structure"> <figure anchor="relay-structure">
<name>DHCPv6 Relay Data Module Structure</name> <name>DHCPv6 Relay Data Module Structure</name>
<artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6- <sourcecode type="yangtree"><![CDATA[
relay.yang.tree.clean.xml">
<![CDATA[
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
skipping to change at line 740 skipping to change at line 784
| +---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
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
<t>Descriptions of important nodes:</t> <dl newline="true" spacing="normal">
<ul spacing="normal"> <dt>Descriptions of important nodes:</dt>
<li>enabled: Globally enables/disables all DHCPv6 relay <dd><dl>
functions.</li> <dt>enabled:</dt><dd> This globally enables/disables all DHCPv6 relay
<li>dhcpv6-relay: This container holds the relay's functions.</dd>
DHCPv6-specific configuration.</li> <dt>dhcpv6-relay:</dt><dd> This container holds the relay's
<li>relay-if: As a relay may have multiple client-facing DHCPv6-specific configuration.</dd>
interfaces, they are configured in a list. The if-name leaf <dt>relay-if:</dt><dd> 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 is the key and is an interface-ref to the applicable
interface defined by the 'ietf-interfaces' YANG module. interface defined by the 'ietf-interfaces' YANG module.
</li> </dd>
<li>enabled: Enables/disables all DHCPv6 relay <dt>enabled:</dt><dd> This enables/disables all DHCPv6 relay
functions for the specific interface.</li> functions for the specific interface.</dd>
<li>destination-addresses: Defines a list of IPv6 addresses <dt>destination-addresses:</dt><dd> This defines a list of IPv6 addres
that client messages will be relayed to. May include unicast ses
or multicast addresses.</li> that client messages will be relayed to, which may include unicast
<li>link-address: Configures the value that the relay will put or multicast addresses.</dd>
<dt>link-address:</dt><dd> This configures the value that the relay wi
ll put
into the link-address field of Relay-Forward messages. into the link-address field of Relay-Forward messages.
</li> </dd>
<li>prefix-delegation: As prefix delegation is not <dt>prefix-delegation:</dt><dd> As prefix delegation is not
supported by all DHCPv6 relay implementations, it is enabled supported by all DHCPv6 relay implementations, it is enabled
by this feature statement where required.</li> by this feature statement where required.</dd>
<li>pd-leases: Contains read-only nodes for holding <dt>pd-leases:</dt><dd> This contains read-only nodes for holding
information about active delegated prefix leases. information about active delegated prefix leases.
</li> </dd>
<li>relay-options: Holds configuration parameters for DHCPv6 <dt>relay-options:</dt><dd> This holds configuration parameters for DH
options which can be sent by the relay. The initial set of CPv6
applicable option definitions are defined here and 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 additional options that are also relevant to the server
and/or client are imported from the 'ietf-dhcpv6-common' and/or client are imported from the 'ietf-dhcpv6-common'
module. Where needed, other DHCPv6 option modules can be module. Where needed, other DHCPv6 option modules can be
augmented as they are defined. augmented as they are defined.
</li> </dd>
</ul> </dl></dd></dl>
<t>Information about RPCs</t> <dl newline="true" spacing="normal">
<ul spacing="normal"> <dt>Information about RPCs:</dt>
<li>clear-prefix-entry: Allows the removal of a delegated <dd><dl>
<dt>clear-prefix-entry:</dt><dd> This allows the removal of a delegate
d
lease entry from the relay. lease entry from the relay.
</li> </dd>
<li>clear-client-prefixes: Allows the removal of all of the <dt>clear-client-prefixes:</dt><dd> This allows the removal of all of
the
delegated lease entries for a single client (referenced by delegated lease entries for a single client (referenced by
client DUID) from the relay. client DUID) from the relay.
</li> </dd>
<li>clear-interface-prefixes: Allows the removal of all of <dt>clear-interface-prefixes:</dt><dd> This allows the removal of all
of
the delegated lease entries from an interface on the relay. the delegated lease entries from an interface on the relay.
</li> </dd>
</ul> </dl></dd></dl>
<t>Information about notifications:</t> <dl newline="true" spacing="normal">
<ul spacing="normal"> <dt>Information about notifications:</dt>
<li>topology-change: Raised when the topology of the relay <dd><dl>
agent is changed, e.g., a client facing interface is <dt>topology-change:</dt><dd> This is raised when the topology of the
relay
agent is changed, e.g., a client-facing interface is
reconfigured. reconfigured.
</li> </dd>
</ul> </dl></dd></dl>
</section> </section>
<section anchor="dhcpv6-client-tree"> <section anchor="dhcpv6-client-tree">
<name>DHCPv6 Client Tree Diagram</name> <name>DHCPv6 Client Tree Diagram</name>
<t>The tree diagram in <xref target="client-structure"/> <t>The tree diagram in <xref target="client-structure"/>
provides an overview of the DHCPv6 client module. The tree provides an overview of the DHCPv6 client module. The tree
also includes the common functions module defined in also includes the common functions module defined in
<xref target="common-module"/>. <xref target="common-module"/>.
</t> </t>
<figure anchor="client-structure"> <figure anchor="client-structure">
<name>DHCPv6 Client Data Module Structure</name> <name>DHCPv6 Client Data Module Structure</name>
<artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6-
client.yang.tree.clean.xml"> <sourcecode type="yangtree"><![CDATA[
<![CDATA[
module: ietf-dhcpv6-client module: ietf-dhcpv6-client
+--rw dhcpv6-client +--rw dhcpv6-client
+--rw enabled? boolean +--rw enabled? boolean
+--rw client-if* [if-name] +--rw client-if* [if-name]
+--rw if-name if:interface-ref +--rw if-name if:interface-ref
+--rw enabled? boolean +--rw enabled? boolean
+--rw interface-duid? dhc6:duid +--rw interface-duid? dhc6:duid
| {(non-temp-addr or prefix-delegation or temp-addr) an | {(non-temp-addr or prefix-delegation or temp-addr)
d anon-profile}? and anon-profile}?
+--rw client-configured-options +--rw client-configured-options
| +--rw option-request-option | +--rw option-request-option
| | +--rw oro-option* uint16 | | +--rw oro-option* uint16
| +--rw rapid-commit-option! | +--rw rapid-commit-option!
| +--rw user-class-option! | +--rw user-class-option!
| | +--rw user-class-data-instance* | | +--rw user-class-data-instance*
| | [user-class-data-id] | | [user-class-data-id]
| | +--rw user-class-data-id uint8 | | +--rw user-class-data-id uint8
| | +--rw user-class-data? binary | | +--rw user-class-data? binary
| +--rw vendor-class-option | +--rw vendor-class-option
skipping to change at line 934 skipping to change at line 980
+--ro previous-server-duid dhc6:duid +--ro previous-server-duid dhc6:duid
+--ro lease-ia-na? +--ro lease-ia-na?
| -> /dhcpv6-client/client-if/ia-na/ia-id | -> /dhcpv6-client/client-if/ia-na/ia-id
| {non-temp-addr}? | {non-temp-addr}?
+--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}?
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
<t>Descriptions of important nodes:</t> <dl newline="true" spacing="normal">
<ul spacing="normal"> <dt>Descriptions of important nodes:</dt>
<li>enabled: Globally enables/disables all DHCPv6 client <dd><dl>
functions.</li> <dt>enabled:</dt><dd> This globally enables/disables all DHCPv6 client
<li>dhcpv6-client: This container holds the client's DHCPv6 functions.</dd>
specific configuration.</li> <dt>dhcpv6-client:</dt><dd> This container holds the client's
<li>client-if: As a client may have multiple interfaces DHCPv6-specific configuration.</dd>
<dt>client-if:</dt><dd> As a client may have multiple interfaces
requesting configuration over DHCP, they are configured in a requesting configuration over DHCP, they are configured in a
list. The if-name leaf is the key and is an interface-ref to list. The 'if-name' leaf is the key and is an interface-ref to
the applicable interface defined by the 'ietf-interfaces' the applicable interface defined by the 'ietf-interfaces'
YANG module. YANG module.
</li> </dd>
<li>enabled: Enables/disables all DHCPv6 client <dt>enabled:</dt><dd> This enables/disables all DHCPv6 client
function for the specific interface.</li> function for the specific interface.</dd>
<li>client-duid/interface-duid: The DUID (DHCP Unique <dt>client-duid/interface-duid:</dt><dd> The DUID is used to identify
Identifier) is used to identify the client to servers the client to servers
and relays. A DUID consists of a two-octet type field and relays. A 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.
Currently there are four DUID types defined in Currently, there are four DUID types defined in
<xref target="RFC8415"/> and <xref target="RFC6355"/>. The <xref target="RFC8415"/> and <xref target="RFC6355"/>. The
DUID may be configured using the format for one of these DUID may be configured using the format for one of these
types, or using the 'unstructured' format. The DUID type types or using the 'unstructured' format. The DUID type
definitions are imported from the 'ietf-dhcpv6-common.yang' definitions are imported from the 'ietf-dhcpv6-common.yang'
module. <xref target="IANA-HARDWARE-TYPES"/> and module. <xref target="IANA-HARDWARE-TYPES"/> and
<xref target="IANA-PEN"/> are referenced for the relevant <xref target="IANA-PEN"/> are referenced for the relevant
DUID types. A DUID only needs to be configured DUID types. A DUID only needs to be configured
if the client is requesting addresses and/or if the client is requesting addresses and/or
prefixes from the server. Presence of the 'client-duid' or prefixes from the server. Presence of the 'client-duid' or
'interface-duid' leaves is conditional on at least 'interface-duid' leaves is conditional on at least
one of the 'non-temp-addr', 'temp-addr', or one of the 'non-temp-addr', 'temp-addr', or
'prefix-delegation' features being enabled. 'prefix-delegation' features being enabled.
Additionally, if the 'anon-profile' Additionally, if the 'anon-profile'
<xref target="RFC7844"/> feature is enabled, a unique <xref target="RFC7844"/> feature is enabled, a unique
DUID can be configured per DHCP enabled interface DUID can be configured per a DHCP-enabled interface
using the 'interface-duid' leaf, otherwise there is using the 'interface-duid' leaf; otherwise, there is
a global 'client-duid' leaf. a global 'client-duid' leaf.
</li> </dd>
<li>client-configured-options: Holds configuration parameters <dt>client-configured-options:</dt><dd> This holds configuration param
for DHCPv6 options which can be sent by the client. The eters
for DHCPv6 options that can be sent by the client. The
initial set of applicable option definitions are defined initial set of applicable option definitions are defined
here and additional options that are also relevant to the here, and additional options that are also relevant to the
relay and/or server are imported from the relay and/or server are imported from the
'ietf-dhcpv6-common' module. Where needed, other DHCPv6 'ietf-dhcpv6-common' module. Where needed, other DHCPv6
option modules can be augmented as they are defined. option modules can be augmented as they are defined.
</li> </dd>
<li>ia-na, ia-ta, ia-pd: Contains configuration nodes relevant <dt>ia-na, ia-ta, ia-pd:</dt><dd> These contain configuration nodes re
levant
for requesting one or more of each of the lease types. for requesting one or more of each of the lease types.
Read-only nodes related to the active leases for each Read-only nodes related to the active leases for each
type are also located here. As these lease types may not type are also located here. As these lease types may not
be supported by all DHCPv6 client implementations, they be supported by all DHCPv6 client implementations, they
are enabled via individual feature statements. Stateless are enabled via individual feature statements. Stateless
DHCP (<xref target="RFC8415"/> Section 6.1) is configured DHCP (<xref target="RFC8415" section="6.1" sectionFormat="of"/>) is configured
when all address and prefix features are disabled. when all address and prefix features are disabled.
</li> </dd>
</ul> </dl></dd></dl>
<t>Information about notifications:</t> <dl newline="true" spacing="normal">
<ul spacing="normal"> <dt>Information about notifications:</dt>
<li>invalid-ia-detected: Raised when the identity association <dd><dl>
<dt>invalid-ia-detected:</dt><dd> This is raised when the identity ass
ociation
of the client can be proved to be invalid. Possible of the client can be proved to be invalid. Possible
conditions include: duplicated address, illegal address, conditions include duplicated address, illegal address,
etc. etc.
</li> </dd>
<li>retransmission-failed: Raised when the retransmission <dt>retransmission-failed:</dt><dd> This is raised when the retransmis
sion
mechanism defined in <xref target="RFC8415"/> has failed. mechanism defined in <xref target="RFC8415"/> has failed.
</li> </dd>
</ul> </dl></dd></dl>
</section> </section>
</section> </section>
<section anchor="yang-module"> <section anchor="yang-module">
<name>DHCPv6 YANG Modules</name> <name>DHCPv6 YANG Modules</name>
<section anchor="common-module"> <section anchor="common-module">
<name>DHCPv6 Common YANG Module</name> <name>DHCPv6 Common YANG Module</name>
<!-- [rfced] FYI, we have updated the formatting of each YANG module
and YANG example based on pyang output (in Sections 4.1, 4.2, 4.3,
and 4.4, as well as Appendices B, C, and D). Please let us know if
any changes are necessary.
-->
<!--[rfced] In Section 4.1, we note that [RFC3118],
[IANA-DHCPv6-OPTION-CODES], and [IANA-DHCP-AUTH-NAMESPACE] are
only referenced in the YANG module. In order to have a 1:1
matchup between the references section and the text, may we add
these citations to the following sentence that appears before the
YANG module? Please let us know which option is preferred.
Original:
This module imports typedefs from [RFC6991].
Perhaps:
A) This module imports typedefs from [RFC3118] and [RFC6991]. It
also draws on information from [IANA-DHCPv6-OPTION-CODES] and
[IANA-DHCP-AUTH-NAMESPACES].
or
B) This module imports typedefs from [RFC6991]. It also draws
information from [RFC3118], [IANA-DHCPv6-OPTION-CODES], and
[IANA-DHCP-AUTH-NAMESPACES].
-->
<!--[rfced] This IANA registry is referred to as "Status Codes" in
Section 4 and "Option Codes" in the References section.
Please confirm which registry name should be referenced
and we will update the text accordingly.
Original (Section 4.1):
"The numeric code for the status encoded in this option.
See the Status Codes registry at
<https://www.iana.org/assignments/dhcpv6-parameters>
for the current list of status codes.";
Original (Normative References section):
[IANA-DHCPV6-OPTION-CODES]
Internet Assigned Numbers Authority, "DHCPv6 Option
Codes",
<https://www.iana.org/assignments/dhcpv6-parameters>.
-->
<t>This module imports typedefs from <xref target="RFC6991"/>. <t>This module imports typedefs from <xref target="RFC6991"/>.
</t> </t>
<artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6-co
mmon.yang.xml">
<![CDATA[<CODE BEGINS> file "ietf-dhcpv6-common@2022-03-29.yang"
<sourcecode name="ietf-dhcpv6-common@2022-05-04.yang" type="yang" marker s="true"><![CDATA[
module ietf-dhcpv6-common { module ietf-dhcpv6-common {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common";
prefix "dhc6"; prefix "dhc6";
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
skipping to change at line 1053 skipping to change at line 1145
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-29 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "RFC 9243: A YANG Data Model for DHCPv6 Configuration";
} }
typedef threshold { typedef threshold {
type uint8 { type uint8 {
range 1..100; range 1..100;
} }
description description
"Threshold value in percent."; "Threshold value in percent.";
} }
typedef timer-seconds32 { typedef timer-seconds32 {
type uint32; type uint32;
units "seconds"; units "seconds";
description description
"Timer value type, in seconds (32-bit range)."; "Timer value type in seconds (32-bit range).";
} }
typedef duid-base { typedef duid-base {
type string { type string {
pattern '([0-9a-fA-F]{2}){3,130}'; pattern '([0-9a-fA-F]{2}){3,130}';
} }
description description
"Each DHCP server and client has a DUID (DHCP Unique "Each DHCP server and client has a DHCP Unique Identifier
Identifier). The DUID consists of a two-octet type field (DUID). The DUID consists of a 2-octet type field
and an arbitrary length (1-128 octets) content field. and an arbitrary length (1-128 octets) content field.
The duid-base type is used by other duid types with The duid-base type is used by other duid types with
additional pattern constraints. additional pattern constraints.
Currently, there are four defined types of DUIDs Currently, there are four defined types of DUIDs
in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL and in RFCs 8415 and 6355 -- DUID-LLT, DUID-EN, DUID-LL, and
DUID-UUID. DUID-unstructured represents DUIDs which do not DUID-UUID. DUID-unstructured represents DUIDs that do not
follow any of the defined formats. follow any of the defined formats.
Type 'string' is used to represent the hexadecimal DUID value Type 'string' is used to represent the hexadecimal DUID value
so that pattern constraints can be applied."; so that pattern constraints can be applied.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11 IPv6 (DHCPv6), Section 11
RFC 6355: Definition of the UUID-Based DHCPv6 Unique RFC 6355: Definition of the UUID-Based DHCPv6 Unique
Identifier (DUID-UUID), Section 4"; Identifier (DUID-UUID), Section 4";
} }
typedef duid-llt { typedef duid-llt {
type duid-base { type duid-base {
pattern '0001' pattern '0001'
+ '[0-9a-fA-F]{12,}'; + '[0-9a-fA-F]{12,}';
} }
description description
"DUID type 1, based on Link-Layer Address Plus Time "DUID type 1, based on Link-Layer Address Plus Time
(DUID-LLT). Constructed with a 2-octet hardware type assigned (DUID-LLT). Constructed with a 2-octet hardware type assigned
by IANA, 4-octets containing the time the DUID is generated by IANA, 4 octets containing the time the DUID is generated
(represented in seconds since midnight (UTC), January 1, 2000, (represented in seconds since midnight (UTC), January 1, 2000,
modulo 2^32), and a link-layer address. The address is encoded modulo 2^32), and a link-layer address. The address is encoded
without separator characters. For example: without separator characters. For example:
+------+------+----------+--------------+ +------+------+----------+--------------+
| 0001 | 0006 | 28490058 | 00005E005300 | | 0001 | 0006 | 28490058 | 00005E005300 |
+------+------+----------+--------------+ +------+------+----------+--------------+
This example includes the 2-octet DUID type of 1 (0x01), the This example includes the 2-octet DUID type of 1 (0x01); the
hardware type is 0x06 (IEEE Hardware Types) the creation hardware type is 0x06 (IEEE Hardware Types), and the creation
time is 0x28490058 (constructed as described above). Finally, time is 0x28490058 (constructed as described above). Finally,
the link-layer address is 0x5E005300 (EUI-48 address the link-layer address is 0x5E005300 (EUI-48 address
00-00-5E-00-53-00)"; 00-00-5E-00-53-00).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.2 IPv6 (DHCPv6), Section 11.2
IANA 'Hardware Types' registry. IANA 'Hardware Types' registry
<https://www.iana.org/assignments/arp-parameters>"; <https://www.iana.org/assignments/arp-parameters>";
} }
typedef duid-en { typedef duid-en {
type duid-base { type duid-base {
pattern '0002' pattern '0002'
+ '[0-9a-fA-F]{8,}'; + '[0-9a-fA-F]{8,}';
} }
description description
"DUID type 2, assigned by vendor based on Enterprise "DUID type 2, assigned by vendor based on Enterprise
Number (DUID-EN). This DUID consists of the 4-octet vendor's Number (DUID-EN). This DUID consists of the 4-octet vendor's
registered Private Enterprise Number as maintained by IANA registered Private Enterprise Number, as maintained by IANA,
followed by a unique identifier assigned by the vendor. For followed by a unique identifier assigned by the vendor. For
example: example:
+------+----------+------------------+ +------+----------+------------------+
| 0002 | 00007ED9 | 0CC084D303000912 | | 0002 | 00007ED9 | 0CC084D303000912 |
+------+----------+------------------+ +------+----------+------------------+
This example includes the 2-octet DUID type of 2 (0x02), This example includes the 2-octet DUID type of 2 (0x02),
4-octets for the Enterprise Number (0x7ED9), followed by 4 octets for the Enterprise Number (0x7ED9), followed by
8-octets of identifier data (0x0CC084D303000912)."; 8 octets of identifier data (0x0CC084D303000912).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.3 IPv6 (DHCPv6), Section 11.3
IANA 'Private Enterprise Numbers' registry. IANA 'Private Enterprise Numbers' registry
<https://www.iana.org/assignments/enterprise-numbers>"; <https://www.iana.org/assignments/enterprise-numbers>";
} }
typedef duid-ll { typedef duid-ll {
type duid-base { type duid-base {
pattern '0003' pattern '0003'
+ '([0-9a-fA-F]){4,}'; + '([0-9a-fA-F]){4,}';
} }
description description
"DUID type 3, based on Link-Layer Address (DUID-LL). "DUID type 3, based on Link-Layer Address (DUID-LL).
Constructed with a 2-octet hardware type assigned Constructed with a 2-octet hardware type assigned
by IANA, and a link-layer address. The address is encoded by IANA and a link-layer address. The address is encoded
without separator characters. For example: without separator characters. For example:
+------+------+--------------+ +------+------+--------------+
| 0003 | 0006 | 00005E005300 | | 0003 | 0006 | 00005E005300 |
+------+------+--------------+ +------+------+--------------+
This example includes the 2-octet DUID type of 3 (0x03), the This example includes the 2-octet DUID type of 3 (0x03); the
hardware type is 0x06 (IEEE Hardware Types), and the hardware type is 0x06 (IEEE Hardware Types), and the
link-layer address is 0x5E005300 (EUI-48 address link-layer address is 0x5E005300 (EUI-48 address
00-00-5E-00-53-00)"; 00-00-5E-00-53-00).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.4 IPv6 (DHCPv6), Section 11.4
IANA 'Hardware Types' registry. IANA 'Hardware Types' registry
<https://www.iana.org/assignments/arp-parameters>"; <https://www.iana.org/assignments/arp-parameters>";
} }
typedef duid-uuid { typedef duid-uuid {
type duid-base { type duid-base {
pattern '0004' pattern '0004'
+ '[0-9a-fA-F]{32}'; + '[0-9a-fA-F]{32}';
} }
description description
"DUID type 4, based on Universally Unique Identifier "DUID type 4, based on Universally Unique Identifier
(DUID-UUID). This type of DUID consists of 16 octets (DUID-UUID). This type of DUID consists of 16 octets
containing a 128-bit UUID. For example: containing a 128-bit UUID. For example:
+------+----------------------------------+ +------+----------------------------------+
| 0004 | 9f03b182705747e38a1e422910078642 | | 0004 | 9f03b182705747e38a1e422910078642 |
+------+----------------------------------+ +------+----------------------------------+
This example includes the 2-octet DUID type of 4 (0x04), and This example includes the 2-octet DUID type of 4 (0x04) and
the UUID 9f03b182-7057-47e3-8a1e-422910078642."; the UUID 9f03b182-7057-47e3-8a1e-422910078642.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.5 IPv6 (DHCPv6), Section 11.5
RFC 6355: Definition of the UUID-Based DHCPv6 Unique RFC 6355: Definition of the UUID-Based DHCPv6 Unique
Identifier (DUID-UUID)"; Identifier (DUID-UUID)";
} }
typedef duid-unstructured { typedef duid-unstructured {
type duid-base { type duid-base {
pattern '(000[1-4].*)' { pattern '(000[1-4].*)' {
modifier invert-match; modifier invert-match;
} }
} }
description description
"Used for DUIDs following any other formats than DUID "Used for DUIDs following any formats other than DUID
types 1-4. For example: types 1-4. For example:
+----------------------------------+ +----------------------------------+
| 7b6a164d325946539dc540fb539bc430 | | 7b6a164d325946539dc540fb539bc430 |
+----------------------------------+ +----------------------------------+
Here, an arbitrary 16-octet value is used. The only constraint Here, an arbitrary 16-octet value is used. The only constraint
placed on this is that the first 2-octects are not 0x01-0x04 placed on this is that the first 2 octets are not 0x01-0x04
to avoid collision with the other defined DUID types to avoid collision with the other defined DUID types
(duid-llt, duid-en, duid-ll, or duid-uuid)."; (duid-llt, duid-en, duid-ll, or duid-uuid).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
typedef duid { typedef duid {
type union { type union {
type duid-llt; type duid-llt;
type duid-en; type duid-en;
skipping to change at line 1246 skipping to change at line 1338
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
/* /*
* Groupings * Groupings
*/ */
grouping status { grouping status {
description description
"Holds information about the most recent status code which "Holds information about the most recent status code that
has been sent by the server or received by the client."; has been sent by the server or received by the client.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 7.5."; for IPv6 (DHCPv6), Section 7.5.";
container status { container status {
description description
"Status code information, relating to the success or failure "Status code information, relating to the success or failure
of operations requested in messages."; of operations requested in messages.";
leaf code { leaf code {
type uint16; type uint16;
description description
"The numeric code for the status encoded in this option. "The numeric code for the status encoded in this option.
See the Status Codes registry at See the 'Status Codes' registry at
<https://www.iana.org/assignments/dhcpv6-parameters> <https://www.iana.org/assignments/dhcpv6-parameters>
for the current list of status codes."; for the current list of status codes.";
} }
leaf message { leaf message {
type string; type string;
description description
"A UTF-8 encoded text string suitable for display to an "A UTF-8-encoded text string suitable for display to an
end user. It MUST NOT be null-terminated."; end user. It MUST NOT be null terminated.";
} }
} }
} }
grouping auth-option-group { grouping auth-option-group {
description description
"OPTION_AUTH (11) Authentication Option."; "OPTION_AUTH (11) Authentication Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.11 for IPv6 (DHCPv6), Section 21.11
RFC 3118: Authentication for DHCP Messages RFC 3118: Authentication for DHCP Messages
IANA 'Dynamic Host Configuration Protocol (DHCP) IANA 'Dynamic Host Configuration Protocol (DHCP)
Authentication Option Name Spaces' registry. Authentication Option Name Spaces' registry
<https://www.iana.org/assignments/auth-namespaces>"; <https://www.iana.org/assignments/auth-namespaces>";
container auth-option { container auth-option {
description description
"OPTION_AUTH (11) Authentication Option."; "OPTION_AUTH (11) Authentication Option.";
leaf algorithm { leaf algorithm {
type uint8; type uint8;
description description
"The algorithm used in the authentication protocol."; "The algorithm used in the authentication protocol.";
} }
leaf rdm { leaf rdm {
skipping to change at line 1301 skipping to change at line 1393
"The Replay Detection Method (RDM) used in this "The Replay Detection Method (RDM) used in this
Authentication option."; Authentication option.";
} }
leaf replay-detection { leaf replay-detection {
type uint64; type uint64;
description description
"The replay detection information for the RDM."; "The replay detection information for the RDM.";
} }
choice protocol { choice protocol {
description description
"The authentication protocol used in the option. Namespace "The authentication protocol used in the option. Protocol
values 1 (delayed authentication) and 2 (Delayed Namespace Values 1 (delayed authentication) and 2 (Delayed
Authentication (Obsolete) are not applicable and so are Authentication (Obsolete)) are not applicable and so are
not modeled."; not modeled.";
case conf-token { case conf-token {
leaf token-auth-information { leaf token-auth-information {
type binary; type binary;
description description
"Protocol Namespace Value 0. The authentication "Protocol Namespace Value 0. The authentication
information, as specified by the protocol and information, as specified by the protocol and
algorithm used in this Authentication option."; algorithm used in this Authentication option.";
} }
} }
case rkap { case rkap {
description description
"Protocol Namespace Value 3. RKAP provides protection "Protocol Namespace Value 3. The Reconfigure Key
against misconfiguration of a client caused by a Authentication Protocol (RKAP) provides protection against
Reconfigure message sent by a malicious DHCP server."; misconfiguration of a client caused by a Reconfigure
message sent by a malicious DHCP server.";
leaf datatype { leaf datatype {
type uint8 { type uint8 {
range "1 .. 2"; range "1 .. 2";
} }
description description
"Type of data in the Value field carried in this "Type of data in the Value field carried in this
option. option.
1 Reconfigure key value (used in the Reply 1 Reconfigure key value (used in the Reply
message). message).
2 HMAC-MD5 digest of the message (used in 2 HMAC-MD5 digest of the message (used in
the Reconfigure message)."; the Reconfigure message).";
} }
leaf auth-info-value { leaf auth-info-value {
type binary { type binary {
length 16; length 16;
} }
description description
"Data as defined by the Type field. A 16-octet field."; "Data, as defined by the Type field. A 16-octet field.";
} }
} }
} }
} }
} }
grouping rapid-commit-option-group { grouping rapid-commit-option-group {
description description
"OPTION_RAPID_COMMIT (14) Rapid Commit Option."; "OPTION_RAPID_COMMIT (14) Rapid Commit Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
skipping to change at line 1368 skipping to change at line 1461
Option."; Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.17"; for IPv6 (DHCPv6), Section 21.17";
container vendor-specific-information-options { container vendor-specific-information-options {
description description
"OPTION_VENDOR_OPTS (17) Vendor-specific Information "OPTION_VENDOR_OPTS (17) Vendor-specific Information
Option."; Option.";
list vendor-specific-information-option { list vendor-specific-information-option {
key enterprise-number; key enterprise-number;
description description
"The Vendor-specific Information option allows for "The Vendor-specific Information Option allows for
multiple instances in a single message. Each list entry multiple instances in a single message. Each list entry
defines the contents of an instance of the option."; defines the contents of an instance of the option.";
leaf enterprise-number { leaf enterprise-number {
type uint32; type uint32;
description description
"The vendor's registered Enterprise Number, as "The vendor's registered Enterprise Number, as
maintained by IANA."; maintained by IANA.";
reference "IANA 'Private Enterprise Numbers' registry. reference "IANA 'Private Enterprise Numbers' registry
<https://www.iana.org/assignments/enterprise-numbers>"; <https://www.iana.org/assignments/enterprise-numbers>";
} }
list vendor-option-data { list vendor-option-data {
key sub-option-code; key sub-option-code;
description description
"Vendor options, interpreted by vendor-specific "Vendor options, interpreted by vendor-specific
client/server functions."; client/server functions.";
leaf sub-option-code { leaf sub-option-code {
type uint16; type uint16;
description description
skipping to change at line 1402 skipping to change at line 1495
"The data area for the sub-option."; "The data area for the sub-option.";
} }
} }
} }
} }
} }
grouping reconfigure-accept-option-group { grouping reconfigure-accept-option-group {
description description
"OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option.
A client uses the Reconfigure Accept option to announce to A client uses the Reconfigure Accept Option to announce to
the server whether the client is willing to accept Reconfigure the server whether or not the client is willing to accept
messages, and a server uses this option to tell the client Reconfigure messages, and a server uses this option to tell
whether or not to accept Reconfigure messages. In the absence the client whether or not to accept Reconfigure messages. In
of this option, the default behavior is that the client is the absence of this option, the default behavior is that the
unwilling to accept Reconfigure messages. The presence node client is unwilling to accept Reconfigure messages. The
is used to enable the option."; presence node is used to enable the option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.20"; for IPv6 (DHCPv6), Section 21.20";
container reconfigure-accept-option { container reconfigure-accept-option {
presence "Enable sending of this option"; presence "Enable sending of this option";
description description
"OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option."; "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option.";
} }
} }
} }
<CODE ENDS>]]> ]]></sourcecode>
</artwork>
</section> </section>
<section anchor="server-module"> <section anchor="server-module">
<name>DHCPv6 Server YANG Module</name> <name>DHCPv6 Server YANG Module</name>
<t>This module imports typedefs from <xref target="RFC6991"/>,
<xref target="RFC8343"/>.</t>
<artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6-se
rver.yang.xml">
<![CDATA[<CODE BEGINS> file "ietf-dhcpv6-server@2022-03-29.yang"
<!--[rfced] In Section 4.2, we note that RFC 2277 only has citations
in the YANG module. In order to have a 1:1 matchup between the
references section and the text, may we add RFC 2277 to the
following sentence that appears before the YANG module? If so, please
let us know which option is agreeable.
Original:
This module imports typedefs from [RFC6991], [RFC8343].
Perhaps:
A) This module imports typedefs from [RFC2277], [RFC6991], and [RFC8343].
or
B) This module imports typedefs from [RFC6991] and [RFC8343]. It also
draws information from [RFC2777].
-->
<!--[rfced] In Section 4.3, please clarify if "OPTION_INF_MAX_RT (83)
inf max rt Option" is correct or if it should perhaps be
"OPTION_INF_MAX_RT (83) INF_MAX_RT Option" for consistency.
Original:
grouping inf-max-rt-option-group {
description
"OPTION_INF_MAX_RT (83) INF_MAX_RT Option (Max
Information-request timeout value).";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.25";
container inf-max-rt-option {
description
"OPTION_INF_MAX_RT (83) inf max rt Option.";
Perhaps:
grouping inf-max-rt-option-group {
description
"OPTION_INF_MAX_RT (83) INF_MAX_RT Option (Max
Information-request timeout value).";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.25";
container inf-max-rt-option {
description
"OPTION_INF_MAX_RT (83) INF_MAX_RT Option.";
-->
<t>This module imports typedefs from <xref target="RFC6991"/> and
<xref target="RFC8343"/>.</t>
<sourcecode name="ietf-dhcpv6-server@2022-05-04.yang" type="yang" marker
s="true"><![CDATA[
module ietf-dhcpv6-server { module ietf-dhcpv6-server {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server";
prefix "dhc6-srv"; prefix "dhc6-srv";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-dhcpv6-common { import ietf-dhcpv6-common {
prefix dhc6; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC 9243: A YANG Data Model for DHCPv6 Configuration";
} }
import ietf-netconf-acm { import ietf-netconf-acm {
prefix nacm; prefix nacm;
reference reference
"RFC 8341: Network Configuration Access Control Model"; "RFC 8341: Network Configuration Access Control Model";
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
skipping to change at line 1484 skipping to change at line 1620
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-29 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Features * Features
*/ */
feature na-assignment { feature na-assignment {
description description
"Denotes that the server implements DHCPv6 non-temporary "Denotes that the server implements DHCPv6 non-temporary
address assignment."; address assignment.";
skipping to change at line 1528 skipping to change at line 1664
grouping resource-config { grouping resource-config {
description description
"Nodes that are reused at multiple levels in the DHCPv6 "Nodes that are reused at multiple levels in the DHCPv6
server's addressing hierarchy."; server's addressing hierarchy.";
leaf-list option-set-id { leaf-list option-set-id {
type leafref { type leafref {
path "/dhcpv6-server/option-sets/option-set/option-set-id"; path "/dhcpv6-server/option-sets/option-set/option-set-id";
} }
description description
"The ID field of relevant set of DHCPv6 options (option-set) "The ID field of the relevant set of DHCPv6 options
to be provisioned to clients using the allocation-range."; (option-set) to be provisioned to clients using the
allocation-range.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"Valid lifetime for the Identity Association (IA)."; "Valid lifetime for the Identity Association (IA).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 12.1"; IPv6 (DHCPv6), Section 12.1";
} }
leaf renew-time { leaf renew-time {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
skipping to change at line 1555 skipping to change at line 1692
leaf rebind-time { leaf rebind-time {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"Rebind (T2) time."; "Rebind (T2) time.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 4.2"; IPv6 (DHCPv6), Section 4.2";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"Preferred lifetime for the Identity Association (IA)."; "Preferred lifetime for the IA.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 12.1"; IPv6 (DHCPv6), Section 12.1";
} }
leaf rapid-commit { leaf rapid-commit {
type boolean; type boolean;
description description
"When set to 'true', Specifies that client-server exchanges "When set to 'true', specifies that client-server exchanges
involving two messages is supported."; involving two messages is supported.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 5.1"; IPv6 (DHCPv6), Section 5.1";
} }
} }
grouping lease-information { grouping lease-information {
description description
"Binding information for each client that has been allocated "Binding information for each client that has been allocated
an IPv6 address or prefix."; an IPv6 address or prefix.";
skipping to change at line 1584 skipping to change at line 1721
type dhc6:duid; type dhc6:duid;
description description
"Client DUID."; "Client DUID.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
leaf ia-id { leaf ia-id {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"Client's IAID"; "Client's Identity Association IDentifier (IAID).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 12"; IPv6 (DHCPv6), Section 12";
} }
leaf allocation-time { leaf allocation-time {
type yang:date-and-time; type yang:date-and-time;
description description
"Time and date that the lease was made."; "Time and date that the lease was made.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18"; IPv6 (DHCPv6), Section 18";
} }
skipping to change at line 1622 skipping to change at line 1759
"The valid lifetime for the lease expressed in seconds."; "The valid lifetime for the lease expressed in seconds.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6"; IPv6 (DHCPv6), Section 6";
} }
leaf lease-t1 { leaf lease-t1 {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"The time interval after which the client should contact "The time interval after which the client should contact
the server from which the addresses in the IA_NA were the server from which the addresses in the IA_NA were
obtained to extend the lifetimes of the addresses assigned obtained to extend the lifetimes of the addresses assigned
to the IA_PD."; to the Identity Association for Prefix Delegation (IA_PD).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 4.2"; IPv6 (DHCPv6), Section 4.2";
} }
leaf lease-t2 { leaf lease-t2 {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"The time interval after which the client should contact "The time interval after which the client should contact
any available server to extend the lifetimes of the any available server to extend the lifetimes of the
addresses assigned to the IA_PD."; addresses assigned to the IA_PD.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
skipping to change at line 1738 skipping to change at line 1875
description description
"OPTION_PREFERENCE (7) Preference Option."; "OPTION_PREFERENCE (7) Preference Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.8"; IPv6 (DHCPv6), Section 21.8";
container preference-option { container preference-option {
description description
"OPTION_PREFERENCE (7) Preference Option."; "OPTION_PREFERENCE (7) Preference Option.";
leaf pref-value { leaf pref-value {
type uint8; type uint8;
description description
"The preference value for the server in this message. A "The preference value for the server in this message. A
1-octet unsigned integer."; 1-octet unsigned integer.";
} }
} }
} }
grouping server-unicast-option-group { grouping server-unicast-option-group {
description description
"OPTION_UNICAST (12) Server Unicast Option."; "OPTION_UNICAST (12) Server Unicast Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.12"; IPv6 (DHCPv6), Section 21.12";
skipping to change at line 1772 skipping to change at line 1909
description description
"OPTION_RECONF_MSG (19) Reconfigure Message Option."; "OPTION_RECONF_MSG (19) Reconfigure Message Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.19"; IPv6 (DHCPv6), Section 21.19";
container reconfigure-message-option { container reconfigure-message-option {
description description
"OPTION_RECONF_MSG (19) Reconfigure Message Option."; "OPTION_RECONF_MSG (19) Reconfigure Message Option.";
leaf msg-type { leaf msg-type {
type uint8; type uint8;
description description
"5 for Renew message, 6 for Rebind message, 11 for "5 for Renew message, 6 for Rebind message, and 11 for
Information-request message."; Information-request message.";
} }
} }
} }
grouping info-refresh-time-option-group { grouping info-refresh-time-option-group {
description description
"OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh
Time Option."; Time Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
skipping to change at line 1856 skipping to change at line 1993
leaf server-duid { leaf server-duid {
type dhc6:duid; type dhc6:duid;
description description
"DUID of the server."; "DUID of the server.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
container vendor-config { container vendor-config {
description description
"This container provides a location for augmenting vendor "This container provides a location for augmenting vendor
or implementation specific configuration nodes."; or implementation-specific configuration nodes.";
} }
container option-sets { container option-sets {
description description
"A server may allow different option sets to be configured "A server may allow different option sets to be configured
for clients matching specific parameters such as topological for clients matching specific parameters, such as topological
location or client type. The 'option-set' list is a set of location or client type. The 'option-set' list is a set of
options and their contents that will be returned to options and their contents that will be returned to
clients."; clients.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21"; IPv6 (DHCPv6), Section 21";
list option-set { list option-set {
key option-set-id; key option-set-id;
description description
"YANG definitions for DHCPv6 options are contained in "YANG definitions for DHCPv6 options are contained in
separate YANG modules and augmented to this container as separate YANG modules and augmented to this container as
required."; required.";
skipping to change at line 1903 skipping to change at line 2040
uses inf-max-rt-option-group; uses inf-max-rt-option-group;
} }
} }
container class-selector { container class-selector {
description description
"DHCPv6 servers use a 'class-selector' function in order "DHCPv6 servers use a 'class-selector' function in order
to identify and classify incoming client messages to identify and classify incoming client messages
so that they can be given the correct configuration. so that they can be given the correct configuration.
The mechanisms used for implementing this function vary The mechanisms used for implementing this function vary
greatly between different implementations such it is not greatly between different implementations; as such, it is
possible to include in this module. This container provides not possible to include them in this module. This container
a location for server implementors to augment their own provides a location for server implementors to augment their
class-selector YANG."; own class-selector YANG.";
} }
container allocation-ranges { container allocation-ranges {
description description
"This model is based on an address and parameter "This model is based on an address and parameter
allocation hierarchy. The top level is 'global' - which allocation hierarchy. The top level is 'global' -- which
is defined as the container for all allocation-ranges. Under is defined as the container for all allocation-ranges. Under
this are the individual allocation-ranges."; this are the individual allocation-ranges.";
uses resource-config; uses resource-config;
list allocation-range { list allocation-range {
key id; key id;
description description
"Network-ranges are identified by the 'id' key."; "Network ranges are identified by the 'id' key.";
leaf id { leaf id {
type string; type string;
mandatory true; mandatory true;
description description
"Unique identifier for the allocation range."; "Unique identifier for the allocation range.";
} }
leaf description { leaf description {
type string; type string;
description description
"Description for the allocation range."; "Description for the allocation range.";
skipping to change at line 1958 skipping to change at line 2095
leaf pool-id { leaf pool-id {
type string; type string;
mandatory true; mandatory true;
description description
"Unique identifier for the pool."; "Unique identifier for the pool.";
} }
leaf pool-prefix { leaf pool-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description description
"IPv6 prefix for the pool. Should be contained "IPv6 prefix for the pool. Should be contained
within the network-prefix, if configured."; within the network-prefix if configured.";
} }
leaf start-address { leaf start-address {
type inet:ipv6-address-no-zone; type inet:ipv6-address-no-zone;
mandatory true; mandatory true;
description description
"Starting IPv6 address for the pool."; "Starting IPv6 address for the pool.";
} }
leaf end-address { leaf end-address {
type inet:ipv6-address-no-zone; type inet:ipv6-address-no-zone;
mandatory true; mandatory true;
description description
"Ending IPv6 address for the pool."; "Ending IPv6 address for the pool.";
} }
leaf max-address-utilization { leaf max-address-utilization {
type dhc6:threshold; type dhc6:threshold;
description description
"Maximum amount of the addresses in the "Maximum amount of the addresses in the
pool which can be simultaneously allocated, pool that can be simultaneously allocated,
calculated as a percentage of the available calculated as a percentage of the available
addresses (end-address minus start-address plus addresses (end-address minus start-address plus
one), rouded up. Used to set the value for the one), and rounded up. Used to set the value for
address-pool-utilization-threshold-exceeded the address-pool-utilization-threshold-exceeded
notification"; notification.";
} }
uses resource-config; uses resource-config;
container host-reservations { container host-reservations {
description description
"Configuration for host reservations from the "Configuration for host reservations from the
address pool."; address pool.";
list host-reservation { list host-reservation {
key reserved-addr; key reserved-addr;
description description
"List of host reservations."; "List of host reservations.";
skipping to change at line 2057 skipping to change at line 2194
leaf pool-id { leaf pool-id {
type string; type string;
mandatory true; mandatory true;
description description
"Unique identifier for the pool."; "Unique identifier for the pool.";
} }
leaf pool-prefix { leaf pool-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
mandatory true; mandatory true;
description description
"IPv6 prefix for the pool. Should be contained "IPv6 prefix for the pool. Should be contained
within the network-prefix, if configured."; within the network-prefix if configured.";
} }
leaf client-prefix-length { leaf client-prefix-length {
type uint8 { type uint8 {
range "1 .. 128"; range "1 .. 128";
} }
mandatory true; mandatory true;
description description
"Length of the prefixes that will be delegated "Length of the prefixes that will be delegated
to clients."; to clients.";
} }
leaf max-pd-space-utilization { leaf max-pd-space-utilization {
type dhc6:threshold; type dhc6:threshold;
description description
"Maximum amount of the prefixes in the pool which "Maximum amount of the prefixes in the pool that
can be simultaneously allocated, calculated as a can be simultaneously allocated, calculated as a
percentage of the available prefixes, rounded up. percentage of the available prefixes, and rounded up.
Used to set the value for the Used to set the value for the
prefix-pool-utilization-threshold-exceeded prefix-pool-utilization-threshold-exceeded
notification"; notification.";
} }
uses resource-config; uses resource-config;
container host-reservations { container host-reservations {
description description
"Configuration for host reservations from the "Configuration for host reservations from the
prefix pool."; prefix pool.";
list prefix-reservation { list prefix-reservation {
key reserved-prefix; key reserved-prefix;
description description
"Reserved prefix reservation."; "Reserved prefix reservation.";
leaf client-duid { leaf client-duid {
type dhc6:duid; type dhc6:duid;
description description
"Client DUID for the reservation."; "Client DUID for the reservation.";
} }
leaf reserved-prefix { leaf reserved-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"Reserved IPv6 prefix"; "Reserved IPv6 prefix.";
} }
leaf reserved-prefix-len { leaf reserved-prefix-len {
type uint8; type uint8;
description description
"Reserved IPv6 prefix length."; "Reserved IPv6 prefix length.";
} }
} }
uses resource-config; uses resource-config;
} }
container active-leases { container active-leases {
skipping to change at line 2156 skipping to change at line 2293
/* /*
* RPCs * RPCs
*/ */
rpc delete-address-lease { rpc delete-address-lease {
nacm:default-deny-all; nacm:default-deny-all;
if-feature na-assignment; if-feature na-assignment;
description description
"Deletes a client's active address lease from the server's "Deletes a client's active address lease from the server's
lease database. Note this will not cause the address to be lease database. Note that this will not cause the address
revoked from the client, and the lease may be refreshed or to be revoked from the client, and the lease may be refreshed
renewed by the client."; or renewed by the client.";
input { input {
leaf lease-address-to-delete { leaf lease-address-to-delete {
type leafref { type leafref {
path "/dhcpv6-server/allocation-ranges/" + path "/dhcpv6-server/allocation-ranges/" +
"allocation-range/address-pools/address-pool" + "allocation-range/address-pools/address-pool" +
"/active-leases/active-lease/leased-address"; "/active-leases/active-lease/leased-address";
} }
mandatory true; mandatory true;
description description
"IPv6 address of an active lease that will be "IPv6 address of an active lease that will be
deleted from the server."; deleted from the server.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a "Response message from the server. If available, a
language identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
rpc delete-prefix-lease { rpc delete-prefix-lease {
nacm:default-deny-all; nacm:default-deny-all;
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Deletes a client's active prefix lease from the server's "Deletes a client's active prefix lease from the server's
lease database. Note, this will not cause the prefix to be lease database. Note that this will not cause the prefix
revoked from the client, and the lease may be refreshed or to be revoked from the client, and the lease may be refreshed
renewed by the client."; or renewed by the client.";
input { input {
leaf lease-prefix-to-delete { leaf lease-prefix-to-delete {
type leafref { type leafref {
path "/dhcpv6-server/allocation-ranges/" + path "/dhcpv6-server/allocation-ranges/" +
"allocation-range/prefix-pools/prefix-pool" + "allocation-range/prefix-pools/prefix-pool" +
"/active-leases/active-lease/leased-prefix"; "/active-leases/active-lease/leased-prefix";
} }
mandatory true; mandatory true;
description description
"IPv6 prefix of an active lease that will be deleted "IPv6 prefix of an active lease that will be deleted
from the server."; from the server.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a "Response message from the server. If available, a
language identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
/* /*
* Notifications * Notifications
*/ */
notification address-pool-utilization-threshold-exceeded { notification address-pool-utilization-threshold-exceeded {
if-feature na-assignment; if-feature na-assignment;
skipping to change at line 2250 skipping to change at line 2387
mandatory true; mandatory true;
description description
"Total number of addresses in the pool (end-address minus "Total number of addresses in the pool (end-address minus
start-address plus one)."; start-address plus one).";
} }
leaf max-allocated-addresses { leaf max-allocated-addresses {
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Maximum number of addresses that can be simultaneously "Maximum number of addresses that can be simultaneously
allocated from the pool. This value may be less than count allocated from the pool. This value may be less than the
of total addresses. Calculated as the count of total addresses. Calculated as the
max-address-utilization (percentage) of the max-address-utilization (percentage) of the
total-pool-addresses, rounded up."; total-pool-addresses and rounded up.";
} }
leaf allocated-address-count { leaf allocated-address-count {
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Number of addresses allocated from the pool."; "Number of addresses allocated from the pool.";
} }
} }
notification prefix-pool-utilization-threshold-exceeded { notification prefix-pool-utilization-threshold-exceeded {
skipping to change at line 2289 skipping to change at line 2426
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Total number of prefixes in the pool."; "Total number of prefixes in the pool.";
} }
leaf max-allocated-prefixes { leaf max-allocated-prefixes {
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Maximum number of prefixes that can be simultaneously "Maximum number of prefixes that can be simultaneously
allocated from the pool. This value may be less than allocated from the pool. This value may be less than
count of total prefixes. Calculated as the the count of total prefixes. Calculated as the
max-prefix-utilization (percentage) of the max-prefix-utilization (percentage) of the
total-pool-prefixes, rounded up."; total-pool-prefixes and rounded up.";
} }
leaf allocated-prefixes-count { leaf allocated-prefixes-count {
type uint64; type uint64;
mandatory true; mandatory true;
description description
"Number of prefixes allocated from the pool."; "Number of prefixes allocated from the pool.";
} }
} }
notification invalid-client-detected { notification invalid-client-detected {
skipping to change at line 2404 skipping to change at line 2541
"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>]]> ]]></sourcecode>
</artwork>
</section> </section>
<section anchor="relay-module"> <section anchor="relay-module">
<name>DHCPv6 Relay YANG Module</name> <name>DHCPv6 Relay YANG Module</name>
<t>This module imports typedefs from <xref target="RFC6991"/>, <t>This module imports typedefs from <xref target="RFC6991"/> and
<xref target="RFC8343"/>. <xref target="RFC8343"/>.
</t> </t>
<artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6-re <sourcecode name="ietf-dhcpv6-relay@2022-05-04.yang" type="yang" markers
lay.yang.xml"> ="true"><![CDATA[
<![CDATA[<CODE BEGINS> file "ietf-dhcpv6-relay@2022-03-29.yang"
module ietf-dhcpv6-relay { module ietf-dhcpv6-relay {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay";
prefix "dhc6-rly"; prefix "dhc6-rly";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-dhcpv6-common { import ietf-dhcpv6-common {
prefix dhc6; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC 9243: A YANG Data Model for DHCPv6 Configuration";
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
reference reference
"RFC 8343: A YANG Data Model for Interface Management"; "RFC 8343: A YANG Data Model for Interface Management";
} }
import ietf-netconf-acm { import ietf-netconf-acm {
prefix nacm; prefix nacm;
reference reference
"RFC 8341: Network Configuration Access Control Model"; "RFC 8341: Network Configuration Access Control Model";
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
skipping to change at line 2483 skipping to change at line 2617
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-29 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Features * Features
*/ */
feature prefix-delegation { feature prefix-delegation {
description description
"Enable if the relay functions as a delegating router for "Enable if the relay functions as a delegating router for
DHCPv6 prefix delegation."; DHCPv6 prefix delegation.";
skipping to change at line 2747 skipping to change at line 2881
type boolean; type boolean;
description description
"Enables the DHCP relay function for this interface."; "Enables the DHCP relay function for this interface.";
} }
leaf-list destination-address { leaf-list destination-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Each DHCPv6 relay agent may be configured with a list "Each DHCPv6 relay agent may be configured with a list
of destination addresses for relayed messages. of destination addresses for relayed messages.
The list may include unicast addresses, multicast The list may include unicast addresses, multicast
addresses or other valid addresses."; addresses, or other valid addresses.";
} }
leaf link-address { leaf link-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"An address that may be used by the server to identify "An address that may be used by the server to identify
the link on which the client is located."; the link on which the client is located.";
} }
container relay-options { container relay-options {
description description
"Definitions for DHCPv6 options that can be sent "Definitions for DHCPv6 options that can be sent
skipping to change at line 2794 skipping to change at line 2928
/* /*
* RPCs * RPCs
*/ */
rpc clear-prefix-entry { rpc clear-prefix-entry {
nacm:default-deny-all; nacm:default-deny-all;
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Clears an entry for an active delegated prefix "Clears an entry for an active delegated prefix
from the relay."; from the relay.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4"; Section 4.4";
input { input {
leaf lease-prefix { leaf lease-prefix {
type leafref { type leafref {
path "/dhcpv6-relay/relay-if/prefix-delegation" + path "/dhcpv6-relay/relay-if/prefix-delegation" +
"/pd-leases/ia-pd-prefix"; "/pd-leases/ia-pd-prefix";
} }
mandatory true; mandatory true;
description description
"IPv6 prefix of an active lease entry that will "IPv6 prefix of an active lease entry that will
be deleted from the relay."; be deleted from the relay.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a language "Response message from the server. If available, a
identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
rpc clear-client-prefixes { rpc clear-client-prefixes {
nacm:default-deny-all; nacm:default-deny-all;
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Clears all active prefix entries for a single client."; "Clears all active prefix entries for a single client.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4"; Section 4.4";
input { input {
leaf client-duid { leaf client-duid {
type dhc6:duid; type dhc6:duid;
mandatory true; mandatory true;
description description
"DUID of the client."; "DUID of the client.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a "Response message from the server. If available, a
language identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
rpc clear-interface-prefixes { rpc clear-interface-prefixes {
nacm:default-deny-all; nacm:default-deny-all;
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Clears all delegated prefix bindings from an "Clears all delegated prefix bindings from an
interface on the relay."; interface on the relay.";
reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, reference "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements,
Section 4.4"; Section 4.4";
input { input {
leaf interface { leaf interface {
type leafref { type leafref {
path "/dhcpv6-relay/relay-if/if-name"; path "/dhcpv6-relay/relay-if/if-name";
} }
mandatory true; mandatory true;
description description
"Reference to the relay interface that will have all "Reference to the relay interface that will have all
active prefix delegation bindings deleted."; active prefix delegation bindings deleted.";
} }
} }
output { output {
leaf return-message { leaf return-message {
type string; type string;
description description
"Response message from the server. If available, a "Response message from the server. If available, a
language identifier should be included in the message."; language identifier should be included in the message.";
reference "BCP 14 (RFC 2277) IETF Policy on Character Sets reference "BCP 18 (RFC 2277) IETF Policy on Character Sets
and Languages, Section 4.2."; and Languages, Section 4.2";
} }
} }
} }
/* /*
* Notifications * Notifications
*/ */
notification relay-event { notification relay-event {
description description
"DHCPv6 relay event notifications."; "DHCPv6 relay event notifications.";
container topology-change { container topology-change {
description description
"Raised if the entry for an interface with DHCPv6 related "Raised if the entry for an interface with DHCPv6-related
configuration or state is removed from if:interface-refs."; configuration or state is removed from if:interface-refs.";
leaf relay-if-name { leaf relay-if-name {
type leafref { type leafref {
path "/dhcpv6-relay/relay-if/if-name"; path "/dhcpv6-relay/relay-if/if-name";
} }
description description
"Name of the interface that has been removed."; "Name of the interface that has been removed.";
} }
leaf last-ipv6-addr { leaf last-ipv6-addr {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Last IPv6 address configured on the interface."; "Last IPv6 address configured on the interface.";
} }
} }
} }
} }
<CODE ENDS>]]> ]]></sourcecode>
</artwork>
</section> </section>
<section anchor="client-module"> <section anchor="client-module">
<name>DHCPv6 Client YANG Module</name> <name>DHCPv6 Client YANG Module</name>
<t>This module imports typedefs from <xref target="RFC6991"/>, <t>This module imports typedefs from <xref target="RFC6991"/> and
<xref target="RFC8343"/>.</t> <xref target="RFC8343"/>.</t>
<artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6-cl <sourcecode name="ietf-dhcpv6-client@2022-05-04.yang" type="yang" marker
ient.yang.xml"> s="true"><![CDATA[
<![CDATA[<CODE BEGINS> file "ietf-dhcpv6-client@2022-03-29.yang"
module ietf-dhcpv6-client { module ietf-dhcpv6-client {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client";
prefix "dhc6-clnt"; prefix "dhc6-clnt";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
import ietf-dhcpv6-common { import ietf-dhcpv6-common {
prefix dhc6; prefix dhc6;
reference reference
"RFC XXXX: To be updated on publication"; "RFC 9243: A YANG Data Model for DHCPv6 Configuration";
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
reference reference
"RFC 8343: A YANG Data Model for Interface Management"; "RFC 8343: A YANG Data Model for Interface Management";
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
description description
"This YANG module defines components necessary for the "This YANG module defines components necessary for the
skipping to change at line 2977 skipping to change at line 3108
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-29 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Features * Features
*/ */
feature non-temp-addr { feature non-temp-addr {
description description
"Denotes that the client supports DHCPv6 non-temporary address "Denotes that the client supports DHCPv6 non-temporary address
allocations."; allocations.";
skipping to change at line 3150 skipping to change at line 3281
leaf server-duid { leaf server-duid {
type dhc6:duid; type dhc6:duid;
description description
"DUID of the leasing server."; "DUID of the leasing server.";
} }
uses dhc6:status; uses dhc6:status;
} }
grouping option-request-option-group { grouping option-request-option-group {
description description
"OPTION_ORO (6) Option Request Option. A client MUST include "OPTION_ORO (6) Option Request Option. A client MUST include
an Option Request option in a Solicit, Request, Renew, an Option Request Option in a Solicit, Request, Renew,
Rebind, or Information-request message to inform the server Rebind, or Information-request message to inform the server
about options the client wants the server to send to the about options the client wants the server to send to the
client."; client.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Sections 21.23, 21.24, 21.25, & 21.7"; IPv6 (DHCPv6), Sections 21.23, 21.24, 21.25, & 21.7";
container option-request-option { container option-request-option {
description description
"OPTION_ORO (6) Option Request Option."; "OPTION_ORO (6) Option Request Option.";
leaf-list oro-option { leaf-list oro-option {
type uint16; type uint16;
description description
"List of options that the client is requesting, "List of options that the client is requesting,
identified by option code. This list MUST include the identified by option code. This list MUST include the
code for option SOL_MAX_RT (82) when included in a code for option SOL_MAX_RT (82) when included in a
Solicit-message. If this option is being sent in an Solicit message. If this option is being sent in an
Information-request message, then the code for option Information-request message, then the code for option
OPTION_INFORMATION_REFRESH_TIME (32) and INF_MAX_RT (83) OPTION_INFORMATION_REFRESH_TIME (32) and INF_MAX_RT (83)
MUST be included."; MUST be included.";
} }
} }
} }
grouping user-class-option-group { grouping user-class-option-group {
description description
"OPTION_USER_CLASS (15) User Class Option"; "OPTION_USER_CLASS (15) User Class Option";
skipping to change at line 3191 skipping to change at line 3322
description description
"OPTION_USER_CLASS (15) User Class Option."; "OPTION_USER_CLASS (15) User Class Option.";
list user-class-data-instance { list user-class-data-instance {
key user-class-data-id; key user-class-data-id;
min-elements 1; min-elements 1;
description description
"The user classes of which the client is a member."; "The user classes of which the client is a member.";
leaf user-class-data-id { leaf user-class-data-id {
type uint8; type uint8;
description description
"User class data ID"; "User class data ID.";
} }
leaf user-class-data { leaf user-class-data {
type binary; type binary;
description description
"Opaque field representing a User Class of which the "Opaque field representing a User Class of which the
client is a member."; client is a member.";
} }
} }
} }
} }
grouping vendor-class-option-group { grouping vendor-class-option-group {
description description
"OPTION_VENDOR_CLASS (16) Vendor Class Option"; "OPTION_VENDOR_CLASS (16) Vendor Class Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.16"; for IPv6 (DHCPv6), Section 21.16";
container vendor-class-option { container vendor-class-option {
description description
"OPTION_VENDOR_CLASS (16) Vendor Class Option."; "OPTION_VENDOR_CLASS (16) Vendor Class Option.";
list vendor-class-option-instances { list vendor-class-option-instances {
key enterprise-number; key enterprise-number;
description description
"The vendor class option allows for multiple instances "The vendor class option allows for multiple instances
in a single message. Each list entry defines the contents in a single message. Each list entry defines the contents
of an instance of the option."; of an instance of the option.";
leaf enterprise-number { leaf enterprise-number {
type uint32; type uint32;
description description
"The vendor's registered Enterprise Number as "The vendor's registered Enterprise Number, as
maintained by IANA."; maintained by IANA.";
} }
list vendor-class-data-element { list vendor-class-data-element {
key vendor-class-data-id; key vendor-class-data-id;
description description
"The vendor classes of which the client is a member."; "The vendor classes of which the client is a member.";
leaf vendor-class-data-id { leaf vendor-class-data-id {
type uint8; type uint8;
description description
"Vendor class data ID"; "Vendor class data ID.";
} }
leaf vendor-class-data { leaf vendor-class-data {
type binary; type binary;
description description
"Opaque field representing a vendor class of which "Opaque field representing a vendor class of which
the client is a member."; the client is a member.";
} }
} }
} }
} }
skipping to change at line 3261 skipping to change at line 3392
type boolean; type boolean;
default true; default true;
description description
"Globally enables the DHCP client function."; "Globally enables the DHCP client function.";
} }
leaf client-duid { leaf client-duid {
if-feature "(non-temp-addr or prefix-delegation " + if-feature "(non-temp-addr or prefix-delegation " +
"or temp-addr) and not anon-profile"; "or temp-addr) and not anon-profile";
type dhc6:duid; type dhc6:duid;
description description
"A single Client DUID that will be used by all of the "A single client DUID that will be used by all of the
client's DHCPv6 enabled interfaces."; client's DHCPv6-enabled interfaces.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11"; IPv6 (DHCPv6), Section 11";
} }
list client-if { list client-if {
key if-name; key if-name;
description description
"The list of interfaces for which the client will "The list of interfaces for which the client will
be requesting DHCPv6 configuration."; be requesting DHCPv6 configuration.";
leaf if-name { leaf if-name {
type if:interface-ref; type if:interface-ref;
skipping to change at line 3289 skipping to change at line 3420
type boolean; type boolean;
default true; default true;
description description
"Enables the DHCP client function for this interface."; "Enables the DHCP client function for this interface.";
} }
leaf interface-duid { leaf interface-duid {
if-feature "(non-temp-addr or prefix-delegation " + if-feature "(non-temp-addr or prefix-delegation " +
"or temp-addr) and anon-profile"; "or temp-addr) and anon-profile";
type dhc6:duid; type dhc6:duid;
description description
"Per-interface Client DUIDs for use with DHCP anonymity "Per-interface client DUIDs for use with DHCP anonymity
profiles."; profiles.";
reference "RFC 7844: Anonymity Profiles for DHCP Clients, reference "RFC 7844: Anonymity Profiles for DHCP Clients,
Section 3"; Section 3";
} }
container client-configured-options { container client-configured-options {
description description
"Definitions for DHCPv6 options that can be be sent by "Definitions for DHCPv6 options that can be be sent by
the client. Additional option definitions can be the client. Additional option definitions can be
augmented to this location from other YANG modules as augmented to this location from other YANG modules as
required."; required.";
uses option-request-option-group; uses option-request-option-group;
uses dhc6:rapid-commit-option-group; uses dhc6:rapid-commit-option-group;
uses user-class-option-group; uses user-class-option-group;
uses vendor-class-option-group; uses vendor-class-option-group;
uses dhc6:vendor-specific-information-option-group; uses dhc6:vendor-specific-information-option-group;
uses dhc6:reconfigure-accept-option-group; uses dhc6:reconfigure-accept-option-group;
} }
list ia-na { list ia-na {
if-feature non-temp-addr; if-feature non-temp-addr;
key ia-id; key ia-id;
description description
"Configuration relevant for an IA_NA (Identity Association "Configuration relevant for an Identity Association
for Non-temporary Addresses)."; for Non-temporary Addresses (IA_NA).";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 13.1"; for IPv6 (DHCPv6), Section 13.1";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
description description
"A unique identifier for this IA_NA."; "A unique identifier for this IA_NA.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 12"; for IPv6 (DHCPv6), Section 12";
} }
container ia-na-options { container ia-na-options {
skipping to change at line 3359 skipping to change at line 3490
contact any available server to extend the lifetimes contact any available server to extend the lifetimes
of the addresses assigned to the IA_NA."; of the addresses assigned to the IA_NA.";
} }
uses lease-state; uses lease-state;
} }
} }
list ia-ta { list ia-ta {
if-feature temp-addr; if-feature temp-addr;
key ia-id; key ia-id;
description description
"Configuration relevant for an IA_TA (Identity Association "Configuration relevant for an Identity Association
for Temporary Addresses)."; for Temporary Addresses (IA_TA).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 13.2"; IPv6 (DHCPv6), Section 13.2";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
description description
"The unique identifier for this IA_TA."; "The unique identifier for this IA_TA.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 12"; for IPv6 (DHCPv6), Section 12";
} }
container ia-ta-options { container ia-ta-options {
skipping to change at line 3392 skipping to change at line 3523
description description
"Address that is currently leased."; "Address that is currently leased.";
} }
uses lease-state; uses lease-state;
} }
} }
list ia-pd { list ia-pd {
if-feature prefix-delegation; if-feature prefix-delegation;
key ia-id; key ia-id;
description description
"Configuration relevant for an IA_PD (Identity Association "Configuration relevant for an Identity Association
for Prefix Delegation)."; for Prefix Delegation (IA_PD).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 13.3"; IPv6 (DHCPv6), Section 13.3";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
description description
"The unique identifier for this IA_PD."; "The unique identifier for this IA_PD.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 12"; for IPv6 (DHCPv6), Section 12";
} }
leaf prefix-length-hint { leaf prefix-length-hint {
skipping to change at line 3423 skipping to change at line 3554
} }
container ia-pd-options { container ia-pd-options {
description description
"An augmentation point for additional options that the "An augmentation point for additional options that the
client will send in the IA_PD-options field of client will send in the IA_PD-options field of
OPTION_IA_TA."; OPTION_IA_TA.";
} }
container lease-state { container lease-state {
config "false"; config "false";
description description
"Information about an active IA_PD delegated prefix."; "Information about an active IA_PD-delegated prefix.";
leaf ia-pd-prefix { leaf ia-pd-prefix {
type inet:ipv6-prefix; type inet:ipv6-prefix;
description description
"Delegated prefix that is currently leased."; "Delegated prefix that is currently leased.";
} }
leaf lease-t1 { leaf lease-t1 {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"The time interval after which the client should "The time interval after which the client should
contact the server from which the addresses in the contact the server from which the addresses in the
skipping to change at line 3471 skipping to change at line 3602
description description
"Notification sent when an address received in an identity "Notification sent when an address received in an identity
association option is determined invalid. Possible conditions association option is determined invalid. Possible conditions
include a duplicate or otherwise illegal address."; include a duplicate or otherwise illegal address.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18.2.10.1"; IPv6 (DHCPv6), Section 18.2.10.1";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"IA-ID"; "IAID.";
} }
leaf ia-na-t1-timer { leaf ia-na-t1-timer {
type uint32; type uint32;
description description
"The value of the T1 time field for non-temporary address "The value of the T1 time field for non-temporary address
allocations (OPTION_IA_NA)."; allocations (OPTION_IA_NA).";
} }
leaf ia-na-t2-timer { leaf ia-na-t2-timer {
type uint32; type uint32;
description description
"The value of the preferred-lifetime field for non-temporary "The value of the preferred-lifetime field for non-temporary
address allocations (OPTION_IA_NA)."; address allocations (OPTION_IA_NA).";
} }
leaf invalid-address { leaf invalid-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"The IP address which has been detected to be invalid."; "The IP address that has been detected to be invalid.";
} }
leaf preferred-lifetime { leaf preferred-lifetime {
type uint32; type uint32;
description description
"The value of the preferred-lifetime field in "The value of the preferred-lifetime field in
OPTION_IAADDR."; OPTION_IAADDR.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type uint32; type uint32;
description description
skipping to change at line 3635 skipping to change at line 3766
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>]]> ]]></sourcecode>
</artwork>
</section> </section>
</section> </section>
<section anchor="security"> <section anchor="security">
<name>Security Considerations</name> <name>Security Considerations</name>
<t>The YANG modules defined in this document are designed to be
accessed via network management protocols such as NETCONF <!--[rfced] *[AD]: Paragraph 5 of the security boilerplate
<xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. (see https://trac.ietf.org/trac/ops/wiki/yang-security-guidelines)
The lowest NETCONF layer is the secure transport layer, and has not been included. Please review and confirm if this paragraph
the mandatory-to-implement secure transport is Secure Shell does not apply or if it should be added.
(SSH) <xref target="RFC6242"/>. The lowest RESTCONF layer
is HTTPS, and the mandatory-to-implement secure transport Also, we have updated several paragraphs in this section to match the
is TLS <xref target="RFC8446"/>.</t> boilerplate. Please review our updates carefully, and let us know if
<t>The Network Configuration Access Control Model (NACM) any further updates are needed.
<xref target="RFC8341"/> provides the means to restrict -->
access for particular NETCONF or RESTCONF users to a
preconfigured subset of all available NETCONF or RESTCONF <!-- DNE begins, YANG security boilerplate -->
protocol operations and content.</t> <t>
<t>All data nodes defined in the YANG modules which can be The YANG modules specified in this document define schema for data
created, modified, and deleted (i.e., config true, which that is designed to be accessed via network management protocols such
is the default) are considered sensitive. Write operations as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.
(e.g., edit-config) to these data nodes without proper The lowest NETCONF layer is the secure transport layer, and the
protection can have a negative effect on network operations. mandatory-to-implement secure transport is Secure Shell (SSH)
</t> <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the
mandatory-to-implement secure transport is TLS <xref target="RFC8446"/>.
</t>
<t>
The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
provides the means to restrict access for particular NETCONF or RESTCONF users
to a preconfigured subset of all available NETCONF or RESTCONF protocol
operations and content.
</t>
<t>
There are a number of data nodes defined in these YANG modules that are
writable/creatable/deletable (i.e., config true, which is the default). These
data nodes may be considered sensitive or vulnerable in some network
environments. Write operations (e.g., edit-config) to these data nodes without
proper protection can have a negative effect on network operations. These are
the subtrees and data nodes and their sensitivity/vulnerability:
</t>
<!-- DNE stops, YANG security boilerplate -->
<t>The RPCs for deleting/clearing active address and prefix <t>The RPCs for deleting/clearing active address and prefix
entries in the server and relay modules are particularly entries in the server and relay modules are particularly
sensitive. These RPCs use 'nacm:default-deny-all'. sensitive. These RPCs use 'nacm:default-deny-all'.
</t> </t>
<t>An attacker with read/write access to the DHCPv6 server can <t>An attacker with read/write access to the DHCPv6 server can
undertake various attacks, such as:</t> undertake various attacks, such as:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>Denial of service attacks, such as disabling the DHCP <li>Denial-of-Service (DoS) attacks, such as disabling the DHCP
server sevice, or removing address/prefix pool server service or removing address/prefix pool
configuration. configuration and
</li> </li>
<li>Various attacks based on re-configuring the contents <li>Various attacks based on reconfiguring the contents
of DHCPv6 options, leading to several types of security or of DHCPv6 options, leading to several types of security or
privacy threats. These options could redirect clients to privacy threats. These options could redirect clients to
services under an attacker’s control. For example, changing services under an attacker's control, for example, by changing
the address of a DNS server supplied in a DHCP option to the address of a DNS server supplied in a DHCP option to
point to a rogue server. point to a rogue server.
</li> </li>
</ul> </ul>
<t>An attacker sending DHCPv6 messages which cause the server to <t>An attacker sending DHCPv6 messages that cause the server to
generate 'invalid-client-detected' and 'decline-received' generate 'invalid-client-detected' and 'decline-received'
notifications could be used as a DoS attack. Such an attack notifications could be used as a DoS attack. Such an attack
could be mitigated by the NETCONF client unsubscribing could be mitigated by the NETCONF client unsubscribing
from the affected notifications.</t> from the affected notifications.</t>
<t>An attacker with read/write access the DHCPv6 relay can <t>An attacker with read/write access to the DHCPv6 relay can
undertake various attacks, such as:</t> undertake various attacks, such as:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>Denial of service attacks, based on disabling the <li>DoS attacks, based on disabling the
DHCP relay function, or modifying the relay's DHCP relay function or modifying the relay's
"destination-address" to a non-existant address. "destination-address" to a non-existent address,
</li> </li>
<li>Modifying the relay's "destination-address" to send <li>modifying the relay's "destination-address" to send
messages to a rogue DHCPv6 server. messages to a rogue DHCPv6 server, and
</li> </li>
<li>Deleting information about a client's delegated <li>deleting information about a client's delegated
prefix, causing a denial of service attack as traffic prefix, causing a DoS attack, as traffic
will no longer be routed to the client. will no longer be routed to the client.
</li> </li>
</ul> </ul>
<t>Some of the readable data nodes in this YANG module may <!-- DNE begins, YANG secuirty boilerplate -->
be considered sensitive or vulnerable in some network <t>
environments. Therefore, it is important to control read Some of the readable data nodes in this YANG module may be considered
access (e.g., via get, get-config, or notification) sensitive or vulnerable in some network environments. It is thus important to
to these data nodes. These subtrees and data nodes can be control read access (e.g., via get, get-config, or notification) to these data
misused to track the activity or fingerprint the device type nodes. These are the subtrees and data nodes and their
of the host: sensitivity/vulnerability:
</t> </t>
<!-- DNE ends, YANG secuirty boilerplate -->
<t>
The following subtrees and data nodes can be misused to track the activity or fi
ngerprint the device type of the host:
</t>
<ul spacing="normal"> <ul spacing="normal">
<li>Information the server holds about clients with active <li>Information the server holds about clients with active
leases: leases:
(dhc6-srv/allocation-ranges/allocation-range/address-pools/ (dhc6-srv/allocation-ranges/allocation-range/address-pools/
address-pool/active-leases) address-pool/active-leases)
</li> </li>
<li>Information the relay holds about clients with active <li>Information the relay holds about clients with active
leases: (dhc6-rly/relay-if/prefix-delegation/) leases: (dhc6-rly/relay-if/prefix-delegation/)
</li> </li>
</ul> </ul>
skipping to change at line 3750 skipping to change at line 3901
<xref target="RFC8415"/>.</t> <xref target="RFC8415"/>.</t>
<t>Security considerations given in <xref target="RFC7950"/> are <t>Security considerations given in <xref target="RFC7950"/> are
also applicable here. also applicable here.
</t> </t>
</section> </section>
<section anchor="iana"> <section anchor="iana">
<name>IANA Considerations</name> <name>IANA Considerations</name>
<t>This document registers four URIs and four YANG modules.</t> <t>This document registers four URIs and four YANG modules.</t>
<section> <section>
<name>URI Registration</name> <name>URI Registration</name>
<t>This document requests IANA to register the following four <t>Per this document, IANA has registered the following four
URIs in the "IETF XML Registry" URIs in the "ns" subregistry within the "IETF XML Registry"
<xref target="RFC3688"/>:</t> <xref target="RFC3688"/>:</t>
<dl newline="false" spacing="compact"> <dl newline="false" spacing="compact">
<dt>URI:</dt> <dt>URI:</dt>
<dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server</dd> <dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server</dd>
<dt>Registrant Contact:</dt> <dt>Registrant Contact:</dt>
<dd>The IESG.</dd> <dd>The IESG.</dd>
<dt>XML:</dt> <dt>XML:</dt>
<dd>N/A; the requested URI is an XML namespace.</dd> <dd>N/A; the requested URI is an XML namespace.</dd>
</dl> </dl>
<dl newline="false" spacing="compact"> <dl newline="false" spacing="compact">
skipping to change at line 3788 skipping to change at line 3939
<dt>URI:</dt> <dt>URI:</dt>
<dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common</dd> <dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common</dd>
<dt>Registrant Contact:</dt> <dt>Registrant Contact:</dt>
<dd>The IESG.</dd> <dd>The IESG.</dd>
<dt>XML:</dt> <dt>XML:</dt>
<dd>N/A; the requested URI is an XML namespace.</dd> <dd>N/A; the requested URI is an XML namespace.</dd>
</dl> </dl>
</section> </section>
<section> <section>
<name>YANG Module Name Registration</name> <name>YANG Module Name Registration</name>
<t>This document registers the following four YANG modules in
the "YANG Module Names" registry <xref target="RFC6020"/>.</t> <!--[rfced] FYI: In Section 6.2, we removed the title of RFC 9243 from
the reference column and added the "maintained by IANA" category
for each registration to match the "YANG Module Names"
subregistry.
One example
Original:
name: ietf-dhcpv6-server
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server
prefix: dhc6-srv
reference: RFC 9243: A YANG Data Model for DHCPv6 Configuration
Current:
name: ietf-dhcpv6-server
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server
maintained by IANA: N
prefix: dhc6-srv
reference: RFC 9243
-->
<t>Per this document, IANA has registered the following four YANG module
s in
the "YANG Module Names" subregistry <xref target="RFC6020"/> within th
e "YANG Parameters" registry.</t>
<dl newline="false" spacing="compact" indent="16"> <dl newline="false" spacing="compact" indent="16">
<dt>name:</dt> <dt>name:</dt>
<dd>ietf-dhcpv6-server</dd> <dd>ietf-dhcpv6-server</dd>
<dt>namespace:</dt> <dt>namespace:</dt>
<dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server</dd> <dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server</dd>
<dt>maintained by IANA:</dt>
<dd>N</dd>
<dt>prefix:</dt> <dt>prefix:</dt>
<dd>dhc6-srv</dd> <dd>dhc6-srv</dd>
<dt>reference:</dt> <dt>reference:</dt>
<dd>RFC XXXX YANG Data Model for DHCPv6 Configuration</dd> <dd>RFC 9243</dd>
</dl> </dl>
<dl newline="false" spacing="compact" indent="16"> <dl newline="false" spacing="compact" indent="16">
<dt>name:</dt> <dt>name:</dt>
<dd>ietf-dhcpv6-relay</dd> <dd>ietf-dhcpv6-relay</dd>
<dt>namespace:</dt> <dt>namespace:</dt>
<dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay</dd> <dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay</dd>
<dt>maintained by IANA:</dt>
<dd>N</dd>
<dt>prefix:</dt> <dt>prefix:</dt>
<dd>dhc6-rly</dd> <dd>dhc6-rly</dd>
<dt>reference:</dt> <dt>reference:</dt>
<dd>RFC XXXX YANG Data Model for DHCPv6 Configuration</dd> <dd>RFC 9243</dd>
</dl> </dl>
<dl newline="false" spacing="compact" indent="16"> <dl newline="false" spacing="compact" indent="16">
<dt>name:</dt> <dt>name:</dt>
<dd>ietf-dhcpv6-client</dd> <dd>ietf-dhcpv6-client</dd>
<dt>namespace:</dt> <dt>namespace:</dt>
<dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client</dd> <dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client</dd>
<dt>maintained by IANA:</dt>
<dd>N</dd>
<dt>prefix:</dt> <dt>prefix:</dt>
<dd>dhc6-clnt</dd> <dd>dhc6-clnt</dd>
<dt>reference:</dt> <dt>reference:</dt>
<dd>RFC XXXX YANG Data Model for DHCPv6 Configuration</dd> <dd>RFC 9243</dd>
</dl> </dl>
<dl newline="false" spacing="compact" indent="16"> <dl newline="false" spacing="compact" indent="16">
<dt>name:</dt> <dt>name:</dt>
<dd>ietf-dhcpv6-common</dd> <dd>ietf-dhcpv6-common</dd>
<dt>namespace:</dt> <dt>namespace:</dt>
<dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common</dd> <dd>urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common</dd>
<dt>maintained by IANA:</dt>
<dd>N</dd>
<dt>prefix:</dt> <dt>prefix:</dt>
<dd>dhc6</dd> <dd>dhc6</dd>
<dt>reference:</dt> <dt>reference:</dt>
<dd>RFC XXXX YANG Data Model for DHCPv6 Configuration</dd> <dd>RFC 9243</dd>
</dl> </dl>
</section> </section>
</section> </section>
<section anchor="acknowledgments">
<name>Acknowledgments</name>
<t>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.</t>
</section>
<section anchor="contributors">
<name>Contributors</name>
<t>The following individuals are co-authors of this document:</t>
<artwork><![CDATA[
Yong Cui
Tsinghua University
Beijing, 100084
P.R. China
Email: cuiyong@tsinghua.edu.cn
Linhui Sun
Tsinghua University
Beijing, 100084
P.R. China
Email: lh.sunlinh@gmail.com
Sladjana Zechlin
Deutsche Telekom AG
CTO-IPT, Landgrabenweg 151
53227, Bonn
Germany
Email: sladjana.zechlin@telekom.de
Zihao He
Tsinghua University
Beijing, 100084
P.R. China
Email: hezihao9512@gmail.com
Michal Nowikowski
Internet Systems Consortium
Gdansk
Poland
Email: godfryd@isc.org
]]></artwork>
</section>
</middle> </middle>
<back> <back>
<displayreference target="I-D.ietf-netconf-tls-client-server" to="GROUPINGS-
TLS"/>
<references> <references>
<name>References</name> <name>References</name>
<references> <references>
<name>Normative References</name> <name>Normative References</name>
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2
119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.21 <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
19.xml"> C.2119.xml"/>
<front> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<title>Key words for use in RFCs to Indicate Requirement Levels</tit C.2277.xml"/>
le> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<author initials="S." surname="Bradner" fullname="S. Bradner"> C.3118.xml"/>
<organization/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
</author> C.3688.xml"/>
<date year="1997" month="March"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<abstract> C.6355.xml"/>
<t>In many standards track documents several words are used to sig <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
nify the requirements in the specification. These words are often capitalized. C.6020.xml"/>
This document defines these words as they should be interpreted in IETF document <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
s. This document specifies an Internet Best Current Practices for the Internet C.6241.xml"/>
Community, and requests discussion and suggestions for improvements.</t> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
</abstract> C.6242.xml"/>
</front> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<seriesInfo name="BCP" value="14"/> C.6991.xml"/>
<seriesInfo name="RFC" value="2119"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<seriesInfo name="DOI" value="10.17487/RFC2119"/> C.7844.xml"/>
</reference> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<reference anchor="RFC2277" target="https://www.rfc-editor.org/info/rfc2 C.7950.xml"/>
277" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.22 <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
77.xml"> C.8174.xml"/>
<front> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<title>IETF Policy on Character Sets and Languages</title> C.8040.xml"/>
<author initials="H." surname="Alvestrand" fullname="H. Alvestrand"> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<organization/> C.8340.xml"/>
</author> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<date year="1998" month="January"/> C.8341.xml"/>
<abstract> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<t>This document is the current policies being applied by the Inte C.8342.xml"/>
rnet Engineering Steering Group (IESG) towards the standardization efforts in th <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
e Internet Engineering Task Force (IETF) in order to help Internet protocols ful C.8343.xml"/>
fill these requirements. This document specifies an Internet Best Current Pract <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
ices for the Internet Community, and requests discussion and suggestions for imp C.8446.xml"/>
rovements.</t> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
</abstract> C.8415.xml"/>
</front> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<seriesInfo name="BCP" value="18"/> C.8987.xml"/>
<seriesInfo name="RFC" value="2277"/>
<seriesInfo name="DOI" value="10.17487/RFC2277"/>
</reference>
<reference anchor="RFC3118" target="https://www.rfc-editor.org/info/rfc3
118" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.31
18.xml">
<front>
<title>Authentication for DHCP Messages</title>
<author initials="R." surname="Droms" fullname="R. Droms" role="edit
or">
<organization/>
</author>
<author initials="W." surname="Arbaugh" fullname="W. Arbaugh" role="
editor">
<organization/>
</author>
<date year="2001" month="June"/>
<abstract>
<t>This document defines a new Dynamic Host Configuration Protocol
(DHCP) option through which authorization tickets can be easily generated and n
ewly attached hosts with proper authorization can be automatically configured fr
om an authenticated DHCP server. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="3118"/>
<seriesInfo name="DOI" value="10.17487/RFC3118"/>
</reference>
<reference anchor="RFC3688" target="https://www.rfc-editor.org/info/rfc3
688" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.36
88.xml">
<front>
<title>The IETF XML Registry</title>
<author initials="M." surname="Mealling" fullname="M. Mealling">
<organization/>
</author>
<date year="2004" month="January"/>
<abstract>
<t>This document describes an IANA maintained registry for IETF st
andards which use Extensible Markup Language (XML) related items such as Namespa
ces, Document Type Declarations (DTDs), Schemas, and Resource Description Framew
ork (RDF) Schemas.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="81"/>
<seriesInfo name="RFC" value="3688"/>
<seriesInfo name="DOI" value="10.17487/RFC3688"/>
</reference>
<reference anchor="RFC6355" target="https://www.rfc-editor.org/info/rfc6
355" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.63
55.xml">
<front>
<title>Definition of the UUID-Based DHCPv6 Unique Identifier (DUID-U
UID)</title>
<author initials="T." surname="Narten" fullname="T. Narten">
<organization/>
</author>
<author initials="J." surname="Johnson" fullname="J. Johnson">
<organization/>
</author>
<date year="2011" month="August"/>
<abstract>
<t>This document defines a new DHCPv6 Unique Identifier (DUID) typ
e called DUID-UUID. DUID-UUIDs are derived from the already-standardized Univer
sally Unique IDentifier (UUID) format. DUID-UUID makes it possible for devices
to use UUIDs to identify themselves to DHC servers and vice versa. UUIDs are gl
obally unique and readily available on many systems, making them convenient iden
tifiers to leverage within DHCP. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6355"/>
<seriesInfo name="DOI" value="10.17487/RFC6355"/>
</reference>
<reference anchor="RFC6020" target="https://www.rfc-editor.org/info/rfc6
020" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.60
20.xml">
<front>
<title>YANG - A Data Modeling Language for the Network Configuration
Protocol (NETCONF)</title>
<author initials="M." surname="Bjorklund" fullname="M. Bjorklund" ro
le="editor">
<organization/>
</author>
<date year="2010" month="October"/>
<abstract>
<t>YANG is a data modeling language used to model configuration an
d state data manipulated by the Network Configuration Protocol (NETCONF), NETCON
F remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6020"/>
<seriesInfo name="DOI" value="10.17487/RFC6020"/>
</reference>
<reference anchor="RFC6241" target="https://www.rfc-editor.org/info/rfc6
241" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.62
41.xml">
<front>
<title>Network Configuration Protocol (NETCONF)</title>
<author initials="R." surname="Enns" fullname="R. Enns" role="editor
">
<organization/>
</author>
<author initials="M." surname="Bjorklund" fullname="M. Bjorklund" ro
le="editor">
<organization/>
</author>
<author initials="J." surname="Schoenwaelder" fullname="J. Schoenwae
lder" role="editor">
<organization/>
</author>
<author initials="A." surname="Bierman" fullname="A. Bierman" role="
editor">
<organization/>
</author>
<date year="2011" month="June"/>
<abstract>
<t>The Network Configuration Protocol (NETCONF) defined in this do
cument provides mechanisms to install, manipulate, and delete the configuration
of network devices. It uses an Extensible Markup Language (XML)-based data enco
ding for the configuration data as well as the protocol messages. The NETCONF p
rotocol operations are realized as remote procedure calls (RPCs). This document
obsoletes RFC 4741. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6241"/>
<seriesInfo name="DOI" value="10.17487/RFC6241"/>
</reference>
<reference anchor="RFC6242" target="https://www.rfc-editor.org/info/rfc6
242" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.62
42.xml">
<front>
<title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
<author initials="M." surname="Wasserman" fullname="M. Wasserman">
<organization/>
</author>
<date year="2011" month="June"/>
<abstract>
<t>This document describes a method for invoking and running the N
etwork Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as a
n SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6242"/>
<seriesInfo name="DOI" value="10.17487/RFC6242"/>
</reference>
<reference anchor="RFC6991" target="https://www.rfc-editor.org/info/rfc6
991" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.69
91.xml">
<front>
<title>Common YANG Data Types</title>
<author initials="J." surname="Schoenwaelder" fullname="J. Schoenwae
lder" role="editor">
<organization/>
</author>
<date year="2013" month="July"/>
<abstract>
<t>This document introduces a collection of common data types to b
e used with the YANG data modeling language. This document obsoletes RFC 6021.<
/t>
</abstract>
</front>
<seriesInfo name="RFC" value="6991"/>
<seriesInfo name="DOI" value="10.17487/RFC6991"/>
</reference>
<reference anchor="RFC7844" target="https://www.rfc-editor.org/info/rfc7
844" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.78
44.xml">
<front>
<title>Anonymity Profiles for DHCP Clients</title>
<author initials="C." surname="Huitema" fullname="C. Huitema">
<organization/>
</author>
<author initials="T." surname="Mrugalski" fullname="T. Mrugalski">
<organization/>
</author>
<author initials="S." surname="Krishnan" fullname="S. Krishnan">
<organization/>
</author>
<date year="2016" month="May"/>
<abstract>
<t>Some DHCP options carry unique identifiers. These identifiers
can enable device tracking even if the device administrator takes care of random
izing other potential identifications like link-layer addresses or IPv6 addresse
s. The anonymity profiles are designed for clients that wish to remain anonymou
s to the visited network. The profiles provide guidelines on the composition of
DHCP or DHCPv6 messages, designed to minimize disclosure of identifying informa
tion.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7844"/>
<seriesInfo name="DOI" value="10.17487/RFC7844"/>
</reference>
<reference anchor="RFC7950" target="https://www.rfc-editor.org/info/rfc7
950" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.79
50.xml">
<front>
<title>The YANG 1.1 Data Modeling Language</title>
<author initials="M." surname="Bjorklund" fullname="M. Bjorklund" ro
le="editor">
<organization/>
</author>
<date year="2016" month="August"/>
<abstract>
<t>YANG is a data modeling language used to model configuration da
ta, state data, Remote Procedure Calls, and notifications for network management
protocols. This document describes the syntax and semantics of version 1.1 of
the YANG language. YANG version 1.1 is a maintenance release of the YANG langua
ge, addressing ambiguities and defects in the original specification. There are
a small number of backward incompatibilities from YANG version 1. This documen
t also specifies the YANG mappings to the Network Configuration Protocol (NETCON
F).</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7950"/>
<seriesInfo name="DOI" value="10.17487/RFC7950"/>
</reference>
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8
174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.81
74.xml">
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti
tle>
<author initials="B." surname="Leiba" fullname="B. Leiba">
<organization/>
</author>
<date year="2017" month="May"/>
<abstract>
<t>RFC 2119 specifies common key words that may be used in protoco
l specifications. This document aims to reduce the ambiguity by clarifying tha
t only UPPERCASE usage of the key words have the defined special meanings.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="8174"/>
<seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC8040" target="https://www.rfc-editor.org/info/rfc8
040" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.80
40.xml">
<front>
<title>RESTCONF Protocol</title>
<author initials="A." surname="Bierman" fullname="A. Bierman">
<organization/>
</author>
<author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
<organization/>
</author>
<author initials="K." surname="Watsen" fullname="K. Watsen">
<organization/>
</author>
<date year="2017" month="January"/>
<abstract>
<t>This document describes an HTTP-based protocol that provides a
programmatic interface for accessing data defined in YANG, using the datastore c
oncepts defined in the Network Configuration Protocol (NETCONF).</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8040"/>
<seriesInfo name="DOI" value="10.17487/RFC8040"/>
</reference>
<reference anchor="RFC8340" target="https://www.rfc-editor.org/info/rfc8
340" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.83
40.xml">
<front>
<title>YANG Tree Diagrams</title>
<author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
<organization/>
</author>
<author initials="L." surname="Berger" fullname="L. Berger" role="ed
itor">
<organization/>
</author>
<date year="2018" month="March"/>
<abstract>
<t>This document captures the current syntax used in YANG module t
ree diagrams. The purpose of this document is to provide a single location for
this definition. This syntax may be updated from time to time based on the evol
ution of the YANG language.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="215"/>
<seriesInfo name="RFC" value="8340"/>
<seriesInfo name="DOI" value="10.17487/RFC8340"/>
</reference>
<reference anchor="RFC8341" target="https://www.rfc-editor.org/info/rfc8
341" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.83
41.xml">
<front>
<title>Network Configuration Access Control Model</title>
<author initials="A." surname="Bierman" fullname="A. Bierman">
<organization/>
</author>
<author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
<organization/>
</author>
<date year="2018" month="March"/>
<abstract>
<t>The standardization of network configuration interfaces for use
with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requ
ires a structured and secure operating environment that promotes human usability
and multi-vendor interoperability. There is a need for standard mechanisms to
restrict NETCONF or RESTCONF protocol access for particular users to a preconfig
ured subset of all available NETCONF or RESTCONF protocol operations and content
. This document defines such an access control model.</t>
<t>This document obsoletes RFC 6536.</t>
</abstract>
</front>
<seriesInfo name="STD" value="91"/>
<seriesInfo name="RFC" value="8341"/>
<seriesInfo name="DOI" value="10.17487/RFC8341"/>
</reference>
<reference anchor="RFC8342" target="https://www.rfc-editor.org/info/rfc8
342" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.83
42.xml">
<front>
<title>Network Management Datastore Architecture (NMDA)</title>
<author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
<organization/>
</author>
<author initials="J." surname="Schoenwaelder" fullname="J. Schoenwae
lder">
<organization/>
</author>
<author initials="P." surname="Shafer" fullname="P. Shafer">
<organization/>
</author>
<author initials="K." surname="Watsen" fullname="K. Watsen">
<organization/>
</author>
<author initials="R." surname="Wilton" fullname="R. Wilton">
<organization/>
</author>
<date year="2018" month="March"/>
<abstract>
<t>Datastores are a fundamental concept binding the data models wr
itten in the YANG data modeling language to network management protocols such as
the Network Configuration Protocol (NETCONF) and RESTCONF. This document define
s an architectural framework for datastores based on the experience gained with
the initial simpler model, addressing requirements that were not well supported
in the initial model. This document updates RFC 7950.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8342"/>
<seriesInfo name="DOI" value="10.17487/RFC8342"/>
</reference>
<reference anchor="RFC8343" target="https://www.rfc-editor.org/info/rfc8
343" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.83
43.xml">
<front>
<title>A YANG Data Model for Interface Management</title>
<author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
<organization/>
</author>
<date year="2018" month="March"/>
<abstract>
<t>This document defines a YANG data model for the management of n
etwork interfaces. It is expected that interface-type-specific data models augm
ent the generic interfaces data model defined in this document. The data model i
ncludes definitions for configuration and system state (status information and c
ounters for the collection of statistics).</t>
<t>The YANG data model in this document conforms to the Network Ma
nagement Datastore Architecture (NMDA) defined in RFC 8342.</t>
<t>This document obsoletes RFC 7223.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8343"/>
<seriesInfo name="DOI" value="10.17487/RFC8343"/>
</reference>
<reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8
446" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.84
46.xml">
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</titl
e>
<author initials="E." surname="Rescorla" fullname="E. Rescorla">
<organization/>
</author>
<date year="2018" month="August"/>
<abstract>
<t>This document specifies version 1.3 of the Transport Layer Secu
rity (TLS) protocol. TLS allows client/server applications to communicate over
the Internet in a way that is designed to prevent eavesdropping, tampering, and
message forgery.</t>
<t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 50
77, 5246, and 6961. This document also specifies new requirements for TLS 1.2 i
mplementations.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8446"/>
<seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>
<reference anchor="RFC8415" target="https://www.rfc-editor.org/info/rfc8
415" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.84
15.xml">
<front>
<title>Dynamic Host Configuration Protocol for IPv6 (DHCPv6)</title>
<author initials="T." surname="Mrugalski" fullname="T. Mrugalski">
<organization/>
</author>
<author initials="M." surname="Siodelski" fullname="M. Siodelski">
<organization/>
</author>
<author initials="B." surname="Volz" fullname="B. Volz">
<organization/>
</author>
<author initials="A." surname="Yourtchenko" fullname="A. Yourtchenko
">
<organization/>
</author>
<author initials="M." surname="Richardson" fullname="M. Richardson">
<organization/>
</author>
<author initials="S." surname="Jiang" fullname="S. Jiang">
<organization/>
</author>
<author initials="T." surname="Lemon" fullname="T. Lemon">
<organization/>
</author>
<author initials="T." surname="Winters" fullname="T. Winters">
<organization/>
</author>
<date year="2018" month="November"/>
<abstract>
<t>This document describes the Dynamic Host Configuration Protocol
for IPv6 (DHCPv6): an extensible mechanism for configuring nodes with network c
onfiguration parameters, IP addresses, and prefixes. Parameters can be provided
statelessly, or in combination with stateful assignment of one or more IPv6 addr
esses and/or IPv6 prefixes. DHCPv6 can operate either in place of or in additio
n to stateless address autoconfiguration (SLAAC).</t>
<t>This document updates the text from RFC 3315 (the original DHCP
v6 specification) and incorporates prefix delegation (RFC 3633), stateless DHCPv
6 (RFC 3736), an option to specify an upper bound for how long a client should w
ait before refreshing information (RFC 4242), a mechanism for throttling DHCPv6
clients when DHCPv6 service is not available (RFC 7083), and relay agent handlin
g of unknown messages (RFC 7283). In addition, this document clarifies the inte
ractions between models of operation (RFC 7550). As such, this document obsolet
es RFC 3315, RFC 3633, RFC 3736, RFC 4242, RFC 7083, RFC 7283, and RFC 7550.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8415"/>
<seriesInfo name="DOI" value="10.17487/RFC8415"/>
</reference>
<reference anchor="RFC8987" target="https://www.rfc-editor.org/info/rfc8
987" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.89
87.xml">
<front>
<title>DHCPv6 Prefix Delegating Relay Requirements</title>
<author initials="I." surname="Farrer" fullname="I. Farrer">
<organization/>
</author>
<author initials="N." surname="Kottapalli" fullname="N. Kottapalli">
<organization/>
</author>
<author initials="M." surname="Hunek" fullname="M. Hunek">
<organization/>
</author>
<author initials="R." surname="Patterson" fullname="R. Patterson">
<organization/>
</author>
<date year="2021" month="February"/>
<abstract>
<t>This document describes operational problems that are known to
occur when using DHCPv6 relays with prefix delegation. These problems can preven
t successful delegation and result in routing failures. To address these problem
s, this document provides necessary functional requirements for operating DHCPv6
relays with prefix delegation.</t>
<t>It is recommended that any network operator using DHCPv6 prefix
delegation with relays ensure that these requirements are followed on their net
works.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8987"/>
<seriesInfo name="DOI" value="10.17487/RFC8987"/>
</reference>
<reference anchor="IANA-HARDWARE-TYPES" target="https://www.iana.org/ass ignments/arp-parameters"> <reference anchor="IANA-HARDWARE-TYPES" target="https://www.iana.org/ass ignments/arp-parameters">
<front> <front>
<title>Hardware Types</title> <title>Hardware Types</title>
<author> <author>
<organization abbrev="IANA">Internet Assigned Numbers <organization>IANA</organization>
Authority</organization>
</author> </author>
<date/>
</front> </front>
</reference> </reference>
<reference anchor="IANA-PEN" target="https://www.iana.org/assignments/en terprise-numbers"> <reference anchor="IANA-PEN" target="https://www.iana.org/assignments/en terprise-numbers">
<front> <front>
<title>Private Enterprise Numbers</title> <title>Private Enterprise Numbers</title>
<author> <author>
<organization abbrev="IANA">Internet Assigned Numbers <organization>IANA</organization>
Authority</organization>
</author> </author>
<date/>
</front> </front>
</reference> </reference>
<reference anchor="IANA-DHCPV6-OPTION-CODES" target="https://www.iana.or g/assignments/dhcpv6-parameters"> <reference anchor="IANA-DHCPV6-OPTION-CODES" target="https://www.iana.or g/assignments/dhcpv6-parameters">
<front> <front>
<title>DHCPv6 Option Codes</title> <title>Option Codes</title>
<author> <author>
<organization abbrev="IANA">Internet Assigned Numbers <organization>IANA</organization>
Authority</organization>
</author> </author>
<date/>
</front> </front>
</reference> </reference>
<reference anchor="IANA-DHCP-AUTH-NAMESPACES" target="https://www.iana.o
rg/assignments/auth-namespaces&gt;"> <reference anchor="IANA-DHCP-AUTH-NAMESPACES" target="https://www.iana.o
rg/assignments/auth-namespaces">
<front> <front>
<title>Dynamic Host Configuration Protocol (DHCP) <title>Dynamic Host Configuration Protocol (DHCP)
Authentication Option Name Spaces</title> Authentication Option Name Spaces</title>
<author> <author>
<organization abbrev="IANA">Internet Assigned Numbers <organization>IANA</organization>
Authority</organization>
</author> </author>
<date/>
</front> </front>
</reference> </reference>
</references> </references>
<references> <references>
<name>Informative References</name> <name>Informative References</name>
<reference anchor="RFC3319" target="https://www.rfc-editor.org/info/rfc3 <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
319" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.33 C.3319.xml"/>
19.xml"> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
<front> C.7707.xml"/>
<title>Dynamic Host Configuration Protocol (DHCPv6) Options for Sess <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF
ion Initiation Protocol (SIP) Servers</title> C.7824.xml"/>
<author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne
">
<organization/>
</author>
<author initials="B." surname="Volz" fullname="B. Volz">
<organization/>
</author>
<date year="2003" month="July"/>
</front>
<seriesInfo name="RFC" value="3319"/>
<seriesInfo name="DOI" value="10.17487/RFC3319"/>
</reference>
<reference anchor="RFC7707" target="https://www.rfc-editor.org/info/rfc7
707" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.77
07.xml">
<front>
<title>Network Reconnaissance in IPv6 Networks</title>
<author initials="F." surname="Gont" fullname="F. Gont">
<organization/>
</author>
<author initials="T." surname="Chown" fullname="T. Chown">
<organization/>
</author>
<date year="2016" month="March"/>
<abstract>
<t>IPv6 offers a much larger address space than that of its IPv4 c
ounterpart. An IPv6 subnet of size /64 can (in theory) accommodate approximatel
y 1.844 * 10^19 hosts, thus resulting in a much lower host density (#hosts/#addr
esses) than is typical in IPv4 networks, where a site typically has 65,000 or fe
wer unique addresses. As a result, it is widely assumed that it would take a tr
emendous effort to perform address-scanning attacks against IPv6 networks; there
fore, IPv6 address-scanning attacks have been considered unfeasible. This docum
ent formally obsoletes RFC 5157, which first discussed this assumption, by provi
ding further analysis on how traditional address-scanning techniques apply to IP
v6 networks and exploring some additional techniques that can be employed for IP
v6 network reconnaissance.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7707"/>
<seriesInfo name="DOI" value="10.17487/RFC7707"/>
</reference>
<reference anchor="RFC7824" target="https://www.rfc-editor.org/info/rfc7
824" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.78
24.xml">
<front>
<title>Privacy Considerations for DHCPv6</title>
<author initials="S." surname="Krishnan" fullname="S. Krishnan">
<organization/>
</author>
<author initials="T." surname="Mrugalski" fullname="T. Mrugalski">
<organization/>
</author>
<author initials="S." surname="Jiang" fullname="S. Jiang">
<organization/>
</author>
<date year="2016" month="May"/>
<abstract>
<t>DHCPv6 is a protocol that is used to provide addressing and con
figuration information to IPv6 hosts. This document describes the privacy issue
s associated with the use of DHCPv6 by Internet users. It is intended to be an a
nalysis of the present situation and does not propose any solutions.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7824"/>
<seriesInfo name="DOI" value="10.17487/RFC7824"/>
</reference>
<reference anchor="I-D.ietf-netconf-tls-client-server" xml:base="https:/
/xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-tls-client
-server.xml">
<front>
<title>YANG Groupings for TLS Clients and TLS Servers</title>
<author fullname="Kent Watsen">
<organization>Watsen Networks</organization>
</author>
<date month="December" day="14" year="2021"/>
<abstract>
<t> This document defines three YANG 1.1 modules: the first defi
nes
features and groupings common to both TLS clients and TLS servers,
the second defines a grouping for a generic TLS client, and the third
defines a grouping for a generic TLS server.
Editorial Note (To be removed by RFC Editor)
This draft contains placeholder values that need to be replaced with
finalized values at the time of publication. This note summarizes
all of the substitutions that are needed. No other RFC Editor
instructions are specified elsewhere in this document.
Artwork in this document contains shorthand references to drafts in
progress. Please apply the following replacements:
* AAAA --&gt; the assigned RFC value for draft-ietf-netconf-crypto-
types
* BBBB --&gt; the assigned RFC value for draft-ietf-netconf-trust-
anchors
* CCCC --&gt; the assigned RFC value for draft-ietf-netconf-keystore
* DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-
server
* FFFF --&gt; the assigned RFC value for this draft
Artwork in this document contains placeholder values for the date of
publication of this draft. Please apply the following replacement:
* 2021-12-14 --&gt; the publication date of this draft
The following Appendix section is to be removed prior to publication:
* Appendix B. Change Log <!-- draft-ietf-netconf-tls-client-server-27: I-D Exists as of 5/3/22 -->
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.
ietf-netconf-tls-client-server.xml"/>
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-netconf-tls-client
-server-26"/>
<format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-
netconf-tls-client-server-26.txt"/>
</reference>
</references> </references>
</references> </references>
<section anchor="yang-usage-examples"> <section anchor="yang-usage-examples">
<name>Data Tree Examples</name> <name>Data Tree Examples</name>
<t>This section contains XML examples of data trees for <t>This section contains XML examples of data trees for
the different DHCPv6 elements. the different DHCPv6 elements.
</t> </t>
<section anchor="server-usage-examples"> <section anchor="server-usage-examples">
<name>DHCPv6 Server Configuration Examples</name> <name>DHCPv6 Server Configuration Examples</name>
<t>The following example shows a basic configuration for a <t>The following example shows a basic configuration for a
server. The configuration defines:</t> server. The configuration defines:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>Enabling the DHCP server function.</li> <li>enabling the DHCP server function,</li>
<li>The server's DUID.</li> <li>the server's DUID,</li>
<li>An option set (id=1) with configuration for the <li>an option set (id=1) with configuration for the
Solicit Max Retry Timeout (SOL_MAX_RT (82)) option. Solicit Max Retry Timeout (SOL_MAX_RT (82)) option,</li>
</li> <li>a single network range (2001:db8::/32), and</li>
<li>A single network range (2001:db8::/32).</li> <li>a single address pool, with start and end addresses,
<li>A single address pool, with start and end addresses, relevant lease timers, and an option-set-id of "1"
relevant lease timers and an option-set-id of "1"
referencing the option set configured above.</li> referencing the option set configured above.</li>
</ul> </ul>
<figure anchor="server-base-example-confg"> <figure anchor="server-base-example-confg">
<name>Basic Server Configuration Example XML</name> <name>Basic Server Configuration Example XML</name>
<artwork align="center" xml:base="/home/if/Documents/yang/xml/server-b <sourcecode type="xml"><![CDATA[
ase-ex.xml">
<![CDATA[
<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>
skipping to change at line 4460 skipping to change at line 4152
<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>
</address-pool> </address-pool>
</address-pools> </address-pools>
</allocation-range> </allocation-range>
</allocation-ranges> </allocation-ranges>
</dhcpv6-server> </dhcpv6-server>
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
<t>The following example configuration snippet shows a static <t>The following example configuration snippet shows a static
host reservation within an address pool. The host's lease host reservation within an address pool. The host's lease
timers are configured to be longer than hosts from the pool with timers are configured to be longer than hosts from the pool with
dynamically assigned addresses.</t> dynamically assigned addresses.</t>
<figure anchor="host-res-example-conf"> <figure anchor="host-res-example-conf">
<name>Server Host Reservation Configuration Example XML <name>Server Host Reservation Configuration Example XML
Snippet</name> Snippet</name>
<artwork align="center" xml:base="/home/if/Documents/yang/xml/host-res <sourcecode type="xml"><![CDATA[
-ex.xml">
<![CDATA[
<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-reservations>
<host-reservation> <host-reservation>
skipping to change at line 4493 skipping to change at line 4183
<client-duid>00052001db81</client-duid> <client-duid>00052001db81</client-duid>
<option-set-id>1</option-set-id> <option-set-id>1</option-set-id>
<valid-lifetime>604800</valid-lifetime> <valid-lifetime>604800</valid-lifetime>
<renew-time>86400</renew-time> <renew-time>86400</renew-time>
<rebind-time>172800</rebind-time> <rebind-time>172800</rebind-time>
<preferred-lifetime>345600</preferred-lifetime> <preferred-lifetime>345600</preferred-lifetime>
</host-reservation> </host-reservation>
</host-reservations> </host-reservations>
</address-pool> </address-pool>
</address-pools> </address-pools>
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
<t>The following example configuration snippet shows a <t>The following example configuration snippet shows a
network range and pool to be used for delegating prefixes to network range and pool to be used for delegating prefixes to
clients. In this example, each client will receive a /56 clients. In this example, each client will receive a /56
prefix. prefix.
</t> </t>
<t>The 'max-pd-space-utilization' is set to 80 percent so that <t>The 'max-pd-space-utilization' is set to 80 percent so that
a 'prefix-pool-utilization-threshold-exceeded' notification a 'prefix-pool-utilization-threshold-exceeded' notification
will be raised if the number of prefix allocations exceeds will be raised if the number of prefix allocations exceeds
this. this.
</t> </t>
<figure anchor="pd-example-conf"> <figure anchor="pd-example-conf">
<name>Server Prefix Delegation Configuration Example XML <name>Server Prefix Delegation Configuration Example XML
Snippet</name> Snippet</name>
<artwork align="center" xml:base="/home/if/Documents/yang/xml/prefixpo <sourcecode type="xml"><![CDATA[
ol-ex.xml">
<![CDATA[
<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>
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
<t>The next example configuration snippet shows a set of <t>The next example configuration snippet shows a set of
options that may be returned to clients, depending on the options that may be returned to clients, depending on the
contents of a received DHCP request message. The option set contents of a received DHCP request message. The option set
ID is '1', which will referenced by other places in the ID is '1', which will be referenced by other places in the
configuration (e.g., address pool configuration) as the configuration (e.g., address pool configuration) as the
available options for clients that request them.</t> available options for clients that request them.</t>
<t>The example shows how the option definitions can be <t>The example shows how the option definitions can be
extended via augmentation. In this case, "OPTION_SIP_SERVER_D extended via augmentation. In this case, "OPTION_SIP_SERVER_D
(21) SIP Servers Domain-Name List" from the example (21) SIP Servers Domain-Name List" from the example
module in <xref target="example-dhcp-options-extension"/> module in <xref target="example-dhcp-options-extension"/>
has been augmented to the server's option set.</t> has been augmented to the server's option set.</t>
<figure anchor="option-set-example"> <figure anchor="option-set-example">
<name>Server Option Set Configuration Example XML <name>Server Option Set Configuration Example XML
Snippet</name> Snippet</name>
<artwork align="center" xml:base="/home/if/Documents/yang/xml/opt-set- <sourcecode type="xml"><![CDATA[
ex.xml">
<![CDATA[
<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>
<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>01</sub-option-code> <sub-option-code>01</sub-option-code>
<sub-option-data>1234abcd</sub-option-data> <sub-option-data>1234abcd</sub-option-data>
skipping to change at line 4583 skipping to change at line 4269
<sip-serv-id>0</sip-serv-id> <sip-serv-id>0</sip-serv-id>
<sip-serv-domain-name>sip1.example.org</sip-serv-domain-name> <sip-serv-domain-name>sip1.example.org</sip-serv-domain-name>
</sip-server> </sip-server>
<sip-server> <sip-server>
<sip-serv-id>1</sip-serv-id> <sip-serv-id>1</sip-serv-id>
<sip-serv-domain-name>sip2.example.org</sip-serv-domain-name> <sip-serv-domain-name>sip2.example.org</sip-serv-domain-name>
</sip-server> </sip-server>
</sip-server-domain-name-list-option> </sip-server-domain-name-list-option>
</option-set> </option-set>
</option-sets> </option-sets>
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
</section> </section>
<section anchor="relay-usage-example"> <section anchor="relay-usage-example">
<name>DHCPv6 Relay Configuration Example</name> <name>DHCPv6 Relay Configuration Example</name>
<t>The following example shows a basic configuration for a <t>The following example shows a basic configuration for a
single DHCP relay interface and its interaction with the single DHCP relay interface and its interaction with the
ietf-interfaces module. The configuration shows two XML ietf-interfaces module. The configuration shows two XML
documents, one for ietf-interfaces and a second for documents, one for ietf-interfaces and a second for
ietf-dhcpv6-relay, defining:</t> ietf-dhcpv6-relay, defining:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>Configuring an interface using the ietf-interfaces <li>configuring an interface using the ietf-interfaces
module that the relay configuration will be applied to. module that the relay configuration will be applied to,</li>
</li> <li>enabling the DHCP relay function globally and for
<li>Enabling the DHCP relay function globally and for the relevant interface,</li>
the relevant interface.</li> <li>referencing the interface that the relay configuration
<li>Referencing the interface that the relay configuration is relevant for via an interface-ref to the
is relevant for via an inteface-ref to the ietf-interfaces module,</li>
ietf-interfaces module.</li> <li>defining two destination addresses that incoming
<li>Defining two destination addresses that incoming DHCP messages will be relayed to,</li>
DHCP messages will be relayed to.</li> <li>configuring the link-address value that will be sent
<li>Configures the link-address value that will be sent in the relay-forward message, and</li>
in the relay-forward message.</li> <li>configuring a value for the Interface ID Option
<li>Configuring a value for the Interface ID Option
(OPTION_INTERFACE_ID (18)), which will be included (OPTION_INTERFACE_ID (18)), which will be included
in the relay forward message. in the relay forward message.
</li> </li>
</ul> </ul>
<figure anchor="relay-base-example-confg"> <figure anchor="relay-base-example-confg">
<name>Basic Relay Configuration Example XML</name> <name>Basic Relay Configuration Example XML</name>
<artwork align="center" xml:base="/home/if/Documents/yang/xml/relay-ba <sourcecode type="xml"><![CDATA[
se-ex.xml">
<![CDATA[
<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>
skipping to change at line 4641 skipping to change at line 4324
<destination-address>2001:db8:2::1</destination-address> <destination-address>2001:db8:2::1</destination-address>
<destination-address>2001:db8:2::2</destination-address> <destination-address>2001:db8:2::2</destination-address>
<link-address>2001:db8:3::1</link-address> <link-address>2001:db8:3::1</link-address>
<relay-options> <relay-options>
<interface-id-option> <interface-id-option>
<interface-id>EXAMPLEINTERFACEID01</interface-id> <interface-id>EXAMPLEINTERFACEID01</interface-id>
</interface-id-option> </interface-id-option>
</relay-options> </relay-options>
</relay-if> </relay-if>
</dhcpv6-relay> </dhcpv6-relay>
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
</section> </section>
<section anchor="client-usage-example"> <section anchor="client-usage-example">
<name>DHCPv6 Client Configuration Example</name> <name>DHCPv6 Client Configuration Example</name>
<t>The following example shows a basic configuration for a <t>The following example shows a basic configuration for a
DHCP client and its interaction with the DHCP client and its interaction with the
ietf-interfaces module. The configuration shows two XML ietf-interfaces module. The configuration shows two XML
documents, one for ietf-interfaces and a second for documents, one for ietf-interfaces and a second for
ietf-dhcpv6-client defining:</t> ietf-dhcpv6-client, defining:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>Configuring an interface using the ietf-interfaces <li>configuring an interface using the ietf-interfaces
module that the client configuration will be applied to. module that the client configuration will be applied to,</li>
</li> <li>enabling the DHCP client function globally and for
<li>Enabling the DHCP client function globally and for the relevant interface,</li>
the relevant interface.</li> <li>referencing the interface that the client configuration
<li>References the interface that the client configuration is relevant for via an interface-ref to the
is relevant for via an inteface-ref to the ietf-interfaces module,</li>
ietf-interfaces module.</li> <li>setting the DUID for the DHCPv6-enabled interface,</li>
<li>Sets the DUID for the DHCPv6 enabled interface.</li> <li>configuring a list of option codes that will be
<li>Configures a list of option codes that will be
requested by the client in its Option Request Option requested by the client in its Option Request Option
(OPTION_ORO (5)).</li> (OPTION_ORO (5)),</li>
<li>Configures a single instance of the Vendor-specific <li>configuring a single instance of the Vendor-specific
Information Option (OPTION_VENDOR_OPTS (17)) with a Information Option (OPTION_VENDOR_OPTS (17)) with a
single sub-option data item. single sub-option data item,</li>
</li> <li>requesting a non-temporary IPv6 address (IA_NA) with
<li>Requests a non-temporary IPv6 address (IA_NA) with an identity association interface identifier of 1, and</li>
an identity association interface identifier of 1. <li>requesting an IPv6 delegated prefix address (IA_PD) with
</li>
<li>Requests an IPv6 delegated prefix address (IA_PD) with
an identity association interface identifier of 2. an identity association interface identifier of 2.
</li> </li>
</ul> </ul>
<figure anchor="client-base-example-confg"> <figure anchor="client-base-example-confg">
<name>Basic Client Configuration Example XML</name> <name>Basic Client Configuration Example XML</name>
<artwork align="center" xml:base="/home/if/Documents/yang/xml/client-b <sourcecode type="xml"><![CDATA[
ase-ex.xml">
<![CDATA[
<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>
skipping to change at line 4722 skipping to change at line 4400
</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>
]]> ]]></sourcecode>
</artwork>
</figure> </figure>
</section> </section>
</section> </section>
<section anchor="example-dhcp-options-extension"> <section anchor="example-dhcp-options-extension">
<name>Example of Augmenting Additional DHCPv6 Option Definitions</name> <name>Example of Augmenting Additional DHCPv6 Option Definitions</name>
<t>The following section provides a example of how the DHCPv6 <t>The following section provides an example of how the DHCPv6
option definitions can be extended to include additional option definitions can be extended to include additional
options. It is expected that additional specification documents options. It is expected that additional specification documents
will be published for this in the future. will be published for this in the future.
</t> </t>
<t>The example defines YANG models for OPTION_SIP_SERVER_D (21) <t>The example defines YANG modules for OPTION_SIP_SERVER_D (21)
and OPTION_SIP_SERVER_D (22) defined in <xref target="RFC3319"/>. and OPTION_SIP_SERVER_D (22) as specified in <xref target="RFC3319"/>.
Example XML configuration, showing the interworking with An example XML configuration, showing the interworking with
other modules is provided in other modules, is provided in
<xref target="option-set-example"/>.</t> <xref target="option-set-example"/>.</t>
<t>The module is constructed as follows:</t> <t>The module is constructed as follows:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>The module is named using a meaningful, shortened version of the <li>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.
</li> </li>
<li>A separate grouping is used to define each option. <li>A separate grouping is used to define each option.
</li> </li>
<li>The name of the option is taken from the registered IANA <li>The name of the option is taken from the registered IANA
name for the option, with an '-option' suffix added. name for the option, with an '-option' suffix added.
</li> </li>
<li>The description field is taken from the relevant option code <li>The description field is taken from the relevant option code
name and number. name and number.
</li> </li>
<li>The reference section is the number and name of the RFC in <li>The reference section is the number and name of the RFC in
which the DHCPv6 option is defined. which the DHCPv6 option is defined.
</li> </li>
<li>The remaining fields match the fields in the DHCP option. <li>The remaining fields match the fields in the DHCP option.
They are in the same order as defined in the DHCP option. They are in the same order as defined in the DHCP option.
Where-ever possible, the format that is defined for the DHCP Wherever possible, the format that is defined for the DHCP
field should be matched by the relevant YANG type. field should be matched by the relevant YANG type.
</li> </li>
<li>Fields which can have multiple entries or instances are <li>Fields that can have multiple entries or instances are
defined using list or leaf-list nodes. defined using list or leaf-list nodes.
</li> </li>
</ul> </ul>
<t>Below the groupings for option definitions, augment statements <t>Below the groupings for option definitions, augment statements
are used to add the option definitions for use in the relevant are used to add the option definitions for use in the relevant
DHCP element's module (server, relay and/or client). DHCP element's module (server, relay, and/or client).</t>
</t> <sourcecode type="yang" markers="true"><![CDATA[
<artwork align="center" xml:base="/home/if/Documents/yang/example-dhcpv6-o
pt-sip-serv.yang.xml">
<![CDATA[
module example-dhcpv6-opt-sip-serv { module example-dhcpv6-opt-sip-serv {
yang-version 1.1; yang-version 1.1;
namespace "https://example.com/ns/" + namespace "https://example.com/ns/" +
"example-dhcpv6-opt-sip-serv"; "example-dhcpv6-opt-sip-serv";
prefix "sip-srv"; prefix "sip-srv";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-dhcpv6-server { import ietf-dhcpv6-server {
prefix dhc6-srv; prefix dhc6-srv;
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
skipping to change at line 4811 skipping to change at line 4486
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-29 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Groupings * Groupings
*/ */
grouping sip-server-domain-name-list-option-group { grouping sip-server-domain-name-list-option-group {
description 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
skipping to change at line 4856 skipping to change at line 4531
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
skipping to change at line 4895 skipping to change at line 4570
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;
} }
} }
]]> ]]></sourcecode>
</artwork>
<t>The correct location to augment the new option definition(s) <t>The correct location to augment the new option definition(s)
will vary according to the specific rules defined for the will vary according to the specific rules defined for the
use of that specific option. For example, for options which use of that specific option. For example, for options that
will be augmented into the ietf-dhcpv6-server module, in will be augmented into the ietf-dhcpv6-server module, in
many cases, these will be augmented to: many cases, these will be augmented to:
</t> </t>
<t>'/dhc6-srv:dhc6-srv/dhc6-srv:option-sets/dhc6-srv:option-set' <t>'/dhc6-srv:dhc6-srv/dhc6-srv:option-sets/dhc6-srv:option-set'
</t> </t>
<t> <t>
So that they can be defined within option sets. However, so that they can be defined within option sets. However,
there are some options which are only applicable for there are some options that are only applicable for
specific deployment scenarios and in these cases it may be specific deployment scenarios, and in these cases, it may be
more logical to augment the option group to a location more logical to augment the option group to a location
relevant for the option.</t> relevant for the option.</t>
<t>One example for this could be OPTION_PD_EXCLUDE (67). This <t>One example for this could be OPTION_PD_EXCLUDE (67). This
option is only relevant in combination with a delegated option is only relevant in combination with a delegated
prefix which contains a specific prefix. In this case, the prefix that contains a specific prefix. In this case, the
following location for the augmentation may be more suitable: following location for the augmentation may be more suitable:
</t> </t>
<t>'/dhc6-srv:dhc6-srv/dhc6-srv:allocation-ranges/dhc6-srv:allocation-rang e/dhc6-srv:prefix-pools/dhc6-srv:prefix-pool" <t>'/dhc6-srv:dhc6-srv/dhc6-srv:allocation-ranges/dhc6-srv:allocation-rang e/dhc6-srv:prefix-pools/dhc6-srv:prefix-pool'
</t> </t>
</section> </section>
<section anchor="vendor-specific-configuration-example"> <section anchor="vendor-specific-configuration-example">
<name>Example Vendor Specific Server Configuration Module</name> <name>Example Vendor-Specific Server Configuration Module</name>
<t> <t>
This section shows how to extend the server YANG module defined This section shows how to extend the server YANG module defined
in this document with vendor specific configuration nodes, e.g., in this document with vendor-specific configuration nodes, e.g.,
configuring access to a lease storage database.</t> configuring access to a lease storage database.</t>
<t>The example module defines additional server attributes such <t>The example module defines additional server attributes, such
as name and description. Storage for leases is configured using as name and description. Storage for leases is configured using
a lease-storage container. It allows storing leases in one of a lease-storage container. It allows storing leases in one of
three options: memory (memfile), MySQL and PostgreSQL. For each three options: memory (memfile), MySQL, and PostgreSQL. For each
case, the necessary configuration parameters are provided.</t> case, the necessary configuration parameters are provided.</t>
<t>For simplicity, this example module assumes that the DHCPv6 <t>For simplicity, this example module assumes that the DHCPv6
server is colocated with the MySQL or PostgreSQL database server is colocated with the MySQL or PostgreSQL database
server and can serve traffic securely on the localhost without server and can serve traffic securely on the localhost without
additional cryptographic protection. In a production additional cryptographic protection. In a production
deployment, these functions would likely not be colocated deployment, these functions would likely not be colocated
and thus use TLS to secure the database connection between and thus use TLS to secure the database connection between
the DHCPv6 server and database server. A YANG module for the DHCPv6 server and database server. A YANG module for
configuring TLS is defined in configuring TLS is defined in
<xref target="I-D.ietf-netconf-tls-client-server"/>.</t> <xref target="I-D.ietf-netconf-tls-client-server"/>.</t>
<t>At the end there is an augment statement which adds the vendor <t>At the end, there is an augment statement that adds the vendor-specifi
specific configuration defined in "dhcpv6-server-config:config" c
configuration defined in "dhcpv6-server-config:config"
under the "/dhcpv6-server:config/dhcpv6-server:vendor-config" under the "/dhcpv6-server:config/dhcpv6-server:vendor-config"
mount point. mount point.
</t> </t>
<artwork align="center" xml:base="/home/if/Documents/yang/example-dhcpv6-s <sourcecode type="yang" markers="true"><![CDATA[
erver-conf.yang.xml">
<![CDATA[
module example-dhcpv6-server-conf { module example-dhcpv6-server-conf {
yang-version 1.1; yang-version 1.1;
namespace "https://example.com/ns/" + namespace "https://example.com/ns/" +
"example-dhcpv6-server-conf"; "example-dhcpv6-server-conf";
prefix "dhc6-srv-conf"; prefix "dhc6-srv-conf";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
} }
import ietf-dhcpv6-server { import ietf-dhcpv6-server {
prefix dhc6-srv; prefix dhc6-srv;
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
description description
"This YANG module defines components for the configuration and "This YANG module defines components for the configuration and
management of vendor/implementation specific DHCPv6 server management of vendor-/implementation-specific DHCPv6 server
functionality. As this functionality varies greatly between 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-29 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Groupings * Groupings
*/ */
grouping 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 {
skipping to change at line 5052 skipping to change at line 4725
"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 of
its network interfaces."; 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.";
skipping to change at line 5088 skipping to change at line 4761
"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 {
skipping to change at line 5128 skipping to change at line 4801
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 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 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;
} }
} }
]]> ]]></sourcecode>
</artwork>
</section> </section>
<section anchor="class-selector-example"> <section anchor="class-selector-example">
<name>Example definition of class-selector configuration</name> <name>Example Definition of Class-Selector Configuration</name>
<t> <t>
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 of how vendor-specific class selection configuration can be
modeled and integrated with the "ietf-dhcpv6-server" module modeled and integrated with the "ietf-dhcpv6-server" module
defined in this document.</t> defined in this document.</t>
<t>The example module defines "client-class-names" with associated <t>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), "interface-id" (ingress interface of the client's messages),
packet's source or destination address, relay link address, packet's source or destination address, relay link address,
relay link interface-id and more. Actually, there are endless relay link interface-id, and more. Actually, there are endless
methods for classifying clients. So this standard does not try methods for classifying clients. So this standard does not try
to provide full specification for class selection, it only shows to provide full specification for class selection; it only shows
an example of how it could be defined.</t> an example of how it could be defined.</t>
<t>At the end of the example augment statements are used to add <t>At the end of the example, augment statements are used to add
the defined class selector rules into the overall DHCPv6 the defined class selector rules into the overall DHCPv6
addressing hierarchy. This is done in two main parts:</t> addressing hierarchy. This is done in two main parts:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>The augmented class-selector configuration in the main <li>the augmented class-selector configuration in the main
DHCPv6 Server configuration. DHCPv6 Server configuration
</li> </li>
<li>client-class leafrefs augmented to "allocation-range", <li>client-class leafrefs augmented to "allocation-range",
"address-pool" and "pd-pool", pointing to the "address-pool", and "pd-pool", pointing to the
"client-class-name" that is required. "client-class-name" that is required
</li> </li>
</ul> </ul>
<t>The mechanism is as follows: class is associated to client <t>The mechanism is as follows: class is associated to a client
based on rules and then client is allowed to get based on rules, and then a client is allowed to get
address(es)/prefix(es) from a given allocation-range/pool if an address(es) or a prefix(es) from a given allocation-range/pool if
the class name matches. the class name matches.
</t> </t>
<artwork align="center" xml:base="/home/if/Documents/yang/example-dhcpv6-c <sourcecode type="yang" markers="true"><![CDATA[
lass-select.yang.xml">
<![CDATA[
module example-dhcpv6-class-select { module example-dhcpv6-class-select {
yang-version 1.1; yang-version 1.1;
namespace "https://example.com/ns/" + namespace "https://example.com/ns/" +
"example-dhcpv6-class-select"; "example-dhcpv6-class-select";
prefix "dhc6-class-sel"; prefix "dhc6-class-sel";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
skipping to change at line 5254 skipping to change at line 4925
import ietf-dhcpv6-common { import ietf-dhcpv6-common {
prefix dhc6; prefix dhc6;
} }
import ietf-dhcpv6-server { import ietf-dhcpv6-server {
prefix dhc6-srv; prefix dhc6-srv;
} }
organization organization
"IETF DHC (Dynamic Host Configuration) Working Group"; "IETF Dynamic Host Configuration (DHC) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/> "WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org> WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com> Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de> Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com> Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>"; Author: Michal Nowikowski <godfryd@isc.org>";
skipping to change at line 5283 skipping to change at line 4954
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-29 { revision 2022-05-04 {
description description
"Initial Revision."; "Initial revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "9243: A YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Groupings * Groupings
*/ */
grouping client-class-id { grouping client-class-id {
description description
"Definitions of client message classification for "Definitions of client message classification for
authorization and assignment purposes."; authorization and assignment purposes.";
leaf client-class-name { leaf client-class-name {
type string; type string;
mandatory true; mandatory true;
description description
"Unique Identifier for client class identification list "Unique identifier for client class identification list
entries."; entries.";
} }
choice id-type { choice id-type {
mandatory true; mandatory true;
description description
"Definitions for different client identifier types."; "Definitions for different client identifier types.";
case client-id-id { case client-id-id {
leaf client-id { leaf client-id {
type string; type string;
mandatory true; mandatory true;
skipping to change at line 5438 skipping to change at line 5109
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 {
skipping to change at line 5482 skipping to change at line 5153
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.";
skipping to change at line 5535 skipping to change at line 5206
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.";
} }
} }
} }
]]> ]]></sourcecode>
</artwork> </section>
<section anchor="acknowledgments" numbered="false">
<name>Acknowledgments</name>
<t>The authors would like to thank <contact fullname="Qi Sun"/>, <contact
fullname="Lishan Li"/>, <contact fullname="Hao Wang"/>,
<contact fullname="Tomek Mrugalski"/>, <contact fullname="Marcin Siodels
ki"/>, <contact fullname="Bernie Volz"/>, <contact fullname="Ted Lemon"/>,
<contact fullname="Bing Liu"/>, <contact fullname="Tom Petch"/>, <contac
t fullname="Acee Lindem"/>, and <contact fullname="Benjamin Kaduk"/> for their
valuable comments and contributions to this work.</t>
</section> </section>
<section anchor="contributors" numbered="false">
<name>Contributors</name>
<t>The following individuals are coauthors of this document:</t>
<contact fullname="Yong Cui">
<organization>Tsinghua University</organization>
<address>
<postal>
<city>Beijing,</city>
<code>100084</code>
<country>China</country>
</postal>
<email>cuiyong@tsinghua.edu.cn</email>
</address>
</contact>
<contact fullname=" Linhui Sun">
<organization>Tsinghua University</organization>
<address>
<postal>
<city>Beijing,</city>
<code>100084</code>
<country>China</country>
</postal>
<email>lh.sunlinh@gmail.com</email>
</address>
</contact>
<contact fullname=" Sladjana Zechlin">
<organization>Deutsche Telekom AG</organization>
<address>
<postal>
<street>CTO-IPT, Landgrabenweg 151</street>
<code>53227,</code>
<city>Bonn</city>
<country>Germany</country>
</postal>
<email>sladjana.zechlin@telekom.de</email>
</address>
</contact>
<contact fullname=" Zihao He">
<organization>Tsinghua University</organization>
<address>
<postal>
<city>Beijing,</city>
<code>100084</code>
<country>China</country>
</postal>
<email>hezihao9512@gmail.com</email>
</address>
</contact>
<contact fullname=" Michal Nowikowski">
<organization>Internet Systems Consortium</organization>
<address>
<postal>
<city>Gdansk</city>
<country>Poland</country>
</postal>
<email>godfryd@isc.org</email>
</address>
</contact>
</section>
<!-- [rfced] Please review the "Inclusive Language" portion of the online
Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language>
and let us know if any changes are needed. Note that our script did not flag
any words in particular, but this should still be reviewed as a best practice.
-->
</back> </back>
</rfc> </rfc>
 End of changes. 318 change blocks. 
1286 lines changed or deleted 907 lines changed or added

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

mirror server hosted at Truenetwork, Russian Federation.