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/ |