| 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 " "> | |||
| <?rfc toc="yes"?> | <!ENTITY zwsp "​"> | |||
| <?rfc tocdepth="4"?> | <!ENTITY nbhy "‑"> | |||
| <?rfc symrefs="yes"?> | <!ENTITY wj "⁠"> | |||
| <?rfc sortrefs="yes" ?> | ]> | |||
| <?rfc compact="yes" ?> | ||||
| <?rfc subcompact="no" ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" submissionType="I | |||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ETF" consensus="true" number="9243" docName="draft-ietf-dhc-dhcpv6-yang-25" obso | |||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" submissionType="I | letes="" updates="" ipr="trust200902" xml:lang="en" tocInclude="true" symRefs="t | |||
| ETF" docName="draft-ietf-dhc-dhcpv6-yang-25" ipr="trust200902" version="3"> | rue" sortRefs="true" 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 | ||||
| <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>S&TI, 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="June"/> | |||
| <workgroup>DHC Working Group</workgroup> | <workgroup>DHC Working Group</workgroup> | |||
| <keyword>YANG</keyword> | ||||
| <keyword>NETCONF</keyword> | ||||
| <keyword>REST</keyword> | ||||
| <keyword>data model</keyword> | ||||
| <keyword>DHCPv6</keyword> | ||||
| <keyword>IPv6</keyword> | ||||
| <keyword>configuration</keyword> | ||||
| <keyword>management</keyword> | ||||
| <keyword>lease</keyword> | ||||
| <keyword>prefix delegation</keyword> | ||||
| <keyword>address pool</keyword> | ||||
| <keyword>prefix pool</keyword> | ||||
| <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. | |||
| 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 | 'elements' (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 121 ¶ | |||
| 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 275 ¶ | |||
| </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 548 ¶ | |||
| | +--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 may 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. The complete | |||
| </li> | list of DHCPV6 options is located at <xref target="IANA-DHCPV6-OPTION-CO | |||
| <li>class-selector: This is provided as a location for | DES"/>. | |||
| additional implementation specific YANG nodes for vendor | </dd> | |||
| specific class selector nodes to be augmented. See | <dt>class-selector:</dt><dd> This is provided as a location for | |||
| additional implementation-specific YANG nodes for vendor-specific | ||||
| 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"> | |||
| an individual IPv6 address from the server's lease database. | <dt>delete-address-lease:</dt><dd> This allows the deletion of a lease | |||
| </li> | for | |||
| <li>delete-prefix-lease: Allows the deletion of a lease for | an individual IPv6 address from the server's lease database. Per <xr | |||
| an individual IPv6 prefix from the server's lease database. | ef target="BCP18"/>, if available, a language identifier should be included in t | |||
| </li> | he | |||
| </ul> | output message. | |||
| <t>Information about notifications:</t> | </dd> | |||
| <ul spacing="normal"> | <dt>delete-prefix-lease:</dt><dd> This allows the deletion of a lease | |||
| <li>address/prefix-pool-utilization-threshold-exceeded: Raised | for | |||
| an individual IPv6 prefix from the server's lease database. Per <xre | ||||
| f target="BCP18"/>, if available, a language identifier should be included in th | ||||
| e | ||||
| output message. | ||||
| </dd> | ||||
| </dl></dd></dl> | ||||
| <dl newline="true" spacing="normal"> | ||||
| <dt>Information about notifications:</dt> | ||||
| <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 | |||
| message for a failure. | tus | |||
| </li> | message for a failure. Status codes are drawn from <xref target="IAN | |||
| </ul> | A-DHCPV6-STATUS-CODES"/>. | |||
| </dd> | ||||
| </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 757 ¶ | |||
| | +---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. Information | |||
| augmented as they are defined. | for the Authentication Option (OPTION_AUTH (11)) is drawn | |||
| </li> | from <xref target="IANA-DHCPV6-AUTH-NAMESPACES"/> | |||
| </ul> | and <xref target="RFC3118"/>. Where needed, other DHCPv6 option modul | |||
| <t>Information about RPCs</t> | es | |||
| <ul spacing="normal"> | can be augmented as they are defined. The complete list of DHCPV6 | |||
| <li>clear-prefix-entry: Allows the removal of a delegated | options is located at <xref target="IANA-DHCPV6-OPTION-CODES"/>. | |||
| lease entry from the relay. | </dd> | |||
| </li> | </dl></dd></dl> | |||
| <li>clear-client-prefixes: Allows the removal of all of the | <dl newline="true" spacing="normal"> | |||
| <dt>Information about RPCs:</dt> | ||||
| <dd><dl> | ||||
| <dt>clear-prefix-entry:</dt><dd> This allows the removal of a delegate | ||||
| d | ||||
| lease entry from the relay. Per <xref target="BCP18"/>, if available | ||||
| , | ||||
| a language identifier should be included in the output message. | ||||
| </dd> | ||||
| <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. Per <xref target="BCP18"/>, if availabl | |||
| </li> | e, | |||
| <li>clear-interface-prefixes: Allows the removal of all of | a language identifier should be included in the output message. | |||
| the delegated lease entries from an interface on the relay. | </dd> | |||
| </li> | <dt>clear-interface-prefixes:</dt><dd> This allows the removal of all | |||
| </ul> | of | |||
| <t>Information about notifications:</t> | the delegated lease entries from an interface on the relay. Per <xref | |||
| <ul spacing="normal"> | target="BCP18"/>, if available, a language identifier should be include | |||
| <li>topology-change: Raised when the topology of the relay | d | |||
| agent is changed, e.g., a client facing interface is | in the output message. | |||
| </dd> | ||||
| </dl></dd></dl> | ||||
| <dl newline="true" spacing="normal"> | ||||
| <dt>Information about notifications:</dt> | ||||
| <dd><dl> | ||||
| <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 961 ¶ | |||
| +--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> | The complete list of DHCPV6 options is located at | |||
| <li>ia-na, ia-ta, ia-pd: Contains configuration nodes relevant | <xref target="IANA-DHCPV6-OPTION-CODES"/>. | |||
| </dd> | ||||
| <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, drawing the status codes from | |||
| <xref target="IANA-DHCPV6-STATUS-CODES"/>. 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> | |||
| <t>This module imports typedefs from <xref target="RFC6991"/>. | ||||
| </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-06-20.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>"; | |||
| description | description | |||
| "This YANG module defines common components used for the | "This YANG module defines common components used for the | |||
| configuration and management of DHCPv6. | configuration and management of DHCPv6. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | |||
| 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | |||
| 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document | 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document | |||
| are to be interpreted as described in BCP 14 (RFC 2119) | are to be interpreted as described in BCP 14 (RFC 2119) | |||
| (RFC 8174) when, and only when, they appear in all | (RFC 8174) when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| Copyright (c) 2022 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9243 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9243); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| revision 2022-03-29 { | revision 2022-06-20 { | |||
| description | description | |||
| "Initial Revision."; | "Initial revision."; | |||
| reference | reference | |||
| "XXXX: YANG Data Model for DHCPv6 Configuration"; | "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; | |||
| } | } | |||
| typedef threshold { | typedef threshold { | |||
| type uint8 { | type uint8 { | |||
| range 1..100; | range "1..100"; | |||
| } | } | |||
| description | description | |||
| "Threshold value in percent."; | "Threshold value in percent."; | |||
| } | } | |||
| typedef timer-seconds32 { | typedef timer-seconds32 { | |||
| type uint32; | type uint32; | |||
| units "seconds"; | units "seconds"; | |||
| description | description | |||
| "Timer value type, in seconds (32-bit range)."; | "Timer value type in seconds (32-bit range)."; | |||
| } | } | |||
| typedef duid-base { | typedef duid-base { | |||
| type string { | type string { | |||
| pattern '([0-9a-fA-F]{2}){3,130}'; | pattern '([0-9a-fA-F]{2}){3,130}'; | |||
| } | } | |||
| description | description | |||
| "Each DHCP server and client has a DUID (DHCP Unique | "Each DHCP server and client has a DHCP Unique Identifier | |||
| Identifier). The DUID consists of a two-octet type field | (DUID). The DUID consists of a 2-octet type field | |||
| and an arbitrary length (1-128 octets) content field. | and an arbitrary length (1-128 octets) content field. | |||
| The duid-base type is used by other duid types with | The duid-base type is used by other duid types with | |||
| additional pattern constraints. | additional pattern constraints. | |||
| Currently, there are four defined types of DUIDs | Currently, there are four defined types of DUIDs | |||
| in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL and | in RFCs 8415 and 6355 -- DUID-LLT, DUID-EN, DUID-LL, and | |||
| DUID-UUID. DUID-unstructured represents DUIDs which do not | DUID-UUID. DUID-unstructured represents DUIDs that do not | |||
| follow any of the defined formats. | follow any of the defined formats. | |||
| Type 'string' is used to represent the hexadecimal DUID value | Type 'string' is used to represent the hexadecimal DUID value | |||
| so that pattern constraints can be applied."; | so that pattern constraints can be applied."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11 | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| RFC 6355: Definition of the UUID-Based DHCPv6 Unique | IPv6 (DHCPv6), Section 11 | |||
| Identifier (DUID-UUID), Section 4"; | RFC 6355: Definition of the UUID-Based DHCPv6 Unique | |||
| Identifier (DUID-UUID), Section 4"; | ||||
| } | } | |||
| typedef duid-llt { | typedef duid-llt { | |||
| type duid-base { | type duid-base { | |||
| pattern '0001' | pattern '0001' | |||
| + '[0-9a-fA-F]{12,}'; | + '[0-9a-fA-F]{12,}'; | |||
| } | } | |||
| description | description | |||
| "DUID type 1, based on Link-Layer Address Plus Time | "DUID type 1, based on Link-Layer Address Plus Time | |||
| (DUID-LLT). Constructed with a 2-octet hardware type assigned | (DUID-LLT). Constructed with a 2-octet hardware type assigned | |||
| by IANA, 4-octets containing the time the DUID is generated | by IANA, 4 octets containing the time the DUID is generated | |||
| (represented in seconds since midnight (UTC), January 1, 2000, | (represented in seconds since midnight (UTC), January 1, 2000, | |||
| modulo 2^32), and a link-layer address. The address is encoded | modulo 2^32), and a link-layer address. The address is encoded | |||
| without separator characters. For example: | without separator characters. For example: | |||
| +------+------+----------+--------------+ | +------+------+----------+--------------+ | |||
| | 0001 | 0006 | 28490058 | 00005E005300 | | | 0001 | 0006 | 28490058 | 00005E005300 | | |||
| +------+------+----------+--------------+ | +------+------+----------+--------------+ | |||
| This example includes the 2-octet DUID type of 1 (0x01), the | This example includes the 2-octet DUID type of 1 (0x01); the | |||
| hardware type is 0x06 (IEEE Hardware Types) the creation | hardware type is 0x06 (IEEE Hardware Types), and the creation | |||
| time is 0x28490058 (constructed as described above). Finally, | time is 0x28490058 (constructed as described above). Finally, | |||
| the link-layer address is 0x5E005300 (EUI-48 address | the link-layer address is 0x5E005300 (EUI-48 address | |||
| 00-00-5E-00-53-00)"; | 00-00-5E-00-53-00)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11.2 | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IANA 'Hardware Types' registry. | IPv6 (DHCPv6), Section 11.2 | |||
| <https://www.iana.org/assignments/arp-parameters>"; | IANA 'Hardware Types' registry | |||
| <https://www.iana.org/assignments/arp-parameters>"; | ||||
| } | } | |||
| typedef duid-en { | typedef duid-en { | |||
| type duid-base { | type duid-base { | |||
| pattern '0002' | pattern '0002' | |||
| + '[0-9a-fA-F]{8,}'; | + '[0-9a-fA-F]{8,}'; | |||
| } | } | |||
| description | description | |||
| "DUID type 2, assigned by vendor based on Enterprise | "DUID type 2, assigned by vendor based on Enterprise | |||
| Number (DUID-EN). This DUID consists of the 4-octet vendor's | Number (DUID-EN). This DUID consists of the 4-octet vendor's | |||
| registered Private Enterprise Number as maintained by IANA | registered Private Enterprise Number, as maintained by IANA, | |||
| followed by a unique identifier assigned by the vendor. For | followed by a unique identifier assigned by the vendor. For | |||
| example: | example: | |||
| +------+----------+------------------+ | +------+----------+------------------+ | |||
| | 0002 | 00007ED9 | 0CC084D303000912 | | | 0002 | 00007ED9 | 0CC084D303000912 | | |||
| +------+----------+------------------+ | +------+----------+------------------+ | |||
| This example includes the 2-octet DUID type of 2 (0x02), | This example includes the 2-octet DUID type of 2 (0x02), | |||
| 4-octets for the Enterprise Number (0x7ED9), followed by | 4 octets for the Enterprise Number (0x7ED9), followed by | |||
| 8-octets of identifier data (0x0CC084D303000912)."; | 8 octets of identifier data (0x0CC084D303000912)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11.3 | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IANA 'Private Enterprise Numbers' registry. | IPv6 (DHCPv6), Section 11.3 | |||
| <https://www.iana.org/assignments/enterprise-numbers>"; | IANA 'Private Enterprise Numbers' registry | |||
| <https://www.iana.org/assignments/enterprise-numbers>"; | ||||
| } | } | |||
| typedef duid-ll { | typedef duid-ll { | |||
| type duid-base { | type duid-base { | |||
| pattern '0003' | pattern '0003' | |||
| + '([0-9a-fA-F]){4,}'; | + '([0-9a-fA-F]){4,}'; | |||
| } | } | |||
| description | description | |||
| "DUID type 3, based on Link-Layer Address (DUID-LL). | "DUID type 3, based on Link-Layer Address (DUID-LL). | |||
| Constructed with a 2-octet hardware type assigned | Constructed with a 2-octet hardware type assigned | |||
| by IANA, and a link-layer address. The address is encoded | by IANA and a link-layer address. The address is encoded | |||
| without separator characters. For example: | without separator characters. For example: | |||
| +------+------+--------------+ | +------+------+--------------+ | |||
| | 0003 | 0006 | 00005E005300 | | | 0003 | 0006 | 00005E005300 | | |||
| +------+------+--------------+ | +------+------+--------------+ | |||
| This example includes the 2-octet DUID type of 3 (0x03), the | This example includes the 2-octet DUID type of 3 (0x03); the | |||
| hardware type is 0x06 (IEEE Hardware Types), and the | hardware type is 0x06 (IEEE Hardware Types), and the | |||
| link-layer address is 0x5E005300 (EUI-48 address | link-layer address is 0x5E005300 (EUI-48 address | |||
| 00-00-5E-00-53-00)"; | 00-00-5E-00-53-00)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11.4 | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IANA 'Hardware Types' registry. | IPv6 (DHCPv6), Section 11.4 | |||
| <https://www.iana.org/assignments/arp-parameters>"; | IANA 'Hardware Types' registry | |||
| <https://www.iana.org/assignments/arp-parameters>"; | ||||
| } | } | |||
| typedef duid-uuid { | typedef duid-uuid { | |||
| type duid-base { | type duid-base { | |||
| pattern '0004' | pattern '0004' | |||
| + '[0-9a-fA-F]{32}'; | + '[0-9a-fA-F]{32}'; | |||
| } | } | |||
| description | description | |||
| "DUID type 4, based on Universally Unique Identifier | "DUID type 4, based on Universally Unique Identifier | |||
| (DUID-UUID). This type of DUID consists of 16 octets | (DUID-UUID). This type of DUID consists of 16 octets | |||
| containing a 128-bit UUID. For example: | containing a 128-bit UUID. For example: | |||
| +------+----------------------------------+ | +------+----------------------------------+ | |||
| | 0004 | 9f03b182705747e38a1e422910078642 | | | 0004 | 9f03b182705747e38a1e422910078642 | | |||
| +------+----------------------------------+ | +------+----------------------------------+ | |||
| This example includes the 2-octet DUID type of 4 (0x04), and | This example includes the 2-octet DUID type of 4 (0x04) and | |||
| the UUID 9f03b182-7057-47e3-8a1e-422910078642."; | the UUID 9f03b182-7057-47e3-8a1e-422910078642."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11.5 | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| RFC 6355: Definition of the UUID-Based DHCPv6 Unique | IPv6 (DHCPv6), Section 11.5 | |||
| Identifier (DUID-UUID)"; | RFC 6355: Definition of the UUID-Based DHCPv6 Unique | |||
| Identifier (DUID-UUID)"; | ||||
| } | } | |||
| typedef duid-unstructured { | typedef duid-unstructured { | |||
| type duid-base { | type duid-base { | |||
| pattern '(000[1-4].*)' { | pattern '(000[1-4].*)' { | |||
| modifier invert-match; | modifier "invert-match"; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "Used for DUIDs following any other formats than DUID | "Used for DUIDs following any formats other than DUID | |||
| types 1-4. For example: | types 1-4. For example: | |||
| +----------------------------------+ | +----------------------------------+ | |||
| | 7b6a164d325946539dc540fb539bc430 | | | 7b6a164d325946539dc540fb539bc430 | | |||
| +----------------------------------+ | +----------------------------------+ | |||
| Here, an arbitrary 16-octet value is used. The only constraint | Here, an arbitrary 16-octet value is used. The only | |||
| placed on this is that the first 2-octects are not 0x01-0x04 | constraint placed on this is that the first 2 octets | |||
| to avoid collision with the other defined DUID types | are not 0x01-0x04 to avoid collision with the other | |||
| (duid-llt, duid-en, duid-ll, or duid-uuid)."; | defined DUID types (duid-llt, duid-en, duid-ll, | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | or duid-uuid)."; | |||
| IPv6 (DHCPv6), Section 11"; | reference | |||
| "RFC 8415: Dynamic Host Configuration Protocol for | ||||
| IPv6 (DHCPv6), Section 11"; | ||||
| } | } | |||
| typedef duid { | typedef duid { | |||
| type union { | type union { | |||
| type duid-llt; | type duid-llt; | |||
| type duid-en; | type duid-en; | |||
| type duid-ll; | type duid-ll; | |||
| type duid-uuid; | type duid-uuid; | |||
| type duid-unstructured; | type duid-unstructured; | |||
| } | } | |||
| description | description | |||
| "Represents the DUID and is neutral to the DUID's construction | "Represents the DUID and is neutral to the DUID's construction | |||
| format."; | format."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 11"; | ||||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping status { | grouping status { | |||
| description | description | |||
| "Holds information about the most recent status code which | "Holds information about the most recent status code that | |||
| has been sent by the server or received by the client."; | has been sent by the server or received by the client."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 7.5."; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 7.5."; | ||||
| container status { | container status { | |||
| description | description | |||
| "Status code information, relating to the success or failure | "Status code information, relating to the success or failure | |||
| of operations requested in messages."; | of operations requested in messages."; | |||
| leaf code { | leaf code { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "The numeric code for the status encoded in this option. | "The numeric code for the status encoded in this option. | |||
| See the Status Codes registry at | See the 'Status Codes' registry at | |||
| <https://www.iana.org/assignments/dhcpv6-parameters> | <https://www.iana.org/assignments/dhcpv6-parameters> | |||
| for the current list of status codes."; | for the current list of status codes."; | |||
| } | } | |||
| leaf message { | leaf message { | |||
| type string; | type string; | |||
| description | description | |||
| "A UTF-8 encoded text string suitable for display to an | "A UTF-8-encoded text string suitable for display to an | |||
| end user. It MUST NOT be null-terminated."; | end user. It MUST NOT be null terminated."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping auth-option-group { | grouping auth-option-group { | |||
| description | description | |||
| "OPTION_AUTH (11) Authentication Option."; | "OPTION_AUTH (11) Authentication Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 21.11 | "RFC 8415: Dynamic Host Configuration Protocol | |||
| RFC 3118: Authentication for DHCP Messages | for IPv6 (DHCPv6), Section 21.11 | |||
| IANA 'Dynamic Host Configuration Protocol (DHCP) | RFC 3118: Authentication for DHCP Messages | |||
| Authentication Option Name Spaces' registry. | IANA 'Dynamic Host Configuration Protocol (DHCP) | |||
| <https://www.iana.org/assignments/auth-namespaces>"; | Authentication Option Name Spaces' registry | |||
| <https://www.iana.org/assignments/auth-namespaces>"; | ||||
| container auth-option { | container auth-option { | |||
| description | description | |||
| "OPTION_AUTH (11) Authentication Option."; | "OPTION_AUTH (11) Authentication Option."; | |||
| leaf algorithm { | leaf algorithm { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The algorithm used in the authentication protocol."; | "The algorithm used in the authentication protocol."; | |||
| } | } | |||
| leaf rdm { | leaf rdm { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The Replay Detection Method (RDM) used in this | "The Replay Detection Method (RDM) used in this | |||
| Authentication option."; | Authentication option."; | |||
| } | } | |||
| leaf replay-detection { | leaf replay-detection { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "The replay detection information for the RDM."; | "The replay detection information for the RDM."; | |||
| } | } | |||
| choice protocol { | choice protocol { | |||
| description | description | |||
| "The authentication protocol used in the option. Namespace | "The authentication protocol used in the option. Protocol | |||
| values 1 (delayed authentication) and 2 (Delayed | Namespace Values 1 (delayed authentication) and 2 (Delayed | |||
| Authentication (Obsolete) are not applicable and so are | Authentication (Obsolete)) are not applicable and so are | |||
| not modeled."; | not modeled."; | |||
| case conf-token { | case conf-token { | |||
| leaf token-auth-information { | leaf token-auth-information { | |||
| type binary; | type binary; | |||
| description | description | |||
| "Protocol Namespace Value 0. The authentication | "Protocol Namespace Value 0. The authentication | |||
| information, as specified by the protocol and | information, as specified by the protocol and | |||
| algorithm used in this Authentication option."; | algorithm used in this Authentication option."; | |||
| } | } | |||
| } | } | |||
| case rkap { | case rkap { | |||
| description | description | |||
| "Protocol Namespace Value 3. RKAP provides protection | "Protocol Namespace Value 3. The Reconfigure Key | |||
| against misconfiguration of a client caused by a | Authentication Protocol (RKAP) provides protection | |||
| Reconfigure message sent by a malicious DHCP server."; | against misconfiguration of a client caused by a | |||
| Reconfigure message sent by a malicious DHCP | ||||
| server."; | ||||
| leaf datatype { | leaf datatype { | |||
| type uint8 { | type uint8 { | |||
| range "1 .. 2"; | range "1 .. 2"; | |||
| } | } | |||
| description | description | |||
| "Type of data in the Value field carried in this | "Type of data in the Value field carried in this | |||
| option. | option. | |||
| 1 Reconfigure key value (used in the Reply | 1 Reconfigure key value (used in the Reply | |||
| message). | message). | |||
| 2 HMAC-MD5 digest of the message (used in | 2 HMAC-MD5 digest of the message (used in | |||
| the Reconfigure message)."; | the Reconfigure message)."; | |||
| } | } | |||
| leaf auth-info-value { | leaf auth-info-value { | |||
| type binary { | type binary { | |||
| length 16; | length "16"; | |||
| } | } | |||
| description | description | |||
| "Data as defined by the Type field. A 16-octet field."; | "Data, as defined by the Type field. A 16-octet | |||
| field."; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping rapid-commit-option-group { | grouping rapid-commit-option-group { | |||
| description | description | |||
| "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; | "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.14"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.14"; | ||||
| container rapid-commit-option { | container rapid-commit-option { | |||
| presence "Enable sending of this option"; | presence "Enable sending of this option"; | |||
| description | description | |||
| "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; | "OPTION_RAPID_COMMIT (14) Rapid Commit Option."; | |||
| } | } | |||
| } | } | |||
| grouping vendor-specific-information-option-group { | grouping vendor-specific-information-option-group { | |||
| description | description | |||
| "OPTION_VENDOR_OPTS (17) Vendor-specific Information | "OPTION_VENDOR_OPTS (17) Vendor-specific Information | |||
| Option."; | Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 21.17"; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 21.17"; | ||||
| container vendor-specific-information-options { | container vendor-specific-information-options { | |||
| description | description | |||
| "OPTION_VENDOR_OPTS (17) Vendor-specific Information | "OPTION_VENDOR_OPTS (17) Vendor-specific Information | |||
| Option."; | Option."; | |||
| list vendor-specific-information-option { | list vendor-specific-information-option { | |||
| key enterprise-number; | key "enterprise-number"; | |||
| description | description | |||
| "The Vendor-specific Information option allows for | "The Vendor-specific Information option allows for | |||
| multiple instances in a single message. Each list entry | multiple instances in a single message. Each list entry | |||
| defines the contents of an instance of the option."; | defines the contents of an instance of the option."; | |||
| leaf enterprise-number { | leaf enterprise-number { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The vendor's registered Enterprise Number, as | "The vendor's registered Enterprise Number, as | |||
| maintained by IANA."; | maintained by IANA."; | |||
| reference "IANA 'Private Enterprise Numbers' registry. | reference | |||
| <https://www.iana.org/assignments/enterprise-numbers>"; | "IANA 'Private Enterprise Numbers' registry | |||
| <https://www.iana.org/assignments/enterprise-numbers>"; | ||||
| } | } | |||
| list vendor-option-data { | list vendor-option-data { | |||
| key sub-option-code; | key "sub-option-code"; | |||
| description | description | |||
| "Vendor options, interpreted by vendor-specific | "Vendor options, interpreted by vendor-specific | |||
| client/server functions."; | client/server functions."; | |||
| leaf sub-option-code { | leaf sub-option-code { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "The code for the sub-option."; | "The code for the sub-option."; | |||
| } | } | |||
| leaf sub-option-data { | leaf sub-option-data { | |||
| type binary; | type binary; | |||
| description | description | |||
| "The data area for the sub-option."; | "The data area for the sub-option."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping reconfigure-accept-option-group { | grouping reconfigure-accept-option-group { | |||
| description | description | |||
| "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. | "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option. | |||
| A client uses the Reconfigure Accept option to announce to | A client uses the Reconfigure Accept option to announce to | |||
| the server whether the client is willing to accept Reconfigure | the server whether or not the client is willing to accept | |||
| messages, and a server uses this option to tell the client | Reconfigure messages, and a server uses this option to tell | |||
| whether or not to accept Reconfigure messages. In the absence | the client whether or not to accept Reconfigure messages. In | |||
| of this option, the default behavior is that the client is | the absence of this option, the default behavior is that the | |||
| unwilling to accept Reconfigure messages. The presence node | client is unwilling to accept Reconfigure messages. The | |||
| is used to enable the option."; | presence node is used to enable the option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 21.20"; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 21.20"; | ||||
| container reconfigure-accept-option { | container reconfigure-accept-option { | |||
| presence "Enable sending of this option"; | presence "Enable sending of this option"; | |||
| description | description | |||
| "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option."; | "OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS>]]> | ]]></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" | ||||
| <t>This module imports typedefs from <xref target="RFC6991"/> and | ||||
| the module defined in <xref target="RFC8343"/>.</t> | ||||
| <sourcecode name="ietf-dhcpv6-server@2022-06-20.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>"; | |||
| description | description | |||
| "This YANG module defines components for the configuration | "This YANG module defines components for the configuration | |||
| and management of DHCPv6 servers. | and management of DHCPv6 servers. | |||
| Copyright (c) 2022 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9243 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9243); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| revision 2022-03-29 { | revision 2022-06-20 { | |||
| description | description | |||
| "Initial Revision."; | "Initial revision."; | |||
| reference | reference | |||
| "XXXX: YANG Data Model for DHCPv6 Configuration"; | "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; | |||
| } | } | |||
| /* | /* | |||
| * Features | * Features | |||
| */ | */ | |||
| feature na-assignment { | feature na-assignment { | |||
| description | description | |||
| "Denotes that the server implements DHCPv6 non-temporary | "Denotes that the server implements DHCPv6 non-temporary | |||
| address assignment."; | address assignment."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 6.2"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 6.2"; | ||||
| } | } | |||
| feature prefix-delegation { | feature prefix-delegation { | |||
| description | description | |||
| "Denotes that the server implements DHCPv6 prefix | "Denotes that the server implements DHCPv6 prefix | |||
| delegation."; | delegation."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 6.3"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 6.3"; | ||||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping resource-config { | grouping resource-config { | |||
| description | description | |||
| "Nodes that are reused at multiple levels in the DHCPv6 | "Nodes that are reused at multiple levels in the DHCPv6 | |||
| server's addressing hierarchy."; | server's addressing hierarchy."; | |||
| leaf-list option-set-id { | leaf-list option-set-id { | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-server/option-sets/option-set/option-set-id"; | path "/dhcpv6-server/option-sets/option-set/option-set-id"; | |||
| } | } | |||
| description | description | |||
| "The ID field of relevant set of DHCPv6 options (option-set) | "The ID field of the relevant set of DHCPv6 options | |||
| to be provisioned to clients using the allocation-range."; | (option-set) to be provisioned to clients using the | |||
| allocation-range."; | ||||
| } | } | |||
| leaf valid-lifetime { | leaf valid-lifetime { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "Valid lifetime for the Identity Association (IA)."; | "Valid lifetime for the Identity Association (IA)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 12.1"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 12.1"; | ||||
| } | } | |||
| leaf renew-time { | leaf renew-time { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "Renew (T1) time."; | "Renew (T1) time."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 4.2"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 4.2"; | ||||
| } | } | |||
| leaf rebind-time { | leaf rebind-time { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "Rebind (T2) time."; | "Rebind (T2) time."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 4.2"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 4.2"; | ||||
| } | } | |||
| leaf preferred-lifetime { | leaf preferred-lifetime { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "Preferred lifetime for the Identity Association (IA)."; | "Preferred lifetime for the IA."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 12.1"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 12.1"; | ||||
| } | } | |||
| leaf rapid-commit { | leaf rapid-commit { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "When set to 'true', Specifies that client-server exchanges | "When set to 'true', specifies that client-server exchanges | |||
| involving two messages is supported."; | involving two messages is supported."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 5.1"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 5.1"; | ||||
| } | } | |||
| } | } | |||
| grouping lease-information { | grouping lease-information { | |||
| description | description | |||
| "Binding information for each client that has been allocated | "Binding information for each client that has been allocated | |||
| an IPv6 address or prefix."; | an IPv6 address or prefix."; | |||
| leaf client-duid { | leaf client-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "Client DUID."; | "Client DUID."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 11"; | ||||
| } | } | |||
| leaf ia-id { | leaf ia-id { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Client's IAID"; | "Client's Identity Association IDentifier (IAID)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 12"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 12"; | ||||
| } | } | |||
| leaf allocation-time { | leaf allocation-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Time and date that the lease was made."; | "Time and date that the lease was made."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 18"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 18"; | ||||
| } | } | |||
| leaf last-renew-rebind { | leaf last-renew-rebind { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Time of the last successful renew or rebind."; | "Time of the last successful renew or rebind."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 18"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 18"; | ||||
| } | } | |||
| leaf preferred-lifetime { | leaf preferred-lifetime { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The preferred lifetime expressed in seconds."; | "The preferred lifetime expressed in seconds."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 6"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 6"; | ||||
| } | } | |||
| leaf valid-lifetime { | leaf valid-lifetime { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The valid lifetime for the lease expressed in seconds."; | "The valid lifetime for the lease expressed in seconds."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 6"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 6"; | ||||
| } | } | |||
| leaf lease-t1 { | leaf lease-t1 { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The time interval after which the client should contact | "The time interval after which the client should contact | |||
| the server from which the addresses in the IA_NA were | the server from which the addresses in the IA_NA were | |||
| obtained to extend the lifetimes of the addresses assigned | obtained to extend the lifetimes of the addresses assigned | |||
| to the IA_PD."; | to the Identity Association for Prefix Delegation (IA_PD)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 4.2"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 4.2"; | ||||
| } | } | |||
| leaf lease-t2 { | leaf lease-t2 { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The time interval after which the client should contact | "The time interval after which the client should contact | |||
| any available server to extend the lifetimes of the | any available server to extend the lifetimes of the | |||
| addresses assigned to the IA_PD."; | addresses assigned to the IA_PD."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 4.2"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 4.2"; | ||||
| } | } | |||
| uses dhc6:status; | uses dhc6:status; | |||
| } | } | |||
| grouping message-statistics { | grouping message-statistics { | |||
| description | description | |||
| "Counters for DHCPv6 messages."; | "Counters for DHCPv6 messages."; | |||
| leaf discontinuity-time { | leaf discontinuity-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "The time on the most recent occasion at which any one or | "The time on the most recent occasion at which any one or | |||
| more of DHCPv6 server's counters suffered a discontinuity. | more of DHCPv6 server's counters suffered a discontinuity. | |||
| If no such discontinuities have occurred since the last | If no such discontinuities have occurred since the last | |||
| re-initialization of the local management subsystem, then | re-initialization of the local management subsystem, then | |||
| this node contains the time the local management subsystem | this node contains the time the local management subsystem | |||
| re-initialized itself."; | re-initialized itself."; | |||
| } | } | |||
| leaf solicit-count { | leaf solicit-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Solicit (1) messages received."; | "Number of Solicit (1) messages received."; | |||
| } | } | |||
| leaf advertise-count { | leaf advertise-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Advertise (2) messages sent."; | "Number of Advertise (2) messages sent."; | |||
| } | } | |||
| leaf request-count { | leaf request-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Request (3) messages received."; | "Number of Request (3) messages received."; | |||
| } | } | |||
| leaf confirm-count { | leaf confirm-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Confirm (4) messages received."; | "Number of Confirm (4) messages received."; | |||
| } | } | |||
| leaf renew-count { | leaf renew-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Renew (5) messages received."; | "Number of Renew (5) messages received."; | |||
| } | } | |||
| leaf rebind-count { | leaf rebind-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Rebind (6) messages received."; | "Number of Rebind (6) messages received."; | |||
| } | } | |||
| leaf reply-count { | leaf reply-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Reply (7) messages sent."; | "Number of Reply (7) messages sent."; | |||
| } | } | |||
| leaf release-count { | leaf release-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Release (8) messages received."; | "Number of Release (8) messages received."; | |||
| } | } | |||
| leaf decline-count { | leaf decline-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Decline (9) messages received."; | "Number of Decline (9) messages received."; | |||
| } | } | |||
| leaf reconfigure-count { | leaf reconfigure-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Reconfigure (10) messages sent."; | "Number of Reconfigure (10) messages sent."; | |||
| } | } | |||
| leaf information-request-count { | leaf information-request-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Information-request (11) messages | "Number of Information-request (11) messages | |||
| received."; | received."; | |||
| } | } | |||
| leaf discarded-message-count { | leaf discarded-message-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of messages that have been discarded for any | "Number of messages that have been discarded for any | |||
| reason."; | reason."; | |||
| } | } | |||
| } | } | |||
| grouping preference-option-group { | grouping preference-option-group { | |||
| description | description | |||
| "OPTION_PREFERENCE (7) Preference Option."; | "OPTION_PREFERENCE (7) Preference Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.8"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| container preference-option { | IPv6 (DHCPv6), Section 21.8"; | |||
| description | container preference-option { | |||
| "OPTION_PREFERENCE (7) Preference Option."; | description | |||
| leaf pref-value { | "OPTION_PREFERENCE (7) Preference Option."; | |||
| leaf pref-value { | ||||
| type uint8; | type uint8; | |||
| description | description | |||
| "The preference value for the server in this message. A | "The preference value for the server in this message. A | |||
| 1-octet unsigned integer."; | 1-octet unsigned integer."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping server-unicast-option-group { | grouping server-unicast-option-group { | |||
| description | description | |||
| "OPTION_UNICAST (12) Server Unicast Option."; | "OPTION_UNICAST (12) Server Unicast Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.12"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.12"; | ||||
| container server-unicast-option { | container server-unicast-option { | |||
| description | description | |||
| "OPTION_UNICAST (12) Server Unicast Option."; | "OPTION_UNICAST (12) Server Unicast Option."; | |||
| leaf server-address { | leaf server-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "The 128-bit address to which the client should send | "The 128-bit address to which the client should send | |||
| messages delivered using unicast."; | messages delivered using unicast."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping reconfigure-message-option-group { | grouping reconfigure-message-option-group { | |||
| description | description | |||
| "OPTION_RECONF_MSG (19) Reconfigure Message Option."; | "OPTION_RECONF_MSG (19) Reconfigure Message Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.19"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.19"; | ||||
| container reconfigure-message-option { | container reconfigure-message-option { | |||
| description | description | |||
| "OPTION_RECONF_MSG (19) Reconfigure Message Option."; | "OPTION_RECONF_MSG (19) Reconfigure Message Option."; | |||
| leaf msg-type { | leaf msg-type { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "5 for Renew message, 6 for Rebind message, 11 for | "5 for Renew message, 6 for Rebind message, and 11 for | |||
| Information-request message."; | Information-request message."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping info-refresh-time-option-group { | grouping info-refresh-time-option-group { | |||
| description | description | |||
| "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh | "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh | |||
| Time Option."; | Time Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.23"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.23"; | ||||
| container info-refresh-time-option { | container info-refresh-time-option { | |||
| description | description | |||
| "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh | "OPTION_INFORMATION_REFRESH_TIME (32) Information Refresh | |||
| Time Option."; | Time Option."; | |||
| leaf info-refresh-time { | leaf info-refresh-time { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "Time duration specifying an upper bound for how long a | "Time duration specifying an upper bound for how long a | |||
| client should wait before refreshing information retrieved | client should wait before refreshing information retrieved | |||
| from a DHCP server."; | from a DHCP server."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping sol-max-rt-option-group { | grouping sol-max-rt-option-group { | |||
| description | description | |||
| "OPTION_SOL_MAX_RT (82) SOL_MAX_RT Option (Max Solicit timeout | "OPTION_SOL_MAX_RT (82) SOL_MAX_RT Option (Max Solicit timeout | |||
| value)."; | value)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.24"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.24"; | ||||
| container sol-max-rt-option { | container sol-max-rt-option { | |||
| description | description | |||
| "OPTION_SOL_MAX_RT (82) SOL_MAX_RT Option."; | "OPTION_SOL_MAX_RT (82) SOL_MAX_RT Option."; | |||
| leaf sol-max-rt-value { | leaf sol-max-rt-value { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "Maximum Solicit timeout value."; | "Maximum Solicit timeout value."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping inf-max-rt-option-group { | grouping inf-max-rt-option-group { | |||
| description | description | |||
| "OPTION_INF_MAX_RT (83) INF_MAX_RT Option (Max | "OPTION_INF_MAX_RT (83) INF_MAX_RT Option (Max | |||
| Information-request timeout value)."; | Information-request timeout value)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.25"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.25"; | ||||
| container inf-max-rt-option { | container inf-max-rt-option { | |||
| description | description | |||
| "OPTION_INF_MAX_RT (83) inf max rt Option."; | "OPTION_INF_MAX_RT (83) INF_MAX_RT Option."; | |||
| leaf inf-max-rt-value { | leaf inf-max-rt-value { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "Maximum Information-request timeout value."; | "Maximum Information-request timeout value."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Data Nodes | * Data Nodes | |||
| */ | */ | |||
| container dhcpv6-server { | container dhcpv6-server { | |||
| description | description | |||
| "Configuration nodes for the DHCPv6 server."; | "Configuration nodes for the DHCPv6 server."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 18.3"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 18.3"; | ||||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "Enables the DHCP server function."; | "Enables the DHCP server function."; | |||
| } | } | |||
| leaf server-duid { | leaf server-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "DUID of the server."; | "DUID of the server."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 11"; | ||||
| } | } | |||
| container vendor-config { | container vendor-config { | |||
| description | description | |||
| "This container provides a location for augmenting vendor | "This container provides a location for augmenting vendor | |||
| or implementation specific configuration nodes."; | or implementation-specific configuration nodes."; | |||
| } | } | |||
| container option-sets { | container option-sets { | |||
| description | description | |||
| "A server may allow different option sets to be configured | "A server may allow different option sets to be configured | |||
| for clients matching specific parameters such as topological | for clients matching specific parameters, such as | |||
| location or client type. The 'option-set' list is a set of | topological location or client type. The 'option-set' list | |||
| options and their contents that will be returned to | is a set of options and their contents that will be | |||
| clients."; | returned to clients."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21"; | ||||
| list option-set { | list option-set { | |||
| key option-set-id; | key "option-set-id"; | |||
| description | description | |||
| "YANG definitions for DHCPv6 options are contained in | "YANG definitions for DHCPv6 options are contained in | |||
| separate YANG modules and augmented to this container as | separate YANG modules and augmented to this container as | |||
| required."; | required."; | |||
| leaf option-set-id { | leaf option-set-id { | |||
| type string; | type string; | |||
| description | description | |||
| "Option set identifier."; | "Option set identifier."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "An optional field for storing additional information | "An optional field for storing additional information | |||
| relevant to the option set."; | relevant to the option set."; | |||
| } | } | |||
| uses preference-option-group; | uses preference-option-group; | |||
| uses dhc6:auth-option-group; | uses dhc6:auth-option-group; | |||
| uses server-unicast-option-group; | uses server-unicast-option-group; | |||
| uses dhc6:rapid-commit-option-group; | uses dhc6:rapid-commit-option-group; | |||
| uses dhc6:vendor-specific-information-option-group; | uses dhc6:vendor-specific-information-option-group; | |||
| uses reconfigure-message-option-group; | uses reconfigure-message-option-group; | |||
| uses dhc6:reconfigure-accept-option-group; | uses dhc6:reconfigure-accept-option-group; | |||
| uses info-refresh-time-option-group; | uses info-refresh-time-option-group; | |||
| uses sol-max-rt-option-group; | uses sol-max-rt-option-group; | |||
| skipping to change at line 1896 ¶ | skipping to change at line 1956 ¶ | |||
| uses server-unicast-option-group; | uses server-unicast-option-group; | |||
| uses dhc6:rapid-commit-option-group; | uses dhc6:rapid-commit-option-group; | |||
| uses dhc6:vendor-specific-information-option-group; | uses dhc6:vendor-specific-information-option-group; | |||
| uses reconfigure-message-option-group; | uses reconfigure-message-option-group; | |||
| uses dhc6:reconfigure-accept-option-group; | uses dhc6:reconfigure-accept-option-group; | |||
| uses info-refresh-time-option-group; | uses info-refresh-time-option-group; | |||
| uses sol-max-rt-option-group; | uses sol-max-rt-option-group; | |||
| uses inf-max-rt-option-group; | uses inf-max-rt-option-group; | |||
| } | } | |||
| } | } | |||
| container class-selector { | container class-selector { | |||
| description | description | |||
| "DHCPv6 servers use a 'class-selector' function in order | "DHCPv6 servers use a 'class-selector' function in order | |||
| to identify and classify incoming client messages | to identify and classify incoming client messages | |||
| so that they can be given the correct configuration. | so that they can be given the correct configuration. | |||
| The mechanisms used for implementing this function vary | The mechanisms used for implementing this function vary | |||
| greatly between different implementations such it is not | greatly between different implementations; as such, it is | |||
| possible to include in this module. This container provides | not possible to include them in this module. This container | |||
| a location for server implementors to augment their own | provides a location for server implementors to augment their | |||
| class-selector YANG."; | own class-selector YANG."; | |||
| } | } | |||
| container allocation-ranges { | container allocation-ranges { | |||
| description | description | |||
| "This model is based on an address and parameter | "This model is based on an address and parameter | |||
| allocation hierarchy. The top level is 'global' - which | allocation hierarchy. The top level is 'global' -- which | |||
| is defined as the container for all allocation-ranges. Under | is defined as the container for all allocation-ranges. | |||
| this are the individual allocation-ranges."; | Under this are the individual allocation-ranges."; | |||
| uses resource-config; | uses resource-config; | |||
| list allocation-range { | list allocation-range { | |||
| key id; | key "id"; | |||
| description | description | |||
| "Network-ranges are identified by the 'id' key."; | "Network ranges are identified by the 'id' key."; | |||
| leaf id { | leaf id { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Unique identifier for the allocation range."; | "Unique identifier for the allocation range."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Description for the allocation range."; | "Description for the allocation range."; | |||
| } | } | |||
| leaf network-prefix { | leaf network-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Network prefix."; | "Network prefix."; | |||
| } | } | |||
| uses resource-config; | uses resource-config; | |||
| container address-pools { | container address-pools { | |||
| if-feature na-assignment; | if-feature "na-assignment"; | |||
| description | description | |||
| "Configuration for the DHCPv6 server's | "Configuration for the DHCPv6 server's | |||
| address pools."; | address pools."; | |||
| list address-pool { | list address-pool { | |||
| key pool-id; | key "pool-id"; | |||
| description | description | |||
| "List of address pools for allocation to clients, | "List of address pools for allocation to clients, | |||
| distinguished by 'pool-id'."; | distinguished by 'pool-id'."; | |||
| leaf pool-id { | leaf pool-id { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Unique identifier for the pool."; | "Unique identifier for the pool."; | |||
| } | } | |||
| leaf pool-prefix { | leaf pool-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "IPv6 prefix for the pool. Should be contained | "IPv6 prefix for the pool. Should be contained | |||
| within the network-prefix, if configured."; | within the network-prefix if configured."; | |||
| } | } | |||
| leaf start-address { | leaf start-address { | |||
| type inet:ipv6-address-no-zone; | type inet:ipv6-address-no-zone; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Starting IPv6 address for the pool."; | "Starting IPv6 address for the pool."; | |||
| } | } | |||
| leaf end-address { | leaf end-address { | |||
| type inet:ipv6-address-no-zone; | type inet:ipv6-address-no-zone; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Ending IPv6 address for the pool."; | "Ending IPv6 address for the pool."; | |||
| } | } | |||
| leaf max-address-utilization { | leaf max-address-utilization { | |||
| type dhc6:threshold; | type dhc6:threshold; | |||
| description | description | |||
| "Maximum amount of the addresses in the | "Maximum amount of the addresses in the | |||
| pool which can be simultaneously allocated, | pool that can be simultaneously allocated, | |||
| calculated as a percentage of the available | calculated as a percentage of the available | |||
| addresses (end-address minus start-address plus | addresses (end-address minus start-address plus | |||
| one), rouded up. Used to set the value for the | one), and rounded up. Used to set the value for | |||
| address-pool-utilization-threshold-exceeded | the address-pool-utilization-threshold-exceeded | |||
| notification"; | notification."; | |||
| } | } | |||
| uses resource-config; | uses resource-config; | |||
| container host-reservations { | container host-reservations { | |||
| description | description | |||
| "Configuration for host reservations from the | "Configuration for host reservations from the | |||
| address pool."; | address pool."; | |||
| list host-reservation { | list host-reservation { | |||
| key reserved-addr; | key "reserved-addr"; | |||
| description | description | |||
| "List of host reservations."; | "List of host reservations."; | |||
| leaf client-duid { | leaf client-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "Client DUID for the reservation."; | "Client DUID for the reservation."; | |||
| } | } | |||
| leaf reserved-addr { | leaf reserved-addr { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Reserved IPv6 address."; | "Reserved IPv6 address."; | |||
| } | } | |||
| uses resource-config; | uses resource-config; | |||
| } | } | |||
| } | } | |||
| container active-leases { | container active-leases { | |||
| config false; | config false; | |||
| description | description | |||
| "Holds state related to active client | "Holds state related to active client | |||
| leases."; | leases."; | |||
| leaf total-count { | leaf total-count { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The total number of addresses in the pool."; | "The total number of addresses in the pool."; | |||
| } | } | |||
| leaf allocated-count { | leaf allocated-count { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The number of addresses or prefixes in the pool | "The number of addresses or prefixes in the pool | |||
| that are currently allocated."; | that are currently allocated."; | |||
| } | } | |||
| list active-lease { | list active-lease { | |||
| key leased-address; | key "leased-address"; | |||
| description | description | |||
| "List of active address leases."; | "List of active address leases."; | |||
| leaf leased-address { | leaf leased-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Active address lease entry."; | "Active address lease entry."; | |||
| } | } | |||
| uses lease-information; | uses lease-information; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container prefix-pools { | container prefix-pools { | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| description | description | |||
| "Configuration for the DHCPv6 server's prefix pools."; | "Configuration for the DHCPv6 server's prefix pools."; | |||
| list prefix-pool { | list prefix-pool { | |||
| key pool-id; | key "pool-id"; | |||
| description | description | |||
| "List of prefix pools for allocation to clients, | "List of prefix pools for allocation to clients, | |||
| distinguished by 'pool-id'."; | distinguished by 'pool-id'."; | |||
| leaf pool-id { | leaf pool-id { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Unique identifier for the pool."; | "Unique identifier for the pool."; | |||
| } | } | |||
| leaf pool-prefix { | leaf pool-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "IPv6 prefix for the pool. Should be contained | "IPv6 prefix for the pool. Should be contained | |||
| within the network-prefix, if configured."; | within the network-prefix if configured."; | |||
| } | } | |||
| leaf client-prefix-length { | leaf client-prefix-length { | |||
| type uint8 { | type uint8 { | |||
| range "1 .. 128"; | range "1 .. 128"; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Length of the prefixes that will be delegated | "Length of the prefixes that will be delegated | |||
| to clients."; | to clients."; | |||
| } | } | |||
| leaf max-pd-space-utilization { | leaf max-pd-space-utilization { | |||
| type dhc6:threshold; | type dhc6:threshold; | |||
| description | description | |||
| "Maximum amount of the prefixes in the pool which | "Maximum amount of the prefixes in the pool that | |||
| can be simultaneously allocated, calculated as a | can be simultaneously allocated, calculated as a | |||
| percentage of the available prefixes, rounded up. | percentage of the available prefixes, and rounded | |||
| Used to set the value for the | up. Used to set the value for the | |||
| prefix-pool-utilization-threshold-exceeded | prefix-pool-utilization-threshold-exceeded | |||
| notification"; | notification."; | |||
| } | } | |||
| uses resource-config; | uses resource-config; | |||
| container host-reservations { | container host-reservations { | |||
| description | description | |||
| "Configuration for host reservations from the | "Configuration for host reservations from the | |||
| prefix pool."; | prefix pool."; | |||
| list prefix-reservation { | list prefix-reservation { | |||
| key reserved-prefix; | key "reserved-prefix"; | |||
| description | description | |||
| "Reserved prefix reservation."; | "Reserved prefix reservation."; | |||
| leaf client-duid { | leaf client-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "Client DUID for the reservation."; | "Client DUID for the reservation."; | |||
| } | } | |||
| leaf reserved-prefix { | leaf reserved-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "Reserved IPv6 prefix"; | "Reserved IPv6 prefix."; | |||
| } | } | |||
| leaf reserved-prefix-len { | leaf reserved-prefix-len { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "Reserved IPv6 prefix length."; | "Reserved IPv6 prefix length."; | |||
| } | } | |||
| } | } | |||
| uses resource-config; | uses resource-config; | |||
| } | } | |||
| container active-leases { | container active-leases { | |||
| config false; | config false; | |||
| description | description | |||
| "Holds state related to active client prefix | "Holds state related to active client prefix | |||
| leases."; | leases."; | |||
| leaf total-count { | leaf total-count { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The total number of prefixes in the pool."; | "The total number of prefixes in the pool."; | |||
| } | } | |||
| leaf allocated-count { | leaf allocated-count { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The number of prefixes in the pool that are | "The number of prefixes in the pool that are | |||
| currently allocated."; | currently allocated."; | |||
| } | } | |||
| list active-lease { | list active-lease { | |||
| key leased-prefix; | key "leased-prefix"; | |||
| description | description | |||
| "List of active prefix leases."; | "List of active prefix leases."; | |||
| leaf leased-prefix { | leaf leased-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "Active leased prefix entry."; | "Active leased prefix entry."; | |||
| } | } | |||
| uses lease-information; | uses lease-information; | |||
| } | } | |||
| } | } | |||
| skipping to change at line 2153 ¶ | skipping to change at line 2211 ¶ | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * RPCs | * RPCs | |||
| */ | */ | |||
| rpc delete-address-lease { | rpc delete-address-lease { | |||
| nacm:default-deny-all; | nacm:default-deny-all; | |||
| if-feature na-assignment; | if-feature "na-assignment"; | |||
| description | description | |||
| "Deletes a client's active address lease from the server's | "Deletes a client's active address lease from the server's | |||
| lease database. Note this will not cause the address to be | lease database. Note that this will not cause the address | |||
| revoked from the client, and the lease may be refreshed or | to be revoked from the client, and the lease may be refreshed | |||
| renewed by the client."; | or renewed by the client."; | |||
| input { | input { | |||
| leaf lease-address-to-delete { | leaf lease-address-to-delete { | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-server/allocation-ranges/" + | path "/dhcpv6-server/allocation-ranges/" | |||
| "allocation-range/address-pools/address-pool" + | + "allocation-range/address-pools/address-pool" | |||
| "/active-leases/active-lease/leased-address"; | + "/active-leases/active-lease/leased-address"; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "IPv6 address of an active lease that will be | "IPv6 address of an active lease that will be | |||
| deleted from the server."; | deleted from the server."; | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| leaf return-message { | leaf return-message { | |||
| type string; | type string; | |||
| description | description | |||
| "Response message from the server. If available, a | "Response message from the server. If available, a | |||
| language identifier should be included in the message."; | language identifier should be included in the message."; | |||
| reference "BCP 14 (RFC 2277) IETF Policy on Character Sets | reference | |||
| and Languages, Section 4.2."; | "BCP 18 (RFC 2277) IETF Policy on Character Sets | |||
| and Languages, Section 4.2"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| rpc delete-prefix-lease { | rpc delete-prefix-lease { | |||
| nacm:default-deny-all; | nacm:default-deny-all; | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| description | description | |||
| "Deletes a client's active prefix lease from the server's | "Deletes a client's active prefix lease from the server's | |||
| lease database. Note, this will not cause the prefix to be | lease database. Note that this will not cause the prefix | |||
| revoked from the client, and the lease may be refreshed or | to be revoked from the client, and the lease may be refreshed | |||
| renewed by the client."; | or renewed by the client."; | |||
| input { | input { | |||
| leaf lease-prefix-to-delete { | leaf lease-prefix-to-delete { | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-server/allocation-ranges/" + | path "/dhcpv6-server/allocation-ranges/" | |||
| "allocation-range/prefix-pools/prefix-pool" + | + "allocation-range/prefix-pools/prefix-pool" | |||
| "/active-leases/active-lease/leased-prefix"; | + "/active-leases/active-lease/leased-prefix"; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "IPv6 prefix of an active lease that will be deleted | "IPv6 prefix of an active lease that will be deleted | |||
| from the server."; | from the server."; | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| leaf return-message { | leaf return-message { | |||
| type string; | type string; | |||
| description | description | |||
| "Response message from the server. If available, a | "Response message from the server. If available, a | |||
| language identifier should be included in the message."; | language identifier should be included in the message."; | |||
| reference "BCP 14 (RFC 2277) IETF Policy on Character Sets | reference | |||
| and Languages, Section 4.2."; | "BCP 18 (RFC 2277) IETF Policy on Character Sets | |||
| and Languages, Section 4.2"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Notifications | * Notifications | |||
| */ | */ | |||
| notification address-pool-utilization-threshold-exceeded { | notification address-pool-utilization-threshold-exceeded { | |||
| if-feature na-assignment; | if-feature "na-assignment"; | |||
| description | description | |||
| "Notification sent when the address pool | "Notification sent when the address pool | |||
| utilization exceeds the threshold configured in | utilization exceeds the threshold configured in | |||
| max-address-utilization."; | max-address-utilization."; | |||
| leaf pool-id { | leaf pool-id { | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-server/allocation-ranges/" + | path "/dhcpv6-server/allocation-ranges/" | |||
| "allocation-range/address-pools/address-pool" + | + "allocation-range/address-pools/address-pool" | |||
| "/pool-id"; | + "/pool-id"; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Leafref to the address pool that the notification is being | "Leafref to the address pool that the notification is being | |||
| generated for."; | generated for."; | |||
| } | } | |||
| leaf total-pool-addresses { | leaf total-pool-addresses { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Total number of addresses in the pool (end-address minus | "Total number of addresses in the pool (end-address minus | |||
| start-address plus one)."; | start-address plus one)."; | |||
| } | } | |||
| leaf max-allocated-addresses { | leaf max-allocated-addresses { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Maximum number of addresses that can be simultaneously | "Maximum number of addresses that can be simultaneously | |||
| allocated from the pool. This value may be less than count | allocated from the pool. This value may be less than the | |||
| of total addresses. Calculated as the | count of total addresses. Calculated as the | |||
| max-address-utilization (percentage) of the | max-address-utilization (percentage) of the | |||
| total-pool-addresses, rounded up."; | total-pool-addresses and rounded up."; | |||
| } | } | |||
| leaf allocated-address-count { | leaf allocated-address-count { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Number of addresses allocated from the pool."; | "Number of addresses allocated from the pool."; | |||
| } | } | |||
| } | } | |||
| notification prefix-pool-utilization-threshold-exceeded { | notification prefix-pool-utilization-threshold-exceeded { | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| description | description | |||
| "Notification sent when the prefix pool utilization | "Notification sent when the prefix pool utilization | |||
| exceeds the threshold configured in | exceeds the threshold configured in | |||
| max-pd-space-utilization."; | max-pd-space-utilization."; | |||
| leaf pool-id { | leaf pool-id { | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-server/allocation-ranges" + | path "/dhcpv6-server/allocation-ranges" | |||
| "/allocation-range/prefix-pools/prefix-pool/pool-id"; | + "/allocation-range/prefix-pools/prefix-pool/pool-id"; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Unique identifier for the pool."; | "Unique identifier for the pool."; | |||
| } | } | |||
| leaf total-pool-prefixes { | leaf total-pool-prefixes { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Total number of prefixes in the pool."; | "Total number of prefixes in the pool."; | |||
| } | } | |||
| leaf max-allocated-prefixes { | leaf max-allocated-prefixes { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Maximum number of prefixes that can be simultaneously | "Maximum number of prefixes that can be simultaneously | |||
| allocated from the pool. This value may be less than | allocated from the pool. This value may be less than | |||
| count of total prefixes. Calculated as the | the count of total prefixes. Calculated as the | |||
| max-prefix-utilization (percentage) of the | max-prefix-utilization (percentage) of the | |||
| total-pool-prefixes, rounded up."; | total-pool-prefixes and rounded up."; | |||
| } | } | |||
| leaf allocated-prefixes-count { | leaf allocated-prefixes-count { | |||
| type uint64; | type uint64; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Number of prefixes allocated from the pool."; | "Number of prefixes allocated from the pool."; | |||
| } | } | |||
| } | } | |||
| notification invalid-client-detected { | notification invalid-client-detected { | |||
| description | description | |||
| "Notification sent when the server detects an invalid | "Notification sent when the server detects an invalid | |||
| client."; | client."; | |||
| leaf message-type { | leaf message-type { | |||
| type enumeration { | type enumeration { | |||
| enum solicit { | enum solicit { | |||
| description | description | |||
| "Solicit (1) message."; | "Solicit (1) message."; | |||
| } | } | |||
| enum request { | enum request { | |||
| description | description | |||
| "Request (3) message."; | "Request (3) message."; | |||
| } | } | |||
| skipping to change at line 2343 ¶ | skipping to change at line 2403 ¶ | |||
| description | description | |||
| "Decline (9) message."; | "Decline (9) message."; | |||
| } | } | |||
| enum info-request { | enum info-request { | |||
| description | description | |||
| "Information request (11) message."; | "Information request (11) message."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "The message type received by the server that has caused | "The message type received by the server that has caused | |||
| the error."; | the error."; | |||
| } | } | |||
| leaf duid { | leaf duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "Client DUID."; | "Client DUID."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Description of the event (e.g., an error code or log | "Description of the event (e.g., an error code or log | |||
| message)."; | message)."; | |||
| } | } | |||
| } | } | |||
| notification decline-received { | notification decline-received { | |||
| if-feature na-assignment; | if-feature "na-assignment"; | |||
| description | description | |||
| "Notification sent when the server has received a Decline (9) | "Notification sent when the server has received a Decline (9) | |||
| message from a client."; | message from a client."; | |||
| leaf duid { | leaf duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "Client DUID."; | "Client DUID."; | |||
| } | } | |||
| list declined-resources { | list declined-resources { | |||
| description | description | |||
| "List of declined addresses and/or prefixes."; | "List of declined addresses and/or prefixes."; | |||
| choice resource-type { | choice resource-type { | |||
| description | description | |||
| skipping to change at line 2395 ¶ | skipping to change at line 2455 ¶ | |||
| "Prefix that has been declined."; | "Prefix that has been declined."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| notification non-success-code-sent { | notification non-success-code-sent { | |||
| description | description | |||
| "Notification sent when the server responded to a client with | "Notification sent when the server responded to a client with | |||
| a non-success status code."; | a non-success status code."; | |||
| leaf duid { | leaf duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "Client DUID."; | "Client DUID."; | |||
| } | } | |||
| uses dhc6:status; | uses dhc6:status; | |||
| } | } | |||
| } | } | |||
| <CODE ENDS>]]> | ]]></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"/>. | modules defined in <xref target="RFC8341"/> and <xref | |||
| target="RFC8343"/>. | ||||
| </t> | </t> | |||
| <artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6-re | <sourcecode name="ietf-dhcpv6-relay@2022-06-20.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>"; | |||
| description | description | |||
| "This YANG module defines components necessary for the | "This YANG module defines components necessary for the | |||
| configuration and management of DHCPv6 relays. | configuration and management of DHCPv6 relays. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| they appear in all capitals, as shown here. | they appear in all capitals, as shown here. | |||
| Copyright (c) 2022 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9243 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9243); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| revision 2022-03-29 { | revision 2022-06-20 { | |||
| description | description | |||
| "Initial Revision."; | "Initial revision."; | |||
| reference | reference | |||
| "XXXX: YANG Data Model for DHCPv6 Configuration"; | "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; | |||
| } | } | |||
| /* | /* | |||
| * Features | * Features | |||
| */ | */ | |||
| feature prefix-delegation { | feature prefix-delegation { | |||
| description | description | |||
| "Enable if the relay functions as a delegating router for | "Enable if the relay functions as a delegating router for | |||
| DHCPv6 prefix delegation."; | DHCPv6 prefix delegation."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 6.3"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 6.3"; | ||||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping pd-lease-state { | grouping pd-lease-state { | |||
| description | description | |||
| "State data for the relay."; | "State data for the relay."; | |||
| list pd-leases { | list pd-leases { | |||
| key ia-pd-prefix; | key "ia-pd-prefix"; | |||
| config false; | config false; | |||
| description | description | |||
| "Information about an active IA_PD prefix delegation."; | "Information about an active IA_PD prefix delegation."; | |||
| leaf ia-pd-prefix { | leaf ia-pd-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "Prefix that is delegated."; | "Prefix that is delegated."; | |||
| } | } | |||
| leaf last-renew { | leaf last-renew { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Time of the last successful refresh or renew of the | "Time of the last successful refresh or renew of the | |||
| delegated prefix."; | delegated prefix."; | |||
| } | } | |||
| leaf client-peer-address { | leaf client-peer-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Peer-address of the leasing client."; | "Peer-address of the leasing client."; | |||
| } | } | |||
| leaf client-duid { | leaf client-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "DUID of the leasing client."; | "DUID of the leasing client."; | |||
| skipping to change at line 2554 ¶ | skipping to change at line 2607 ¶ | |||
| } | } | |||
| } | } | |||
| grouping message-statistics { | grouping message-statistics { | |||
| description | description | |||
| "Contains counters for the different DHCPv6 message types."; | "Contains counters for the different DHCPv6 message types."; | |||
| leaf discontinuity-time { | leaf discontinuity-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "The time on the most recent occasion at which any one or | "The time on the most recent occasion at which any one or | |||
| more of DHCPv6 relay's counters suffered a discontinuity. | more of DHCPv6 relay's counters suffered a discontinuity. | |||
| If no such discontinuities have occurred since the last | If no such discontinuities have occurred since the last | |||
| re-initialization of the local management subsystem, then | re-initialization of the local management subsystem, then | |||
| this node contains the time the local management subsystem | this node contains the time the local management subsystem | |||
| re-initialized itself."; | re-initialized itself."; | |||
| } | } | |||
| leaf solicit-received-count { | leaf solicit-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Solicit (1) messages received."; | "Number of Solicit (1) messages received."; | |||
| } | } | |||
| leaf advertise-sent-count { | leaf advertise-sent-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Advertise (2) messages sent."; | "Number of Advertise (2) messages sent."; | |||
| } | } | |||
| leaf request-received-count { | leaf request-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Request (3) messages received."; | "Number of Request (3) messages received."; | |||
| } | } | |||
| leaf confirm-received-count { | leaf confirm-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Confirm (4) messages received."; | "Number of Confirm (4) messages received."; | |||
| } | } | |||
| leaf renew-received-count { | leaf renew-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Renew (5) messages received."; | "Number of Renew (5) messages received."; | |||
| } | } | |||
| leaf rebind-received-count { | leaf rebind-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Rebind (6) messages received."; | "Number of Rebind (6) messages received."; | |||
| } | } | |||
| leaf reply-sent-count { | leaf reply-sent-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Reply (7) messages sent."; | "Number of Reply (7) messages sent."; | |||
| } | } | |||
| leaf release-received-count { | leaf release-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Release (8) messages received."; | "Number of Release (8) messages received."; | |||
| } | } | |||
| leaf decline-received-count { | leaf decline-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Decline (9) messages received."; | "Number of Decline (9) messages received."; | |||
| } | } | |||
| leaf reconfigure-sent-count { | leaf reconfigure-sent-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Reconfigure (10) messages sent."; | "Number of Reconfigure (10) messages sent."; | |||
| } | } | |||
| leaf information-request-received-count { | leaf information-request-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Information-request (11) messages | "Number of Information-request (11) messages | |||
| received."; | received."; | |||
| } | } | |||
| leaf unknown-message-received-count { | leaf unknown-message-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of messages of unknown type that have | "Number of messages of unknown type that have | |||
| been received."; | been received."; | |||
| } | } | |||
| leaf unknown-message-sent-count { | leaf unknown-message-sent-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of messages of unknown type that have | "Number of messages of unknown type that have | |||
| been sent."; | been sent."; | |||
| } | } | |||
| leaf discarded-message-count { | leaf discarded-message-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of messages that have been discarded | "Number of messages that have been discarded | |||
| for any reason."; | for any reason."; | |||
| } | } | |||
| } | } | |||
| grouping global-statistics { | grouping global-statistics { | |||
| description | description | |||
| "Global statistics for the device."; | "Global statistics for the device."; | |||
| leaf relay-forward-sent-count { | leaf relay-forward-sent-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Relay-forward (12) messages sent."; | "Number of Relay-forward (12) messages sent."; | |||
| } | } | |||
| leaf relay-forward-received-count { | leaf relay-forward-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Relay-forward (12) messages received."; | "Number of Relay-forward (12) messages received."; | |||
| } | } | |||
| leaf relay-reply-received-count { | leaf relay-reply-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Relay-reply (13) messages received."; | "Number of Relay-reply (13) messages received."; | |||
| } | } | |||
| leaf relay-forward-unknown-sent-count { | leaf relay-forward-unknown-sent-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Relay-forward (12) messages containing | "Number of Relay-forward (12) messages containing | |||
| a message of unknown type sent."; | a message of unknown type sent."; | |||
| } | } | |||
| leaf relay-forward-unknown-received-count { | leaf relay-forward-unknown-received-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Relay-forward (12) messages containing | "Number of Relay-forward (12) messages containing | |||
| a message of unknown type received."; | a message of unknown type received."; | |||
| } | } | |||
| leaf discarded-message-count { | leaf discarded-message-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of messages that have been discarded | "Number of messages that have been discarded | |||
| for any reason."; | for any reason."; | |||
| } | } | |||
| } | } | |||
| grouping interface-id-option-group { | grouping interface-id-option-group { | |||
| description | description | |||
| "OPTION_INTERFACE_ID (18) Interface-Id Option."; | "OPTION_INTERFACE_ID (18) Interface-Id Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.18"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.18"; | ||||
| container interface-id-option { | container interface-id-option { | |||
| description | description | |||
| "OPTION_INTERFACE_ID (18) Interface-Id Option."; | "OPTION_INTERFACE_ID (18) Interface-Id Option."; | |||
| leaf interface-id { | leaf interface-id { | |||
| type binary; | type binary; | |||
| description | description | |||
| "An opaque value of arbitrary length generated by the | "An opaque value of arbitrary length generated by the | |||
| relay agent to identify one of the relay agent's | relay agent to identify one of the relay agent's | |||
| interfaces."; | interfaces."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Data Nodes | * Data Nodes | |||
| */ | */ | |||
| container dhcpv6-relay { | container dhcpv6-relay { | |||
| description | description | |||
| "This container contains the configuration data nodes | "This container contains the configuration data nodes | |||
| for the relay."; | for the relay."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 19"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 19"; | ||||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "Globally enables the DHCP relay function."; | "Globally enables the DHCP relay function."; | |||
| } | } | |||
| list relay-if { | list relay-if { | |||
| key if-name; | key "if-name"; | |||
| description | description | |||
| "List of interfaces configured for DHCPv6 relaying."; | "List of interfaces configured for DHCPv6 relaying."; | |||
| leaf if-name { | leaf if-name { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "interface-ref to the relay interface."; | "interface-ref to the relay interface."; | |||
| } | } | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "Enables the DHCP relay function for this interface."; | "Enables the DHCP relay function for this interface."; | |||
| } | } | |||
| leaf-list destination-address { | leaf-list destination-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Each DHCPv6 relay agent may be configured with a list | "Each DHCPv6 relay agent may be configured with a list | |||
| of destination addresses for relayed messages. | of destination addresses for relayed messages. | |||
| The list may include unicast addresses, multicast | The list may include unicast addresses, multicast | |||
| addresses or other valid addresses."; | addresses, or other valid addresses."; | |||
| } | } | |||
| leaf link-address { | leaf link-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "An address that may be used by the server to identify | "An address that may be used by the server to identify | |||
| the link on which the client is located."; | the link on which the client is located."; | |||
| } | } | |||
| container relay-options { | container relay-options { | |||
| description | description | |||
| "Definitions for DHCPv6 options that can be sent | "Definitions for DHCPv6 options that can be sent | |||
| by the relay are augmented to this location from other | by the relay are augmented to this location from other | |||
| YANG modules as required."; | YANG modules as required."; | |||
| uses dhc6:auth-option-group; | uses dhc6:auth-option-group; | |||
| uses interface-id-option-group; | uses interface-id-option-group; | |||
| } | } | |||
| container statistics { | container statistics { | |||
| description | description | |||
| "DHCPv6 message counters for the relay's interface."; | "DHCPv6 message counters for the relay's interface."; | |||
| uses message-statistics; | uses message-statistics; | |||
| } | } | |||
| container prefix-delegation { | container prefix-delegation { | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| presence "Enables prefix delegation for this interface."; | presence "Enables prefix delegation for this interface."; | |||
| description | description | |||
| "Controls and holds state information for prefix | "Controls and holds state information for prefix | |||
| delegation."; | delegation."; | |||
| uses pd-lease-state; | uses pd-lease-state; | |||
| } | } | |||
| } | } | |||
| container statistics { | container statistics { | |||
| description | description | |||
| "Global DHCPv6 message counters for the relay."; | "Global DHCPv6 message counters for the relay."; | |||
| uses global-statistics; | uses global-statistics; | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * RPCs | * RPCs | |||
| */ | */ | |||
| rpc clear-prefix-entry { | rpc clear-prefix-entry { | |||
| nacm:default-deny-all; | nacm:default-deny-all; | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| description | description | |||
| "Clears an entry for an active delegated prefix | "Clears an entry for an active delegated prefix | |||
| from the relay."; | from the relay."; | |||
| reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, | reference | |||
| Section 4.4"; | "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements, | |||
| Section 4.4"; | ||||
| input { | input { | |||
| leaf lease-prefix { | leaf lease-prefix { | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-relay/relay-if/prefix-delegation" + | path "/dhcpv6-relay/relay-if/prefix-delegation" | |||
| "/pd-leases/ia-pd-prefix"; | + "/pd-leases/ia-pd-prefix"; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "IPv6 prefix of an active lease entry that will | "IPv6 prefix of an active lease entry that will | |||
| be deleted from the relay."; | be deleted from the relay."; | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| leaf return-message { | leaf return-message { | |||
| type string; | type string; | |||
| description | description | |||
| "Response message from the server. If available, a language | "Response message from the server. If available, a | |||
| identifier should be included in the message."; | language identifier should be included in the message."; | |||
| reference "BCP 14 (RFC 2277) IETF Policy on Character Sets | reference | |||
| and Languages, Section 4.2."; | "BCP 18 (RFC 2277) IETF Policy on Character Sets | |||
| and Languages, Section 4.2"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| rpc clear-client-prefixes { | rpc clear-client-prefixes { | |||
| nacm:default-deny-all; | nacm:default-deny-all; | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| description | description | |||
| "Clears all active prefix entries for a single client."; | "Clears all active prefix entries for a single client."; | |||
| reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, | reference | |||
| Section 4.4"; | "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements, | |||
| input { | Section 4.4"; | |||
| input { | ||||
| leaf client-duid { | leaf client-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "DUID of the client."; | "DUID of the client."; | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| leaf return-message { | leaf return-message { | |||
| type string; | type string; | |||
| description | description | |||
| "Response message from the server. If available, a | "Response message from the server. If available, a | |||
| language identifier should be included in the message."; | language identifier should be included in the message."; | |||
| reference "BCP 14 (RFC 2277) IETF Policy on Character Sets | reference | |||
| and Languages, Section 4.2."; | "BCP 18 (RFC 2277) IETF Policy on Character Sets | |||
| and Languages, Section 4.2"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| rpc clear-interface-prefixes { | rpc clear-interface-prefixes { | |||
| nacm:default-deny-all; | nacm:default-deny-all; | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| description | description | |||
| "Clears all delegated prefix bindings from an | "Clears all delegated prefix bindings from an | |||
| interface on the relay."; | interface on the relay."; | |||
| reference "RFC8987: DHCPv6 Prefix Delegating Relay Requirements, | reference | |||
| Section 4.4"; | "RFC 8987: DHCPv6 Prefix Delegating Relay Requirements, | |||
| Section 4.4"; | ||||
| input { | input { | |||
| leaf interface { | leaf interface { | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-relay/relay-if/if-name"; | path "/dhcpv6-relay/relay-if/if-name"; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Reference to the relay interface that will have all | "Reference to the relay interface that will have all | |||
| active prefix delegation bindings deleted."; | active prefix delegation bindings deleted."; | |||
| } | } | |||
| } | } | |||
| output { | output { | |||
| leaf return-message { | leaf return-message { | |||
| type string; | type string; | |||
| description | description | |||
| "Response message from the server. If available, a | "Response message from the server. If available, a | |||
| language identifier should be included in the message."; | language identifier should be included in the message."; | |||
| reference "BCP 14 (RFC 2277) IETF Policy on Character Sets | reference | |||
| and Languages, Section 4.2."; | "BCP 18 (RFC 2277) IETF Policy on Character Sets | |||
| and Languages, Section 4.2"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Notifications | * Notifications | |||
| */ | */ | |||
| notification relay-event { | notification relay-event { | |||
| description | description | |||
| "DHCPv6 relay event notifications."; | "DHCPv6 relay event notifications."; | |||
| container topology-change { | container topology-change { | |||
| description | description | |||
| "Raised if the entry for an interface with DHCPv6 related | "Raised if the entry for an interface with DHCPv6-related | |||
| configuration or state is removed from if:interface-refs."; | configuration or state is removed from if:interface-refs."; | |||
| leaf relay-if-name { | leaf relay-if-name { | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-relay/relay-if/if-name"; | path "/dhcpv6-relay/relay-if/if-name"; | |||
| } | } | |||
| description | description | |||
| "Name of the interface that has been removed."; | "Name of the interface that has been removed."; | |||
| } | } | |||
| leaf last-ipv6-addr { | leaf last-ipv6-addr { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Last IPv6 address configured on the interface."; | "Last IPv6 address configured on the interface."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS>]]> | ]]></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> | the module defined in <xref target="RFC8343"/>.</t> | |||
| <artwork align="center" xml:base="/home/if/Documents/yang/ietf-dhcpv6-cl | ||||
| ient.yang.xml"> | ||||
| <![CDATA[<CODE BEGINS> file "ietf-dhcpv6-client@2022-03-29.yang" | ||||
| <sourcecode name="ietf-dhcpv6-client@2022-06-20.yang" type="yang" marker s="true"><![CDATA[ | ||||
| module ietf-dhcpv6-client { | module ietf-dhcpv6-client { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; | namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; | |||
| prefix "dhc6-clnt"; | prefix dhc6-clnt; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix inet; | prefix inet; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix yang; | prefix yang; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| import ietf-dhcpv6-common { | import ietf-dhcpv6-common { | |||
| prefix dhc6; | prefix dhc6; | |||
| reference | reference | |||
| "RFC XXXX: To be updated on publication"; | "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix if; | prefix if; | |||
| reference | reference | |||
| "RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
| } | } | |||
| organization | organization | |||
| "IETF DHC (Dynamic Host Configuration) Working Group"; | "IETF Dynamic Host Configuration (DHC) Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/dhc/> | "WG Web: <https://datatracker.ietf.org/wg/dhc/> | |||
| WG List: <mailto:dhcwg@ietf.org> | WG List: <mailto:dhcwg@ietf.org> | |||
| Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> | Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> | |||
| Author: Linhui Sun <lh.sunlinh@gmail.com> | Author: Linhui Sun <lh.sunlinh@gmail.com> | |||
| Editor: Ian Farrer <ian.farrer@telekom.de> | Editor: Ian Farrer <ian.farrer@telekom.de> | |||
| Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> | Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> | |||
| Author: Zihao He <hezihao9512@gmail.com> | Author: Zihao He <hezihao9512@gmail.com> | |||
| Author: Michal Nowikowski <godfryd@isc.org>"; | Author: Michal Nowikowski <godfryd@isc.org>"; | |||
| description | description | |||
| "This YANG module defines components necessary for the | "This YANG module defines components necessary for the | |||
| configuration and management of DHCPv6 clients. | configuration and management of DHCPv6 clients. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | |||
| 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | |||
| 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document | 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document | |||
| are to be interpreted as described in BCP 14 (RFC 2119) | are to be interpreted as described in BCP 14 (RFC 2119) | |||
| (RFC 8174) when, and only when, they appear in all | (RFC 8174) when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| Copyright (c) 2022 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9243 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9243); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| revision 2022-03-29 { | revision 2022-06-20 { | |||
| description | description | |||
| "Initial Revision."; | "Initial revision."; | |||
| reference | reference | |||
| "XXXX: YANG Data Model for DHCPv6 Configuration"; | "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; | |||
| } | } | |||
| /* | /* | |||
| * Features | * Features | |||
| */ | */ | |||
| feature non-temp-addr { | feature non-temp-addr { | |||
| description | description | |||
| "Denotes that the client supports DHCPv6 non-temporary address | "Denotes that the client supports DHCPv6 non-temporary address | |||
| allocations."; | allocations."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 6.2"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 6.2"; | ||||
| } | } | |||
| feature temp-addr { | feature temp-addr { | |||
| description | description | |||
| "Denotes that the client supports DHCPv6 temporary address | "Denotes that the client supports DHCPv6 temporary address | |||
| allocations."; | allocations."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 6.5"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 6.5"; | ||||
| } | } | |||
| feature prefix-delegation { | feature prefix-delegation { | |||
| description | description | |||
| "Denotes that the client implements DHCPv6 prefix | "Denotes that the client implements DHCPv6 prefix | |||
| delegation."; | delegation."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 6.3"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 6.3"; | ||||
| } | } | |||
| feature anon-profile { | feature anon-profile { | |||
| description | description | |||
| "Denotes that the client supports DHCP anonymity profiles."; | "Denotes that the client supports DHCP anonymity profiles."; | |||
| reference "RFC 7844: Anonymity Profiles for DHCP Clients"; | reference | |||
| "RFC 7844: Anonymity Profiles for DHCP Clients"; | ||||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping message-statistics { | grouping message-statistics { | |||
| description | description | |||
| "Counters for DHCPv6 messages."; | "Counters for DHCPv6 messages."; | |||
| leaf discontinuity-time { | leaf discontinuity-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "The time on the most recent occasion at which any one or | "The time on the most recent occasion at which any one or | |||
| more of DHCPv6 client's counters suffered a discontinuity. | more of DHCPv6 client's counters suffered a discontinuity. | |||
| If no such discontinuities have occurred since the last | If no such discontinuities have occurred since the last | |||
| re-initialization of the local management subsystem, then | re-initialization of the local management subsystem, then | |||
| this node contains the time the local management subsystem | this node contains the time the local management subsystem | |||
| re-initialized itself."; | re-initialized itself."; | |||
| } | } | |||
| leaf solicit-count { | leaf solicit-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Solicit (1) messages sent."; | "Number of Solicit (1) messages sent."; | |||
| } | } | |||
| leaf advertise-count { | leaf advertise-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Advertise (2) messages received."; | "Number of Advertise (2) messages received."; | |||
| } | } | |||
| leaf request-count { | leaf request-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Request (3) messages sent."; | "Number of Request (3) messages sent."; | |||
| } | } | |||
| leaf confirm-count { | leaf confirm-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Confirm (4) messages sent."; | "Number of Confirm (4) messages sent."; | |||
| } | } | |||
| leaf renew-count { | leaf renew-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Renew (5) messages sent."; | "Number of Renew (5) messages sent."; | |||
| } | } | |||
| leaf rebind-count { | leaf rebind-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Rebind (6) messages sent."; | "Number of Rebind (6) messages sent."; | |||
| } | } | |||
| leaf reply-count { | leaf reply-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Reply (7) messages received."; | "Number of Reply (7) messages received."; | |||
| } | } | |||
| leaf release-count { | leaf release-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Release (8) messages sent."; | "Number of Release (8) messages sent."; | |||
| } | } | |||
| leaf decline-count { | leaf decline-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Decline (9) messages sent."; | "Number of Decline (9) messages sent."; | |||
| } | } | |||
| leaf reconfigure-count { | leaf reconfigure-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Reconfigure (10) messages received."; | "Number of Reconfigure (10) messages received."; | |||
| } | } | |||
| leaf information-request-count { | leaf information-request-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of Information-request (11) messages sent."; | "Number of Information-request (11) messages sent."; | |||
| } | } | |||
| leaf discarded-message-count { | leaf discarded-message-count { | |||
| type yang:counter32; | type yang:counter32; | |||
| config "false"; | config false; | |||
| description | description | |||
| "Number of messages that have been discarded for any | "Number of messages that have been discarded for any | |||
| reason."; | reason."; | |||
| } | } | |||
| } | } | |||
| grouping lease-state { | grouping lease-state { | |||
| description | description | |||
| "Information about the active IA_NA lease."; | "Information about the active IA_NA lease."; | |||
| leaf preferred-lifetime { | leaf preferred-lifetime { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The preferred lifetime for the leased address | "The preferred lifetime for the leased address | |||
| expressed in seconds."; | expressed in seconds."; | |||
| } | } | |||
| leaf valid-lifetime { | leaf valid-lifetime { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The valid lifetime for the leased address expressed | "The valid lifetime for the leased address expressed | |||
| in seconds."; | in seconds."; | |||
| } | } | |||
| leaf allocation-time { | leaf allocation-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Time and date that the address was first leased."; | "Time and date that the address was first leased."; | |||
| } | } | |||
| leaf last-renew-rebind { | leaf last-renew-rebind { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Time of the last successful renew or rebind of the | "Time of the last successful renew or rebind of the | |||
| leased address."; | leased address."; | |||
| } | } | |||
| leaf server-duid { | leaf server-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "DUID of the leasing server."; | "DUID of the leasing server."; | |||
| } | } | |||
| uses dhc6:status; | uses dhc6:status; | |||
| } | } | |||
| grouping option-request-option-group { | grouping option-request-option-group { | |||
| description | description | |||
| "OPTION_ORO (6) Option Request Option. A client MUST include | "OPTION_ORO (6) Option Request Option. A client MUST include | |||
| an Option Request option in a Solicit, Request, Renew, | an Option Request option in a Solicit, Request, Renew, | |||
| Rebind, or Information-request message to inform the server | Rebind, or Information-request message to inform the server | |||
| about options the client wants the server to send to the | about options the client wants the server to send to the | |||
| client."; | client."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Sections 21.23, 21.24, 21.25, & 21.7"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Sections 21.23, 21.24, 21.25, & 21.7"; | ||||
| container option-request-option { | container option-request-option { | |||
| description | description | |||
| "OPTION_ORO (6) Option Request Option."; | "OPTION_ORO (6) Option Request Option."; | |||
| leaf-list oro-option { | leaf-list oro-option { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "List of options that the client is requesting, | "List of options that the client is requesting, | |||
| identified by option code. This list MUST include the | identified by option code. This list MUST include the | |||
| code for option SOL_MAX_RT (82) when included in a | code for option SOL_MAX_RT (82) when included in a | |||
| Solicit-message. If this option is being sent in an | Solicit message. If this option is being sent in an | |||
| Information-request message, then the code for option | Information-request message, then the code for option | |||
| OPTION_INFORMATION_REFRESH_TIME (32) and INF_MAX_RT (83) | OPTION_INFORMATION_REFRESH_TIME (32) and INF_MAX_RT (83) | |||
| MUST be included."; | MUST be included."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping user-class-option-group { | grouping user-class-option-group { | |||
| description | description | |||
| "OPTION_USER_CLASS (15) User Class Option"; | "OPTION_USER_CLASS (15) User Class Option"; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.15"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.15"; | ||||
| container user-class-option { | container user-class-option { | |||
| presence "Configures the option"; | presence "Configures the option"; | |||
| description | description | |||
| "OPTION_USER_CLASS (15) User Class Option."; | "OPTION_USER_CLASS (15) User Class Option."; | |||
| list user-class-data-instance { | list user-class-data-instance { | |||
| key user-class-data-id; | key "user-class-data-id"; | |||
| min-elements 1; | min-elements 1; | |||
| description | description | |||
| "The user classes of which the client is a member."; | "The user classes of which the client is a member."; | |||
| leaf user-class-data-id { | leaf user-class-data-id { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "User class data ID"; | "User class data ID."; | |||
| } | } | |||
| leaf user-class-data { | leaf user-class-data { | |||
| type binary; | type binary; | |||
| description | description | |||
| "Opaque field representing a User Class of which the | "Opaque field representing a User Class of which the | |||
| client is a member."; | client is a member."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping vendor-class-option-group { | grouping vendor-class-option-group { | |||
| description | description | |||
| "OPTION_VENDOR_CLASS (16) Vendor Class Option"; | "OPTION_VENDOR_CLASS (16) Vendor Class Option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 21.16"; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 21.16"; | ||||
| container vendor-class-option { | container vendor-class-option { | |||
| description | description | |||
| "OPTION_VENDOR_CLASS (16) Vendor Class Option."; | "OPTION_VENDOR_CLASS (16) Vendor Class Option."; | |||
| list vendor-class-option-instances { | list vendor-class-option-instances { | |||
| key enterprise-number; | key "enterprise-number"; | |||
| description | description | |||
| "The vendor class option allows for multiple instances | "The vendor class option allows for multiple instances | |||
| in a single message. Each list entry defines the contents | in a single message. Each list entry defines the contents | |||
| of an instance of the option."; | of an instance of the option."; | |||
| leaf enterprise-number { | leaf enterprise-number { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The vendor's registered Enterprise Number as | "The vendor's registered Enterprise Number, as | |||
| maintained by IANA."; | maintained by IANA."; | |||
| } | } | |||
| list vendor-class-data-element { | list vendor-class-data-element { | |||
| key vendor-class-data-id; | key "vendor-class-data-id"; | |||
| description | description | |||
| "The vendor classes of which the client is a member."; | "The vendor classes of which the client is a member."; | |||
| leaf vendor-class-data-id { | leaf vendor-class-data-id { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "Vendor class data ID"; | "Vendor class data ID."; | |||
| } | } | |||
| leaf vendor-class-data { | leaf vendor-class-data { | |||
| type binary; | type binary; | |||
| description | description | |||
| "Opaque field representing a vendor class of which | "Opaque field representing a vendor class of which | |||
| the client is a member."; | the client is a member."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Data Nodes | * Data Nodes | |||
| */ | */ | |||
| container dhcpv6-client { | container dhcpv6-client { | |||
| description | description | |||
| "DHCPv6 client configuration and state."; | "DHCPv6 client configuration and state."; | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default true; | default "true"; | |||
| description | description | |||
| "Globally enables the DHCP client function."; | "Globally enables the DHCP client function."; | |||
| } | } | |||
| leaf client-duid { | leaf client-duid { | |||
| if-feature "(non-temp-addr or prefix-delegation " + | if-feature "(non-temp-addr or prefix-delegation " | |||
| "or temp-addr) and not anon-profile"; | + "or temp-addr) and not anon-profile"; | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "A single Client DUID that will be used by all of the | "A single client DUID that will be used by all of the | |||
| client's DHCPv6 enabled interfaces."; | client's DHCPv6-enabled interfaces."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 11"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 11"; | ||||
| } | } | |||
| list client-if { | list client-if { | |||
| key if-name; | key "if-name"; | |||
| description | description | |||
| "The list of interfaces for which the client will | "The list of interfaces for which the client will | |||
| be requesting DHCPv6 configuration."; | be requesting DHCPv6 configuration."; | |||
| leaf if-name { | leaf if-name { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Reference to the interface entry that the requested | "Reference to the interface entry that the requested | |||
| configuration is relevant to."; | configuration is relevant to."; | |||
| } | } | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default true; | default "true"; | |||
| description | description | |||
| "Enables the DHCP client function for this interface."; | "Enables the DHCP client function for this interface."; | |||
| } | } | |||
| leaf interface-duid { | leaf interface-duid { | |||
| if-feature "(non-temp-addr or prefix-delegation " + | if-feature "(non-temp-addr or prefix-delegation " | |||
| "or temp-addr) and anon-profile"; | + "or temp-addr) and anon-profile"; | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "Per-interface Client DUIDs for use with DHCP anonymity | "Per-interface client DUIDs for use with DHCP anonymity | |||
| profiles."; | profiles."; | |||
| reference "RFC 7844: Anonymity Profiles for DHCP Clients, | reference | |||
| Section 3"; | "RFC 7844: Anonymity Profiles for DHCP Clients, | |||
| Section 3"; | ||||
| } | } | |||
| container client-configured-options { | container client-configured-options { | |||
| description | description | |||
| "Definitions for DHCPv6 options that can be be sent by | "Definitions for DHCPv6 options that can be sent by | |||
| the client. Additional option definitions can be | the client. Additional option definitions can be | |||
| augmented to this location from other YANG modules as | augmented to this location from other YANG modules as | |||
| required."; | required."; | |||
| uses option-request-option-group; | uses option-request-option-group; | |||
| uses dhc6:rapid-commit-option-group; | uses dhc6:rapid-commit-option-group; | |||
| uses user-class-option-group; | uses user-class-option-group; | |||
| uses vendor-class-option-group; | uses vendor-class-option-group; | |||
| uses dhc6:vendor-specific-information-option-group; | uses dhc6:vendor-specific-information-option-group; | |||
| uses dhc6:reconfigure-accept-option-group; | uses dhc6:reconfigure-accept-option-group; | |||
| } | } | |||
| list ia-na { | list ia-na { | |||
| if-feature non-temp-addr; | if-feature "non-temp-addr"; | |||
| key ia-id; | key "ia-id"; | |||
| description | description | |||
| "Configuration relevant for an IA_NA (Identity Association | "Configuration relevant for an Identity Association | |||
| for Non-temporary Addresses)."; | for Non-temporary Addresses (IA_NA)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 13.1"; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 13.1"; | ||||
| leaf ia-id { | leaf ia-id { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "A unique identifier for this IA_NA."; | "A unique identifier for this IA_NA."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 12"; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 12"; | ||||
| } | } | |||
| container ia-na-options { | container ia-na-options { | |||
| description | description | |||
| "An augmentation point for additional options | "An augmentation point for additional options | |||
| that the client may send in the IA_NA-options field | that the client may send in the IA_NA-options field | |||
| of OPTION_IA_NA."; | of OPTION_IA_NA."; | |||
| } | } | |||
| container lease-state { | container lease-state { | |||
| config false; | config false; | |||
| description | description | |||
| "Information about the active IA_NA lease."; | "Information about the active IA_NA lease."; | |||
| leaf ia-na-address { | leaf ia-na-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Address that is currently leased."; | "Address that is currently leased."; | |||
| } | } | |||
| leaf lease-t1 { | leaf lease-t1 { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The time interval after which the client should | "The time interval after which the client should | |||
| contact the server from which the addresses in the | contact the server from which the addresses in the | |||
| IA_NA were obtained to extend the lifetimes of the | IA_NA were obtained to extend the lifetimes of the | |||
| addresses assigned to the IA_NA."; | addresses assigned to the IA_NA."; | |||
| } | } | |||
| leaf lease-t2 { | leaf lease-t2 { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The time interval after which the client should | "The time interval after which the client should | |||
| contact any available server to extend the lifetimes | contact any available server to extend the lifetimes | |||
| of the addresses assigned to the IA_NA."; | of the addresses assigned to the IA_NA."; | |||
| } | } | |||
| uses lease-state; | uses lease-state; | |||
| } | } | |||
| } | } | |||
| list ia-ta { | list ia-ta { | |||
| if-feature temp-addr; | if-feature "temp-addr"; | |||
| key ia-id; | key "ia-id"; | |||
| description | description | |||
| "Configuration relevant for an IA_TA (Identity Association | "Configuration relevant for an Identity Association | |||
| for Temporary Addresses)."; | for Temporary Addresses (IA_TA)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 13.2"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 13.2"; | ||||
| leaf ia-id { | leaf ia-id { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The unique identifier for this IA_TA."; | "The unique identifier for this IA_TA."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 12"; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 12"; | ||||
| } | } | |||
| container ia-ta-options { | container ia-ta-options { | |||
| description | description | |||
| "An augmentation point for additional options | "An augmentation point for additional options | |||
| that the client may send in the IA_TA-options field | that the client may send in the IA_TA-options field | |||
| of OPTION_IA_TA."; | of OPTION_IA_TA."; | |||
| } | } | |||
| container lease-state { | container lease-state { | |||
| config "false"; | config false; | |||
| description | description | |||
| "Information about an active IA_TA lease."; | "Information about an active IA_TA lease."; | |||
| leaf ia-ta-address { | leaf ia-ta-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Address that is currently leased."; | "Address that is currently leased."; | |||
| } | } | |||
| uses lease-state; | uses lease-state; | |||
| } | } | |||
| } | } | |||
| list ia-pd { | list ia-pd { | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| key ia-id; | key "ia-id"; | |||
| description | description | |||
| "Configuration relevant for an IA_PD (Identity Association | "Configuration relevant for an Identity Association | |||
| for Prefix Delegation)."; | for Prefix Delegation (IA_PD)."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 13.3"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 13.3"; | ||||
| leaf ia-id { | leaf ia-id { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The unique identifier for this IA_PD."; | "The unique identifier for this IA_PD."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 12"; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 12"; | ||||
| } | } | |||
| leaf prefix-length-hint { | leaf prefix-length-hint { | |||
| type uint8 { | type uint8 { | |||
| range "1..128"; | range "1..128"; | |||
| } | } | |||
| description | description | |||
| "Prefix-length hint value included in the messages sent | "Prefix-length hint value included in the messages sent | |||
| to the server to indicate a preference for the size of | to the server to indicate a preference for the size of | |||
| the prefix to be delegated."; | the prefix to be delegated."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol | reference | |||
| for IPv6 (DHCPv6), Section 18.2.1"; | "RFC 8415: Dynamic Host Configuration Protocol | |||
| for IPv6 (DHCPv6), Section 18.2.1"; | ||||
| } | } | |||
| container ia-pd-options { | container ia-pd-options { | |||
| description | description | |||
| "An augmentation point for additional options that the | "An augmentation point for additional options that the | |||
| client will send in the IA_PD-options field of | client will send in the IA_PD-options field of | |||
| OPTION_IA_TA."; | OPTION_IA_TA."; | |||
| } | } | |||
| container lease-state { | container lease-state { | |||
| config "false"; | config false; | |||
| description | description | |||
| "Information about an active IA_PD delegated prefix."; | "Information about an active IA_PD-delegated prefix."; | |||
| leaf ia-pd-prefix { | leaf ia-pd-prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "Delegated prefix that is currently leased."; | "Delegated prefix that is currently leased."; | |||
| } | } | |||
| leaf lease-t1 { | leaf lease-t1 { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The time interval after which the client should | "The time interval after which the client should | |||
| contact the server from which the addresses in the | contact the server from which the addresses in the | |||
| IA_NA were obtained to extend the lifetimes of the | IA_NA were obtained to extend the lifetimes of the | |||
| addresses assigned to the IA_PD."; | addresses assigned to the IA_PD."; | |||
| } | } | |||
| leaf lease-t2 { | leaf lease-t2 { | |||
| type dhc6:timer-seconds32; | type dhc6:timer-seconds32; | |||
| description | description | |||
| "The time interval after which the client should | "The time interval after which the client should | |||
| contact any available server to extend the lifetimes | contact any available server to extend the lifetimes | |||
| of the addresses assigned to the IA_PD."; | of the addresses assigned to the IA_PD."; | |||
| } | } | |||
| uses lease-state; | uses lease-state; | |||
| } | } | |||
| } | } | |||
| container statistics { | container statistics { | |||
| description | description | |||
| "DHCPv6 message counters for the client."; | "DHCPv6 message counters for the client."; | |||
| uses message-statistics; | uses message-statistics; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Notifications | * Notifications | |||
| */ | */ | |||
| notification invalid-ia-address-detected { | notification invalid-ia-address-detected { | |||
| if-feature "non-temp-addr or temp-addr"; | if-feature "non-temp-addr or temp-addr"; | |||
| description | description | |||
| "Notification sent when an address received in an identity | "Notification sent when an address received in an identity | |||
| association option is determined invalid. Possible conditions | association option is determined invalid. Possible conditions | |||
| include a duplicate or otherwise illegal address."; | include a duplicate or otherwise illegal address."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 18.2.10.1"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 18.2.10.1"; | ||||
| leaf ia-id { | leaf ia-id { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "IA-ID"; | "IAID."; | |||
| } | } | |||
| leaf ia-na-t1-timer { | leaf ia-na-t1-timer { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The value of the T1 time field for non-temporary address | "The value of the T1 time field for non-temporary address | |||
| allocations (OPTION_IA_NA)."; | allocations (OPTION_IA_NA)."; | |||
| } | } | |||
| leaf ia-na-t2-timer { | leaf ia-na-t2-timer { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The value of the preferred-lifetime field for non-temporary | "The value of the preferred-lifetime field for non-temporary | |||
| address allocations (OPTION_IA_NA)."; | address allocations (OPTION_IA_NA)."; | |||
| } | } | |||
| leaf invalid-address { | leaf invalid-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "The IP address which has been detected to be invalid."; | "The IP address that has been detected to be invalid."; | |||
| } | } | |||
| leaf preferred-lifetime { | leaf preferred-lifetime { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The value of the preferred-lifetime field in | "The value of the preferred-lifetime field in | |||
| OPTION_IAADDR."; | OPTION_IAADDR."; | |||
| } | } | |||
| leaf valid-lifetime { | leaf valid-lifetime { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The value of the valid-lifetime field in OPTION_IAADDR."; | "The value of the valid-lifetime field in OPTION_IAADDR."; | |||
| } | } | |||
| leaf ia-options { | leaf ia-options { | |||
| type binary; | type binary; | |||
| description | description | |||
| "A copy of the contents of the IAaddr-options field."; | "A copy of the contents of the IAaddr-options field."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Description of the invalid Identity Association (IA) | "Description of the invalid Identity Association (IA) | |||
| detection error."; | detection error."; | |||
| } | } | |||
| } | } | |||
| notification transmission-failed { | notification transmission-failed { | |||
| description | description | |||
| "Notification sent when the transmission or retransmission | "Notification sent when the transmission or retransmission | |||
| of a message fails."; | of a message fails."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 7.6"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 7.6"; | ||||
| leaf failure-type { | leaf failure-type { | |||
| type enumeration { | type enumeration { | |||
| enum "solicit-timeout" { | enum solicit-timeout { | |||
| description | description | |||
| "Max Solicit timeout value (SOL_MAX_RT) exceeded."; | "Max Solicit timeout value (SOL_MAX_RT) exceeded."; | |||
| } | } | |||
| enum "request-timeout" { | enum request-timeout { | |||
| description | description | |||
| "Max Request timeout value (REQ_MAX_RT) exceeded."; | "Max Request timeout value (REQ_MAX_RT) exceeded."; | |||
| } | } | |||
| enum "request-retries-exceeded" { | enum request-retries-exceeded { | |||
| description | description | |||
| "Max Request retry attempts (REC_MAX_RC) exceeded."; | "Max Request retry attempts (REC_MAX_RC) exceeded."; | |||
| } | } | |||
| enum "confirm-duration-exceeded" { | enum confirm-duration-exceeded { | |||
| description | description | |||
| "Max Confirm duration (CNF_MAX_RD) exceeded."; | "Max Confirm duration (CNF_MAX_RD) exceeded."; | |||
| } | } | |||
| enum "renew-timeout" { | enum renew-timeout { | |||
| description | description | |||
| "Max Renew timeout value (REN_MAX_RT) exceeded."; | "Max Renew timeout value (REN_MAX_RT) exceeded."; | |||
| } | } | |||
| enum "rebind-timeout" { | enum rebind-timeout { | |||
| description | description | |||
| "Max Rebind timeout value (REB_MAX_RT) | "Max Rebind timeout value (REB_MAX_RT) | |||
| exceeded."; | exceeded."; | |||
| } | } | |||
| enum "info-request-timeout" { | enum info-request-timeout { | |||
| description | description | |||
| "Max Information-request timeout value (INF_MAX_RT) | "Max Information-request timeout value (INF_MAX_RT) | |||
| exceeded."; | exceeded."; | |||
| } | } | |||
| enum "release-retries-exceeded" { | enum release-retries-exceeded { | |||
| description | description | |||
| "Max Release retry attempts (REL_MAX_RC) exceeded."; | "Max Release retry attempts (REL_MAX_RC) exceeded."; | |||
| } | } | |||
| enum "decline-retries-exceeded" { | enum decline-retries-exceeded { | |||
| description | description | |||
| "Max Decline retry attempts (DEC_MAX_RT) exceeded."; | "Max Decline retry attempts (DEC_MAX_RT) exceeded."; | |||
| } | } | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Description of the failure."; | "Description of the failure."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Information related to the failure, such as number of | "Information related to the failure, such as number of | |||
| retries and timer values."; | retries and timer values."; | |||
| } | } | |||
| } | } | |||
| notification unsuccessful-status-code { | notification unsuccessful-status-code { | |||
| description | description | |||
| "Notification sent when the client receives a message that | "Notification sent when the client receives a message that | |||
| includes an unsuccessful Status Code option."; | includes an unsuccessful Status Code option."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 21.13"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 21.13"; | ||||
| leaf server-duid { | leaf server-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "DUID of the server sending the unsuccessful error code."; | "DUID of the server sending the unsuccessful error code."; | |||
| } | } | |||
| uses dhc6:status; | uses dhc6:status; | |||
| } | } | |||
| notification server-duid-changed { | notification server-duid-changed { | |||
| if-feature "non-temp-addr or prefix-delegation or " + | if-feature "non-temp-addr or prefix-delegation or " | |||
| "temp-addr"; | + "temp-addr"; | |||
| description | description | |||
| "Notification sent when the client receives a lease from a | "Notification sent when the client receives a lease from a | |||
| server with different DUID to the one currently stored by the | server with different DUID to the one currently stored by the | |||
| client, e.g., in response to a Rebind message."; | client, e.g., in response to a Rebind message."; | |||
| reference "RFC 8415: Dynamic Host Configuration Protocol for | reference | |||
| IPv6 (DHCPv6), Section 18.2.5"; | "RFC 8415: Dynamic Host Configuration Protocol for | |||
| IPv6 (DHCPv6), Section 18.2.5"; | ||||
| leaf new-server-duid { | leaf new-server-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "DUID of the new server."; | "DUID of the new server."; | |||
| } | } | |||
| leaf previous-server-duid { | leaf previous-server-duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "DUID of the previous server."; | "DUID of the previous server."; | |||
| } | } | |||
| leaf lease-ia-na { | leaf lease-ia-na { | |||
| if-feature non-temp-addr; | if-feature "non-temp-addr"; | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-client/client-if/ia-na/ia-id"; | path "/dhcpv6-client/client-if/ia-na/ia-id"; | |||
| } | } | |||
| description | description | |||
| "Reference to the IA_NA lease."; | "Reference to the IA_NA lease."; | |||
| } | } | |||
| leaf lease-ia-ta { | leaf lease-ia-ta { | |||
| if-feature temp-addr; | if-feature "temp-addr"; | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-client/client-if/ia-ta/ia-id"; | path "/dhcpv6-client/client-if/ia-ta/ia-id"; | |||
| } | } | |||
| description | description | |||
| "Reference to the IA_TA lease."; | "Reference to the IA_TA lease."; | |||
| } | } | |||
| leaf lease-ia-pd { | leaf lease-ia-pd { | |||
| if-feature prefix-delegation; | if-feature "prefix-delegation"; | |||
| type leafref { | type leafref { | |||
| path "/dhcpv6-client/client-if/ia-pd/ia-id"; | path "/dhcpv6-client/client-if/ia-pd/ia-id"; | |||
| } | } | |||
| description | description | |||
| "Reference to the IA_PD lease."; | "Reference to the IA_PD lease."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS>]]> | ]]></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 | <t> | |||
| accessed via network management protocols such as NETCONF | The YANG modules specified in this document define schemas for data | |||
| <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. | that is designed to be accessed via network management protocols such | |||
| The lowest NETCONF layer is the secure transport layer, and | as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. | |||
| the mandatory-to-implement secure transport is Secure Shell | The lowest NETCONF layer is the secure transport layer, and the | |||
| (SSH) <xref target="RFC6242"/>. The lowest RESTCONF layer | mandatory-to-implement secure transport is Secure Shell (SSH) | |||
| is HTTPS, and the mandatory-to-implement secure transport | <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the | |||
| is TLS <xref target="RFC8446"/>.</t> | mandatory-to-implement secure transport is TLS <xref target="RFC8446"/>. | |||
| <t>The Network Configuration Access Control Model (NACM) | </t> | |||
| <xref target="RFC8341"/> provides the means to restrict | <t> | |||
| access for particular NETCONF or RESTCONF users to a | The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> | |||
| preconfigured subset of all available NETCONF or RESTCONF | provides the means to restrict access for particular NETCONF or RESTCONF users | |||
| protocol operations and content.</t> | to a preconfigured subset of all available NETCONF or RESTCONF protocol | |||
| <t>All data nodes defined in the YANG modules which can be | operations and content. | |||
| created, modified, and deleted (i.e., config true, which | </t> | |||
| is the default) are considered sensitive. Write operations | <t> | |||
| (e.g., edit-config) to these data nodes without proper | There are a number of data nodes defined in these YANG modules that | |||
| protection can have a negative effect on network operations. | are writable/creatable/deletable (i.e., config true, which is the default). | |||
| </t> | These data nodes may be considered sensitive or vulnerable in some network | |||
| <t>The RPCs for deleting/clearing active address and prefix | environments. Write operations (e.g., edit-config) to these data nodes | |||
| entries in the server and relay modules are particularly | without proper protection can have a negative effect on network operations. | |||
| sensitive. These RPCs use 'nacm:default-deny-all'. | These are the subtrees and data nodes in the 'ieft-dhcpv6-server.yang' | |||
| </t> | module and their sensitivity/vulnerability: | |||
| <t>An attacker with read/write access to the DHCPv6 server can | </t> | |||
| undertake various attacks, such as:</t> | <ul spacing="normal"> | |||
| <ul spacing="normal"> | <li><t>Denial-of-Service (DoS) attacks, such as disabling the DHCP server | |||
| <li>Denial of service attacks, such as disabling the DHCP | service or removing address/prefix pool configuration:</t> | |||
| server sevice, or removing address/prefix pool | <ul spacing="compact" empty="true"> | |||
| configuration. | <li>(dhc6-srv/vendor-config)</li> | |||
| </li> | <li>(dhc6-srv/allocation-ranges)</li> | |||
| <li>Various attacks based on re-configuring the contents | </ul> | |||
| of DHCPv6 options, leading to several types of security or | </li> | |||
| privacy threats. These options could redirect clients to | <li><t>Various attacks based on reconfiguring the contents of DHCPv6 | |||
| services under an attacker’s control. For example, changing | options, leading to several types of security or privacy threats. | |||
| the address of a DNS server supplied in a DHCP option to | These options could redirect clients to services under an | |||
| point to a rogue server. | attacker's control, for example, by changing the address of a DNS | |||
| </li> | server supplied in a DHCP option to point to a rogue server.</t> | |||
| </ul> | <ul spacing="compact" empty="true"> | |||
| <t>An attacker sending DHCPv6 messages which cause the server to | <li>(dhc6-srv/option-sets)</li> | |||
| generate 'invalid-client-detected' and 'decline-received' | </ul> | |||
| notifications could be used as a DoS attack. Such an attack | </li> | |||
| could be mitigated by the NETCONF client unsubscribing | </ul> | |||
| from the affected notifications.</t> | <t> | |||
| <t>An attacker with read/write access the DHCPv6 relay can | These are the subtrees and data nodes in the 'ieft-dhcpv6-relay.yang' | |||
| undertake various attacks, such as:</t> | module and their sensitivity/vulnerability: | |||
| <ul spacing="normal"> | </t> | |||
| <li>Denial of service attacks, based on disabling the | <ul spacing="normal"> | |||
| DHCP relay function, or modifying the relay's | <li><t>DoS attacks, based on disabling the DHCP relay function or | |||
| "destination-address" to a non-existant address. | modifying the relay's "destination-address" to a non-existent address.</t> | |||
| </li> | <ul spacing="compact" empty="true"> | |||
| <li>Modifying the relay's "destination-address" to send | <li>(dhc6-rly/relay-if)</li> | |||
| messages to a rogue DHCPv6 server. | </ul> | |||
| </li> | </li> | |||
| <li>Deleting information about a client's delegated | <li><t>Modifying the relay's "destination-address" to send messages to a | |||
| prefix, causing a denial of service attack as traffic | rogue DHCPv6 server.</t> | |||
| will no longer be routed to the client. | <ul spacing="compact" empty="true"> | |||
| </li> | <li>(dhc6-rly/relay-if)</li> | |||
| </ul> | </ul> | |||
| <t>Some of the readable data nodes in this YANG module may | </li> | |||
| be considered sensitive or vulnerable in some network | </ul> | |||
| environments. Therefore, it is important to control read | <t> | |||
| access (e.g., via get, get-config, or notification) | Some of the RPC operations in these YANG modules may be considered sensitive | |||
| to these data nodes. These subtrees and data nodes can be | or vulnerable in some network environments. It is thus important to control | |||
| misused to track the activity or fingerprint the device type | access to these operations. These RPCs use 'nacm:default-deny-all'. | |||
| of the host: | </t> | |||
| </t> | <t> | |||
| These are the operations in the 'ieft-dhcpv6-relay.yang' module and their | ||||
| sensitivity/vulnerability: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li><t>Deleting/clearing active address and prefix leases causing a DoS attack | ||||
| , | ||||
| as traffic will no longer be routed to the client.</t> | ||||
| <ul spacing="compact" empty="true"> | ||||
| <li>(dhc6-rly/clear-prefix-entry)</li> | ||||
| <li>(dhc6-rly/clear-client-prefixes)</li> | ||||
| <li>(dhc6-rly/clear-interface-prefixes)</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| An attacker sending DHCPv6 messages that cause the server to generate | ||||
| 'invalid-client-detected' and 'decline-received' notifications could | ||||
| result in a DoS attack. Such an attack could be mitigated by the | ||||
| NETCONF client unsubscribing from the affected notifications. | ||||
| </t> | ||||
| <t> | ||||
| Some of the readable data nodes in this YANG module may be considered | ||||
| sensitive or vulnerable in some network environments. It is thus important to | ||||
| control read access (e.g., via get, get-config, or notification) to these data | ||||
| nodes. These are the subtrees and data nodes and their | ||||
| sensitivity/vulnerability: | ||||
| </t> | ||||
| <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><t>Information the server holds about clients with active | |||
| leases: | leases:</t> | |||
| (dhc6-srv/allocation-ranges/allocation-range/address-pools/ | <ul spacing="compact" empty="true"> | |||
| address-pool/active-leases) | <li>(dhc6-srv/allocation-ranges/allocation-range/address-pools/ | |||
| </li> | address-pool/active-leases)</li> | |||
| <li>Information the relay holds about clients with active | </ul> | |||
| leases: (dhc6-rly/relay-if/prefix-delegation/) | ||||
| </li> | </li> | |||
| <li><t>Information the relay holds about clients with active | ||||
| leases:</t> | ||||
| <ul spacing="compact" empty="true"> | ||||
| <li>(dhc6-rly/relay-if/prefix-delegation/)</li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | </ul> | |||
| <t>Information about a server's configured address and prefix | <t>Information about a server's configured address and prefix | |||
| pools may be used by an attacker for network reconnaissance | pools may be used by an attacker for network reconnaissance | |||
| <xref target="RFC7707"/>. The following subtrees and data | <xref target="RFC7707"/>. The following subtrees and data | |||
| nodes could be used for this purpose: | nodes could be used for this purpose: | |||
| </t> | </t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>Information about client address allocation ranges: | <li><t>Information about client address allocation ranges:</t> | |||
| (dhc6-srv/allocation-ranges/allocation-range/address-pools/ | <ul spacing="compact" empty="true"> | |||
| address-pool/pool-prefix) | <li>(dhc6-srv/allocation-ranges/allocation-range/address-pools/ | |||
| address-pool/pool-prefix)</li> | ||||
| </ul> | ||||
| </li> | </li> | |||
| <li>Information about client prefix allocation ranges: | <li><t>Information about client prefix allocation ranges:</t> | |||
| (dhc6-srv/allocation-ranges/allocation-range/prefix-pools/ | <ul spacing="compact" empty="true"> | |||
| prefix-pool/pool-prefix) | <li>(dhc6-srv/allocation-ranges/allocation-range/prefix-pools/ | |||
| prefix-pool/pool-prefix)</li> | ||||
| </ul> | ||||
| </li> | </li> | |||
| </ul> | </ul> | |||
| <t><xref target="RFC7844"/> describes anonymity profiles for | <t><xref target="RFC7844"/> describes anonymity profiles for | |||
| DHCP clients. These can be used to prevent client tracking | DHCP clients. These can be used to prevent client tracking | |||
| on a visited network. Support for this can be enabled by | on a visited network. Support for this can be enabled by | |||
| implementing the 'anon-profile' feature in the client | implementing the 'anon-profile' feature in the client | |||
| module.</t> | module.</t> | |||
| <t><xref target="RFC7824"/> covers privacy considerations for | <t><xref target="RFC7824"/> covers privacy considerations for | |||
| DHCPv6 and is applicable here.</t> | DHCPv6 and is applicable here.</t> | |||
| <t>Security considerations related to DHCPv6 are discussed in | <t>Security considerations related to DHCPv6 are discussed in | |||
| <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 3899 ¶ | |||
| <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 | <t>Per this document, IANA has registered the following four YANG module | |||
| the "YANG Module Names" registry <xref target="RFC6020"/>.</t> | 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> | <referencegroup anchor="BCP18" target="https://www.rfc-editor.org/info/bc | |||
| <title>Key words for use in RFCs to Indicate Requirement Levels</tit | p18"> | |||
| le> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference. | |||
| <author initials="S." surname="Bradner" fullname="S. Bradner"> | RFC.2277.xml"/> | |||
| <organization/> | </referencegroup> | |||
| </author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <date year="1997" month="March"/> | C.3118.xml"/> | |||
| <abstract> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <t>In many standards track documents several words are used to sig | C.3688.xml"/> | |||
| nify the requirements in the specification. These words are often capitalized. | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| This document defines these words as they should be interpreted in IETF document | C.6355.xml"/> | |||
| s. This document specifies an Internet Best Current Practices for the Internet | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| Community, and requests discussion and suggestions for improvements.</t> | C.6020.xml"/> | |||
| </abstract> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| </front> | C.6241.xml"/> | |||
| <seriesInfo name="BCP" value="14"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <seriesInfo name="RFC" value="2119"/> | C.6242.xml"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC2119"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| </reference> | C.6991.xml"/> | |||
| <reference anchor="RFC2277" target="https://www.rfc-editor.org/info/rfc2 | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| 277" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.22 | C.7844.xml"/> | |||
| 77.xml"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <front> | C.7950.xml"/> | |||
| <title>IETF Policy on Character Sets and Languages</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <author initials="H." surname="Alvestrand" fullname="H. Alvestrand"> | C.8174.xml"/> | |||
| <organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| </author> | C.8040.xml"/> | |||
| <date year="1998" month="January"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <abstract> | C.8340.xml"/> | |||
| <t>This document is the current policies being applied by the Inte | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| rnet Engineering Steering Group (IESG) towards the standardization efforts in th | C.8341.xml"/> | |||
| e Internet Engineering Task Force (IETF) in order to help Internet protocols ful | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| fill these requirements. This document specifies an Internet Best Current Pract | C.8342.xml"/> | |||
| ices for the Internet Community, and requests discussion and suggestions for imp | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| rovements.</t> | C.8343.xml"/> | |||
| </abstract> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| </front> | C.8446.xml"/> | |||
| <seriesInfo name="BCP" value="18"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| <seriesInfo name="RFC" value="2277"/> | C.8415.xml"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC2277"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | |||
| </reference> | C.8987.xml"/> | |||
| <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>"> | <reference anchor="IANA-DHCPV6-AUTH-NAMESPACES" target="https://www.iana | |||
| .org/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> | |||
| <reference anchor="IANA-DHCPV6-STATUS-CODES" target="https://www.iana.org/ | ||||
| assignments/dhcpv6-parameters"> | ||||
| <front> | ||||
| <title>DHCPv6 Status Codes</title> | ||||
| <author> | ||||
| <organization>IANA</organization> | ||||
| </author> | ||||
| </front> | ||||
| </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 | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D. | |||
| "> | ietf-netconf-tls-client-server.xml"/> | |||
| <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 --> the assigned RFC value for draft-ietf-netconf-crypto- | ||||
| types | ||||
| * BBBB --> the assigned RFC value for draft-ietf-netconf-trust- | ||||
| anchors | ||||
| * CCCC --> the assigned RFC value for draft-ietf-netconf-keystore | ||||
| * DDDD --> the assigned RFC value for draft-ietf-netconf-tcp-client- | ||||
| server | ||||
| * FFFF --> 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 --> the publication date of this draft | ||||
| The following Appendix section is to be removed prior to publication: | ||||
| * Appendix B. Change Log | ||||
| </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 4100 ¶ | |||
| <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 4131 ¶ | |||
| <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 4217 ¶ | |||
| <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 4272 ¶ | |||
| <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 (6)),</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 4348 ¶ | |||
| </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> | ||||
| <artwork align="center" xml:base="/home/if/Documents/yang/example-dhcpv6-o | <sourcecode type="yang" markers="true"><![CDATA[ | |||
| 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>"; | |||
| description | description | |||
| "This YANG module contains DHCPv6 options defined in RFC 8415 | "This YANG module contains DHCPv6 options defined in RFC 8415 | |||
| that can be used by DHCPv6 servers. | that can be used by DHCPv6 servers. | |||
| Copyright (c) 2022 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9243 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9243); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| revision 2022-03-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"; | |||
| } | } | |||
| /* | /* | |||
| * 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 | |||
| (DHCPv6) Options for Session Initiation Protocol (SIP) | "RFC 3319: Dynamic Host Configuration Protocol | |||
| Servers"; | (DHCPv6) Options for Session Initiation Protocol (SIP) | |||
| Servers"; | ||||
| container sip-server-domain-name-list-option { | container sip-server-domain-name-list-option { | |||
| description | description | |||
| "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List | "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List | |||
| Option."; | Option."; | |||
| list sip-server { | list sip-server { | |||
| key sip-serv-id; | key "sip-serv-id"; | |||
| description | description | |||
| "SIP server information."; | "SIP server information."; | |||
| leaf sip-serv-id { | leaf sip-serv-id { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "SIP server list identifier."; | "SIP server list identifier."; | |||
| } | } | |||
| leaf sip-serv-domain-name { | leaf sip-serv-domain-name { | |||
| type inet:domain-name; | type inet:domain-name; | |||
| description | description | |||
| "SIP server domain name."; | "SIP server domain name."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping sip-server-address-list-option-group { | grouping sip-server-address-list-option-group { | |||
| description | description | |||
| "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List"; | "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List."; | |||
| reference "RFC 3319: Dynamic Host Configuration Protocol | reference | |||
| (DHCPv6) Options for Session Initiation Protocol (SIP) | "RFC 3319: Dynamic Host Configuration Protocol | |||
| Servers"; | (DHCPv6) Options for Session Initiation Protocol (SIP) | |||
| Servers"; | ||||
| container sip-server-address-list-option { | container sip-server-address-list-option { | |||
| description | description | |||
| "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List | "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List | |||
| Option."; | Option."; | |||
| list sip-server { | list sip-server { | |||
| key sip-serv-id; | key "sip-serv-id"; | |||
| description | description | |||
| "SIP server information."; | "SIP server information."; | |||
| leaf sip-serv-id { | leaf sip-serv-id { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "SIP server list entry identifier."; | "SIP server list entry identifier."; | |||
| } | } | |||
| leaf sip-serv-addr { | leaf sip-serv-addr { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "SIP server IPv6 address."; | "SIP server IPv6 address."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Augmentations | * Augmentations | |||
| */ | */ | |||
| augment "/dhc6-srv:dhcpv6-server/dhc6-srv:option-sets/" + | augment "/dhc6-srv:dhcpv6-server/dhc6-srv:option-sets/" | |||
| "dhc6-srv:option-set" { | + "dhc6-srv:option-set" { | |||
| description | description | |||
| "Augment the option definition groupings to the server | "Augment the option definition groupings to the server | |||
| module."; | module."; | |||
| uses sip-server-domain-name-list-option-group; | uses sip-server-domain-name-list-option-group; | |||
| uses sip-server-address-list-option-group; | uses sip-server-address-list-option-group; | |||
| } | } | |||
| } | } | |||
| ]]> | ]]></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-06-20 { | |||
| description | description | |||
| "Initial Revision."; | "Initial revision."; | |||
| reference | reference | |||
| "XXXX: YANG Data Model for DHCPv6 Configuration"; | "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; | |||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping config { | grouping config { | |||
| description | description | |||
| "Parameters necessary for the configuration of a DHCPv6 | "Parameters necessary for the configuration of a DHCPv6 | |||
| server"; | server."; | |||
| container serv-attributes { | container serv-attributes { | |||
| description | description | |||
| "Contains basic attributes necessary for running a DHCPv6 | "Contains basic attributes necessary for running a DHCPv6 | |||
| server."; | server."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the DHCPv6 server."; | "Name of the DHCPv6 server."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Description of the DHCPv6 server."; | "Description of the DHCPv6 server."; | |||
| } | } | |||
| leaf ipv6-listen-port { | leaf ipv6-listen-port { | |||
| type uint16; | type uint16; | |||
| default 547; | default "547"; | |||
| description | description | |||
| "UDP port that the server will listen on."; | "UDP port that the server will listen on."; | |||
| } | } | |||
| choice listening-interfaces { | choice listening-interfaces { | |||
| default all-interfaces; | default "all-interfaces"; | |||
| description | description | |||
| "Configures which interface or addresses the server will | "Configures which interface or addresses the server will | |||
| listen for incoming messages on."; | listen for incoming messages on."; | |||
| case all-interfaces { | case all-interfaces { | |||
| container all-interfaces { | container all-interfaces { | |||
| presence true; | presence "true"; | |||
| description | description | |||
| "Configures the server to listen for incoming messages | "Configures the server to listen for incoming messages | |||
| on all IPv6 addresses (unicast and multicast) on all of | on all IPv6 addresses (unicast and multicast) on all | |||
| its network interfaces."; | of its network interfaces."; | |||
| } | } | |||
| } | } | |||
| case interface-list { | case interface-list { | |||
| leaf-list interfaces { | leaf-list interfaces { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "List of interfaces on which the server will listen | "List of interfaces on which the server will listen | |||
| for incoming messages. Messages addressed to any | for incoming messages. Messages addressed to any | |||
| valid IPv6 address (unicast and multicast) will be | valid IPv6 address (unicast and multicast) will be | |||
| received."; | received."; | |||
| } | } | |||
| } | } | |||
| case address-list { | case address-list { | |||
| leaf-list address-list { | leaf-list address-list { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "List of IPv6 address(es) on which the server will | "List of IPv6 address(es) on which the server will | |||
| listen for incoming DHCPv6 messages."; | listen for incoming DHCPv6 messages."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| leaf-list interfaces-config { | leaf-list interfaces-config { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| default "if:interfaces/if:interface/if:name"; | default "if:interfaces/if:interface/if:name"; | |||
| description | description | |||
| "A leaf list of interfaces on which the server should | "A leaf list of interfaces on which the server should | |||
| listen."; | listen."; | |||
| } | } | |||
| container lease-storage { | container lease-storage { | |||
| description | description | |||
| "Configures how the server will store leases."; | "Configures how the server will store leases."; | |||
| choice storage-type { | choice storage-type { | |||
| description | description | |||
| "The type of storage that will be used for lease | "The type of storage that will be used for lease | |||
| information."; | information."; | |||
| case memfile { | case memfile { | |||
| description | description | |||
| "Configuration for storing leases information in a | "Configuration for storing leases information in a | |||
| Comma-Separated Value (CSV) file."; | Comma-Separated Value (CSV) file."; | |||
| leaf memfile-name { | leaf memfile-name { | |||
| type string; | type string; | |||
| description | description | |||
| "Specifies the absolute location of the lease file. | "Specifies the absolute location of the lease file. | |||
| The format of the string follow the semantics of | The format of the string follows the semantics of | |||
| the relevant operating system."; | the relevant operating system."; | |||
| } | } | |||
| leaf memfile-lfc-interval { | leaf memfile-lfc-interval { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "Specifies the interval in seconds, at which the | "Specifies the interval in seconds, at which the | |||
| server will perform a lease file cleanup (LFC)."; | server will perform a lease file cleanup (LFC)."; | |||
| } | } | |||
| } | } | |||
| case mysql { | case mysql { | |||
| leaf mysql-name { | leaf mysql-name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the MySQL database, running on the | "Name of the MySQL database, running on the | |||
| localhost."; | localhost."; | |||
| } | } | |||
| leaf mysql-username { | leaf mysql-username { | |||
| type string; | type string; | |||
| description | description | |||
| "User name of the account under which the server | "User name of the account under which the server | |||
| will access the database."; | will access the database."; | |||
| } | } | |||
| leaf mysql-password { | leaf mysql-password { | |||
| type string; | type string; | |||
| description | description | |||
| "Password of the account under which the server | "Password of the account under which the server | |||
| will access the database."; | will access the database."; | |||
| } | } | |||
| leaf mysql-port { | leaf mysql-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| default 3306; | default "3306"; | |||
| description | description | |||
| "If the database is located on a different system, | "If the database is located on a different system, | |||
| the port number may be specified."; | the port number may be specified."; | |||
| } | } | |||
| leaf mysql-lfc-interval { | leaf mysql-lfc-interval { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "Specifies the interval in seconds, at which the | "Specifies the interval in seconds, at which the | |||
| server will perform a lease file cleanup (LFC)."; | server will perform a lease file cleanup (LFC)."; | |||
| } | } | |||
| leaf mysql-connect-timeout { | leaf mysql-connect-timeout { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "Defines the timeout interval for connecting to the | "Defines the timeout interval for connecting to the | |||
| database. A longer interval can be specified if the | database. A longer interval can be specified if the | |||
| database is remote."; | database is remote."; | |||
| } | } | |||
| } | } | |||
| case postgresql { | case postgresql { | |||
| leaf postgresql-name { | leaf postgresql-name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the PostgreSQL database, running on the | "Name of the PostgreSQL database, running on the | |||
| localhost."; | localhost."; | |||
| } | } | |||
| leaf postgresql-username { | leaf postgresql-username { | |||
| type string; | type string; | |||
| description | description | |||
| "User name of the account under which the server | "User name of the account under which the server | |||
| will access the database"; | will access the database."; | |||
| } | } | |||
| leaf postgresql-password { | leaf postgresql-password { | |||
| type string; | type string; | |||
| description | description | |||
| "Password of the account under which the server | "Password of the account under which the server | |||
| will access the database"; | will access the database."; | |||
| } | } | |||
| leaf postgresql-port { | leaf postgresql-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| default 5432; | default "5432"; | |||
| description | description | |||
| "If the database is located on a different system, | "If the database is located on a different system, | |||
| the port number may be specified"; | the port number may be specified."; | |||
| } | } | |||
| leaf postgresql-lfc-interval { | leaf postgresql-lfc-interval { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "Specifies the interval in seconds, at which the | "Specifies the interval in seconds, at which the | |||
| server will perform a lease file cleanup (LFC)"; | server will perform a lease file cleanup (LFC)."; | |||
| } | } | |||
| leaf postgresql-connect-timeout { | leaf postgresql-connect-timeout { | |||
| type uint64; | type uint64; | |||
| description | description | |||
| "Defines the timeout interval for connecting to the | "Defines the timeout interval for connecting to the | |||
| database. A longer interval can be specified if the | database. A longer interval can be specified if the | |||
| database is remote."; | database is remote."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Augmentations | * Augmentations | |||
| */ | */ | |||
| augment "/dhc6-srv:dhcpv6-server/dhc6-srv:vendor-config" { | augment "/dhc6-srv:dhcpv6-server/dhc6-srv:vendor-config" { | |||
| description | description | |||
| "Augment the server specific YANG to the ietf-dhcpv6-server | "Augment the server-specific YANG module to the | |||
| module."; | ietf-dhcpv6-server module."; | |||
| uses config; | uses config; | |||
| } | } | |||
| } | } | |||
| ]]> | ]]></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; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix if; | prefix if; | |||
| } | } | |||
| import ietf-dhcpv6-common { | import ietf-dhcpv6-common { | |||
| prefix dhc6; | prefix dhc6; | |||
| } | } | |||
| import ietf-dhcpv6-server { | import ietf-dhcpv6-server { | |||
| prefix dhc6-srv; | prefix dhc6-srv; | |||
| } | } | |||
| organization | organization | |||
| "IETF DHC (Dynamic Host Configuration) Working Group"; | "IETF Dynamic Host Configuration (DHC) Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/dhc/> | "WG Web: <https://datatracker.ietf.org/wg/dhc/> | |||
| WG List: <mailto:dhcwg@ietf.org> | WG List: <mailto:dhcwg@ietf.org> | |||
| Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> | Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn> | |||
| Author: Linhui Sun <lh.sunlinh@gmail.com> | Author: Linhui Sun <lh.sunlinh@gmail.com> | |||
| Editor: Ian Farrer <ian.farrer@telekom.de> | Editor: Ian Farrer <ian.farrer@telekom.de> | |||
| Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> | Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de> | |||
| Author: Zihao He <hezihao9512@gmail.com> | Author: Zihao He <hezihao9512@gmail.com> | |||
| Author: Michal Nowikowski <godfryd@isc.org>"; | Author: Michal Nowikowski <godfryd@isc.org>"; | |||
| description | description | |||
| "This YANG module defines components for the definition and | "This YANG module defines components for the definition and | |||
| configuration of the client class selector function for a | configuration of the client class selector function for a | |||
| DHCPv6 server. As this functionality varies greatly between | DHCPv6 server. As this functionality varies greatly between | |||
| different implementations, the module provided as an example | different implementations, the module provided as an example | |||
| only. | only. | |||
| Copyright (c) 2022 IETF Trust and the persons identified as | Copyright (c) 2022 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9243 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc9243); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| revision 2022-03-29 { | revision 2022-06-20 { | |||
| description | description | |||
| "Initial Revision."; | "Initial revision."; | |||
| reference | reference | |||
| "XXXX: YANG Data Model for DHCPv6 Configuration"; | "RFC 9243: A YANG Data Model for DHCPv6 Configuration"; | |||
| } | } | |||
| /* | /* | |||
| * Groupings | * Groupings | |||
| */ | */ | |||
| grouping client-class-id { | grouping client-class-id { | |||
| description | description | |||
| "Definitions of client message classification for | "Definitions of client message classification for | |||
| authorization and assignment purposes."; | authorization and assignment purposes."; | |||
| leaf client-class-name { | leaf client-class-name { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Unique Identifier for client class identification list | "Unique identifier for client class identification list | |||
| entries."; | entries."; | |||
| } | } | |||
| choice id-type { | choice id-type { | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Definitions for different client identifier types."; | "Definitions for different client identifier types."; | |||
| case client-id-id { | case client-id-id { | |||
| leaf client-id { | leaf client-id { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "String literal client identifier."; | "String literal client identifier."; | |||
| } | } | |||
| description | description | |||
| "Client class selection based on a string literal client | "Client class selection based on a string literal client | |||
| identifier."; | identifier."; | |||
| } | } | |||
| case received-interface-id { | case received-interface-id { | |||
| description | description | |||
| "Client class selection based on the incoming interface | "Client class selection based on the incoming interface | |||
| of the DHCPv6 message."; | of the DHCPv6 message."; | |||
| leaf received-interface { | leaf received-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "Reference to the interface entry for the incoming | "Reference to the interface entry for the incoming | |||
| DHCPv6 message."; | DHCPv6 message."; | |||
| } | } | |||
| } | } | |||
| case packet-source-address-id { | case packet-source-address-id { | |||
| description | description | |||
| "Client class selection based on the source address of | "Client class selection based on the source address of | |||
| the DHCPv6 message."; | the DHCPv6 message."; | |||
| leaf packet-source-address { | leaf packet-source-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Source address of the DHCPv6 message."; | "Source address of the DHCPv6 message."; | |||
| } | } | |||
| } | } | |||
| case packet-destination-address-id { | case packet-destination-address-id { | |||
| description | description | |||
| "Client class selection based on the destination address | "Client class selection based on the destination address | |||
| of the DHCPv6 message."; | of the DHCPv6 message."; | |||
| leaf packet-destination-address { | leaf packet-destination-address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Destination address of the DHCPv6 message."; | "Destination address of the DHCPv6 message."; | |||
| } | } | |||
| } | } | |||
| case relay-link-address-id { | case relay-link-address-id { | |||
| description | description | |||
| "Client class selection based on the prefix of the | "Client class selection based on the prefix of the | |||
| link-address field in the relay agent message header."; | link-address field in the relay agent message header."; | |||
| leaf relay-link-address { | leaf relay-link-address { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Prefix of the link-address field in the relay agent | "Prefix of the link-address field in the relay agent | |||
| message header."; | message header."; | |||
| } | } | |||
| } | } | |||
| case relay-peer-address-id { | case relay-peer-address-id { | |||
| description | description | |||
| "Client class selection based on the value of the | "Client class selection based on the value of the | |||
| peer-address field in the relay agent message header."; | peer-address field in the relay agent message header."; | |||
| leaf relay-peer-address { | leaf relay-peer-address { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Prefix of the peer-address field in the relay agent | "Prefix of the peer-address field in the relay agent | |||
| message header."; | message header."; | |||
| } | } | |||
| } | } | |||
| case relay-interface-id { | case relay-interface-id { | |||
| description | description | |||
| "Client class selection based on a received instance of | "Client class selection based on a received instance of | |||
| OPTION_INTERFACE_ID (18)."; | OPTION_INTERFACE_ID (18)."; | |||
| leaf relay-interface { | leaf relay-interface { | |||
| type string; | type string; | |||
| description | description | |||
| "An opaque value of arbitrary length generated by the | "An opaque value of arbitrary length generated by the | |||
| relay agent to identify one of the relay agent's | relay agent to identify one of the relay agent's | |||
| interfaces."; | interfaces."; | |||
| } | } | |||
| } | } | |||
| case user-class-option-id { | case user-class-option-id { | |||
| description | description | |||
| "Client class selection based on the value of the | "Client class selection based on the value of the | |||
| OPTION_USER_CLASS (15) and its user-class-data field."; | OPTION_USER_CLASS (15) and its user-class-data field."; | |||
| leaf user-class-data { | leaf user-class-data { | |||
| type string; | type string; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "User Class value to match."; | "User Class value to match."; | |||
| } | } | |||
| } | } | |||
| case vendor-class-present-id { | case vendor-class-present-id { | |||
| description | description | |||
| "Client class selection based on the presence of | "Client class selection based on the presence of | |||
| OPTION_VENDOR_CLASS (16) in the received message."; | OPTION_VENDOR_CLASS (16) in the received message."; | |||
| leaf vendor-class-present { | leaf vendor-class-present { | |||
| type boolean; | type boolean; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Presence of OPTION_VENDOR_CLASS (16) in the received | "Presence of OPTION_VENDOR_CLASS (16) in the received | |||
| message."; | message."; | |||
| } | } | |||
| } | } | |||
| case vendor-class-option-enterprise-number-id { | case vendor-class-option-enterprise-number-id { | |||
| description | description | |||
| "Client class selection based on the value of the | "Client class selection based on the value of the | |||
| enterprise-number field in OPTION_VENDOR_CLASS (16)."; | enterprise-number field in OPTION_VENDOR_CLASS (16)."; | |||
| leaf vendor-class-option-enterprise-number { | leaf vendor-class-option-enterprise-number { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Value of the enterprise-number field."; | "Value of the enterprise-number field."; | |||
| } | } | |||
| } | } | |||
| case vendor-class-option-data { | case vendor-class-option-data { | |||
| description | description | |||
| "Client class selection based on the value of a data | "Client class selection based on the value of a data | |||
| field within a vendor-class-data entry for a matching | field within a vendor-class-data entry for a matching | |||
| enterprise-number field in OPTION_VENDOR_CLASS (16)."; | enterprise-number field in OPTION_VENDOR_CLASS (16)."; | |||
| container vendor-class-option-data { | container vendor-class-option-data { | |||
| description | description | |||
| "Vendor class option data container."; | "Vendor class option data container."; | |||
| leaf enterprise-number { | leaf enterprise-number { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The vendor's registered Enterprise Number as | "The vendor's registered Enterprise Number, as | |||
| maintained by IANA."; | maintained by IANA."; | |||
| } | } | |||
| leaf vendor-class-data-id { | leaf vendor-class-data-id { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "Vendor class data ID"; | "Vendor class data ID."; | |||
| } | } | |||
| leaf vendor-class-data { | leaf vendor-class-data { | |||
| type string; | type string; | |||
| description | description | |||
| "Opaque field for matching the client's vendor class | "Opaque field for matching the client's vendor class | |||
| data."; | data."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case client-duid-id { | case client-duid-id { | |||
| description | description | |||
| "Client class selection based on the value of the | "Client class selection based on the value of the | |||
| received client DUID."; | received client DUID."; | |||
| leaf duid { | leaf duid { | |||
| type dhc6:duid; | type dhc6:duid; | |||
| description | description | |||
| "Client DUID."; | "Client DUID."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Augmentations | * Augmentations | |||
| */ | */ | |||
| augment "/dhc6-srv:dhcpv6-server/dhc6-srv:class-selector" { | augment "/dhc6-srv:dhcpv6-server/dhc6-srv:class-selector" { | |||
| description | description | |||
| "Augment class selector functions to the DHCPv6 server | "Augment class selector functions to the DHCPv6 server | |||
| module."; | module."; | |||
| container client-classes { | container client-classes { | |||
| description | description | |||
| "Client classes to augment."; | "Client classes to augment."; | |||
| list class { | list class { | |||
| key client-class-name; | key "client-class-name"; | |||
| description | description | |||
| "List of the client class identifiers applicable to | "List of the client class identifiers applicable to | |||
| clients served by this address pool"; | clients served by this address pool."; | |||
| uses client-class-id; | uses client-class-id; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| augment "/dhc6-srv:dhcpv6-server/" + | augment "/dhc6-srv:dhcpv6-server/" | |||
| "dhc6-srv:allocation-ranges/dhc6-srv:allocation-range" { | + "dhc6-srv:allocation-ranges/dhc6-srv:allocation-range" { | |||
| description | description | |||
| "Augment class selector functions to the DHCPv6 server | "Augment class selector functions to the DHCPv6 server | |||
| allocation-ranges."; | allocation-ranges."; | |||
| leaf-list client-class { | leaf-list client-class { | |||
| type leafref { | type leafref { | |||
| path "/dhc6-srv:dhcpv6-server/dhc6-srv:" + | path "/dhc6-srv:dhcpv6-server/dhc6-srv:" | |||
| "class-selector/client-classes/class/client-class-name"; | + "class-selector/client-classes/class/client-class-name"; | |||
| } | } | |||
| description | description | |||
| "Leafrefs to client classes."; | "Leafrefs to client classes."; | |||
| } | } | |||
| } | } | |||
| augment "/dhc6-srv:dhcpv6-server/dhc6-srv:" + | augment "/dhc6-srv:dhcpv6-server/dhc6-srv:" | |||
| "allocation-ranges/dhc6-srv:allocation-range/dhc6-srv:" + | + "allocation-ranges/dhc6-srv:allocation-range/dhc6-srv:" | |||
| "address-pools/dhc6-srv:address-pool" { | + "address-pools/dhc6-srv:address-pool" { | |||
| description | description | |||
| "Augment class selector functions to the DHCPv6 server | "Augment class selector functions to the DHCPv6 server | |||
| address-pools."; | address-pools."; | |||
| leaf-list client-class { | leaf-list client-class { | |||
| type leafref { | type leafref { | |||
| path "/dhc6-srv:dhcpv6-server/dhc6-srv:" + | path "/dhc6-srv:dhcpv6-server/dhc6-srv:" | |||
| "class-selector/client-classes/class/client-class-name"; | + "class-selector/client-classes/class/client-class-name"; | |||
| } | } | |||
| description | description | |||
| "Leafrefs to client classes."; | "Leafrefs to client classes."; | |||
| } | } | |||
| } | } | |||
| augment "/dhc6-srv:dhcpv6-server/dhc6-srv:" + | augment "/dhc6-srv:dhcpv6-server/dhc6-srv:" | |||
| "allocation-ranges/dhc6-srv:allocation-range/dhc6-srv:" + | + "allocation-ranges/dhc6-srv:allocation-range/dhc6-srv:" | |||
| "prefix-pools/dhc6-srv:prefix-pool" { | + "prefix-pools/dhc6-srv:prefix-pool" { | |||
| description | description | |||
| "Augment class selector functions to the DHCPv6 | "Augment class selector functions to the DHCPv6 | |||
| server prefix-pools."; | server prefix-pools."; | |||
| leaf-list client-class { | leaf-list client-class { | |||
| type leafref { | type leafref { | |||
| path "/dhc6-srv:dhcpv6-server/dhc6-srv:" + | path "/dhc6-srv:dhcpv6-server/dhc6-srv:" | |||
| "class-selector/client-classes/class/client-class-name"; | + "class-selector/client-classes/class/client-class-name"; | |||
| } | } | |||
| description | description | |||
| "Leafrefs to client classes."; | "Leafrefs to client classes."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ]]> | ]]></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"/>, <contact fullname="Benjamin Kaduk"/>, <contact fulln | ||||
| ame="Kris Lambrechts"/>, and <contact fullname="Paul Dumitru"/> for their | ||||
| valuable comments and contributions to this work.</t> | ||||
| </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> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 625 change blocks. | ||||
| 2035 lines changed or deleted | 1599 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/ | ||||