draft-ietf-dhc-dhcpv6-yang-22.txt   draft-ietf-dhc-dhcpv6-yang-23.txt 
DHC Working Group I. Farrer, Ed. DHC Working Group I. Farrer, Ed.
Internet-Draft Deutsche Telekom AG Internet-Draft Deutsche Telekom AG
Intended status: Standards Track 2 July 2021 Intended status: Standards Track 25 October 2021
Expires: 3 January 2022 Expires: 28 April 2022
YANG Data Model for DHCPv6 Configuration YANG Data Model for DHCPv6 Configuration
draft-ietf-dhc-dhcpv6-yang-22 draft-ietf-dhc-dhcpv6-yang-23
Abstract Abstract
This document describes YANG data modules for the configuration and This document describes YANG data modules for the configuration and
management of DHCPv6 (Dynamic Host Configuration Protocol for IPv6) management of DHCPv6 (Dynamic Host Configuration Protocol for IPv6
servers, relays, and clients. RFC8415) servers, relays, and clients.
Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 3 January 2022. This Internet-Draft will expire on 28 April 2022.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/ Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document. license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text extracted from this document must include Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License. provided without warranty as described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 4 1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 3
1.2.1. DHCPv6 Option Definitions . . . . . . . . . . . . . . 4 1.2.1. DHCPv6 Option Definitions . . . . . . . . . . . . . . 4
1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6
2. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 6 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 6
2.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 6 3. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 6
2.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 13 3.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 6
2.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 16 3.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 13
3. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 19 3.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 15
3.1. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 19 4. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 20
3.2. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 39 4.1. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 20
3.3. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 49 4.2. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 28
3.4. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 63 4.3. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 48
4. Security Considerations . . . . . . . . . . . . . . . . . . . 71 4.4. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 58
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 73 5. Security Considerations . . . . . . . . . . . . . . . . . . . 73
6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 74 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 74
7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 74 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 75
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 74 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 75
8.1. Normative References . . . . . . . . . . . . . . . . . . 74 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 76
8.2. Informative References . . . . . . . . . . . . . . . . . 77 9.1. Normative References . . . . . . . . . . . . . . . . . . 76
Appendix A. Data Tree Examples . . . . . . . . . . . . . . . . . 77 9.2. Informative References . . . . . . . . . . . . . . . . . 78
A.1. DHCPv6 Server Configuration Example . . . . . . . . . . . 77 Appendix A. Data Tree Examples . . . . . . . . . . . . . . . . . 79
A.2. DHCPv6 Relay Configuration Example . . . . . . . . . . . 81 A.1. DHCPv6 Server Configuration Examples . . . . . . . . . . 79
A.3. DHCPv6 Client Configuration Examples . . . . . . . . . . 82 A.2. DHCPv6 Relay Configuration Example . . . . . . . . . . . 83
A.3. DHCPv6 Client Configuration Example . . . . . . . . . . . 84
Appendix B. Example of Augmenting Additional DHCPv6 Option Appendix B. Example of Augmenting Additional DHCPv6 Option
Definitions . . . . . . . . . . . . . . . . . . . . . . . 85 Definitions . . . . . . . . . . . . . . . . . . . . . . . 87
Appendix C. Example Vendor Specific Server Configuration Appendix C. Example Vendor Specific Server Configuration
Module . . . . . . . . . . . . . . . . . . . . . . . . . 88 Module . . . . . . . . . . . . . . . . . . . . . . . . . 90
Appendix D. Example definition of class-selector Appendix D. Example definition of class-selector
configuration . . . . . . . . . . . . . . . . . . . . . . 95 configuration . . . . . . . . . . . . . . . . . . . . . . 97
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 102 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 104
1. Introduction 1. Introduction
DHCPv6 [RFC8415] is widely used for supplying configuration and other DHCPv6 [RFC8415] is used for supplying configuration and other
relevant parameters to clients in IPv6 networks. This document relevant parameters to clients in IPv6 networks. This document
defines YANG [RFC7950] modules for the configuration and management defines YANG [RFC7950] modules for the configuration and management
of DHCPv6 'element' (servers, relays, and clients) using the Network of DHCPv6 'element' (servers, relays, and clients) using the Network
Configuration Protocol (NETCONF [RFC6241]) or RESTCONF [RFC8040] Configuration Protocol (NETCONF [RFC6241]) or RESTCONF [RFC8040]
protocols. protocols.
Separate modules are defined for each element. Additionally, a Separate modules are defined for each element. Additionally, a
'common' module contains typedefs and groupings used by all of the 'common' module contains typedefs and groupings used by all of the
element modules. Appendix A provides XML examples for each of the element modules. Appendix A provides XML examples for each of the
element modules and shows their interaction. element modules and shows their interaction.
skipping to change at page 6, line 37 skipping to change at page 6, line 24
The reader should be familiar with the YANG data modeling language The reader should be familiar with the YANG data modeling language
defined in [RFC7950]. defined in [RFC7950].
The YANG modules in this document adopt the Network Management The YANG modules in this document adopt the Network Management
Datastore Architecture (NMDA) [RFC8342]. The meanings of the symbols Datastore Architecture (NMDA) [RFC8342]. The meanings of the symbols
used in tree diagrams are defined in [RFC8340]. used in tree diagrams are defined in [RFC8340].
The reader should be familiar with DHCPv6 relevant terminology as The reader should be familiar with DHCPv6 relevant terminology as
defined in [RFC8415] and other relevant documents. defined in [RFC8415] and other relevant documents.
2. DHCPv6 Tree Diagrams 2. Requirements Language
2.1. DHCPv6 Server Tree Diagram The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
3. DHCPv6 Tree Diagrams
3.1. DHCPv6 Server Tree Diagram
The tree diagram in Figure 1 provides an overview of the DHCPv6 The tree diagram in Figure 1 provides an overview of the DHCPv6
server module. The tree also includes the common functions module server module. The tree also includes the common functions module
Section 3.4. Section 4.1.
module: ietf-dhcpv6-server module: ietf-dhcpv6-server
+--rw dhcpv6-server +--rw dhcpv6-server
+--rw enabled? boolean +--rw enabled? boolean
+--rw server-duid? dhc6:duid +--rw server-duid? dhc6:duid
+--rw vendor-config +--rw vendor-config
+--rw option-sets +--rw option-sets
| +--rw option-set* [option-set-id] | +--rw option-set* [option-set-id]
| +--rw option-set-id uint32 | +--rw option-set-id uint32
| +--rw description? string | +--rw description? string
| +--rw preference-option | +--rw preference-option
| | +--rw pref-value? uint8 | | +--rw pref-value? uint8
| +--rw auth-option | +--rw auth-option
| | +--rw protocol? uint8 | | +--rw protocol? uint8
| | +--rw algorithm? uint8 | | +--rw algorithm? uint8
skipping to change at page 7, line 34 skipping to change at page 7, line 28
| +--rw reconfigure-message-option | +--rw reconfigure-message-option
| | +--rw msg-type? uint8 | | +--rw msg-type? uint8
| +--rw reconfigure-accept-option! | +--rw reconfigure-accept-option!
| +--rw info-refresh-time-option | +--rw info-refresh-time-option
| | +--rw info-refresh-time? dhc6:timer-seconds32 | | +--rw info-refresh-time? dhc6:timer-seconds32
| +--rw sol-max-rt-option | +--rw sol-max-rt-option
| | +--rw sol-max-rt-value? dhc6:timer-seconds32 | | +--rw sol-max-rt-value? dhc6:timer-seconds32
| +--rw inf-max-rt-option | +--rw inf-max-rt-option
| +--rw inf-max-rt-value? dhc6:timer-seconds32 | +--rw inf-max-rt-value? dhc6:timer-seconds32
+--rw class-selector +--rw class-selector
+--rw network-ranges +--rw allocation-ranges
+--rw option-set-id* leafref +--rw option-set-id* leafref
+--rw valid-lifetime? dhc6:timer-seconds32 +--rw valid-lifetime? dhc6:timer-seconds32
+--rw renew-time? dhc6:timer-seconds32 +--rw renew-time? dhc6:timer-seconds32
+--rw rebind-time? dhc6:timer-seconds32 +--rw rebind-time? dhc6:timer-seconds32
+--rw preferred-lifetime? dhc6:timer-seconds32 +--rw preferred-lifetime? dhc6:timer-seconds32
+--rw rapid-commit? boolean +--rw rapid-commit? boolean
+--rw network-range* [id] +--rw allocation-range* [id]
| +--rw id uint32 | +--rw id uint32
| +--rw description? string | +--rw description? string
| +--rw network-prefix inet:ipv6-prefix | +--rw network-prefix inet:ipv6-prefix
| +--rw option-set-id* leafref | +--rw option-set-id* leafref
| +--rw valid-lifetime? dhc6:timer-seconds32 | +--rw valid-lifetime? dhc6:timer-seconds32
| +--rw renew-time? dhc6:timer-seconds32 | +--rw renew-time? dhc6:timer-seconds32
| +--rw rebind-time? dhc6:timer-seconds32 | +--rw rebind-time? dhc6:timer-seconds32
| +--rw preferred-lifetime? dhc6:timer-seconds32 | +--rw preferred-lifetime? dhc6:timer-seconds32
| +--rw rapid-commit? boolean | +--rw rapid-commit? boolean
| +--rw address-pools | +--rw address-pools {na-assignment}?
| | +--rw address-pool* [pool-id] | | +--rw address-pool* [pool-id]
| | +--rw pool-id uint32 | | +--rw pool-id string
| | +--rw pool-prefix | | +--rw pool-prefix
| | | inet:ipv6-prefix | | | inet:ipv6-prefix
| | +--rw start-address | | +--rw start-address
| | | inet:ipv6-address-no-zone | | | inet:ipv6-address-no-zone
| | +--rw end-address | | +--rw end-address
| | | inet:ipv6-address-no-zone | | | inet:ipv6-address-no-zone
| | +--rw max-address-utilization? dhc6:threshold | | +--rw max-address-utilization? dhc6:threshold
| | +--rw option-set-id* leafref | | +--rw option-set-id* leafref
| | +--rw valid-lifetime? | | +--rw valid-lifetime?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
skipping to change at page 9, line 15 skipping to change at page 9, line 9
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro lease-t1? | | +--ro lease-t1?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro lease-t2? | | +--ro lease-t2?
| | | dhc6:timer-seconds32 | | | dhc6:timer-seconds32
| | +--ro status | | +--ro status
| | +--ro code? uint16 | | +--ro code? uint16
| | +--ro message? string | | +--ro message? string
| +--rw prefix-pools {prefix-delegation}? | +--rw prefix-pools {prefix-delegation}?
| +--rw prefix-pool* [pool-id] | +--rw prefix-pool* [pool-id]
| +--rw pool-id uint32 | +--rw pool-id string
| +--rw pool-prefix | +--rw pool-prefix
| | inet:ipv6-prefix | | inet:ipv6-prefix
| +--rw client-prefix-length uint8 | +--rw client-prefix-length uint8
| +--rw max-pd-space-utilization? dhc6:threshold | +--rw max-pd-space-utilization? dhc6:threshold
| +--rw option-set-id* leafref | +--rw option-set-id* leafref
| +--rw valid-lifetime? | +--rw valid-lifetime?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--rw renew-time? | +--rw renew-time?
| | dhc6:timer-seconds32 | | dhc6:timer-seconds32
| +--rw rebind-time? | +--rw rebind-time?
skipping to change at page 10, line 34 skipping to change at page 10, line 28
+--ro confirm-count? uint32 +--ro confirm-count? uint32
+--ro renew-count? uint32 +--ro renew-count? uint32
+--ro rebind-count? uint32 +--ro rebind-count? uint32
+--ro reply-count? uint32 +--ro reply-count? uint32
+--ro release-count? uint32 +--ro release-count? uint32
+--ro decline-count? uint32 +--ro decline-count? uint32
+--ro reconfigure-count? uint32 +--ro reconfigure-count? uint32
+--ro information-request-count? uint32 +--ro information-request-count? uint32
rpcs: rpcs:
+---x delete-address-lease +---x delete-address-lease {na-assignment}?
| +---w input | +---w input
| | +---w lease-address-to-delete leafref | | +---w lease-address-to-delete leafref
| +--ro output | +--ro output
| +--ro return-message? string | +--ro return-message? string
+---x delete-prefix-lease {prefix-delegation}? +---x delete-prefix-lease {prefix-delegation}?
+---w input +---w input
| +---w lease-prefix-to-delete leafref | +---w lease-prefix-to-delete leafref
+--ro output +--ro output
+--ro return-message? string +--ro return-message? string
notifications: notifications:
+---n address-pool-utilization-threshold-exceeded +---n address-pool-utilization-threshold-exceeded
| {na-assignment}?
| +--ro pool-id leafref | +--ro pool-id leafref
| +--ro total-pool-addresses uint64 | +--ro total-pool-addresses uint64
| +--ro max-allocated-addresses uint64 | +--ro max-allocated-addresses uint64
| +--ro allocated-address-count uint64 | +--ro allocated-address-count uint64
+---n prefix-pool-utilization-threshold-exceeded +---n prefix-pool-utilization-threshold-exceeded
| {prefix-delegation}? | {prefix-delegation}?
| +--ro pool-id leafref | +--ro pool-id leafref
| +--ro total-pool-prefixes uint64 | +--ro total-pool-prefixes uint64
| +--ro max-allocated-prefixes uint64 | +--ro max-allocated-prefixes uint64
| +--ro allocated-prefixes-count uint64 | +--ro allocated-prefixes-count uint64
+---n invalid-client-detected +---n invalid-client-detected
| +--ro message-type? enumeration | +--ro message-type? enumeration
| +--ro duid? dhc6:duid | +--ro duid? dhc6:duid
| +--ro description? string | +--ro description? string
+---n decline-received +---n decline-received {na-assignment}?
| +--ro duid? dhc6:duid | +--ro duid? dhc6:duid
| +--ro declined-resources* [] | +--ro declined-resources* []
| +--ro (resource-type)? | +--ro (resource-type)?
| +--:(declined-address) | +--:(declined-address)
| | +--ro address? inet:ipv6-address | | +--ro address? inet:ipv6-address
| +--:(declined-prefix) | +--:(declined-prefix)
| +--ro prefix? inet:ipv6-prefix | +--ro prefix? inet:ipv6-prefix
+---n non-success-code-sent +---n non-success-code-sent
+--ro duid? dhc6:duid +--ro duid? dhc6:duid
+--ro status +--ro status
skipping to change at page 12, line 23 skipping to change at page 12, line 17
and additional options that are also relevant to the relay and/or and additional options that are also relevant to the relay and/or
client are imported from the 'ietf-dhcpv6-common' module. Where client are imported from the 'ietf-dhcpv6-common' module. Where
needed, other DHCPv6 option modules can be augmented as they are needed, other DHCPv6 option modules can be augmented as they are
defined. defined.
* class-selector: This is provided as a location for additional * class-selector: This is provided as a location for additional
implementation specific YANG nodes for vendor specific class implementation specific YANG nodes for vendor specific class
selector nodes to be augmented. See Appendix D for an example of selector nodes to be augmented. See Appendix D for an example of
this. this.
* network-ranges: A hierarchical model is used for the allocation of * allocation-ranges: A hierarchical model is used for the allocation
addresses and prefixes. At the top level 'network-ranges' of addresses and prefixes. At the top level 'allocation-ranges'
container holds global configuration parameters. Under this, the container holds global configuration parameters. Under this, the
'network-range' list is used for specifying IPv6 prefixes and 'allocation-range' list is used for specifying IPv6 prefixes and
additional, prefix specific parameters. additional, prefix specific parameters.
* address-pools: Used for IA_NA and IA_TA pool allocations with a * address-pools: Used for IA_NA and IA_TA pool allocations with a
container for defining host reservations. State information about container for defining host reservations. State information about
active leases from the pool is also located here. active leases from the pool is also located here.
* prefix-pools: Defines pools to be used for prefix delegation to * prefix-pools: Defines pools to be used for prefix delegation to
clients. Static host reservations can also be configured. As clients. Static host reservations can also be configured. As
prefix delegation is not supported by all DHCPv6 server prefix delegation is not supported by all DHCPv6 server
implementations, it is enabled by a feature statement. implementations, it is enabled by a feature statement.
skipping to change at page 13, line 15 skipping to change at page 13, line 8
* invalid-client-detected: Raised when the server detects an invalid * invalid-client-detected: Raised when the server detects an invalid
client. A description of the error and message type that has client. A description of the error and message type that has
generated the notification can be included. generated the notification can be included.
* decline-received: Raised when a DHCPv6 Decline message is received * decline-received: Raised when a DHCPv6 Decline message is received
from a client. from a client.
* non-success-code-sent: Raised when there is a status message for * non-success-code-sent: Raised when there is a status message for
an failure. an failure.
2.2. DHCPv6 Relay Tree Diagram 3.2. DHCPv6 Relay Tree Diagram
The tree diagram in Figure 2 provides an overview of the DHCPv6 relay The tree diagram in Figure 2 provides an overview of the DHCPv6 relay
module. The tree also includes the common functions module module. The tree also includes the common functions module
Section 3.4. Section 4.1.
module: ietf-dhcpv6-relay module: ietf-dhcpv6-relay
+--rw dhcpv6-relay +--rw dhcpv6-relay
+--rw enabled? boolean +--rw enabled? boolean
+--rw relay-if* [if-name] +--rw relay-if* [if-name]
| +--rw if-name | +--rw if-name
| | if:interface-ref | | if:interface-ref
| +--rw enabled? boolean | +--rw enabled? boolean
| +--rw destination-address* | +--rw destination-address*
| | inet:ipv6-address | | inet:ipv6-address
skipping to change at page 16, line 5 skipping to change at page 15, line 46
the relay. the relay.
* clear-interface-prefixes: Allows the removal of all of the * clear-interface-prefixes: Allows the removal of all of the
delegated lease entries from an interface on the relay. delegated lease entries from an interface on the relay.
Information about notifications: Information about notifications:
* topology-changed: Raised when the topology of the relay agent is * topology-changed: Raised when the topology of the relay agent is
changed, e.g., a client facing interface is reconfigured. changed, e.g., a client facing interface is reconfigured.
2.3. DHCPv6 Client Tree Diagram 3.3. DHCPv6 Client Tree Diagram
The tree diagram in Figure 3 provides an overview of the DHCPv6 The tree diagram in Figure 3 provides an overview of the DHCPv6
client module. The tree also includes the common functions module client module. The tree also includes the common functions module
defined in Section 3.4. defined in Section 4.1.
module: ietf-dhcpv6-client module: ietf-dhcpv6-client
+--rw dhcpv6-client +--rw dhcpv6-client
+--rw enabled? boolean +--rw enabled? boolean
+--rw client-duid? dhc6:duid
| {non-temp-addr or prefix-del or temp-addr
| and not anon-profile}?
+--rw client-if* [if-name] +--rw client-if* [if-name]
+--rw if-name if:interface-ref +--rw if-name if:interface-ref
+--rw enabled? boolean +--rw enabled? boolean
+--rw duid? dhc6:duid +--rw interface-duid? dhc6:duid
| {non-temp-addr or prefix-del or temp-addr
| 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? string | | +--rw user-class-data? string
| +--rw vendor-class-option | +--rw vendor-class-option
skipping to change at page 16, line 43 skipping to change at page 16, line 42
| | +--rw vendor-class-data-id uint8 | | +--rw vendor-class-data-id uint8
| | +--rw vendor-class-data? string | | +--rw vendor-class-data? string
| +--rw vendor-specific-information-options | +--rw vendor-specific-information-options
| | +--rw vendor-specific-information-option* | | +--rw vendor-specific-information-option*
| | [enterprise-number] | | [enterprise-number]
| | +--rw enterprise-number uint32 | | +--rw enterprise-number uint32
| | +--rw vendor-option-data* [sub-option-code] | | +--rw vendor-option-data* [sub-option-code]
| | +--rw sub-option-code uint16 | | +--rw sub-option-code uint16
| | +--rw sub-option-data? string | | +--rw sub-option-data? string
| +--rw reconfigure-accept-option! | +--rw reconfigure-accept-option!
+--rw ia-na* [ia-id] {non-temporary-address}? +--rw ia-na* [ia-id] {non-temp-addr}?
| +--rw ia-id uint32 | +--rw ia-id uint32
| +--rw ia-na-options | +--rw ia-na-options
| +--ro lease-state | +--ro lease-state
| +--ro ia-na-address? inet:ipv6-address | +--ro ia-na-address? inet:ipv6-address
| +--ro lease-t1? dhc6:timer-seconds32 | +--ro lease-t1? dhc6:timer-seconds32
| +--ro lease-t2? dhc6:timer-seconds32 | +--ro lease-t2? dhc6:timer-seconds32
| +--ro preferred-lifetime? dhc6:timer-seconds32 | +--ro preferred-lifetime? dhc6:timer-seconds32
| +--ro valid-lifetime? dhc6:timer-seconds32 | +--ro valid-lifetime? dhc6:timer-seconds32
| +--ro allocation-time? yang:date-and-time | +--ro allocation-time? yang:date-and-time
| +--ro last-renew-rebind? yang:date-and-time | +--ro last-renew-rebind? yang:date-and-time
| +--ro server-duid? dhc6:duid | +--ro server-duid? dhc6:duid
| +--ro status | +--ro status
| +--ro code? uint16 | +--ro code? uint16
| +--ro message? string | +--ro message? string
+--rw ia-ta* [ia-id] {temporary-address}? +--rw ia-ta* [ia-id] {temp-addr}?
| +--rw ia-id uint32 | +--rw ia-id uint32
| +--rw ia-ta-options | +--rw ia-ta-options
| +--ro lease-state | +--ro lease-state
| +--ro ia-ta-address? inet:ipv6-address | +--ro ia-ta-address? inet:ipv6-address
| +--ro preferred-lifetime? dhc6:timer-seconds32 | +--ro preferred-lifetime? dhc6:timer-seconds32
| +--ro valid-lifetime? dhc6:timer-seconds32 | +--ro valid-lifetime? dhc6:timer-seconds32
| +--ro allocation-time? yang:date-and-time | +--ro allocation-time? yang:date-and-time
| +--ro last-renew-rebind? yang:date-and-time | +--ro last-renew-rebind? yang:date-and-time
| +--ro server-duid? dhc6:duid | +--ro server-duid? dhc6:duid
| +--ro status | +--ro status
| +--ro code? uint16 | +--ro code? uint16
| +--ro message? string | +--ro message? string
+--rw ia-pd* [ia-id] {prefix-delegation}? +--rw ia-pd* [ia-id] {prefix-del}?
| +--rw ia-id uint32 | +--rw ia-id uint32
| +--rw prefix-length-hint? uint8
| +--rw ia-pd-options | +--rw ia-pd-options
| +--ro lease-state | +--ro lease-state
| +--ro ia-pd-prefix? inet:ipv6-prefix | +--ro ia-pd-prefix? inet:ipv6-prefix
| +--ro lease-t1? dhc6:timer-seconds32 | +--ro lease-t1? dhc6:timer-seconds32
| +--ro lease-t2? dhc6:timer-seconds32 | +--ro lease-t2? dhc6:timer-seconds32
| +--ro preferred-lifetime? dhc6:timer-seconds32 | +--ro preferred-lifetime? dhc6:timer-seconds32
| +--ro valid-lifetime? dhc6:timer-seconds32 | +--ro valid-lifetime? dhc6:timer-seconds32
| +--ro allocation-time? yang:date-and-time | +--ro allocation-time? yang:date-and-time
| +--ro last-renew-rebind? yang:date-and-time | +--ro last-renew-rebind? yang:date-and-time
| +--ro server-duid? dhc6:duid | +--ro server-duid? dhc6:duid
skipping to change at page 17, line 51 skipping to change at page 17, line 51
+--ro renew-count? uint32 +--ro renew-count? uint32
+--ro rebind-count? uint32 +--ro rebind-count? uint32
+--ro reply-count? uint32 +--ro reply-count? uint32
+--ro release-count? uint32 +--ro release-count? uint32
+--ro decline-count? uint32 +--ro decline-count? uint32
+--ro reconfigure-count? uint32 +--ro reconfigure-count? uint32
+--ro information-request-count? uint32 +--ro information-request-count? uint32
notifications: notifications:
+---n invalid-ia-address-detected +---n invalid-ia-address-detected
| {non-temporary-address or temporary-address}? | {non-temp-addr or temp-addr}?
| +--ro ia-id uint32 | +--ro ia-id uint32
| +--ro ia-na-t1-timer? uint32 | +--ro ia-na-t1-timer? uint32
| +--ro ia-na-t2-timer? uint32 | +--ro ia-na-t2-timer? uint32
| +--ro invalid-address? inet:ipv6-address | +--ro invalid-address? inet:ipv6-address
| +--ro preferred-lifetime? uint32 | +--ro preferred-lifetime? uint32
| +--ro valid-lifetime? uint32 | +--ro valid-lifetime? uint32
| +--ro ia-options? binary | +--ro ia-options? binary
| +--ro description? string | +--ro description? string
+---n transmission-failed +---n transmission-failed
| +--ro failure-type enumeration | +--ro failure-type enumeration
| +--ro description? string | +--ro description? string
+---n unsuccessful-status-code +---n unsuccessful-status-code
| +--ro server-duid dhc6:duid | +--ro server-duid dhc6:duid
| +--ro status | +--ro status
| +--ro code? uint16 | +--ro code? uint16
| +--ro message? string | +--ro message? string
+---n server-duid-changed +---n server-duid-changed
{non-temporary-address or prefix-delegation or temporary- {non-temp-addr or prefix-del or temp-addr}?
address}?
+--ro new-server-duid dhc6:duid +--ro new-server-duid dhc6:duid
+--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-temporary-address}? | {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
| {temporary-address}? | {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-del}?
Figure 3: DHCPv6 Client Data Module Structure Figure 3: DHCPv6 Client Data Module Structure
Descriptions of important nodes: Descriptions of important nodes:
* enabled: Globally enables/disables all DHCPv6 client functions. * enabled: Globally enables/disables all DHCPv6 client functions.
* dhcpv6-client: This container holds the client's DHCPv6 specific * dhcpv6-client: This container holds the client's DHCPv6 specific
configuration. configuration.
* client-if: As a client may have multiple interfaces requesting * client-if: As a client may have multiple interfaces requesting
configuration over DHCP, they are configured in a list. The if- configuration over DHCP, they are configured in a list. The if-
name leaf is the key and is an interface-ref to the applicable name leaf is the key and is an interface-ref to the applicable
interface defined by the 'ietf-interfaces' YANG module. interface defined by the 'ietf-interfaces' YANG module.
* enabled: Enables/disables all DHCPv6 client function for the * enabled: Enables/disables all DHCPv6 client function for the
specific interface. specific interface.
* client-duid: Each client must have a DUID (DHCP Unique Identifier) * client-duid/interface-duid: The DUID (DHCP Unique Identifier) is
to identify itself to servers and relays. A DUID consists of a used to identify the client to servers and relays. DUID
two-octet type field and an arbitrary length (1-128 octets) configuration may conditionally appear in one of two locations in
content field. Currently there are four defined types of DUIDs in the client tree, depending on the features that the client
[RFC8415] and [RFC6355]. The DUID may be configured using the implements. If the client does not support requesting any address
format for one of these types, or using the 'unstructured' format. or prefix leasing features, then there is no leaf for a DUID
The DUID type definitions are imported from the 'ietf- value. If the client does not implement the 'anon-profile'
dhcpv6-common.yang' module. [IANA-HARDWARE-TYPES] and [IANA-PEN] feature [RFC7844], then there is a single 'client-duid' leaf that
are referenced for the relevant DUID types. holds that DUID value which will be used for all DHCPv6 enabled
interfaces. If the 'anon-profile' is enabled, there is an
'interface-duid' leaf for each DHCP enabled interface. A DUID
consists of a two-octet type field and an arbitrary length (1-128
octets) content field. Currently there are four defined types of
DUIDs in [RFC8415] and [RFC6355]. The DUID may be configured
using the format for one of these types, or using the
'unstructured' format. The DUID type definitions are imported
from the 'ietf-dhcpv6-common.yang' module. [IANA-HARDWARE-TYPES]
and [IANA-PEN] are referenced for the relevant DUID types.
* client-configured-options: Holds configuration parameters for * client-configured-options: Holds configuration parameters for
DHCPv6 options which can be sent by the client. The initial set DHCPv6 options which can be sent by the client. The initial set
of applicable option definitions are defined here and additional of applicable option definitions are defined here and additional
options that are also relevant to the relay and/or server are options that are also relevant to the relay and/or server are
imported from the 'ietf-dhcpv6-common' module. Where needed, imported from the 'ietf-dhcpv6-common' module. Where needed,
other DHCPv6 option modules can be augmented as they are defined. other DHCPv6 option modules can be augmented as they are defined.
* ia-na, ia-ta, ia-pd: Contains configuration nodes relevant for * ia-na, ia-ta, ia-pd: Contains configuration nodes relevant for
requesting one or more of each of the lease types. Read-only requesting one or more of each of the lease types. Read-only
skipping to change at page 19, line 39 skipping to change at page 20, line 5
Information about notifications: Information about notifications:
* invalid-ia-detected: Raised when the identity association of the * invalid-ia-detected: Raised when the identity association of the
client can be proved to be invalid. Possible conditions include: client can be proved to be invalid. Possible conditions include:
duplicated address, illegal address, etc. duplicated address, illegal address, etc.
* retransmission-failed: Raised when the retransmission mechanism * retransmission-failed: Raised when the retransmission mechanism
defined in [RFC8415] has failed. defined in [RFC8415] has failed.
3. DHCPv6 YANG Modules 4. DHCPv6 YANG Modules
3.1. DHCPv6 Server YANG Module 4.1. DHCPv6 Common YANG Module
This module imports typedefs from [RFC6991].
<CODE BEGINS> file "ietf-dhcpv6-common@2021-10-25.yang"
module ietf-dhcpv6-common {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common";
prefix "dhc6";
organization
"IETF DHC (Dynamic Host Configuration) Working Group";
contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>";
description
"This YANG module defines common components used for the
configuration and management of DHCPv6.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
are to be interpreted as described in BCP 14 (RFC 2119)
(RFC 8174) when, and only when, they appear in all
capitals, as shown here.
Copyright (c) 2021 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices.";
revision 2021-10-25 {
description
"Initial Revision.";
reference
"XXXX: YANG Data Model for DHCPv6 Configuration";
}
typedef threshold {
type uint8 {
range 1..100;
}
description
"Threshold value in percent.";
}
typedef timer-seconds32 {
type uint32;
units "seconds";
description
"Timer value type, in seconds (32-bit range).";
}
typedef duid-base {
type string {
pattern '([0-9a-fA-F]{2}){3,130}';
}
description
"Each DHCP server and client has a DUID (DHCP Unique
Identifier). The DUID consists of a two-octet
type field and an arbitrary length (1-128 octets) content
field. The duid-base type is used by other duid types with
additional pattern constraints.
Currently, there are four defined types of DUIDs
in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL
and DUID-UUID. DUID-unstructured represents DUIDs which
do not follow any of the defined formats.";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11
RFC 6355: Definition of the UUID-Based DHCPv6 Unique
Identifier (DUID-UUID), Section 4";
}
typedef duid-llt {
type duid-base {
pattern '0001'
+ '[0-9a-fA-F]{12,}';
}
description
"DUID type 1, based on Link-Layer Address Plus Time
(DUID-LLT). Constructed with a 2-octet hardware type assigned
by IANA, 4-octet containing the time the DUID is generated
(represented in seconds since midnight (UTC), January 1, 2000,
modulo 2^32), and a link-layer address. The address is encoded
without separator characters. For example:
+------+------+----------+--------------+
| 0001 | 0006 | 28490058 | 00005E005300 |
+------+------+----------+--------------+
This example includes the 2-octet DUID type of 1 (0x01), the
hardware type is 0x06 (IEEE Hardware Types) the creation
time is 0x028490058 (constructed as described above). Finally,
the link-layer address is 0x5E005300 (EUI-48 address
00-00-5E-00-53-00)";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.2
IANA 'Hardware Types' registry.
<https://www.iana.org/assignments/arp-parameters>";
}
typedef duid-en {
type duid-base {
pattern '0002'
+ '[0-9a-fA-F]{4,}';
}
description
"DUID type 2, assigned by vendor based on Enterprise
Number (DUID-EN). This DUID consists of the 4-octet vendor's
registered Private Enterprise Number as maintained by IANA
followed by a unique identifier assigned by the vendor. For
example:
+------+----------+------------------+
| 0002 | 00007ED9 | 0CC084D303000912 |
+------+----------+------------------+
This example includes the 2-octet DUID type of 2 (0x02),
4-octets for the Enterprise Number (0x7ED9), followed by
8-octets of identifier data (0x0CC084D303000912).";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.3
IANA 'Private Enterprise Numbers' registry.
<https://www.iana.org/assignments/enterprise-numbers>";
}
typedef duid-ll {
type duid-base {
pattern '0003'
+ '([0-9a-fA-F]){4,}';
}
description
"DUID type 3, based on Link-Layer Address (DUID-LL).
Constructed with a 2-octet hardware type assigned
by IANA, and a link-layer address. The address is encoded
without separator characters. For example:
+------+------+--------------+
| 0003 | 0006 | 00005E005300 |
+------+------+--------------+
This example includes the 2-octet DUID type of 3 (0x03), the
hardware type is 0x06 (IEEE Hardware Types), and the link-layer
address is 0x5E005300 (EUI-48 address 00-00-5E-00-53-00)";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.4
IANA 'Hardware Types' registry.
<https://www.iana.org/assignments/arp-parameters>";
}
typedef duid-uuid {
type duid-base {
pattern '0004'
+ '[0-9a-fA-F]{32}';
}
description
"DUID type 4, based on Universally Unique Identifier
(DUID-UUID). This type of DUID consists of 16 octets
containing a 128-bit UUID. For example:
+------+----------------------------------+
| 0004 | 9f03b182705747e38a1e422910078642 |
+------+----------------------------------+
This example includes the 2-octet DUID type of 4 (0x04), and
the UUID 9f03b182-7057-47e3-8a1e-422910078642.";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.5
RFC 6355: Definition of the UUID-Based DHCPv6 Unique Identifier
(DUID-UUID)";
}
typedef duid-unstructured {
type duid-base {
pattern '(000[1-4].*|.*[^0-9a-fA-F].*)' {
modifier invert-match;
}
}
description
"Used for DUIDs following any other formats than DUID
types 1-4. For example:
+----------------------------------+
| 7b6a164d325946539dc540fb539bc430 |
+----------------------------------+
Here, an arbitrary 16-octet value is used. The only constraint
placed on this is that the first 2-octects are not 0x01-0x04
to avoid collision with the other defined DUID types
(duid-llt, duid-en, duid-ll, or duid-uuid).";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11";
}
typedef duid {
type union {
type duid-llt;
type duid-en;
type duid-ll;
type duid-uuid;
type duid-unstructured;
}
description
"Represents the DUID and is neutral to the DUID's construction
format.";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11";
}
/*
* Groupings
*/
grouping status {
description
"Holds information about the most recent status code which
has been sent by the server or received by the client.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 7.5.";
container status {
description
"Status code information, relating to the success or failure
of operations requested in messages.";
leaf code {
type uint16;
description
"The numeric code for the status encoded in this option.
See the Status Codes registry at
<https://www.iana.org/assignments/dhcpv6-parameters>
for the current list of status codes.";
}
leaf message {
type string;
description
"A UTF-8 encoded text string suitable for display to an
end user. It MUST NOT be null-terminated.";
}
}
}
grouping auth-option-group {
description
"OPTION_AUTH (11) Authentication Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.11
IANA 'Dynamic Host Configuration Protocol (DHCP) Authentication
Option Name Spaces' registry.
<https://www.iana.org/assignments/auth-namespaces>";
container auth-option {
description
"OPTION_AUTH (11) Authentication Option container.";
leaf protocol {
type uint8;
description
"The authentication protocol used by this Authentication
option.";
}
leaf algorithm {
type uint8;
description
"The algorithm used in the authentication protocol.";
}
leaf rdm {
type uint8;
description
"The Replay Detection Method (RDM) used in this
Authentication option.";
}
leaf replay-detection {
type uint64;
description
"The replay detection information for the RDM.";
}
leaf auth-information {
type string;
description
"The authentication information, as specified by the
protocol and algorithm used in this Authentication
option.";
}
}
}
grouping status-code-option-group {
description
"OPTION_STATUS_CODE (13) Status Code Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.13";
container status-code-option {
description
"OPTION_STATUS_CODE (13) Status Code Option container.";
leaf status-code {
type uint16;
description
"The numeric code for the status encoded in this option.
See the Status Codes registry at
<https://www.iana.org/assignments/dhcpv6-parameters>
for the current list of status codes.";
}
leaf status-message {
type string;
description
"A UTF-8 encoded text string suitable for display to an
end user. It MUST NOT be null-terminated.";
}
}
}
grouping rapid-commit-option-group {
description
"OPTION_RAPID_COMMIT (14) Rapid Commit Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.14";
container rapid-commit-option {
presence "Enable sending of this option";
description
"OPTION_RAPID_COMMIT (14) Rapid Commit Option container.";
}
}
grouping vendor-specific-information-option-group {
description
"OPTION_VENDOR_OPTS (17) Vendor-specific Information
Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.17";
container vendor-specific-information-options {
description
"OPTION_VENDOR_OPTS (17) Vendor-specific Information
Option container.";
list vendor-specific-information-option {
key enterprise-number;
description
"The vendor-specific information option allows for
multiple instances in a single message. Each list entry
defines the contents of an instance of the option.";
leaf enterprise-number {
type uint32;
description
"The vendor's registered Enterprise Number, as
maintained by IANA.";
reference "IANA 'Private Enterprise Numbers' registry.
<https://www.iana.org/assignments/enterprise-numbers>";
}
list vendor-option-data {
key sub-option-code;
description
"Vendor options, interpreted by vendor-specific
client/server functions.";
leaf sub-option-code {
type uint16;
description
"The code for the sub-option.";
}
leaf sub-option-data {
type string {
pattern '([0-9a-fA-F]{2}){0,}';
}
description
"The data area for the sub-option.";
}
}
}
}
}
grouping reconfigure-accept-option-group {
description
"OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option.
A client uses the Reconfigure Accept option to announce to
the server whether the client is willing to accept Reconfigure
messages, and a server uses this option to tell the client
whether or not to accept Reconfigure messages. In the absence
of this option, the default behavior is that the client is
unwilling to accept Reconfigure messages. The presence node
is used to enable the option.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.20";
container reconfigure-accept-option {
presence "Enable sending of this option";
description
"OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option
container.";
}
}
}
<CODE ENDS>
4.2. DHCPv6 Server YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991], [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-server@2021-07-02.yang" <CODE BEGINS> file "ietf-dhcpv6-server@2021-10-25.yang"
module ietf-dhcpv6-server { module ietf-dhcpv6-server {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server";
prefix "dhc6-srv"; prefix "dhc6-srv";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
skipping to change at page 21, line 9 skipping to change at page 29, line 49
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-07-02 { revision 2021-10-25 {
description description
"Initial Revision."; "Initial Revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "XXXX: YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Features * Features
*/ */
feature na-assignment {
description
"Denotes that the server implements DHCPv6 non-temporary
address assignment.";
reference "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 "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.3"; IPv6 (DHCPv6), Section 6.3";
} }
/* /*
* Groupings * Groupings
skipping to change at page 21, line 42 skipping to change at page 30, line 41
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 relevant set of DHCPv6 options (option-set)
to be provisioned to clients using the network-range."; to be provisioned to clients using the allocation-range.";
} }
leaf valid-lifetime { leaf valid-lifetime {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
description description
"Valid lifetime for the Identity Association (IA)."; "Valid lifetime for the Identity Association (IA).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6"; IPv6 (DHCPv6), Section 6";
} }
leaf renew-time { leaf renew-time {
type dhc6:timer-seconds32; type dhc6:timer-seconds32;
skipping to change at page 29, line 23 skipping to change at page 38, line 21
"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 such it is not
possible to include in this module. This container provides possible to include in this module. This container provides
a location for server implementors to augment their own a location for server implementors to augment their own
class-selector YANG."; class-selector YANG.";
} }
container network-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 network-ranges. Under is defined as the container for all allocation-ranges. Under
this are the individual network-ranges."; this are the individual allocation-ranges.";
uses resource-config; uses resource-config;
list network-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 uint32; type uint32;
mandatory true; mandatory true;
description description
"Unique identifier for the network range."; "Unique identifier for the allocation range.";
} }
leaf description { leaf description {
type string; type string;
description description
"Description for the network 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;
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 uint32; 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."; "IPv6 prefix for the pool.";
} }
skipping to change at page 32, line 16 skipping to change at page 41, line 14
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 "List of prefix pools for allocation to
clients, distinguished by 'pool-id'."; clients, distinguished by 'pool-id'.";
leaf pool-id { leaf pool-id {
type uint32; type 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."; "IPv6 prefix for the pool.";
} }
skipping to change at page 34, line 18 skipping to change at page 43, line 17
uses message-stats; uses message-stats;
} }
} }
/* /*
* RPCs * RPCs
*/ */
rpc delete-address-lease { rpc delete-address-lease {
nacm:default-deny-all; nacm:default-deny-all;
if-feature na-assignment;
description description
"Deletes a client's active address lease from the "Deletes a client's active address lease from the
server's lease database. Note this will not cause the address server's lease database. Note this will not cause the address
to be revoked from the client, and the lease may be refreshed to be revoked from the client, and the lease may be refreshed
or renewed by the client."; or renewed by the client.";
input { input {
leaf lease-address-to-delete { leaf lease-address-to-delete {
type leafref { type leafref {
path "../../dhcpv6-server/network-ranges/network-range" + path "../../dhcpv6-server/allocation-ranges/" +
"/address-pools/address-pool/active-leases" + "allocation-range/address-pools/address-pool" +
"/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;
skipping to change at page 35, line 8 skipping to change at page 44, line 8
if-feature prefix-delegation; if-feature prefix-delegation;
description description
"Deletes a client's active prefix lease from the "Deletes a client's active prefix lease from the
server's lease database. Note, this will not cause the prefix server's lease database. Note, this will not cause the prefix
to be revoked from the client, and the lease may be refreshed to be revoked from the client, and the lease may be refreshed
or renewed by the client."; or renewed by the client.";
input { input {
leaf lease-prefix-to-delete { leaf lease-prefix-to-delete {
type leafref { type leafref {
path "../../dhcpv6-server/network-ranges/network-range" + path "../../dhcpv6-server/allocation-ranges/" +
"/prefix-pools/prefix-pool/active-leases/active-lease" + "allocation-range/prefix-pools/prefix-pool" +
"/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;
skipping to change at page 35, line 32 skipping to change at page 44, line 32
"Response message from the server."; "Response message from the server.";
} }
} }
} }
/* /*
* Notifications * Notifications
*/ */
notification address-pool-utilization-threshold-exceeded { notification address-pool-utilization-threshold-exceeded {
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/network-ranges/network-range/" + path "../../dhcpv6-server/allocation-ranges/" +
"address-pools/address-pool/pool-id"; "allocation-range/address-pools/address-pool" +
"/pool-id";
} }
mandatory true; mandatory true;
description description
"Leafref to the address pool that the notification "Leafref to the address pool that the notification
is being generated for."; is being generated for.";
} }
leaf total-pool-addresses { leaf total-pool-addresses {
type uint64; type uint64;
mandatory true; mandatory true;
description description
skipping to change at page 36, line 30 skipping to change at page 45, line 32
} }
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/network-ranges/network-range/" + path "../../dhcpv6-server/allocation-ranges" +
"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.";
skipping to change at page 38, line 22 skipping to change at page 47, line 25
} }
leaf description { leaf description {
type string; type string;
description description
"Description of the event (e.g., and error code or log "Description of the event (e.g., and error code or log
message)."; message).";
} }
} }
notification decline-received { notification decline-received {
if-feature na-assignment;
description description
"Notification sent when the server has received a "Notification sent when the server has received a
Decline (9) message from a client."; Decline (9) message from a client.";
leaf duid { leaf duid {
type dhc6:duid; type dhc6:duid;
description description
"Client DUID."; "Client DUID.";
} }
list declined-resources { list declined-resources {
description description
skipping to change at page 39, line 21 skipping to change at page 48, line 24
leaf duid { leaf duid {
type dhc6:duid; type dhc6:duid;
description description
"Client DUID."; "Client DUID.";
} }
uses dhc6:status; uses dhc6:status;
} }
} }
<CODE ENDS> <CODE ENDS>
3.2. DHCPv6 Relay YANG Module 4.3. DHCPv6 Relay YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991], [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-relay@2021-07-02.yang" <CODE BEGINS> file "ietf-dhcpv6-relay@2021-10-25.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";
skipping to change at page 40, line 43 skipping to change at page 49, line 46
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-07-02 { revision 2021-10-25 {
description description
"Initial Revision."; "Initial Revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "XXXX: 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 "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.3"; IPv6 (DHCPv6), Section 6.3";
skipping to change at page 49, line 4 skipping to change at page 58, line 6
path "../../../dhcpv6-relay/relay-if/if-name"; path "../../../dhcpv6-relay/relay-if/if-name";
} }
description description
"Name of the interface that has been removed."; "Name of the interface that has been removed.";
} }
leaf last-ipv6-addr { leaf last-ipv6-addr {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Last IPv6 address configured on the interface."; "Last IPv6 address configured on the interface.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
3.3. DHCPv6 Client YANG Module 4.4. DHCPv6 Client YANG Module
This module imports typedefs from [RFC6991], [RFC8343]. This module imports typedefs from [RFC6991], [RFC8343].
<CODE BEGINS> file "ietf-dhcpv6-client@2021-07-02.yang" <CODE BEGINS> file "ietf-dhcpv6-client@2021-10-25.yang"
module ietf-dhcpv6-client { module ietf-dhcpv6-client {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client";
prefix "dhc6-clnt"; prefix "dhc6-clnt";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
skipping to change at page 50, line 33 skipping to change at page 59, line 35
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-07-02 { revision 2021-10-25 {
description description
"Initial Revision."; "Initial Revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "XXXX: YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Features * Features
*/ */
feature non-temporary-address { 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 "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.2"; IPv6 (DHCPv6), Section 6.2";
} }
feature prefix-delegation {
feature prefix-del {
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 "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.3"; IPv6 (DHCPv6), Section 6.3";
} }
feature temporary-address { 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 "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 6.5"; IPv6 (DHCPv6), Section 6.5";
} }
feature anon-profile {
description
"Denotes that the client supports DHCP anonymity
profiles.";
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 solicit-count { leaf solicit-count {
type uint32; type uint32;
config "false"; config "false";
skipping to change at page 55, line 43 skipping to change at page 65, line 4
*/ */
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 {
if-feature "non-temp-addr or prefix-del " +
"or temp-addr and not anon-profile";
type dhc6:duid;
description
"A single Client DUID that will be used by all of the
client's DHCPv6 enabled interfaces.";
reference "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 duid { leaf interface-duid {
if-feature "non-temp-addr or prefix-del " +
"or temp-addr and anon-profile";
type dhc6:duid; type dhc6:duid;
description description
"Client DUID."; "Per-interface Client DUIDs for use with DHCP anonymity
reference "RFC 8415: Dynamic Host Configuration Protocol for profiles.";
IPv6 (DHCPv6), Section 11"; reference "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 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-temporary-address; 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 IA_NA (Identity Association
for Non-temporary Addresses)."; for Non-temporary Addresses).";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 13.1"; for IPv6 (DHCPv6), Section 13.1";
leaf 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.";
skipping to change at page 57, line 30 skipping to change at page 67, line 4
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 temporary-address; if-feature temp-addr;
key ia-id; key ia-id;
description description
"Configuration relevant for an IA_TA (Identity Association "Configuration relevant for an IA_TA (Identity Association
for Temporary Addresses)."; for Temporary Addresses).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 13.2"; IPv6 (DHCPv6), Section 13.2";
leaf 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.";
skipping to change at page 58, line 20 skipping to change at page 67, line 43
"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-del;
key ia-id; key ia-id;
description description
"Configuration relevant for an IA_PD (Identity Association "Configuration relevant for an IA_PD (Identity Association
for Prefix Delegation)."; for Prefix Delegation).";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 13.3"; IPv6 (DHCPv6), Section 13.3";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
description description
"The unique identifier for this IA_PD."; "The unique identifier for this IA_PD.";
reference "RFC 8415: Dynamic Host Configuration Protocol reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 12"; for IPv6 (DHCPv6), Section 12";
} }
leaf prefix-length-hint {
type uint8 {
range "1..128";
}
description "Prefix-length hint value included
in the messages sent to the server to indicate a
preference for the size of the prefix to be delegated.";
reference "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.";
skipping to change at page 59, line 28 skipping to change at page 69, line 13
} }
uses message-statistics; uses message-statistics;
} }
} }
/* /*
* Notifications * Notifications
*/ */
notification invalid-ia-address-detected { notification invalid-ia-address-detected {
if-feature "non-temporary-address or temporary-address"; if-feature "non-temp-addr or temp-addr";
description description
"Notification sent when an address received "Notification sent when an address received
in an identity association option is determined invalid. in an identity association option is determined invalid.
Possible conditions include a duplicate or otherwise illegal Possible conditions include a duplicate or otherwise illegal
address."; address.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18.2.10.1"; IPv6 (DHCPv6), Section 18.2.10.1";
leaf ia-id { leaf ia-id {
type uint32; type uint32;
mandatory true; mandatory true;
skipping to change at page 62, line 16 skipping to change at page 71, line 49
type dhc6:duid; type dhc6:duid;
mandatory true; mandatory true;
description description
"DUID of the server sending the unsuccessful "DUID of the server sending the unsuccessful
error code."; error code.";
} }
uses dhc6:status; uses dhc6:status;
} }
notification server-duid-changed { notification server-duid-changed {
if-feature "non-temporary-address or prefix-delegation or " + if-feature "non-temp-addr or prefix-del or " +
"temporary-address"; "temp-addr";
description description
"Notification sent when the client receives a lease "Notification sent when the client receives a lease
from a server with different DUID to the one currently stored from a server with different DUID to the one currently stored
by the client, e.g., in response to a Rebind message."; by the client, e.g., in response to a Rebind message.";
reference "RFC 8415: Dynamic Host Configuration Protocol for reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 18.2.5"; IPv6 (DHCPv6), Section 18.2.5";
leaf new-server-duid { leaf new-server-duid {
type 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-temporary-address; 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 temporary-address; 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-del;
type leafref { type leafref {
path "../../dhcpv6-client/client-if/ia-pd/ia-id"; path "../../dhcpv6-client/client-if/ia-pd/ia-id";
} }
description description
"Reference to the IA_PD lease."; "Reference to the IA_PD lease.";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
3.4. DHCPv6 Common YANG Module 5. Security Considerations
This module imports typedefs from [RFC6991].
<CODE BEGINS> file "ietf-dhcpv6-common@2021-07-02.yang"
module ietf-dhcpv6-common {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common";
prefix "dhc6";
organization
"IETF DHC (Dynamic Host Configuration) Working Group";
contact
"WG Web: <https://datatracker.ietf.org/wg/dhc/>
WG List: <mailto:dhcwg@ietf.org>
Author: Yong Cui <yong@csnet1.cs.tsinghua.edu.cn>
Author: Linhui Sun <lh.sunlinh@gmail.com>
Editor: Ian Farrer <ian.farrer@telekom.de>
Author: Sladjana Zeichlin <sladjana.zechlin@telekom.de>
Author: Zihao He <hezihao9512@gmail.com>
Author: Michal Nowikowski <godfryd@isc.org>";
description
"This YANG module defines common components used for the
configuration and management of DHCPv6.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
are to be interpreted as described in BCP 14 (RFC 2119)
(RFC 8174) when, and only when, they appear in all
capitals, as shown here.
Copyright (c) 2021 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices.";
revision 2021-07-02 {
description
"Initial Revision.";
reference
"XXXX: YANG Data Model for DHCPv6 Configuration";
}
typedef threshold {
type uint8 {
range 1..100;
}
description
"Threshold value in percent.";
}
typedef timer-seconds32 {
type uint32;
units "seconds";
description
"Timer value type, in seconds (32-bit range).";
}
typedef duid-base {
type string {
pattern '([0-9a-fA-F]{2}){3,130}';
}
description
"Each DHCP server and client has a DUID (DHCP Unique
Identifier). The DUID consists of a two-octet
type field and an arbitrary length (1-128 octets) content
field. The duid-base type is used by other duid types with
additional pattern constraints.
Currently, there are four defined types of DUIDs
in RFC 8415 and RFC 6355 - DUID-LLT, DUID-EN, DUID-LL
and DUID-UUID. DUID-unstructured represents DUIDs which
do not follow any of the defined formats.";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11
RFC 6355: Definition of the UUID-Based DHCPv6 Unique
Identifier (DUID-UUID), Section 4";
}
typedef duid-llt {
type duid-base {
pattern '0001'
+ '[0-9a-fA-F]{12,}';
}
description
"DUID type 1, based on Link-Layer Address Plus Time
(DUID-LLT). Constructed with a 2-octet hardware type assigned
by IANA, 4-octet containing the time the DUID is generated
(represented in seconds since midnight (UTC), January 1, 2000,
modulo 2^32), and a link-layer address. The address is encoded
without separator characters. For example:
+------+------+----------+--------------+
| 0001 | 0006 | 28490058 | 00005E005300 |
+------+------+----------+--------------+
This example includes the 2-octet DUID type of 1 (0x01), the
hardware type is 0x06 (IEEE Hardware Types) the creation
time is 0x028490058 (constructed as described above). Finally,
the link-layer address is 0x5E005300 (EUI-48 address
00-00-5E-00-53-00)";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.2
IANA 'Hardware Types' registry.
<https://www.iana.org/assignments/arp-parameters>";
}
typedef duid-en {
type duid-base {
pattern '0002'
+ '[0-9a-fA-F]{4,}';
}
description
"DUID type 2, assigned by vendor based on Enterprise
Number (DUID-EN). This DUID consists of the 4-octet vendor's
registered Private Enterprise Number as maintained by IANA
followed by a unique identifier assigned by the vendor. For
example:
+------+----------+------------------+
| 0002 | 00007ED9 | 0CC084D303000912 |
+------+----------+------------------+
This example includes the 2-octet DUID type of 2 (0x02),
4-octets for the Enterprise Number (0x7ED9), followed by
8-octets of identifier data (0x0CC084D303000912).";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.3
IANA 'Private Enterprise Numbers' registry.
<https://www.iana.org/assignments/enterprise-numbers>";
}
typedef duid-ll {
type duid-base {
pattern '0003'
+ '([0-9a-fA-F]){4,}';
}
description
"DUID type 3, based on Link-Layer Address (DUID-LL).
Constructed with a 2-octet hardware type assigned
by IANA, and a link-layer address. The address is encoded
without separator characters. For example:
+------+------+--------------+
| 0003 | 0006 | 00005E005300 |
+------+------+--------------+
This example includes the 2-octet DUID type of 3 (0x03), the
hardware type is 0x06 (IEEE Hardware Types), and the link-layer
address is 0x5E005300 (EUI-48 address 00-00-5E-00-53-00)";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.4
IANA 'Hardware Types' registry.
<https://www.iana.org/assignments/arp-parameters>";
}
typedef duid-uuid {
type duid-base {
pattern '0004'
+ '[0-9a-fA-F]{32}';
}
description
"DUID type 4, based on Universally Unique Identifier
(DUID-UUID). This type of DUID consists of 16 octets
containing a 128-bit UUID. For example:
+------+----------------------------------+
| 0004 | 9f03b182705747e38a1e422910078642 |
+------+----------------------------------+
This example includes the 2-octet DUID type of 4 (0x04), and
the UUID 9f03b182-7057-47e3-8a1e-422910078642.";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11.5
RFC 6355: Definition of the UUID-Based DHCPv6 Unique Identifier
(DUID-UUID)";
}
typedef duid-unstructured {
type duid-base {
pattern '[0-9a-fA-F]{3}'
+ '[05-9a-fA-F]'
+ '([0-9a-fA-F])*';
}
description
"Used for DUIDs following any other formats than DUID
types 1-4. For example:
+----------------------------------+
| 7b6a164d325946539dc540fb539bc430 |
+----------------------------------+
Here, an arbitrary 16-octet value is used. The only constraint
placed on this is that the first 2-octects are not 0x01-0x04
to avoid collision with the other defined DUID types
(duid-llt, duid-en, duid-ll, or duid-uuid).";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11";
}
typedef duid {
type union {
type duid-llt;
type duid-en;
type duid-ll;
type duid-uuid;
type duid-unstructured;
}
description
"Represents the DUID and is neutral to the DUID's construction
format.";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 11";
}
/*
* Groupings
*/
grouping status {
description
"Holds information about the most recent status code which
has been sent by the server or received by the client.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 7.5.";
container status {
description
"Status code information, relating to the success or failure
of operations requested in messages.";
leaf code {
type uint16;
description
"The numeric code for the status encoded in this option.
See the Status Codes registry at
<https://www.iana.org/assignments/dhcpv6-parameters>
for the current list of status codes.";
}
leaf message {
type string;
description
"A UTF-8 encoded text string suitable for display to an
end user. It MUST NOT be null-terminated.";
}
}
}
grouping auth-option-group {
description
"OPTION_AUTH (11) Authentication Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.11
IANA 'Dynamic Host Configuration Protocol (DHCP) Authentication
Option Name Spaces' registry.
<https://www.iana.org/assignments/auth-namespaces>";
container auth-option {
description
"OPTION_AUTH (11) Authentication Option container.";
leaf protocol {
type uint8;
description
"The authentication protocol used by this Authentication
option.";
}
leaf algorithm {
type uint8;
description
"The algorithm used in the authentication protocol.";
}
leaf rdm {
type uint8;
description
"The Replay Detection Method (RDM) used in this
Authentication option.";
}
leaf replay-detection {
type uint64;
description
"The replay detection information for the RDM.";
}
leaf auth-information {
type string;
description
"The authentication information, as specified by the
protocol and algorithm used in this Authentication
option.";
}
}
}
grouping status-code-option-group {
description
"OPTION_STATUS_CODE (13) Status Code Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.13";
container status-code-option {
description
"OPTION_STATUS_CODE (13) Status Code Option container.";
leaf status-code {
type uint16;
description
"The numeric code for the status encoded in this option.
See the Status Codes registry at
<https://www.iana.org/assignments/dhcpv6-parameters>
for the current list of status codes.";
}
leaf status-message {
type string;
description
"A UTF-8 encoded text string suitable for display to an
end user. It MUST NOT be null-terminated.";
}
}
}
grouping rapid-commit-option-group {
description
"OPTION_RAPID_COMMIT (14) Rapid Commit Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol for
IPv6 (DHCPv6), Section 21.14";
container rapid-commit-option {
presence "Enable sending of this option";
description
"OPTION_RAPID_COMMIT (14) Rapid Commit Option container.";
}
}
grouping vendor-specific-information-option-group {
description
"OPTION_VENDOR_OPTS (17) Vendor-specific Information
Option.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.17";
container vendor-specific-information-options {
description
"OPTION_VENDOR_OPTS (17) Vendor-specific Information
Option container.";
list vendor-specific-information-option {
key enterprise-number;
description
"The vendor-specific information option allows for
multiple instances in a single message. Each list entry
defines the contents of an instance of the option.";
leaf enterprise-number {
type uint32;
description
"The vendor's registered Enterprise Number, as
maintained by IANA.";
reference "IANA 'Private Enterprise Numbers' registry.
<https://www.iana.org/assignments/enterprise-numbers>";
}
list vendor-option-data {
key sub-option-code;
description
"Vendor options, interpreted by vendor-specific
client/server functions.";
leaf sub-option-code {
type uint16;
description
"The code for the sub-option.";
}
leaf sub-option-data {
type string {
pattern '([0-9a-fA-F]{2}){0,}';
}
description
"The data area for the sub-option.";
}
}
}
}
}
grouping reconfigure-accept-option-group {
description
"OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option.
A client uses the Reconfigure Accept option to announce to
the server whether the client is willing to accept Reconfigure
messages, and a server uses this option to tell the client
whether or not to accept Reconfigure messages. In the absence
of this option, the default behavior is that the client is
unwilling to accept Reconfigure messages. The presence node
is used to enable the option.";
reference "RFC 8415: Dynamic Host Configuration Protocol
for IPv6 (DHCPv6), Section 21.20";
container reconfigure-accept-option {
presence "Enable sending of this option";
description
"OPTION_RECONF_ACCEPT (20) Reconfigure Accept Option
container.";
}
}
}
<CODE ENDS>
4. Security Considerations
The YANG modules defined in this document are designed to be accessed The YANG modules defined in this document are designed to be accessed
via network management protocols such as NETCONF [RFC6241] or via network management protocols such as NETCONF [RFC6241] or
RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport
layer, and the mandatory-to-implement secure transport is Secure layer, and the mandatory-to-implement secure transport is Secure
Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the
mandatory-to-implement secure transport is TLS [RFC8446]. mandatory-to-implement secure transport is TLS [RFC8446].
The Network Configuration Access Control Model (NACM) [RFC8341] The Network Configuration Access Control Model (NACM) [RFC8341]
provides the means to restrict access for particular NETCONF or provides the means to restrict access for particular NETCONF or
skipping to change at page 72, line 42 skipping to change at page 74, line 12
denial of service attack as traffic will no longer be routed to denial of service attack as traffic will no longer be routed to
the client. the client.
Some of the readable data nodes in this YANG module may be considered Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. Therefore, it sensitive or vulnerable in some network environments. Therefore, it
is important to control read access (e.g., only permitting get, get- is important to control read access (e.g., only permitting get, get-
config, or notifications) to these data nodes. These subtrees and config, or notifications) to these data nodes. These subtrees and
data nodes can be misused to track the activity of a host: data nodes can be misused to track the activity of a host:
* Information the server holds about clients with active leases: * Information the server holds about clients with active leases:
(dhc6-srv/network-ranges/network-range/address-pools/ address- (dhc6-srv/allocation-ranges/allocation-range/address-pools/
pool/active-leases) address-pool/active-leases)
* Information the relay holds about clients with active leases: * Information the relay holds about clients with active leases:
(dhc6-rly/relay-if/prefix-delegation/) (dhc6-rly/relay-if/prefix-delegation/)
Security considerations related to DHCPv6 are discussed in [RFC8415]. Security considerations related to DHCPv6 are discussed in [RFC8415].
Security considerations given in [RFC7950] are also applicable here. Security considerations given in [RFC7950] are also applicable here.
5. IANA Considerations 6. IANA Considerations
This document requests IANA to register the following URIs in the This document requests IANA to register the following URIs in the
"IETF XML Registry" [RFC3688]: "IETF XML Registry" [RFC3688]:
URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay URI: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay
Registrant Contact: The IESG. Registrant Contact: The IESG.
skipping to change at page 74, line 5 skipping to change at page 75, line 17
name: ietf-dhcpv6-client name: ietf-dhcpv6-client
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client
prefix: dhc6-clnt prefix: dhc6-clnt
reference: RFC XXXX YANG Data Model for DHCPv6 Configuration reference: RFC XXXX YANG Data Model for DHCPv6 Configuration
name: ietf-dhcpv6-common name: ietf-dhcpv6-common
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common
prefix: dhc6 prefix: dhc6
reference: RFC XXXX YANG Data Model for DHCPv6 Configuration reference: RFC XXXX YANG Data Model for DHCPv6 Configuration
6. Acknowledgments 7. Acknowledgments
The authors would like to thank Qi Sun, Lishan Li, Hao Wang, Tomek The authors would like to thank Qi Sun, Lishan Li, Hao Wang, Tomek
Mrugalski, Marcin Siodelski, Bernie Volz, Ted Lemon, Bing Liu, Tom Mrugalski, Marcin Siodelski, Bernie Volz, Ted Lemon, Bing Liu, Tom
Petch, and Acee Lindem for their valuable comments and contributions Petch, and Acee Lindem for their valuable comments and contributions
to this work. to this work.
7. Contributors 8. Contributors
The following individuals are co-authors of this document: The following individuals are co-authors of this document:
Yong Cui Yong Cui
Tsinghua University Tsinghua University
Beijing, 100084 Beijing, 100084
P.R. China P.R. China
Email: cuiyong@tsinghua.edu.cn Email: cuiyong@tsinghua.edu.cn
Linhui Sun Linhui Sun
skipping to change at page 74, line 47 skipping to change at page 76, line 36
Beijing, 100084 Beijing, 100084
P.R. China P.R. China
Email: hezihao9512@gmail.com Email: hezihao9512@gmail.com
Michal Nowikowski Michal Nowikowski
Internet Systems Consortium Internet Systems Consortium
Gdansk Gdansk
Poland Poland
Email: godfryd@isc.org Email: godfryd@isc.org
8. References 9. References
8.1. Normative References 9.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004, DOI 10.17487/RFC3688, January 2004,
<https://www.rfc-editor.org/info/rfc3688>. <https://www.rfc-editor.org/info/rfc3688>.
skipping to change at page 75, line 37 skipping to change at page 77, line 28
<https://www.rfc-editor.org/info/rfc6241>. <https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<https://www.rfc-editor.org/info/rfc6242>. <https://www.rfc-editor.org/info/rfc6242>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, DOI 10.17487/RFC6991, July 2013, RFC 6991, DOI 10.17487/RFC6991, July 2013,
<https://www.rfc-editor.org/info/rfc6991>. <https://www.rfc-editor.org/info/rfc6991>.
[RFC7844] Huitema, C., Mrugalski, T., and S. Krishnan, "Anonymity
Profiles for DHCP Clients", RFC 7844,
DOI 10.17487/RFC7844, May 2016,
<https://www.rfc-editor.org/info/rfc7844>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016, RFC 7950, DOI 10.17487/RFC7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>. <https://www.rfc-editor.org/info/rfc7950>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>. May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
skipping to change at page 77, line 5 skipping to change at page 78, line 48
Internet Assigned Numbers Authority, "Dynamic Host Internet Assigned Numbers Authority, "Dynamic Host
Configuration Protocol (DHCP) Authentication Option Name Configuration Protocol (DHCP) Authentication Option Name
Spaces", Spaces",
<https://www.iana.org/assignments/auth-namespaces>. <https://www.iana.org/assignments/auth-namespaces>.
[IANA-STATUS] [IANA-STATUS]
Internet Assigned Numbers Authority, "Dynamic Host Internet Assigned Numbers Authority, "Dynamic Host
Configuration Protocol for IPv6 (DHCPv6) Status Codes", Configuration Protocol for IPv6 (DHCPv6) Status Codes",
<https://www.iana.org/assignments/dhcpv6-parameters>. <https://www.iana.org/assignments/dhcpv6-parameters>.
8.2. Informative References 9.2. Informative References
[RFC3319] Schulzrinne, H. and B. Volz, "Dynamic Host Configuration [RFC3319] Schulzrinne, H. and B. Volz, "Dynamic Host Configuration
Protocol (DHCPv6) Options for Session Initiation Protocol Protocol (DHCPv6) Options for Session Initiation Protocol
(SIP) Servers", RFC 3319, DOI 10.17487/RFC3319, July 2003, (SIP) Servers", RFC 3319, DOI 10.17487/RFC3319, July 2003,
<https://www.rfc-editor.org/info/rfc3319>. <https://www.rfc-editor.org/info/rfc3319>.
Appendix A. Data Tree Examples Appendix A. Data Tree Examples
This section contains XML examples of data trees for the different This section contains XML examples of data trees for the different
DHCPv6 elements. DHCPv6 elements.
A.1. DHCPv6 Server Configuration Example A.1. DHCPv6 Server Configuration Examples
The following example shows a basic configuration for a server. The The following example shows a basic configuration for a server. The
configuration defines: configuration defines:
* Enabling the DHCP server function * Enabling the DHCP server function
* The server's DUID * The server's DUID
* An option set (id=1) with configuration for the Solicit Max Retry * An option set (id=1) with configuration for the Solicit Max Retry
Timeout (SOL_MAX_RT (82)) option. Timeout (SOL_MAX_RT (82)) option.
skipping to change at page 78, line 20 skipping to change at page 80, line 20
<option-sets> <option-sets>
<option-set> <option-set>
<option-set-id>1</option-set-id> <option-set-id>1</option-set-id>
<description>Example DHCP option set</description> <description>Example DHCP option set</description>
<sol-max-rt-option> <sol-max-rt-option>
<sol-max-rt-value>3600</sol-max-rt-value> <sol-max-rt-value>3600</sol-max-rt-value>
</sol-max-rt-option> </sol-max-rt-option>
</option-set> </option-set>
</option-sets> </option-sets>
<class-selector/> <class-selector/>
<network-ranges> <allocation-ranges>
<valid-lifetime>54000</valid-lifetime> <valid-lifetime>54000</valid-lifetime>
<renew-time>7200</renew-time> <renew-time>7200</renew-time>
<rebind-time>32400</rebind-time> <rebind-time>32400</rebind-time>
<preferred-lifetime>43200</preferred-lifetime> <preferred-lifetime>43200</preferred-lifetime>
<network-range> <allocation-range>
<id>1</id> <id>1</id>
<description>example-network-range</description> <description>example-allocation-range</description>
<network-prefix>2001:db8::/32</network-prefix> <network-prefix>2001:db8::/32</network-prefix>
<option-set-id>1</option-set-id> <option-set-id>1</option-set-id>
<address-pools> <address-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>
</address-pool> </address-pool>
</address-pools> </address-pools>
</network-range> </allocation-range>
</network-ranges> </allocation-ranges>
</dhcpv6-server> </dhcpv6-server>
Figure 4: Basic Server Configuration Example XML Figure 4: Basic Server Configuration Example XML
The following example shows a static host reservation within an The following example shows a static host reservation within an
address pool. The host's lease timers are configured to be longer address pool. The host's lease timers are configured to be longer
than hosts from the pool with dynamically assigned addresses. than hosts from the pool with dynamically assigned addresses.
<address-pools> <address-pools>
<address-pool> <address-pool>
skipping to change at page 79, line 33 skipping to change at page 81, line 33
</host-reservations> </host-reservations>
</address-pool> </address-pool>
</address-pools> </address-pools>
Figure 5: Server Host Reservation Configuration Example XML Figure 5: Server Host Reservation Configuration Example XML
The following example shows configuration for a network range and The following example shows configuration for a network range and
pool to be used for delegating prefixes to clients. In this example, pool to be used for delegating prefixes to clients. In this example,
each client will receive a /56 prefix. each client will receive a /56 prefix.
The 'max-pd-space-utiliation' is set to 80 so that a 'prefix-pool- The 'max-pd-space-utilization' is set to 80 so that a 'prefix-pool-
utilization-threshold-exceeded' notification will be raised if the utilization-threshold-exceeded' notification will be raised if the
number of prefix allocations exceeds this. number of prefix allocations exceeds this.
<network-ranges> <allocation-ranges>
<network-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>
</network-range> </allocation-range>
</network-ranges> </allocation-ranges>
Figure 6: Server Prefix Delegation Configuration Example XML Figure 6: Server Prefix Delegation Configuration Example XML
The next example shows the configuration of a set of options that may The next example shows the configuration of a set of options that may
be returned to clients, depending on the contents of a received DHCP be returned to clients, depending on the contents of a received DHCP
request message. The option set ID is '1', which will referenced by request message. The option set ID is '1', which will referenced by
other places in the configuration (e.g., address pool configuration) other places in the configuration (e.g., address pool configuration)
as the available options for clients that request them. as the available options for clients that request them.
The example shows how the option definitions can be extended via The example shows how the option definitions can be extended via
skipping to change at page 82, line 42 skipping to change at page 84, line 42
<relay-options> <relay-options>
<interface-id-option> <interface-id-option>
<interface-id>EXAMPLE-INTERFACE-ID</interface-id> <interface-id>EXAMPLE-INTERFACE-ID</interface-id>
</interface-id-option> </interface-id-option>
</relay-options> </relay-options>
</relay-if> </relay-if>
</dhcpv6-relay> </dhcpv6-relay>
Figure 8: Basic Relay Configuration Example XML Figure 8: Basic Relay Configuration Example XML
A.3. DHCPv6 Client Configuration Examples A.3. DHCPv6 Client Configuration Example
The following example shows a basic configuration for a DHCP client The following example shows a basic configuration for a DHCP client
and its interaction with the ietf-interfaces module. The and its interaction with the ietf-interfaces module. The
configuration defines: configuration defines:
* Enabling the DHCP relay function globally and for the relevant * Enabling the DHCP relay function globally and for the relevant
interface. interface.
* References the interface that the client configuration is relevant * References the interface that the client configuration is relevant
for via an inteface-ref to the ietf-interfaces module. for via an inteface-ref to the ietf-interfaces module.
skipping to change at page 84, line 17 skipping to change at page 86, line 17
<interface> <interface>
<name>eth0</name> <name>eth0</name>
<type>ianaift:ethernetCsmacd</type> <type>ianaift:ethernetCsmacd</type>
<description>DHCPv6 Relay Interface</description> <description>DHCPv6 Relay Interface</description>
<enabled>true</enabled> <enabled>true</enabled>
</interface> </interface>
</interfaces> </interfaces>
<dhcpv6-client <dhcpv6-client
xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"> xmlns="urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client">
<enabled>true</enabled> <enabled>true</enabled>
<client-duid>000200090CC084D303000913</client-duid>
<client-if> <client-if>
<if-name>eth0</if-name> <if-name>eth0</if-name>
<enabled>true</enabled> <enabled>true</enabled>
<duid>000200090CC084D303000913</duid>
<client-configured-options> <client-configured-options>
<option-request-option> <option-request-option>
<oro-option>17</oro-option> <oro-option>17</oro-option>
<oro-option>23</oro-option> <oro-option>23</oro-option>
<oro-option>24</oro-option> <oro-option>24</oro-option>
<oro-option>82</oro-option> <oro-option>82</oro-option>
</option-request-option> </option-request-option>
<vendor-specific-information-options> <vendor-specific-information-options>
<vendor-specific-information-option> <vendor-specific-information-option>
<enterprise-number>32473</enterprise-number> <enterprise-number>32473</enterprise-number>
skipping to change at page 86, line 41 skipping to change at page 88, line 41
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-07-02 { revision 2021-10-25 {
description description
"Initial Revision."; "Initial Revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "XXXX: YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Groupings * Groupings
*/ */
skipping to change at page 88, line 43 skipping to change at page 90, line 43
So that they can be defined within option sets. However, there are So that they can be defined within option sets. However, there are
some options which are only applicable for specific deployment some options which are only applicable for specific deployment
scenarios and in these cases it may be more logical to augment the scenarios and in these cases it may be more logical to augment the
option group to a location relevant for the option. option group to a location relevant for the option.
One example for this could be OPTION_PD_EXCLUDE (67). This option is One example for this could be OPTION_PD_EXCLUDE (67). This option is
only relevant in combination with a delegated prefix which contains a only relevant in combination with a delegated prefix which contains a
specific prefix. In this case, the following location for the specific prefix. In this case, the following location for the
augmentation may be more suitable: augmentation may be more suitable:
'/dhc6-srv:dhc6-srv/dhc6-srv:network-ranges/dhc6-srv:network-range/ '/dhc6-srv:dhc6-srv/dhc6-srv:allocation-ranges/dhc6-srv:allocation-
dhc6-srv:prefix-pools/dhc6-srv:prefix-pool" range/dhc6-srv:prefix-pools/dhc6-srv:prefix-pool"
Appendix C. Example Vendor Specific Server Configuration Module Appendix C. Example Vendor Specific Server Configuration Module
This section shows how to extend the server YANG module defined in This section shows how to extend the server YANG module defined in
this document with vendor specific configuration nodes, e.g., this document with vendor specific configuration nodes, e.g.,
configuring access to a lease storage database. configuring access to a lease storage database.
The example module defines additional server attributes such as name The example module defines additional server attributes such as name
and description. Storage for leases is configured using a lease- and description. Storage for leases is configured using a lease-
storage container. It allows storing leases in one of three options: storage container. It allows storing leases in one of three options:
skipping to change at page 90, line 18 skipping to change at page 92, line 18
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-07-02 { revision 2021-10-25 {
description description
"Initial Revision."; "Initial Revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "XXXX: YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Groupings * Groupings
*/ */
skipping to change at page 95, line 38 skipping to change at page 97, line 38
specification for class selection, it only shows an example how it specification for class selection, it only shows an example how it
could be defined. could be defined.
At the end of the example augment statements are used to add the At the end of the example augment statements are used to add the
defined class selector rules into the overall DHCPv6 addressing defined class selector rules into the overall DHCPv6 addressing
hierarchy. This is done in two main parts: hierarchy. This is done in two main parts:
* The augmented class-selector configuration in the main DHCPv6 * The augmented class-selector configuration in the main DHCPv6
Server configuration. Server configuration.
* client-class leafrefs augmented to "network-range", "address-pool" * client-class leafrefs augmented to "allocation-range", "address-
and "pd-pool", pointing to the "client-class-name" that is pool" and "pd-pool", pointing to the "client-class-name" that is
required. required.
The mechanism is as follows: class is associated to client based on The mechanism is as follows: class is associated to client based on
rules and then client is allowed to get address(es)/prefix(es) from rules and then client is allowed to get address(es)/prefix(es) from
given network-range/pool if the class name matches. given allocation-range/pool if the class name matches.
module example-dhcpv6-class-select { module example-dhcpv6-class-select {
yang-version 1.1; yang-version 1.1;
namespace "https://example.com/ns/" + namespace "https://example.com/ns/" +
"example-dhcpv6-class-select"; "example-dhcpv6-class-select";
prefix "dhc6-class-sel"; prefix "dhc6-class-sel";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
skipping to change at page 97, line 5 skipping to change at page 99, line 5
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2021-07-02 { revision 2021-10-25 {
description description
"Initial Revision."; "Initial Revision.";
reference reference
"XXXX: YANG Data Model for DHCPv6 Configuration"; "XXXX: YANG Data Model for DHCPv6 Configuration";
} }
/* /*
* Groupings * Groupings
*/ */
skipping to change at page 101, line 30 skipping to change at page 103, line 30
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:network-ranges/dhc6-srv:network-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
network-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:" +
"network-ranges/dhc6-srv:network-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:" +
"network-ranges/dhc6-srv:network-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
 End of changes. 118 change blocks. 
571 lines changed or deleted 642 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/