draft-ietf-dhc-dhcpv6-yang-10.txt | draft-ietf-dhc-dhcpv6-yang-11.txt | |||
---|---|---|---|---|
DHC Working Group Y. Cui | DHC Working Group Y. Cui | |||
Internet-Draft L. Sun | Internet-Draft L. Sun | |||
Intended status: Standards Track Tsinghua University | Intended status: Standards Track Tsinghua University | |||
Expires: 7 May 2020 I.F. Farrer | Expires: 19 December 2020 I.F. Farrer | |||
S.Z. Zechlin | S.Z. Zechlin | |||
Deutsche Telekom AG | Deutsche Telekom AG | |||
Z. He | Z. He | |||
Tsinghua University | Tsinghua University | |||
M.N. Nowikowski | M.N. Nowikowski | |||
Internet Systems Consortium | Internet Systems Consortium | |||
4 November 2019 | 17 June 2020 | |||
YANG Data Model for DHCPv6 Configuration | YANG Data Model for DHCPv6 Configuration | |||
draft-ietf-dhc-dhcpv6-yang-10 | draft-ietf-dhc-dhcpv6-yang-11 | |||
Abstract | Abstract | |||
This document describes several YANG data modules for the | This document describes several YANG data modules for the | |||
configuration and management of DHCPv6 servers, relays, and clients. | configuration and management of DHCPv6 servers, relays, and clients. | |||
Requirements Language | Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 46 ¶ | |||
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 7 May 2020. | This Internet-Draft will expire on 19 December 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2020 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.2. Extensibility of the DHCPv6 Server YANG Module . . . . . 3 | 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 . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 4 | 2. DHCPv6 Tree Diagrams . . . . . . . . . . . . . . . . . . . . 4 | |||
2.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 4 | 2.1. DHCPv6 Server Tree Diagram . . . . . . . . . . . . . . . 5 | |||
2.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 11 | 2.2. DHCPv6 Relay Tree Diagram . . . . . . . . . . . . . . . . 11 | |||
2.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 14 | 2.3. DHCPv6 Client Tree Diagram . . . . . . . . . . . . . . . 13 | |||
3. DHCPv6 YANG Model . . . . . . . . . . . . . . . . . . . . . . 17 | 3. DHCPv6 YANG Modules . . . . . . . . . . . . . . . . . . . . . 17 | |||
3.1. DHCPv6 Server YANG Model . . . . . . . . . . . . . . . . 17 | 3.1. DHCPv6 Server YANG Module . . . . . . . . . . . . . . . . 17 | |||
3.2. DHCPv6 Relay YANG Model . . . . . . . . . . . . . . . . . 29 | 3.2. DHCPv6 Relay YANG Module . . . . . . . . . . . . . . . . 29 | |||
3.3. DHCPv6 Client YANG Model . . . . . . . . . . . . . . . . 36 | 3.3. DHCPv6 Client YANG Module . . . . . . . . . . . . . . . . 36 | |||
3.4. DHCPv6 RFC8415 Options YANG Model . . . . . . . . . . . . 45 | 3.4. DHCPv6 RFC8415 Options YANG Module . . . . . . . . . . . 46 | |||
3.5. DHCPv6 Common YANG Model . . . . . . . . . . . . . . . . 54 | 3.5. DHCPv6 Common YANG Module . . . . . . . . . . . . . . . . 55 | |||
4. Security Considerations (TBD) . . . . . . . . . . . . . . . . 58 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 59 | |||
5. IANA Considerations (TBD) . . . . . . . . . . . . . . . . . . 58 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 60 | |||
6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 59 | 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 61 | |||
7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 59 | 7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 61 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 59 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 61 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 59 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 61 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 60 | 8.2. Informative References . . . . . . . . . . . . . . . . . 63 | |||
Appendix A. Example of Adding New DHCPv6 Option | Appendix A. Example of Augmenting Additional DHCPv6 Option | |||
Definitions . . . . . . . . . . . . . . . . . . . . . . . 61 | Definitions . . . . . . . . . . . . . . . . . . . . . . . 63 | |||
Appendix B. Example Vendor Specific Server Configuration | Appendix B. Example Vendor Specific Server Configuration | |||
Module . . . . . . . . . . . . . . . . . . . . . . . . . 63 | Module . . . . . . . . . . . . . . . . . . . . . . . . . 66 | |||
Appendix C. Example definition of class selector | Appendix C. Example definition of class selector | |||
configuration . . . . . . . . . . . . . . . . . . . . . . 68 | configuration . . . . . . . . . . . . . . . . . . . . . . 71 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 73 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 77 | |||
1. Introduction | 1. Introduction | |||
DHCPv6 [RFC8415] is widely used for supplying configuration and other | DHCPv6 [RFC8415] is widely 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 DHCPv6 YANG modules for the configuration and management of | defines DHCPv6 YANG modules for the configuration and management of | |||
DHCPv6 servers, relays and clients. This document defines separate | DHCPv6 servers, relays and clients. Separate 'element' modules for | |||
'element' modules for each of these. | each of these. | |||
Additionally, a 'common' module contains typedefs and groupings used | Additionally, a 'common' module contains typedefs and groupings used | |||
by the element modules. A further module contains an initial set of | by the element modules. A further module contains an initial set of | |||
DHCPv6 option definitions. | DHCPv6 option definitions. | |||
It is worth noting that as DHCPv6 is itself a client configuration | It is worth noting that as DHCPv6 is itself a client configuration | |||
protocol, it is not the intention of this document to replace the | protocol, it is not the intention of this document to describe a | |||
allocation of DHCPv6 assigned addressing and parameters using | replacement for the allocation of DHCPv6 assigned addressing and | |||
NETCONF/YANG. The DHCPv6 client model is intended for the | parameters by using NETCONF/YANG. The DHCPv6 client module is | |||
configuration and monitoring of the DHCPv6 client function and does | intended for the configuration and monitoring of the DHCPv6 client | |||
not affect the normal DHCPv6 message flow. | function and does not play a part in the normal DHCPv6 message flow. | |||
1.1. Scope | 1.1. Scope | |||
[RFC8415] describes the current version of the DHCPv6 base protocol | [RFC8415] describes the current version of the DHCPv6 base protocol | |||
specification. In addition to this, a large number of addition | specification. A large number of additional specifications have also | |||
specifications have also been published, extending DHCPv6 element | been published, extending DHCPv6 element functionality and adding new | |||
functionality and adding new options. The YANG modules contained in | options. The YANG modules contained in this document do not attempt | |||
this document do not attempt to capture all of these extensions and | to capture all of these extensions and additions, rather to model the | |||
additions, rather to model the DHCPv6 functions and options covered | DHCPv6 functions and options covered in [RFC8415]. A focus has also | |||
in [RFC8415]. A focus has also been given on the extensibility of | been given on the extensibility of the modules so that it is easy to | |||
the modules so that it is easy to augment in additional functionality | augment in additional functionality as required by a particular | |||
as required by a particular implementation or deployment scenario. | implementation or deployment scenario. | |||
1.2. Extensibility of the DHCPv6 Server YANG Module | 1.2. Extensibility of the DHCPv6 Server YANG Module | |||
The modules in this document only attempt to model DHCPv6 specific | The modules in this document only attempt to model DHCPv6 specific | |||
behavior and do not cover the configuration and management of | behavior and do not cover the configuration and management of | |||
functionality relevant for specific server implementations. The | functionality relevant for specific server implementations. The | |||
level of variance between implementations is too great to attempt to | level of variance between implementations is too great to attempt to | |||
standardize in a way that is useful without being restrictive. | standardize in a way that is useful without being restrictive. | |||
However, it is recognized that implementation specific configuration | However, it is recognized that implementation specific configuration | |||
skipping to change at page 5, line 25 ¶ | skipping to change at page 5, line 31 ¶ | |||
| | | yang:mac-address | | | | yang:mac-address | |||
| | +--:(duid-en) | | | +--:(duid-en) | |||
| | | +--rw duid-en-enterprise-number? uint32 | | | | +--rw duid-en-enterprise-number? uint32 | |||
| | | +--rw duid-en-identifier? string | | | | +--rw duid-en-identifier? string | |||
| | +--:(duid-ll) | | | +--:(duid-ll) | |||
| | | +--rw duid-ll-hardware-type? uint16 | | | | +--rw duid-ll-hardware-type? uint16 | |||
| | | +--rw duid-ll-link-layer-address? | | | | +--rw duid-ll-link-layer-address? | |||
| | | yang:mac-address | | | | yang:mac-address | |||
| | +--:(duid-uuid) | | | +--:(duid-uuid) | |||
| | | +--rw uuid? yang:uuid | | | | +--rw uuid? yang:uuid | |||
| | +--:(duid-unknown) | | | +--:(duid-unstructured) | |||
| | +--rw data? binary | | | +--rw data? binary | |||
| +--ro active-duid? binary | | +--ro active-duid? binary | |||
+--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 | | +--rw option-set-id | |||
| | uint32 | | | uint32 | |||
| +--rw description? | | +--rw description? | |||
| | string | | | string | |||
| +--rw rfc3319:sip-server-domain-name-list-option | ||||
| | +--rw rfc3319:sip-serv-domain-name? | ||||
| | inet:domain-name | ||||
| +--rw rfc3319:sip-server-address-list-option | ||||
| | +--rw rfc3319:sip-server* [sip-serv-id] | ||||
| | +--rw rfc3319:sip-serv-id uint8 | ||||
| | +--rw rfc3319:sip-serv-addr? inet:ipv6-address | ||||
| +--rw rfc8415:preference-option | | +--rw rfc8415:preference-option | |||
| | +--rw rfc8415:pref-value? uint8 | | | +--rw rfc8415:pref-value? uint8 | |||
| +--rw rfc8415:auth-option | | +--rw rfc8415:auth-option | |||
| | +--rw rfc8415:protocol? uint8 | | | +--rw rfc8415:protocol? uint8 | |||
| | +--rw rfc8415:algorithm? uint8 | | | +--rw rfc8415:algorithm? uint8 | |||
| | +--rw rfc8415:rdm? uint8 | | | +--rw rfc8415:rdm? uint8 | |||
| | +--rw rfc8415:replay-detection? uint64 | | | +--rw rfc8415:replay-detection? uint64 | |||
| | +--rw rfc8415:auth-information? string | | | +--rw rfc8415:auth-information? string | |||
| +--rw rfc8415:server-unicast-option | | +--rw rfc8415:server-unicast-option | |||
| | +--rw rfc8415:server-address? inet:ipv6-address | | | +--rw rfc8415:server-address? inet:ipv6-address | |||
| +--rw rfc8415:status-code-option | | +--rw rfc8415:status-code-option | |||
| | +--rw rfc8415:status-code? uint16 | | | +--rw rfc8415:status-code? uint16 | |||
| | +--rw rfc8415:status-message? string | | | +--rw rfc8415:status-message? string | |||
| +--rw rfc8415:rapid-commit-option! | | +--rw rfc8415:rapid-commit-option! | |||
| +--rw rfc8415:vendor-specific-information-option | | +--rw rfc8415:vendor-specific-information-option | |||
| | +--rw rfc8415:vendor-specific-information-option-inst | | | +--rw rfc8415:vendor-specific-information-option- | |||
ances* | | | instances* [enterprise-number] | |||
| | [enterprise-number] | | | [enterprise-number] | |||
| | +--rw rfc8415:enterprise-number uint32 | | | +--rw rfc8415:enterprise-number uint32 | |||
| | +--rw rfc8415:vendor-option-data* | | | +--rw rfc8415:vendor-option-data* | |||
| | [sub-option-code] | | | [sub-option-code] | |||
| | +--rw rfc8415:sub-option-code uint16 | | | +--rw rfc8415:sub-option-code uint16 | |||
| | +--rw rfc8415:sub-option-data? string | | | +--rw rfc8415:sub-option-data? string | |||
| +--rw rfc8415:reconfigure-message-option | | +--rw rfc8415:reconfigure-message-option | |||
| | +--rw rfc8415:msg-type? uint8 | | | +--rw rfc8415:msg-type? uint8 | |||
| +--rw rfc8415:reconfigure-accept-option! | | +--rw rfc8415:reconfigure-accept-option! | |||
| +--rw rfc8415:info-refresh-time-option | | +--rw rfc8415:info-refresh-time-option | |||
| | +--rw rfc8415:info-refresh-time? | | | +--rw rfc8415:info-refresh-time? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--rw rfc8415:sol-max-rt-option | | +--rw rfc8415:sol-max-rt-option | |||
| | +--rw rfc8415:sol-max-rt-value? | | | +--rw rfc8415:sol-max-rt-value? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--rw rfc8415:inf-max-rt-option | | +--rw rfc8415:inf-max-rt-option | |||
| +--rw rfc8415:inf-max-rt-value? | | +--rw rfc8415:inf-max-rt-value? | |||
| dhcpv6-common:timer-value-seconds32 | | dhcpv6-common:timer-seconds32 | |||
+--rw class-selector | +--rw class-selector | |||
+--rw network-ranges | +--rw network-ranges | |||
+--rw option-set-id* leafref | +--rw option-set-id* leafref | |||
+--rw valid-lifetime | +--rw valid-lifetime? | |||
| dhcpv6-common:timer-value-seconds32 | | dhcpv6-common:timer-seconds32 | |||
+--rw renew-time | +--rw renew-time? | |||
| dhcpv6-common:timer-value-seconds32 | | dhcpv6-common:timer-seconds32 | |||
+--rw rebind-time | +--rw rebind-time? | |||
| dhcpv6-common:timer-value-seconds32 | | dhcpv6-common:timer-seconds32 | |||
+--rw preferred-lifetime | +--rw preferred-lifetime? | |||
| dhcpv6-common:timer-value-seconds32 | | dhcpv6-common:timer-seconds32 | |||
+--rw rapid-commit boolean | +--rw rapid-commit? boolean | |||
+--rw network-range* [network-range-id] | +--rw network-range* [network-range-id] | |||
+--rw network-range-id uint32 | | +--rw network-range-id uint32 | |||
+--rw network-description string | | +--rw network-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 | | +--rw valid-lifetime? | |||
| dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
+--rw renew-time | | +--rw renew-time? | |||
| dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
+--rw rebind-time | | +--rw rebind-time? | |||
| dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
+--rw preferred-lifetime | | +--rw preferred-lifetime? | |||
| dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
+--rw rapid-commit boolean | | +--rw rapid-commit? boolean | |||
+--rw address-pools | | +--rw address-pools | |||
| +--rw address-pool* [pool-id] | | | +--rw address-pool* [pool-id] | |||
| +--rw pool-id uint32 | | | +--rw pool-id uint32 | |||
| +--rw pool-prefix inet:ipv6-prefix | | | +--rw pool-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-count | | | +--rw max-address-count | |||
| | dhcpv6-common:threshold | | | | dhcpv6-common:threshold | |||
| +--rw option-set-id* leafref | | | +--rw option-set-id* leafref | |||
| +--rw valid-lifetime | | | +--rw valid-lifetime? | |||
| | dhcpv6-common:timer-value-seconds32 | | | | dhcpv6-common:timer-seconds32 | |||
| +--rw renew-time | | | +--rw renew-time? | |||
| | dhcpv6-common:timer-value-seconds32 | | | | dhcpv6-common:timer-seconds32 | |||
| +--rw rebind-time | | | +--rw rebind-time? | |||
| | dhcpv6-common:timer-value-seconds32 | | | | dhcpv6-common:timer-seconds32 | |||
| +--rw preferred-lifetime | | | +--rw preferred-lifetime? | |||
| | dhcpv6-common:timer-value-seconds32 | | | | dhcpv6-common:timer-seconds32 | |||
| +--rw rapid-commit boolean | | | +--rw rapid-commit? boolean | |||
| +--rw host-reservations | | | +--rw host-reservations | |||
| | +--rw host-reservation* [reserved-addr] | | | | +--rw host-reservation* [reserved-addr] | |||
| | +--rw client-duid? binary | | | | +--rw client-duid? binary | |||
| | +--rw reserved-addr | | | | +--rw reserved-addr | |||
| | | inet:ipv6-address | | | | | inet:ipv6-address | |||
| | +--rw prefix-reservation* | | | | +--rw option-set-id* leafref | |||
| | | [reserv-prefix-id] | | | | +--rw valid-lifetime? | |||
| | | +--rw reserv-prefix-id uint32 | | | | | dhcpv6-common:timer-seconds32 | |||
| | | +--rw reserv-prefix | | | | +--rw renew-time? | |||
| | | | inet:ipv6-prefix | | | | | dhcpv6-common:timer-seconds32 | |||
| | | +--rw reserv-prefix-len uint8 | | | | +--rw rebind-time? | |||
| | +--rw option-set-id* leafref | | | | | dhcpv6-common:timer-seconds32 | |||
| | +--rw valid-lifetime | | | | +--rw preferred-lifetime? | |||
| | | dhcpv6-common:timer-value-seconds32 | | | | | dhcpv6-common:timer-seconds32 | |||
| | +--rw renew-time | | | | +--rw rapid-commit? boolean | |||
| | | dhcpv6-common:timer-value-seconds32 | | | +--ro active-leases | |||
| | +--rw rebind-time | | | +--ro total-count uint64 | |||
| | | dhcpv6-common:timer-value-seconds32 | | | +--ro allocated-count uint64 | |||
| | +--rw preferred-lifetime | | | +--ro active-lease* [leased-address] | |||
| | | dhcpv6-common:timer-value-seconds32 | | | +--ro leased-address | |||
| | +--rw rapid-commit boolean | | | | inet:ipv6-address | |||
| +--ro active-leases* [leased-address] | | | +--ro client-duid? binary | |||
| +--ro leased-address | | | +--ro iaid uint32 | |||
| | inet:ipv6-address | | | +--ro allocation-time? | |||
| +--ro total-address-count uint64 | | | | yang:date-and-time | |||
| +--ro allocated-address-count uint64 | | | +--ro last-renew-rebind? | |||
| +--ro binding-info* [client-duid] | | | | yang:date-and-time | |||
| +--ro client-duid binary | | | +--ro preferred-lifetime? | |||
| +--ro iaid* [iaid] | | | | dhcpv6-common:timer-seconds32 | |||
| +--ro iaid uint32 | | | +--ro valid-lifetime? | |||
| +--ro allocation-time? | | | | dhcpv6-common:timer-seconds32 | |||
| | yang:date-and-time | | | +--ro lease-t1? | |||
| +--ro last-renew-rebind? | | | | dhcpv6-common:timer-seconds32 | |||
| | yang:date-and-time | | | +--ro lease-t2? | |||
| +--ro preferred-lifetime? | | | dhcpv6-common:timer-seconds32 | |||
| | dhcpv6-common:timer-value-seconds | | +--rw prefix-pools {prefix-delegation}? | |||
32 | | +--rw prefix-pool* [pool-id] | |||
| +--ro valid-lifetime? | | +--rw pool-id uint32 | |||
| | dhcpv6-common:timer-value-seconds | | +--rw pool-prefix | |||
32 | | | inet:ipv6-prefix | |||
| +--ro lease-t1? | | +--rw client-prefix-length uint8 | |||
| | dhcpv6-common:timer-value-seconds | | +--rw max-pd-space-utilization | |||
32 | | | dhcpv6-common:threshold | |||
| +--ro lease-t2? | | +--rw option-set-id* leafref | |||
| dhcpv6-common:timer-value-seconds | | +--rw valid-lifetime? | |||
32 | | | dhcpv6-common:timer-seconds32 | |||
+--rw prefix-pools {prefix-delegation}? | | +--rw renew-time? | |||
| +--rw prefix-pool* [pool-id] | | | dhcpv6-common:timer-seconds32 | |||
| +--rw pool-id uint32 | | +--rw rebind-time? | |||
| +--rw prefix | | | dhcpv6-common:timer-seconds32 | |||
| | inet:ipv6-prefix | | +--rw preferred-lifetime? | |||
| +--rw prefix-length uint8 | | | dhcpv6-common:timer-seconds32 | |||
| +--rw max-pd-space-utilization | | +--rw rapid-commit? boolean | |||
| | dhcpv6-common:threshold | | +--rw host-reservations | |||
| +--rw option-set-id* leafref | | | +--rw prefix-reservation* [reserved-prefix] | |||
| +--rw valid-lifetime | | | | +--rw client-duid? binary | |||
| | dhcpv6-common:timer-value-seconds32 | | | | +--rw reserved-prefix | |||
| +--rw renew-time | | | | | inet:ipv6-prefix | |||
| | dhcpv6-common:timer-value-seconds32 | | | | +--rw reserved-prefix-len? uint8 | |||
| +--rw rebind-time | | | +--rw option-set-id* leafref | |||
| | dhcpv6-common:timer-value-seconds32 | | | +--rw valid-lifetime? | |||
| +--rw preferred-lifetime | | | | dhcpv6-common:timer-seconds32 | |||
| | dhcpv6-common:timer-value-seconds32 | | | +--rw renew-time? | |||
| +--rw rapid-commit boolean | | | | dhcpv6-common:timer-seconds32 | |||
| +--rw host-reservations | | | +--rw rebind-time? | |||
| +--rw prefix-reservation* [reserved-prefix] | | | | dhcpv6-common:timer-seconds32 | |||
| | +--rw client-duid? binary | | | +--rw preferred-lifetime? | |||
| | +--rw reserved-prefix | | | | dhcpv6-common:timer-seconds32 | |||
| | | inet:ipv6-prefix | | | +--rw rapid-commit? boolean | |||
| | +--rw reserv-prefix-len uint8 | | +--ro active-leases | |||
| +--rw option-set-id* leafref | | +--ro total-count uint64 | |||
| +--rw valid-lifetime | | +--ro allocated-count uint64 | |||
| | dhcpv6-common:timer-value-seconds32 | | +--ro active-lease* [leased-prefix] | |||
| +--rw renew-time | | +--ro leased-prefix | |||
| | dhcpv6-common:timer-value-seconds32 | | | inet:ipv6-prefix | |||
| +--rw rebind-time | | +--ro client-duid? binary | |||
| | dhcpv6-common:timer-value-seconds32 | | +--ro iaid uint32 | |||
| +--rw preferred-lifetime | | +--ro allocation-time? | |||
| | dhcpv6-common:timer-value-seconds32 | | | yang:date-and-time | |||
| +--rw rapid-commit boolean | | +--ro last-renew-rebind? | |||
| +--ro active-leases* [leased-prefix] | | | yang:date-and-time | |||
| +--ro leased-prefix | | +--ro preferred-lifetime? | |||
| | inet:ipv6-prefix | | | dhcpv6-common:timer-seconds32 | |||
| +--ro total-address-count uint64 | | +--ro valid-lifetime? | |||
| +--ro allocated-address-count uint64 | | | dhcpv6-common:timer-seconds32 | |||
| +--ro binding-info* [client-duid] | | +--ro lease-t1? | |||
| +--ro client-duid binary | | | dhcpv6-common:timer-seconds32 | |||
| +--ro iaid* [iaid] | | +--ro lease-t2? | |||
| +--ro iaid uint32 | | dhcpv6-common:timer-seconds32 | |||
| +--ro allocation-time? | +--ro solicit-count? uint32 | |||
| | yang:date-and-time | +--ro advertise-count? uint32 | |||
| +--ro last-renew-rebind? | +--ro request-count? uint32 | |||
| | yang:date-and-time | +--ro confirm-count? uint32 | |||
| +--ro preferred-lifetime? | +--ro renew-count? uint32 | |||
| | dhcpv6-common:timer-value-seco | +--ro rebind-count? uint32 | |||
nds32 | +--ro reply-count? uint32 | |||
| +--ro valid-lifetime? | +--rw release-count? uint32 | |||
| | dhcpv6-common:timer-value-seco | +--ro decline-count? uint32 | |||
nds32 | +--ro reconfigure-count? uint32 | |||
| +--ro lease-t1? | +--ro information-request-count? uint32 | |||
| | dhcpv6-common:timer-value-seco | ||||
nds32 | ||||
| +--ro lease-t2? | ||||
| dhcpv6-common:timer-value-seco | ||||
nds32 | ||||
+--ro solicit-count? uint32 | ||||
+--ro advertise-count? uint32 | ||||
+--ro request-count? uint32 | ||||
+--ro confirm-count? uint32 | ||||
+--ro renew-count? uint32 | ||||
+--ro rebind-count? uint32 | ||||
+--ro reply-count? uint32 | ||||
+--rw release-count? uint32 | ||||
+--ro decline-count? uint32 | ||||
+--ro reconfigure-count? uint32 | ||||
+--ro information-request-count? uint32 | ||||
notifications: | notifications: | |||
+---n address-pool-running-out | +---n address-pool-utilization-threshold-exceeded | |||
| +--ro pool-id? leafref | ||||
| +--ro total-address-count uint64 | | +--ro total-address-count uint64 | |||
| +--ro max-address-count uint64 | | +--ro max-address-count uint64 | |||
| +--ro allocated-address-count uint64 | | +--ro allocated-address-count uint64 | |||
| +--ro pool-id uint32 | +---n prefix-pool-utilization-threshold-exceeded | |||
+---n pd-pool-running-out | | {prefix-delegation}? | |||
| +--ro max-pd-space-utilization dhcpv6-common:threshold | | +--ro pool-id leafref | |||
| +--ro pd-space-utilization dhcpv6-common:threshold | | +--ro max-pd-space-utilization leafref | |||
| +--ro pool-id uint32 | | +--ro pd-space-utilization? uint64 | |||
+---n invalid-client-detected | +---n invalid-client-detected | |||
| +--ro duid? binary | | +--ro duid? binary | |||
| +--ro description? string | | +--ro description? string | |||
+---n decline-received | +---n decline-received | |||
| +--ro duid? binary | | +--ro duid? binary | |||
| +--ro addresses* inet:ipv6-address | | +--ro declined-resources* [] | |||
| +--ro (resource-type)? | ||||
| +--:(declined-address) | ||||
| | +--ro address? inet:ipv6-address | ||||
| +--:(declined-prefix) | ||||
| +--ro prefix? inet:ipv6-prefix | ||||
+---n non-success-code-sent | +---n non-success-code-sent | |||
+--ro status-code uint16 | +--ro status-code uint16 | |||
+--ro duid? binary | +--ro duid? binary | |||
Figure 1: DHCPv6 Server Data Model Structure | Figure 1: DHCPv6 Server Data Module Structure | |||
Description of important nodes: | Descriptions of important nodes: | |||
* dhcpv6-node-type: The different functional DHCPv6 elements each | * dhcpv6-node-type: The different functional DHCPv6 elements each | |||
have their relevant identities. | have their relevant identities. | |||
* dhcpv6-server: This container holds the server's DHCPv6 specific | * dhcpv6-server: This container holds the server's DHCPv6 specific | |||
configuration. | configuration. | |||
* server-duid: Each server must have a DUID (DHCP Unique Identifier) | * server-duid: Each server must have a DUID (DHCP Unique Identifier) | |||
to identify itself to clients. A DUID consists of a two-octet | to identify itself to clients. A DUID consists of a two-octet | |||
type field and an arbitrary length (of no more than 128-bytes) | type field and an arbitrary length (of no more than 128-bytes) | |||
skipping to change at page 10, line 44 ¶ | skipping to change at page 10, line 34 ¶ | |||
UUID. DUID-Unknown is used for arbitrary DUID formats which do | UUID. DUID-Unknown is used for arbitrary DUID formats which do | |||
not follow any of these defined types. 'active-duid' is a read- | not follow any of these defined types. 'active-duid' is a read- | |||
only field that the server's current DUID can be retrieved from. | only field that the server's current DUID can be retrieved from. | |||
The DUID definitions are imported from the 'ietf- | The DUID definitions are imported from the 'ietf- | |||
dhcpv6-common.yang' module as they are also used by the 'ietf- | dhcpv6-common.yang' module as they are also used by the 'ietf- | |||
dhcpv6-client.yang' module. | dhcpv6-client.yang' module. | |||
* vendor-config: This container is provided as a location for | * vendor-config: This container is provided as a location for | |||
additional implementation specific YANG nodes for the | additional implementation specific YANG nodes for the | |||
configuration of the device to be augmented. See Appendix B for | configuration of the device to be augmented. See Appendix B for | |||
an example of this. | an example module. | |||
* option-sets: The server can be configured with multiple option- | * option-sets: The server can be configured with multiple option- | |||
sets. These are groups of DHCPv6 options with common parameters | sets. These are groups of DHCPv6 options with common parameters | |||
which will be supplied to the intended clients. The 'option-set- | which will be supplied to clients on request. The 'option-set-id' | |||
id' field is the key field which is referenced by the relevant | field is used to reference an option-set elsewhere in the server's | |||
address or prefix pool configuration. | configuration. | |||
* option-set: Holds definitions for DHCPv6 options themselves. The | * option-set: Holds configration parameters for DHCPv6 options. The | |||
initial set of definitions are contained in the module 'ietf- | initial set of definitions are contained in the module 'ietf- | |||
dhcpv6-options-rfc8415.yang' and are augmented into the server | dhcpv6-options-rfc8415.yang' and are augmented into the server | |||
module at this point. | module at this point. Other DHCPv6 options can be augmented here | |||
as required. | ||||
* 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 C for an example of | selector nodes to be augmented. See Appendix C for an example of | |||
this. | this. | |||
* network-ranges: This model uses a hierarchical model for the | * network-ranges: This module uses a hierarchical model for the | |||
allocation of addresses and prefixes. At the top level 'network- | allocation of addresses and prefixes. At the top level 'network- | |||
ranges' holds global configuration parameters. Under this, a list | ranges' holds global configuration parameters. Under this, a list | |||
of 'network-ranges' can be defined. Inside 'network-rages', | of 'network-ranges' can be defined. Inside 'network-rages', | |||
'address-pools' (for IA_NA and IA_TA allocations), and 'prefix- | 'address-pools' (for IA_NA and IA_TA allocations), and 'prefix- | |||
pools' (for IA_PD allocation) are defined. Finally within the | pools' (for IA_PD allocation) are defined. Finally within the | |||
pools, specific host-reservations are held. | pools, specific host-reservations are held. | |||
* prefix-pools: Defines prefix pools to be used for prefix | * prefix-pools: Defines pools to be used for prefix delegation to | |||
delegation to clients. As prefix delegation is not supported by | clients. As prefix delegation is not supported by all DHCPv6 | |||
all DHCPv6 server implementations, it is enabled by a feature | server implementations, it is enabled by a feature statement. | |||
statement. | ||||
Information about notifications: | Information about notifications: | |||
* address/pd-pool-running-out: Raised when the address/prefix pool | * address/prefix-pool-utilization-threshold-exceeded: Raised when | |||
is going to run out. A threshold for the utilization ratio of the | number of leased addresses or prefixes exceeds the configurated | |||
pool (max-address-count/max-pd-space utilization) has been defined | usage threshold. | |||
in the server features so that it will notify the administrator | ||||
when the utilization ratio reaches the threshold, and such | ||||
threshold is a settable parameter. | ||||
* invalid-client-detected: Raised when the server has found a client | * invalid-client-detected: Raised when the server detects an invalid | |||
which can be regarded as a potential attacker. A description may | client. A description of the error that has generated the | |||
also be included. | 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 a status message is raised for | * non-success-code-sent: Raised when a status message is raised for | |||
an error. | an error. | |||
2.2. DHCPv6 Relay Tree Diagram | 2.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 | |||
skipping to change at page 13, line 12 ¶ | skipping to change at page 12, line 47 ¶ | |||
+--ro relay-forward-unknown-received-count? uint32 | +--ro relay-forward-unknown-received-count? uint32 | |||
+--ro discarded-message-count? uint32 | +--ro discarded-message-count? uint32 | |||
notifications: | notifications: | |||
+---n relay-event | +---n relay-event | |||
+--ro topology-change | +--ro topology-change | |||
+--ro relay-if-name? | +--ro relay-if-name? | |||
| -> /dhcpv6-relay/relay-if/if-name | | -> /dhcpv6-relay/relay-if/if-name | |||
+--ro last-ipv6-addr? inet:ipv6-address | +--ro last-ipv6-addr? inet:ipv6-address | |||
Figure 2: DHCPv6 Relay Data Model Structure | Figure 2: DHCPv6 Relay Data Module Structure | |||
Description of important nodes: | Descriptions of important nodes: | |||
* dhcpv6-node-type: The different functional DHCPv6 elements each | * dhcpv6-node-type: The different functional DHCPv6 elements each | |||
have their relevant identities. | have their relevant identities. | |||
* dhcpv6-relay: This container holds the relay's DHCPv6 specific | * dhcpv6-relay: This container holds the relay's DHCPv6 specific | |||
configuration. | configuration. | |||
* relay-if: As a relay may have multiple client-facing interfaces, | * relay-if: As a relay may have multiple client-facing interfaces, | |||
they are configured in a list. The if-name leaf is the key and is | they are configured in a list. The if-name leaf is the key and is | |||
an interface-ref to the applicable interface defined by the 'ietf- | an interface-ref to the applicable interface defined by the 'ietf- | |||
interfaces' YANG module. | interfaces' YANG module. | |||
* destination-addresses: Defines a list of IPv6 addresses that | * destination-addresses: Defines a list of IPv6 addresses that | |||
client messages will be relayed to. May include unicast or | client messages will be relayed to. May include unicast or | |||
multicast addresses. | multicast addresses. | |||
* link-address: Allows the configuration of the value that the relay | * link-address: Configures the value that the relay will put into | |||
will put into the link-address field of Relay-Forward messages. | the link-address field of Relay-Forward messages. | |||
* prefix-delegation: As prefix delegation is not supported by all | * prefix-delegation: As prefix delegation is not supported by all | |||
DHCPv6 relay implementations, it is enabled by this feature | DHCPv6 relay implementations, it is enabled by this feature | |||
statement where required. | statement where required. | |||
* pd-leases: Contains read only nodes for holding information about | * pd-leases: Contains read-only nodes for holding information about | |||
active delegated prefix leases. | active delegated prefix leases. | |||
* relay-options: As with the Server module, DHCPv6 options that can | * relay-options: As with the Server module, DHCPv6 options that can | |||
be sent by the relay are augmented here. | be sent by the relay are augmented here. | |||
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. | |||
skipping to change at page 14, line 34 ¶ | skipping to change at page 14, line 18 ¶ | |||
| | yang:mac-address | | | yang:mac-address | |||
| +--:(duid-en) | | +--:(duid-en) | |||
| | +--rw duid-en-enterprise-number? uint32 | | | +--rw duid-en-enterprise-number? uint32 | |||
| | +--rw duid-en-identifier? string | | | +--rw duid-en-identifier? string | |||
| +--:(duid-ll) | | +--:(duid-ll) | |||
| | +--rw duid-ll-hardware-type? uint16 | | | +--rw duid-ll-hardware-type? uint16 | |||
| | +--rw duid-ll-link-layer-address? | | | +--rw duid-ll-link-layer-address? | |||
| | yang:mac-address | | | yang:mac-address | |||
| +--:(duid-uuid) | | +--:(duid-uuid) | |||
| | +--rw uuid? yang:uuid | | | +--rw uuid? yang:uuid | |||
| +--:(duid-unknown) | | +--:(duid-unstructured) | |||
| +--rw data? binary | | +--rw data? binary | |||
+--ro active-duid? binary | +--ro active-duid? binary | |||
+--rw client-configured-options | +--rw client-configured-options | |||
| +--rw rfc8415:option-request-option | | +--rw rfc8415:option-request-option | |||
| | +--rw rfc8415:oro-option* uint16 | | | +--rw rfc8415:oro-option* uint16 | |||
| +--rw rfc8415:status-code-option | | +--rw rfc8415:status-code-option | |||
| | +--rw rfc8415:status-code? uint16 | | | +--rw rfc8415:status-code? uint16 | |||
| | +--rw rfc8415:status-message? string | | | +--rw rfc8415:status-message? string | |||
| +--rw rfc8415:rapid-commit-option! | | +--rw rfc8415:rapid-commit-option! | |||
| +--rw rfc8415:user-class-option | | +--rw rfc8415:user-class-option | |||
skipping to change at page 15, line 9 ¶ | skipping to change at page 14, line 42 ¶ | |||
| | +--rw rfc8415:user-class-datum? string | | | +--rw rfc8415:user-class-datum? string | |||
| +--rw rfc8415:vendor-class-option | | +--rw rfc8415:vendor-class-option | |||
| | +--rw rfc8415:vendor-class-option-instances* | | | +--rw rfc8415:vendor-class-option-instances* | |||
| | [enterprise-number] | | | [enterprise-number] | |||
| | +--rw rfc8415:enterprise-number uint32 | | | +--rw rfc8415:enterprise-number uint32 | |||
| | +--rw rfc8415:vendor-class* | | | +--rw rfc8415:vendor-class* | |||
| | [vendor-class-datum-id] | | | [vendor-class-datum-id] | |||
| | +--rw rfc8415:vendor-class-datum-id uint8 | | | +--rw rfc8415:vendor-class-datum-id uint8 | |||
| | +--rw rfc8415:vendor-class-datum? string | | | +--rw rfc8415:vendor-class-datum? string | |||
| +--rw rfc8415:vendor-specific-information-option | | +--rw rfc8415:vendor-specific-information-option | |||
| | +--rw rfc8415:vendor-specific-information-option-inst | | | +--rw rfc8415:vendor-specific-information-option- | |||
ances* | | | instances* [enterprise-number] | |||
| | [enterprise-number] | | | [enterprise-number] | |||
| | +--rw rfc8415:enterprise-number uint32 | | | +--rw rfc8415:enterprise-number uint32 | |||
| | +--rw rfc8415:vendor-option-data* | | | +--rw rfc8415:vendor-option-data* | |||
| | [sub-option-code] | | | [sub-option-code] | |||
| | +--rw rfc8415:sub-option-code uint16 | | | +--rw rfc8415:sub-option-code uint16 | |||
| | +--rw rfc8415:sub-option-data? string | | | +--rw rfc8415:sub-option-data? string | |||
| +--rw rfc8415:reconfigure-accept-option! | | +--rw rfc8415:reconfigure-accept-option! | |||
+--rw ia-na* [iaid] | +--rw ia-na* [iaid] | |||
| +--rw iaid uint32 | | +--rw iaid 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 preferred-lifetime? | | +--ro preferred-lifetime? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--ro valid-lifetime? | | +--ro valid-lifetime? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--ro lease-t1? | | +--ro lease-t1? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--ro lease-t2? | | +--ro lease-t2? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common: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? binary | | +--ro server-duid? binary | |||
+--rw ia-ta* [iaid] | +--rw ia-ta* [iaid] | |||
| +--rw iaid uint32 | | +--rw iaid 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? | | +--ro preferred-lifetime? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--ro valid-lifetime? | | +--ro valid-lifetime? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common: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? binary | | +--ro server-duid? binary | |||
+--rw ia-pd* [iaid] | +--rw ia-pd* [iaid] | |||
| +--rw iaid uint32 | | +--rw iaid uint32 | |||
| +--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 preferred-lifetime? | | +--ro preferred-lifetime? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--ro valid-lifetime? | | +--ro valid-lifetime? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--ro lease-t1? | | +--ro lease-t1? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common:timer-seconds32 | |||
| +--ro lease-t2? | | +--ro lease-t2? | |||
| | dhcpv6-common:timer-value-seconds32 | | | dhcpv6-common: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? binary | | +--ro server-duid? binary | |||
+--ro solicit-count? uint32 | +--ro solicit-count? uint32 | |||
+--ro advertise-count? uint32 | +--ro advertise-count? uint32 | |||
+--ro request-count? uint32 | +--ro request-count? uint32 | |||
+--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 | |||
skipping to change at page 16, line 45 ¶ | skipping to change at page 16, line 30 ¶ | |||
+---n server-duid-changed | +---n server-duid-changed | |||
+--ro new-server-duid binary | +--ro new-server-duid binary | |||
+--ro previous-server-duid binary | +--ro previous-server-duid binary | |||
+--ro lease-ia-na? | +--ro lease-ia-na? | |||
| -> /dhcpv6-client/client-if/ia-na/iaid | | -> /dhcpv6-client/client-if/ia-na/iaid | |||
+--ro lease-ia-ta? | +--ro lease-ia-ta? | |||
| -> /dhcpv6-client/client-if/ia-ta/iaid | | -> /dhcpv6-client/client-if/ia-ta/iaid | |||
+--ro lease-ia-pd? | +--ro lease-ia-pd? | |||
-> /dhcpv6-client/client-if/ia-pd/iaid | -> /dhcpv6-client/client-if/ia-pd/iaid | |||
Figure 3: DHCPv6 Client Data Model Structure | Figure 3: DHCPv6 Client Data Module Structure | |||
Description of important nodes: | Descriptions of important nodes: | |||
* dhcpv6-node-type: The different functional DHCPv6 elements each | * dhcpv6-node-type: The different functional DHCPv6 elements each | |||
have their relevant identities. | have their relevant identities. | |||
* 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 | |||
skipping to change at page 17, line 38 ¶ | skipping to change at page 17, line 22 ¶ | |||
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 condition includes | client can be proved to be invalid. Possible condition includes | |||
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] is failed. | defined in [RFC8415] is failed. | |||
* failed-status-turn-up: Raised when the client receives a message | 3. DHCPv6 YANG Modules | |||
includes an unsuccessful Status Code option. | ||||
3. DHCPv6 YANG Model | ||||
3.1. DHCPv6 Server YANG Model | 3.1. DHCPv6 Server YANG Module | |||
This module imports typedefs from [RFC6991], [RFC8343]. | This module imports typedefs from [RFC6991], [RFC8343]. | |||
<CODE BEGINS> file ietf-dhcpv6-server.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 "dhcpv6-server"; | prefix "dhcpv6-server"; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
} | } | |||
import ietf-dhcpv6-common { | import ietf-dhcpv6-common { | |||
prefix dhcpv6-common; | prefix dhcpv6-common; | |||
} | } | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"cuiyong@tsinghua.edu.cn | "cuiyong@tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
skipping to change at page 18, line 22 ¶ | skipping to change at page 18, line 8 ¶ | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"cuiyong@tsinghua.edu.cn | "cuiyong@tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
hezihao9512@gmail.com | hezihao9512@gmail.com | |||
godfryd@isc.org"; | godfryd@isc.org"; | |||
description "This is a YANG data module for the configuration | description "This YANG module defines components for the | |||
and management of DHCPv6 servers. | configuration and management of DHCPv6 servers. | |||
Copyright (c) 2018 IETF Trust and the persons identified as | Copyright (c) 2018 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | 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 | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC 8513; see | This version of this YANG module is part of RFC 8513; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2020-05-26 { | ||||
description "Version update for draft -11 publication and | ||||
to align revisions across the different modules."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; | ||||
} | ||||
revision 2019-12-02 { | ||||
description "Major reworking of the module."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; | ||||
} | ||||
revision 2018-09-04 { | revision 2018-09-04 { | |||
description ""; | description ""; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
revision 2018-03-04 { | revision 2018-03-04 { | |||
description "Resolved most issues on the DHC official | description "Resolved most issues on the DHC official | |||
github"; | github"; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
skipping to change at page 19, line 4 ¶ | skipping to change at page 18, line 49 ¶ | |||
revision 2018-03-04 { | revision 2018-03-04 { | |||
description "Resolved most issues on the DHC official | description "Resolved most issues on the DHC official | |||
github"; | github"; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
revision 2017-12-22 { | revision 2017-12-22 { | |||
description "Resolve most issues on Ian's github."; | description "Resolve most issues on Ian's github."; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
revision 2017-11-24 { | revision 2017-11-24 { | |||
description "First version of the separated server specific | description "First version of the separated server specific | |||
YANG model."; | YANG model."; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
/* | /* | |||
* Typedef | * Identities | |||
*/ | */ | |||
identity server { | identity server { | |||
base "dhcpv6-common:dhcpv6-node"; | base "dhcpv6-common:dhcpv6-node"; | |||
description "DHCPv6 server."; | description "DHCPv6 server identity."; | |||
} | } | |||
leaf dhcpv6-node-type { | leaf dhcpv6-node-type { | |||
description "Type for a DHCPv6 server"; | description "Type for a DHCPv6 server."; | |||
type identityref { | type identityref { | |||
base "dhcpv6-server:server"; | base "dhcpv6-server:server"; | |||
} | } | |||
} | } | |||
/* | ||||
* Features | ||||
*/ | ||||
feature prefix-delegation { | feature prefix-delegation { | |||
description "Enable if the server implements prefix delegation."; | description "Denotes that the server implements DHCPv6 prefix | |||
delegation."; | ||||
} | } | |||
/* | ||||
* Groupings | ||||
*/ | ||||
grouping resource-config { | grouping resource-config { | |||
description "Nodes that are reused by multiple levels | description "Nodes that are reused at multiple levels in the | |||
in the DHCPv6 server's addressing hierarchy."; | DHCPv6 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 "The ID field of relevant option-set | description "The ID field of relevant set of DHCPv6 options | |||
to be provisioned to clients of this network-range."; | (option-set) to be provisioned to clients of this | |||
network-range."; | ||||
} | } | |||
leaf valid-lifetime { | leaf valid-lifetime { | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
mandatory true; | description "Valid lifetime for the Identity Association | |||
description "Valid lifetime for the IA."; | (IA)."; | |||
} | } | |||
leaf renew-time { | leaf renew-time { | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
mandatory true; | ||||
description "Renew (T1) time."; | description "Renew (T1) time."; | |||
} | } | |||
leaf rebind-time { | leaf rebind-time { | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
mandatory true; | ||||
description "Rebind (T2) time."; | description "Rebind (T2) time."; | |||
} | } | |||
leaf preferred-lifetime { | leaf preferred-lifetime { | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
mandatory true; | description "Preferred lifetime for the Identity Association | |||
description "Preferred lifetime for the IA"; | (IA)."; | |||
} | } | |||
leaf rapid-commit { | leaf rapid-commit { | |||
type boolean; | type boolean; | |||
mandatory true; | ||||
description "A value of 1 specifies that the pool supports | description "A value of 1 specifies that the pool supports | |||
client-server exchanges involving two messages."; | client-server exchanges involving two messages."; | |||
} | } | |||
} | } | |||
grouping lease-information { | grouping lease-information { | |||
leaf total-address-count { | description "Binding information for each client that has | |||
type uint64; | been allocated an IPv6 address or prefix."; | |||
mandatory true; | leaf client-duid { | |||
description "count of total addresses in the pool"; | description "Client DUID."; | |||
type binary; | ||||
} | } | |||
leaf allocated-address-count { | leaf iaid { | |||
type uint64; | type uint32; | |||
mandatory true; | mandatory true; | |||
description "count of allocated addresses in the pool"; | description "Client's IAID"; | |||
} | } | |||
list binding-info { | leaf allocation-time { | |||
key client-duid; | description "Time and date that the lease was made."; | |||
description "Records binding information for each client that | type yang:date-and-time; | |||
has previously been allocated IPv6 addresses."; | } | |||
leaf client-duid { | leaf last-renew-rebind { | |||
description "Client DUID."; | description "Time of the last successful renew or | |||
type binary; | rebind."; | |||
} | type yang:date-and-time; | |||
list iaid { | } | |||
key iaid; | leaf preferred-lifetime { | |||
description "Clients IAID."; | description "The preferred lifetime expressed in | |||
leaf iaid { | seconds."; | |||
type uint32; | type dhcpv6-common:timer-seconds32; | |||
mandatory true; | } | |||
description "IAID"; | leaf valid-lifetime { | |||
} | description "The valid lifetime for the leased prefix | |||
leaf allocation-time { | expressed in seconds."; | |||
description "Time and date that the lease was made."; | type dhcpv6-common:timer-seconds32; | |||
type yang:date-and-time; | } | |||
leaf lease-t1 { | ||||
} | description "The time interval after which the client | |||
leaf last-renew-rebind { | should contact the server from which the addresses | |||
description "Time of the last successful renew or rebind."; | in the IA_NA were obtained to extend the lifetimes | |||
type yang:date-and-time; | of the addresses assigned to the IA_PD."; | |||
} | type dhcpv6-common:timer-seconds32; | |||
leaf preferred-lifetime { | } | |||
description "The preferred lifetime expressed in units | leaf lease-t2 { | |||
of seconds."; | description "The time interval after which the client | |||
type dhcpv6-common:timer-value-seconds32; | should contact any available server to extend | |||
} | the lifetimes of the addresses assigned to the | |||
leaf valid-lifetime { | IA_PD."; | |||
description "The valid lifetime for the leased prefix | type dhcpv6-common:timer-seconds32; | |||
expressed in units of seconds."; | ||||
type dhcpv6-common:timer-value-seconds32; | ||||
} | ||||
leaf lease-t1 { | ||||
description "The time interval after which the client | ||||
should contact the server from which the addresses | ||||
in the IA_NA were obtained to extend the lifetimes | ||||
of the addresses assigned to the IA_PD."; | ||||
type dhcpv6-common:timer-value-seconds32; | ||||
} | ||||
leaf lease-t2 { | ||||
description "The time interval after which the client | ||||
should contact any available server to extend | ||||
the lifetimes of the addresses assigned to the IA_PD."; | ||||
type dhcpv6-common:timer-value-seconds32; | ||||
} | ||||
} | ||||
} | } | |||
} | } | |||
grouping message-stats { | grouping message-stats { | |||
description "Counters for DHCPv6 messages."; | description "Counters for DHCPv6 messages."; | |||
leaf solicit-count { | leaf solicit-count { | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description "Number of Solicit (1) messages received."; | description "Number of Solicit (1) messages received."; | |||
} | } | |||
skipping to change at page 22, line 51 ¶ | skipping to change at page 22, line 39 ¶ | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description "Number of Information-request (11) messages | description "Number of Information-request (11) messages | |||
received."; | received."; | |||
} | } | |||
} | } | |||
/* | /* | |||
* Data Nodes | * Data Nodes | |||
*/ | */ | |||
container dhcpv6-server { | container dhcpv6-server { | |||
container server-duid { | container server-duid { | |||
description "DUID of the server."; | description "DUID of the server."; | |||
uses dhcpv6-common:duid; | uses dhcpv6-common:duid; | |||
} | } | |||
container vendor-config { | container vendor-config { | |||
description "This container provides a location for augmenting | description "This container provides a location for | |||
vendor or implementation specific configuration nodes."; | augmenting vendor or implementation specific | |||
configuration nodes."; | ||||
} | } | |||
container option-sets { | container option-sets { | |||
description "A server may allow different option sets | description "A server may allow different option sets | |||
to be configured for clients matching specific parameters | to be configured for clients matching specific parameters | |||
such as topological location or client type. The 'option-set' | such as topological location or client type. The | |||
list is a set of options and their contents that | 'option-set' list is a set of options and their | |||
will be returned to clients."; | contents that will be returned to clients."; | |||
list option-set { | list option-set { | |||
key option-set-id; | key option-set-id; | |||
description "YANG definitions for DHCPv6 options are | description "YANG definitions for DHCPv6 options are | |||
contained in separate YANG modules and augmented to this | contained in separate YANG modules and augmented to this | |||
container as required."; | container as required."; | |||
leaf option-set-id { | leaf option-set-id { | |||
type uint32; | type uint32; | |||
description "Option set identifier."; | description "Option set identifier."; | |||
} | } | |||
leaf description { | leaf description { | |||
skipping to change at page 23, line 39 ¶ | skipping to change at page 23, line 30 ¶ | |||
information relevant to the option set."; | information relevant to the option set."; | |||
} | } | |||
} | } | |||
} | } | |||
container class-selector { | container class-selector { | |||
description "DHCPv6 servers use a 'class-selector' function | description "DHCPv6 servers use a 'class-selector' function | |||
in order to identify and classify incoming client messages | in order 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 that they are | greatly between different implementations such that they | |||
not possible to include in this module. This container | are not possible to include in this module. This container | |||
provides a location for server implementors to augment their | provides a location for server implementors to augment | |||
own class-selector YANG."; | their own class-selector YANG."; | |||
} | } | |||
container network-ranges { | container network-ranges { | |||
description "This model supports a hierarchy to achieve dynamic | description "This model is based on an address and parameter | |||
configuration. That is to say we could configure the server | allocation hierarchy. The top level is 'global' - which | |||
at different levels through this model. The top level is | is defined as the container for all network-ranges. Under | |||
a global level which is defined as the container | this are the individual network-ranges."; | |||
'network-ranges'. The following levels are defined | ||||
as sub-containers under it. The 'network-ranges' contains the | ||||
parameters (e.g. option-sets) that would be allocated to | ||||
all the clients served by this server."; | ||||
uses resource-config; | uses resource-config; | |||
list network-range { | list network-range { | |||
key network-range-id; | key network-range-id; | |||
description "Under the 'network-ranges' container, | description "Network-ranges are identified by the | |||
a 'network-range' list is defined to configure the server | 'network-range-id' key."; | |||
at a network level which is also considered as the second | ||||
level. Different network are identified by the key | ||||
'network-range-id'. This is because a server may have | ||||
different configuration parameters (e.g. option sets) | ||||
for different networks."; | ||||
leaf network-range-id { | leaf network-range-id { | |||
type uint32; | type uint32; | |||
mandatory true; | mandatory true; | |||
description "Equivalent to subnet ID"; | description "Equivalent to subnet ID."; | |||
} | } | |||
leaf network-description { | leaf network-description { | |||
type string; | type string; | |||
mandatory true; | mandatory true; | |||
description "Description of the network range."; | description "Description for the network range."; | |||
} | } | |||
leaf network-prefix { | leaf network-prefix { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
mandatory true; | mandatory true; | |||
description "Network prefix"; | description "Network prefix."; | |||
} | } | |||
uses resource-config; | uses resource-config; | |||
container address-pools { | container address-pools { | |||
description | description "Configuration for the DHCPv6 server's | |||
"A container that describes the DHCPv6 server's | ||||
address pools."; | address pools."; | |||
list address-pool { | list address-pool { | |||
key pool-id; | key pool-id; | |||
description "A DHCPv6 server can be configured with | description "List of address pools for allocation to | |||
several address pools. This list defines such address | clients, distinguished by 'pool-id'."; | |||
pools which are distinguished by the key called | ||||
'pool-id'."; | ||||
leaf pool-id { | leaf pool-id { | |||
type uint32; | type uint32; | |||
mandatory true; | mandatory true; | |||
description "Pool ID"; | description "Unique identifier for the pool."; | |||
} | } | |||
leaf pool-prefix { | leaf pool-prefix { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
mandatory true; | mandatory true; | |||
description "Pool prefix"; | description "IPv6 prefix for the pool."; | |||
} | } | |||
leaf start-address { | leaf start-address { | |||
type inet:ipv6-address-no-zone; | type inet:ipv6-address-no-zone; | |||
mandatory true; | mandatory true; | |||
description "Start address"; | description "Start IPv6 address for the pool."; | |||
} | } | |||
leaf end-address { | leaf end-address { | |||
type inet:ipv6-address-no-zone; | type inet:ipv6-address-no-zone; | |||
mandatory true; | mandatory true; | |||
description "End address"; | description "End IPv6 address for the pool."; | |||
} | } | |||
leaf max-address-count { | leaf max-address-count { | |||
type dhcpv6-common:threshold; | type dhcpv6-common:threshold; | |||
mandatory true; | mandatory true; | |||
description "Maximum count of addresses that can | description "Maximum number of addresses that can | |||
be allocated in this pool. This value may be | be simultaneously allocated from this pool."; | |||
less than count of total addresses."; | ||||
} | } | |||
uses resource-config; | uses resource-config; | |||
container host-reservations { | container host-reservations { | |||
description "Configuration for host reservations | description "Configuration for host reservations from | |||
in the address pool."; | the address pool."; | |||
list host-reservation { | list host-reservation { | |||
key reserved-addr; | key reserved-addr; | |||
leaf client-duid { | leaf client-duid { | |||
type binary; | type binary; | |||
description "Client DUID."; | description "Client DUID for the reservation."; | |||
} | } | |||
leaf reserved-addr { | leaf reserved-addr { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description "reserved addr"; | description "Reserved IPv6 address."; | |||
} | ||||
list prefix-reservation { | ||||
key reserv-prefix-id; | ||||
description "reserved prefix reservation"; | ||||
leaf reserv-prefix-id { | ||||
type uint32; | ||||
mandatory true; | ||||
description "reserved prefix id"; | ||||
} | ||||
leaf reserv-prefix { | ||||
type inet:ipv6-prefix; | ||||
mandatory true; | ||||
description "reserved prefix"; | ||||
} | ||||
leaf reserv-prefix-len { | ||||
type uint8; | ||||
mandatory true; | ||||
description "reserved prefix length"; | ||||
} | ||||
} | } | |||
uses resource-config; | uses resource-config; | |||
} | } | |||
} | } | |||
list active-leases { | container active-leases { | |||
description "Holds state for active client leases."; | description "Holds state related to active client | |||
leases."; | ||||
config false; | config false; | |||
key leased-address; | leaf total-count { | |||
leaf leased-address { | type uint64; | |||
type inet:ipv6-address; | mandatory true; | |||
description "The total number of addresses in the | ||||
pool."; | ||||
} | ||||
leaf allocated-count { | ||||
type uint64; | ||||
mandatory true; | ||||
description "The number of addresses or prefixes in | ||||
the pool that are currently allocated."; | ||||
} | ||||
list active-lease { | ||||
key leased-address; | ||||
leaf leased-address { | ||||
type inet:ipv6-address; | ||||
} | ||||
uses lease-information; | ||||
} | } | |||
uses lease-information; | ||||
} | } | |||
} | } | |||
} | } | |||
container prefix-pools { | container prefix-pools { | |||
description "Defines IPv6 prefix pools to be delegated | description "Configuration for the DHCPv6 server's | |||
to clients."; | prefix pools."; | |||
if-feature prefix-delegation; | if-feature prefix-delegation; | |||
list prefix-pool { | list prefix-pool { | |||
key pool-id; | key pool-id; | |||
description "A server can be configured with multiple | description "List of prefix pools for allocation to | |||
prefix pools."; | clients, distinguished by 'pool-id'."; | |||
leaf pool-id { | leaf pool-id { | |||
type uint32; | type uint32; | |||
mandatory true; | mandatory true; | |||
description "Unique identifier for the pool."; | description "Unique identifier for the pool."; | |||
} | } | |||
leaf prefix { | leaf pool-prefix { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
mandatory true; | mandatory true; | |||
description "IPv6 prefix"; | description "IPv6 prefix for the pool."; | |||
} | } | |||
leaf prefix-length { | leaf client-prefix-length { | |||
type uint8; | type uint8; | |||
mandatory true; | mandatory true; | |||
description "Length of prefixes that will be delegated | description "Length of the prefixes that will be | |||
to clients."; | delegated to clients."; | |||
} | } | |||
leaf max-pd-space-utilization { | leaf max-pd-space-utilization { | |||
type dhcpv6-common:threshold; | type dhcpv6-common:threshold; | |||
mandatory true; | mandatory true; | |||
description "Maximum utilization of PD space | description "Maximum percentage utilization of the | |||
in this pool"; | prefix pool in this pool."; | |||
} | } | |||
uses resource-config; | uses resource-config; | |||
container host-reservations { | container host-reservations { | |||
description "Configuration for host reservations | description "Configuration for host reservations | |||
in the prefix pool."; | from the prefix pool."; | |||
list prefix-reservation { | list prefix-reservation { | |||
description "reserved prefix reservation"; | description "reserved prefix reservation"; | |||
key reserved-prefix; | key reserved-prefix; | |||
leaf client-duid { | leaf client-duid { | |||
type binary; | type binary; | |||
description "Client DUID."; | description "Client DUID for the reservation."; | |||
} | } | |||
leaf reserved-prefix { | leaf reserved-prefix { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
mandatory true; | description "Reserved IPv6 prefix"; | |||
description "reserved prefix"; | ||||
} | } | |||
leaf reserv-prefix-len { | leaf reserved-prefix-len { | |||
type uint8; | type uint8; | |||
mandatory true; | description "Reserved IPv6 prefix length."; | |||
description "reserved prefix length"; | ||||
} | } | |||
} | } | |||
uses resource-config; | uses resource-config; | |||
list active-leases { | } | |||
description "Holds state for active client leases."; | container active-leases { | |||
config false; | description "Holds state related to for active client | |||
prefix leases."; | ||||
config false; | ||||
leaf total-count { | ||||
type uint64; | ||||
mandatory true; | ||||
description "The total number of prefixes in | ||||
the pool."; | ||||
} | ||||
leaf allocated-count { | ||||
type uint64; | ||||
mandatory true; | ||||
description "The number of prefixes in the pool | ||||
that are currently allocated."; | ||||
} | ||||
list active-lease { | ||||
key leased-prefix; | key leased-prefix; | |||
leaf leased-prefix{ | leaf leased-prefix { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
} | } | |||
uses lease-information; | uses lease-information; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
uses message-stats; | ||||
} | } | |||
uses message-stats; | ||||
} | } | |||
} | } | |||
/* | /* | |||
* Notifications | * Notifications | |||
*/ | */ | |||
notification address-pool-running-out { | notification address-pool-utilization-threshold-exceeded { | |||
description "Notification sent when the address pool is going to | description "Notification sent when the address pool | |||
run out. A threshold for utilization ratio of the pool has | utilization exceeds the configured threshold."; | |||
been defined in the server feature so that it will notify the | leaf pool-id { | |||
administrator when the utilization ratio reaches the | type leafref { | |||
threshold, and such threshold is a settable parameter"; | path "/dhcpv6-server/network-ranges/network-range/ | |||
address-pools/address-pool/pool-id"; | ||||
} | ||||
} | ||||
leaf total-address-count { | leaf total-address-count { | |||
type uint64; | type uint64; | |||
mandatory true; | mandatory true; | |||
description "Count of total addresses in the pool"; | description "Count of the total addresses in the pool."; | |||
} | } | |||
leaf max-address-count { | leaf max-address-count { | |||
type uint64; | type uint64; | |||
mandatory true; | mandatory true; | |||
description "Maximum count of addresses that can be allocated | description "Maximum count of addresses that can be allocated | |||
in the pool. This value may be less than count of total | in the pool. This value may be less than count of total | |||
addresses"; | addresses."; | |||
} | } | |||
leaf allocated-address-count { | leaf allocated-address-count { | |||
type uint64; | type uint64; | |||
mandatory true; | mandatory true; | |||
description "Count of allocated addresses in the pool"; | description "Count of allocated addresses in the pool."; | |||
} | } | |||
} | ||||
notification prefix-pool-utilization-threshold-exceeded { | ||||
description "Notification sent when the prefix pool | ||||
utilization exceeds the configured threshold."; | ||||
if-feature prefix-delegation; | ||||
leaf pool-id { | leaf pool-id { | |||
type uint32; | type leafref { | |||
path "/dhcpv6-server/network-ranges/network-range/ | ||||
prefix-pools/prefix-pool/pool-id"; | ||||
} | ||||
mandatory true; | mandatory true; | |||
description "Pool ID"; | ||||
} | } | |||
} | ||||
notification pd-pool-running-out { | ||||
description "Notification sent when the address/prefix pool | ||||
is going to run out. A threshold for utilization ratio | ||||
of the pool has been defined in the server feature so that | ||||
it will notify the administrator when the utilization ratio | ||||
reaches the threshold, and such threshold is a settable | ||||
parameter"; | ||||
leaf max-pd-space-utilization { | leaf max-pd-space-utilization { | |||
type dhcpv6-common:threshold; | description "PD space utilization threshold."; | |||
type leafref { | ||||
path "/dhcpv6-server/network-ranges/network-range/ | ||||
prefix-pools/prefix-pool/max-pd-space-utilization"; | ||||
} | ||||
mandatory true; | mandatory true; | |||
description "Maximum PD space utilization"; | ||||
} | } | |||
leaf pd-space-utilization { | leaf pd-space-utilization { | |||
type dhcpv6-common:threshold; | ||||
mandatory true; | ||||
description "Current PD space utilization"; | description "Current PD space utilization"; | |||
} | type uint64; | |||
leaf pool-id { | ||||
type uint32; | ||||
mandatory true; | ||||
description "Pool ID"; | ||||
} | } | |||
} | } | |||
notification invalid-client-detected { | notification invalid-client-detected { | |||
description "Notification sent when the server has found a client | description "Notification sent when the server detects an | |||
which can be regarded as a potential attacker. Some description | invalid client."; | |||
could also be included."; | ||||
leaf duid { | leaf duid { | |||
description "Client's DUID"; | description "Client DUID."; | |||
type binary; | type binary; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description "Description of the event"; | description "Description of the event (e.g. and error code or | |||
log message)."; | ||||
} | } | |||
} | } | |||
notification decline-received { | notification decline-received { | |||
description "Notification sent when the server has received | description "Notification sent when the server has received a | |||
DECLINE message from a client."; | Decline (9) message from a client."; | |||
leaf duid { | leaf duid { | |||
description "Client's DUID"; | description "Client DUID."; | |||
type binary; | type binary; | |||
} | } | |||
leaf-list addresses { | list declined-resources { | |||
type inet:ipv6-address; | description "List of declined addresses and/or prefixes."; | |||
description "List of suspicious addresses"; | choice resource-type { | |||
case declined-address { | ||||
leaf address { | ||||
type inet:ipv6-address; | ||||
} | ||||
} | ||||
case declined-prefix { | ||||
leaf prefix { | ||||
type inet:ipv6-prefix; | ||||
} | ||||
} | ||||
} | ||||
} | } | |||
} | } | |||
notification non-success-code-sent { | notification non-success-code-sent { | |||
description "Notification sent when the server responded | description "Notification sent when the server responded | |||
to a client with non-success status code."; | to a client with non-success status code."; | |||
leaf status-code { | leaf status-code { | |||
type uint16; | type uint16; | |||
mandatory true; | mandatory true; | |||
description "Status code returned to a client"; | description "Status code returned to the client."; | |||
} | } | |||
leaf duid { | leaf duid { | |||
description "Client's DUID"; | description "Client DUID."; | |||
type binary; | type binary; | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | ||||
3.2. DHCPv6 Relay YANG Model | 3.2. DHCPv6 Relay YANG Module | |||
This module imports typedefs from [RFC6991], [RFC8343]. | This module imports typedefs from [RFC6991], [RFC8343]. | |||
<CODE BEGINS> file ietf-dhcpv6-relay.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 "dhcpv6-relay"; | prefix "dhcpv6-relay"; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
} | } | |||
import ietf-dhcpv6-common { | import ietf-dhcpv6-common { | |||
prefix dhcpv6-common; | prefix dhcpv6-common; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix if; | prefix if; | |||
} | } | |||
organization | organization | |||
"IETF DHC (Dynamic Host Configuration) Working group"; | "IETF DHC (Dynamic Host Configuration) Working group"; | |||
contact | contact | |||
"cuiyong@tsinghua.edu.cn | "cuiyong@tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
skipping to change at page 30, line 35 ¶ | skipping to change at page 30, line 40 ¶ | |||
contact | contact | |||
"cuiyong@tsinghua.edu.cn | "cuiyong@tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
hezihao9512@gmail.com | hezihao9512@gmail.com | |||
godfryd@isc.org"; | godfryd@isc.org"; | |||
description | description | |||
"This model defines a YANG data model that can be | "This YANG module defines components necessary for the | |||
used to configure and manage a DHCPv6 relay. | configuration and management of DHCPv6 relays. | |||
Copyright (c) 2018 IETF Trust and the persons identified as | Copyright (c) 2018 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | 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 | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
skipping to change at page 30, line 47 ¶ | skipping to change at page 31, line 4 ¶ | |||
Copyright (c) 2018 IETF Trust and the persons identified as | Copyright (c) 2018 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | 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 | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC 8513; see | This version of this YANG module is part of RFC 8513; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2020-05-26 { | ||||
description "Version update for draft -11 publication and | ||||
to align revisions across the different modules."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; | ||||
} | ||||
revision 2019-09-20 { | revision 2019-09-20 { | |||
description ""; | description ""; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; | |||
} | } | |||
revision 2018-03-04 { | revision 2018-03-04 { | |||
description "Resolved most issues on the DHC official | description "Resolved most issues on the DHC official | |||
github"; | github"; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
skipping to change at page 31, line 28 ¶ | skipping to change at page 31, line 39 ¶ | |||
} | } | |||
revision 2017-11-24 { | revision 2017-11-24 { | |||
description | description | |||
"First version of the separated relay specific | "First version of the separated relay specific | |||
YANG model."; | YANG model."; | |||
reference | reference | |||
"I-D: draft-ietf-dhc-dhcpv6-yang"; | "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
/* | ||||
* Indentities | ||||
*/ | ||||
identity relay { | identity relay { | |||
base "dhcpv6-common:dhcpv6-node"; | base "dhcpv6-common:dhcpv6-node"; | |||
description "DHCPv6 relay agent."; | description "DHCPv6 relay agent identity."; | |||
} | } | |||
leaf dhcpv6-node-type { | leaf dhcpv6-node-type { | |||
description "Type for a DHCPv6 relay"; | description "Type for a DHCPv6 relay."; | |||
type identityref { | type identityref { | |||
base "dhcpv6-relay:relay"; | base "dhcpv6-relay:relay"; | |||
} | } | |||
} | } | |||
/* | ||||
* Features | ||||
*/ | ||||
feature prefix-delegation { | feature prefix-delegation { | |||
description "Enable if the relay functions as a delegating router | description "Enable if the relay functions as a delegating router | |||
for prefix delegation."; | for DHCPv6 prefix delegation."; | |||
} | } | |||
/* | ||||
* Groupings | ||||
*/ | ||||
grouping pd-lease-state { | grouping pd-lease-state { | |||
description "State data for the relay"; | description "State data for the relay."; | |||
list pd-leases { | list pd-leases { | |||
config false; | config false; | |||
key ia-pd-prefix; | key ia-pd-prefix; | |||
description "Information about an active IA_PD prefix | description "Information about an active IA_PD prefix | |||
delegation."; | delegation."; | |||
leaf ia-pd-prefix { | ||||
leaf ia-pd-prefix { | ||||
description "Prefix that is delegated."; | description "Prefix that is delegated."; | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
} | } | |||
leaf last-renew { | leaf last-renew { | |||
description "Time of the last successful refresh or renew | description "Time of the last successful refresh or renew | |||
of the delegated prefix."; | of the delegated prefix."; | |||
type yang:date-and-time; | type yang:date-and-time; | |||
} | } | |||
leaf client-peer-address { | leaf client-peer-address { | |||
description "Peer-address of the client."; | description "Peer-address of the client."; | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
} | } | |||
leaf client-duid { | leaf client-duid { | |||
description "DUID of the client."; | description "DUID of the leasing client."; | |||
type binary; | type binary; | |||
} | } | |||
leaf server-duid { | leaf server-duid { | |||
description "DUID of the delegating server."; | description "DUID of the delegating server."; | |||
type binary; | type binary; | |||
} | } | |||
} | } | |||
} | } | |||
grouping message-statistics { | grouping message-statistics { | |||
description "Contains counters for DHCPv6 messages."; | description "Contains counters for the different DHCPv6 | |||
message types."; | ||||
leaf solicit-received-count { | leaf solicit-received-count { | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description "Number of Solicit (1) messages received."; | description "Number of Solicit (1) messages received."; | |||
} | } | |||
leaf advertise-sent-count { | leaf advertise-sent-count { | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description "Number of Advertise (2) messages sent."; | description "Number of Advertise (2) messages sent."; | |||
} | } | |||
skipping to change at page 33, line 42 ¶ | skipping to change at page 34, line 18 ¶ | |||
leaf information-request-received-count { | leaf information-request-received-count { | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description "Number of Information-request (11) messages | description "Number of Information-request (11) messages | |||
received."; | received."; | |||
} | } | |||
leaf unknown-message-received-count { | leaf unknown-message-received-count { | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description | description | |||
"Number of messages of unknown type that have been received." | "Number of messages of unknown type that have been | |||
; | received."; | |||
} | } | |||
leaf unknown-message-sent-count { | leaf unknown-message-sent-count { | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description | description | |||
"Number of messages of unknown type that have been sent."; | "Number of messages of unknown type that have been sent."; | |||
} | } | |||
leaf discarded-message-count { | leaf discarded-message-count { | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description | description | |||
"Number of messages that have been discarded for any reason." | "Number of messages that have been discarded for any | |||
; | reason."; | |||
} | } | |||
} | } | |||
grouping global-statistics { | grouping global-statistics { | |||
leaf relay-forward-sent-count { | leaf relay-forward-sent-count { | |||
config "false"; | config "false"; | |||
type uint32; | type uint32; | |||
description "Number of Relay-forward (12) messages sent."; | description "Number of Relay-forward (12) messages sent."; | |||
} | } | |||
leaf relay-forward-received-count { | leaf relay-forward-received-count { | |||
skipping to change at page 35, line 7 ¶ | skipping to change at page 35, line 30 ¶ | |||
for any reason."; | for any reason."; | |||
} | } | |||
} | } | |||
/* | /* | |||
* Data Nodes | * Data Nodes | |||
*/ | */ | |||
container dhcpv6-relay { | container dhcpv6-relay { | |||
description | description | |||
"This container contains the configuration data of the relay."; | "This container contains the configuration data nodes for | |||
the relay."; | ||||
list relay-if { | list relay-if { | |||
key if-name; | key if-name; | |||
leaf if-name { | leaf if-name { | |||
type if:interface-ref; | type if:interface-ref; | |||
} | } | |||
leaf-list destination-addresses { | leaf-list destination-addresses { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description "Each DHCPv6 relay agent may be configured with | description "Each DHCPv6 relay agent may be configured with | |||
a list of destination addresses for relayed messages. | a list of destination addresses for relayed messages. | |||
The list may include unicast addresses, multicast addresses | The list may include unicast addresses, multicast addresses | |||
or other addresses."; | or other valid addresses."; | |||
} | } | |||
leaf link-address { | leaf link-address { | |||
description "An address that may be used by the server | description "An address that may be used by the server | |||
to identify the link on which the client is located."; | to identify the link on which the client is located."; | |||
type binary { | type binary { | |||
length "0..16"; | length "0..16"; | |||
} | } | |||
} | } | |||
container relay-options { | container relay-options { | |||
description "Definitions for DHCPv6 options that can be sent | description "Definitions for DHCPv6 options that can be sent | |||
skipping to change at page 35, line 50 ¶ | skipping to change at page 36, line 26 ¶ | |||
} | } | |||
uses global-statistics; | uses global-statistics; | |||
} | } | |||
/* | /* | |||
* Notifications | * Notifications | |||
*/ | */ | |||
notification relay-event { | notification relay-event { | |||
description | description | |||
"DHCPv6 relay event"; | "DHCPv6 relay event notifications."; | |||
container topology-change { | container topology-change { | |||
description "Raised if the entry for and interface with DHCPv6 | description "Raised if the entry for and interface with DHCPv6 | |||
related configuration or state is removed | related configuration or state is removed from | |||
from if:interface-refs."; | if:interface-refs."; | |||
leaf relay-if-name { | leaf relay-if-name { | |||
description "Name of the interface that has been removed."; | description "Name of the interface that has been removed."; | |||
type leafref { | type leafref { | |||
path "/dhcpv6-relay/relay-if/if-name"; | path "/dhcpv6-relay/relay-if/if-name"; | |||
} | } | |||
} | } | |||
leaf last-ipv6-addr { | leaf last-ipv6-addr { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description "Last IPv6 address configured on the interface."; | description "Last IPv6 address configured on the interface."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | ||||
3.3. DHCPv6 Client YANG Model | 3.3. DHCPv6 Client YANG Module | |||
This module imports typedefs from [RFC6991], [RFC8343]. | This module imports typedefs from [RFC6991], [RFC8343]. | |||
<CODE BEGINS> file ietf-dhcpv6-client.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 "dhcpv6-client"; | prefix "dhcpv6-client"; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
} | } | |||
import ietf-dhcpv6-common { | import ietf-dhcpv6-common { | |||
prefix dhcpv6-common; | prefix dhcpv6-common; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix if; | prefix if; | |||
} | } | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"cuiyong@tsinghua.edu.cn | "cuiyong@tsinghua.edu.cn | |||
wangh13@mails.tsinghua.edu.cn | wangh13@mails.tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
skipping to change at page 37, line 5 ¶ | skipping to change at page 37, line 38 ¶ | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"cuiyong@tsinghua.edu.cn | "cuiyong@tsinghua.edu.cn | |||
wangh13@mails.tsinghua.edu.cn | wangh13@mails.tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
hezihao9512@gmail.com | hezihao9512@gmail.com | |||
godfryd@isc.org"; | godfryd@isc.org"; | |||
description "This is a YANG data module for the configuration | description | |||
and management of DHCPv6 clients. | "This YANG module defines components necessary for the | |||
configuration and management of DHCPv6 clients. | ||||
Copyright (c) 2018 IETF Trust and the persons identified as | Copyright (c) 2018 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | 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 | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC 8513; see | This version of this YANG module is part of RFC 8513; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2020-05-26 { | ||||
description "Version update for draft -11 publication and | ||||
to align revisions across the different modules."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; | ||||
} | ||||
revision 2019-09-20 { | revision 2019-09-20 { | |||
description ""; | description ""; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang-10"; | |||
} | } | |||
revision 2018-09-04 { | revision 2018-09-04 { | |||
description ""; | description ""; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
skipping to change at page 37, line 47 ¶ | skipping to change at page 38, line 38 ¶ | |||
description "Resolve most issues on Ian's Github."; | description "Resolve most issues on Ian's Github."; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
revision 2017-11-24 { | revision 2017-11-24 { | |||
description "First version of the separated client specific | description "First version of the separated client specific | |||
YANG model."; | YANG model."; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
/* | ||||
* Identities | ||||
*/ | ||||
identity client { | identity client { | |||
base "dhcpv6-common:dhcpv6-node"; | base "dhcpv6-common:dhcpv6-node"; | |||
description "DHCPv6 client."; | description "DHCPv6 client identity."; | |||
} | } | |||
leaf dhcpv6-node-type { | leaf dhcpv6-node-type { | |||
description "Type for a DHCPv6 client"; | description "Type for a DHCPv6 client."; | |||
type identityref { | type identityref { | |||
base "dhcpv6-client:client"; | base "dhcpv6-client:client"; | |||
} | } | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping message-statistics { | grouping message-statistics { | |||
description "Counters for DHCPv6 messages."; | description "Counters for DHCPv6 messages."; | |||
leaf solicit-count { | leaf solicit-count { | |||
config "false"; | config "false"; | |||
skipping to change at page 40, line 7 ¶ | skipping to change at page 40, line 51 ¶ | |||
sent by the client are augmented to this location from | sent by the client are augmented to this location from | |||
other YANG modules as required."; | other YANG modules as required."; | |||
} | } | |||
list ia-na { | list ia-na { | |||
key iaid; | key iaid; | |||
description "Configuration relevant for an IA_NA."; | description "Configuration relevant for an IA_NA."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol | reference "RFC8415: Dynamic Host Configuration Protocol | |||
for IPv6 (DHCPv6)."; | for IPv6 (DHCPv6)."; | |||
leaf iaid { | leaf iaid { | |||
type uint32; | type uint32; | |||
description "The unique identifier for this IA_NA."; | description "A unique identifier for this IA_NA."; | |||
} | } | |||
container ia-na-options { | container ia-na-options { | |||
description "An augmenation point for additional options | description "An augmentation point for additional options | |||
that the client will send in the IA_NA-options field | that the client will send in the IA_NA-options field | |||
of OPTION_IA_NA options."; | of OPTION_IA_NA."; | |||
} | } | |||
container lease-state { | container lease-state { | |||
config "false"; | config "false"; | |||
description "Information about the active IA_NA lease."; | description "Information about the active IA_NA lease."; | |||
leaf ia-na-address { | leaf ia-na-address { | |||
description "Address that is currently leased."; | description "Address that is currently leased."; | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
} | } | |||
leaf preferred-lifetime { | leaf preferred-lifetime { | |||
description "The preferred lifetime for the leased | description "The preferred lifetime for the leased | |||
address expressed in units of seconds."; | address expressed in units of seconds."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf valid-lifetime { | leaf valid-lifetime { | |||
description "The valid lifetime for the leased address | description "The valid lifetime for the leased address | |||
expressed in units of seconds."; | expressed in units of seconds."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf lease-t1 { | leaf lease-t1 { | |||
description "The time interval after which the client | description "The time interval after which the client | |||
should contact the server from which the addresses | should contact the server from which the addresses | |||
in the IA_NA were obtained to extend the lifetimes | in the IA_NA were obtained to extend the lifetimes | |||
of the addresses assigned to the IA_NA."; | of the addresses assigned to the IA_NA."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf lease-t2 { | leaf lease-t2 { | |||
description "The time interval after which the client | description "The time interval after which the client | |||
should contact any available server to extend | should contact any available server to extend | |||
the lifetimes of the addresses assigned to the IA_NA."; | the lifetimes of the addresses assigned to the IA_NA."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf allocation-time { | leaf allocation-time { | |||
description "Time and date that the address was first | description "Time and date that the address was first | |||
leased."; | leased."; | |||
type yang:date-and-time; | type yang:date-and-time; | |||
} | } | |||
leaf last-renew-rebind { | leaf last-renew-rebind { | |||
description "Time of the last successful renew or rebind | description "Time of the last successful renew or rebind | |||
of the leased address."; | of the leased address."; | |||
type yang:date-and-time; | type yang:date-and-time; | |||
} | } | |||
leaf server-duid { | leaf server-duid { | |||
description "DUID of the leasing server."; | description "DUID of the leasing server."; | |||
type binary; | type binary; | |||
} | } | |||
} | } | |||
} | } | |||
list ia-ta { | list ia-ta { | |||
key iaid; | key iaid; | |||
skipping to change at page 41, line 25 ¶ | skipping to change at page 42, line 20 ¶ | |||
description "Configuration relevant for an IA_TA."; | description "Configuration relevant for an IA_TA."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
IPv6 (DHCPv6)."; | IPv6 (DHCPv6)."; | |||
leaf iaid { | leaf iaid { | |||
type uint32; | type uint32; | |||
description "The unique identifier for this IA_TA."; | description "The unique identifier for this IA_TA."; | |||
} | } | |||
container ia-ta-options { | container ia-ta-options { | |||
description "An augmenation point for additional options | description "An augmenation point for additional options | |||
that the client will send in the IA_TA-options field | that the client will send in the IA_TA-options field | |||
of OPTION_IA_TA options."; | of OPTION_IA_TA."; | |||
} | } | |||
container lease-state { | container lease-state { | |||
config "false"; | config "false"; | |||
description "Information about an active IA_TA lease."; | description "Information about an active IA_TA lease."; | |||
leaf ia-ta-address { | leaf ia-ta-address { | |||
description "Address that is currently leased."; | description "Address that is currently leased."; | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
} | } | |||
leaf preferred-lifetime { | leaf preferred-lifetime { | |||
description "The preferred lifetime for the leased | description "The preferred lifetime for the leased | |||
address expressed in units of seconds."; | address expressed in units of seconds."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf valid-lifetime { | leaf valid-lifetime { | |||
description "The valid lifetime for the leased address | description "The valid lifetime for the leased address | |||
expressed in units of seconds."; | expressed in units of seconds."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf allocation-time { | leaf allocation-time { | |||
description "Time and date that the address was first | description "Time and date that the address was first | |||
leased."; | leased."; | |||
type yang:date-and-time; | type yang:date-and-time; | |||
} | } | |||
leaf last-renew-rebind { | leaf last-renew-rebind { | |||
description "Time of the last successful renew or rebind | description "Time of the last successful renew or rebind | |||
of the address."; | of the address."; | |||
type yang:date-and-time; | type yang:date-and-time; | |||
skipping to change at page 42, line 24 ¶ | skipping to change at page 43, line 20 ¶ | |||
reference "RFC8415: Dynamic Host Configuration Protocol for | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
IPv6 (DHCPv6)."; | IPv6 (DHCPv6)."; | |||
description "Configuration relevant for an IA_PD."; | description "Configuration relevant for an IA_PD."; | |||
leaf iaid { | leaf iaid { | |||
type uint32; | type uint32; | |||
description "The unique identifier for this IA_PD."; | description "The unique identifier for this IA_PD."; | |||
} | } | |||
container ia-pd-options { | container ia-pd-options { | |||
description "An augmenation point for additional options | description "An augmenation point for additional options | |||
that the client will send in the IA_PD-options field | that the client will send in the IA_PD-options field | |||
of OPTION_IA_TA options."; | of OPTION_IA_TA."; | |||
} | } | |||
container lease-state { | container lease-state { | |||
config "false"; | config "false"; | |||
description "Information about an active IA_PD delegated | description "Information about an active IA_PD delegated | |||
prefix."; | prefix."; | |||
leaf ia-pd-prefix { | leaf ia-pd-prefix { | |||
description "Delegated prefix that is currently leased."; | description "Delegated prefix that is currently leased."; | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
} | } | |||
leaf preferred-lifetime { | leaf preferred-lifetime { | |||
description "The preferred lifetime for the leased prefix | description "The preferred lifetime for the leased prefix | |||
expressed in units of seconds."; | expressed in units of seconds."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf valid-lifetime { | leaf valid-lifetime { | |||
description "The valid lifetime for the leased prefix | description "The valid lifetime for the leased prefix | |||
expressed in units of seconds."; | expressed in units of seconds."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf lease-t1 { | leaf lease-t1 { | |||
description "The time interval after which the client | description "The time interval after which the client | |||
should contact the server from which the addresses | should contact the server from which the addresses | |||
in the IA_NA were obtained to extend the lifetimes | in the IA_NA were obtained to extend the lifetimes | |||
of the addresses assigned to the IA_PD."; | of the addresses assigned to the IA_PD."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf lease-t2 { | leaf lease-t2 { | |||
description "The time interval after which the client | description "The time interval after which the client | |||
should contact any available server to extend | should contact any available server to extend | |||
the lifetimes of the addresses assigned to the IA_PD."; | the lifetimes of the addresses assigned to the IA_PD."; | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
} | } | |||
leaf allocation-time { | leaf allocation-time { | |||
description "Time and date that the prefix was first | description "Time and date that the prefix was first | |||
leased."; | leased."; | |||
type yang:date-and-time; | type yang:date-and-time; | |||
} | } | |||
leaf last-renew-rebind { | leaf last-renew-rebind { | |||
description "Time of the last successful renew or rebind | description "Time of the last successful renew or rebind | |||
of the delegated prefix."; | of the delegated prefix."; | |||
type yang:date-and-time; | type yang:date-and-time; | |||
skipping to change at page 43, line 49 ¶ | skipping to change at page 44, line 45 ¶ | |||
description "IAID"; | description "IAID"; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description "Description of the event."; | description "Description of the event."; | |||
} | } | |||
} | } | |||
notification retransmission-failed { | notification retransmission-failed { | |||
description "Notification sent when the retransmission mechanism | description "Notification sent when the retransmission mechanism | |||
defined in [RFC8415] is unsucessful."; | defined in [RFC8415] is unsuccessful."; | |||
leaf failure-type { | leaf failure-type { | |||
type enumeration { | type enumeration { | |||
enum "MRC-exceeded" { | enum "MRC-exceeded" { | |||
description "Maximum retransmission count exceeded."; | description "Maximum retransmission count exceeded."; | |||
} | } | |||
enum "MRD-exceeded" { | enum "MRD-exceeded" { | |||
description "Maximum retransmission duration exceeded."; | description "Maximum retransmission duration exceeded."; | |||
} | } | |||
} | } | |||
mandatory true; | mandatory true; | |||
description "Description of the failure."; | description "Description of the failure."; | |||
} | } | |||
} | } | |||
notification unsuccessful-status-code { | notification unsuccessful-status-code { | |||
description "Notification sent when the client receives a message | description "Notification sent when the client receives a message | |||
that includes an unsuccessful Status Code option."; | that includes an unsuccessful Status Code option."; | |||
leaf status-code { | leaf status-code { | |||
type uint16; | type uint16; | |||
mandatory true; | mandatory true; | |||
description "Unsuccessful status code recevied by a client."; | description "Unsuccessful status code received by a client."; | |||
} | } | |||
leaf server-duid { | leaf server-duid { | |||
description "DUID of the server sending the unsuccessful | description "DUID of the server sending the unsuccessful | |||
error code."; | error code."; | |||
mandatory true; | mandatory true; | |||
type binary; | type binary; | |||
} | } | |||
} | } | |||
notification server-duid-changed { | notification server-duid-changed { | |||
skipping to change at page 45, line 18 ¶ | skipping to change at page 46, line 15 ¶ | |||
} | } | |||
} | } | |||
leaf lease-ia-pd { | leaf lease-ia-pd { | |||
description "Reference to the IA_PD lease."; | description "Reference to the IA_PD lease."; | |||
type leafref { | type leafref { | |||
path "/dhcpv6-client/client-if/ia-pd/iaid"; | path "/dhcpv6-client/client-if/ia-pd/iaid"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | ||||
3.4. DHCPv6 RFC8415 Options YANG Model | 3.4. DHCPv6 RFC8415 Options YANG Module | |||
This module imports typedefs from [RFC6991]. | This module imports typedefs from [RFC6991]. | |||
<CODE BEGINS> file ietf-dhcpv6-options-rfc8415.yang | ||||
module ietf-dhcpv6-options-rfc8415 { | module ietf-dhcpv6-options-rfc8415 { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-8415"; | namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-options-8415"; | |||
prefix "rfc8415"; | prefix "rfc8415"; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
} | } | |||
import ietf-dhcpv6-common { | import ietf-dhcpv6-common { | |||
skipping to change at page 46, line 13 ¶ | skipping to change at page 47, line 12 ¶ | |||
wangh13@mails.tsinghua.edu.cn | wangh13@mails.tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
hezihao9512@gmail.com"; | hezihao9512@gmail.com"; | |||
description "This YANG module contains DHCPv6 options defined | description "This YANG module contains DHCPv6 options defined | |||
in RFC8415 that can be used by DHCPv6 clients, relays | in RFC8415 that can be used by DHCPv6 clients, relays | |||
and servers."; | and servers."; | |||
revision 2020-05-26 { | ||||
description "Version update for draft -11 publication and | ||||
to align revisions across the different modules."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; | ||||
} | ||||
revision 2019-06-07 { | revision 2019-06-07 { | |||
description "Major reworking to only contain RFC8415 options. | description "Major reworking to only contain RFC8415 options. | |||
if-feature for each option removed. Removed groupings | if-feature for each option removed. Removed groupings | |||
of features by device or combination of devices. Added "; | of features by device or combination of devices. Added "; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
revision 2018-09-04 { | revision 2018-09-04 { | |||
description ""; | description ""; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
skipping to change at page 46, line 43 ¶ | skipping to change at page 47, line 48 ¶ | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
revision 2017-11-24 { | revision 2017-11-24 { | |||
description "First version of the separated DHCPv6 options | description "First version of the separated DHCPv6 options | |||
YANG model."; | YANG model."; | |||
reference "I-D:draft-ietf-dhc-dhcpv6-yang"; | reference "I-D:draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
/* | /* | |||
* Features | ||||
/* | ||||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping option-iaaddr-option { | grouping option-iaaddr-option { | |||
description "OPTION_IAADDR (5) IA Address Option."; | description "OPTION_IAADDR (5) IA Address Option."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 | reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 | |||
(DHCPv6)"; | (DHCPv6)"; | |||
leaf IPv6-address { | leaf IPv6-address { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description "An IPv6 address. A client MUST NOT form | description "An IPv6 address. A client MUST NOT form an | |||
an iplicit prefix with a length other than 128 | implicit prefix with a length other than 128 for this | |||
for this address."; | address."; | |||
} | } | |||
leaf preferred-lifetime { | leaf preferred-lifetime { | |||
type uint32; | type uint32; | |||
description "The preferred lifetime for the address | description "The preferred lifetime for the address in the | |||
in the option, expressed in units of seconds."; | option, expressed in units of seconds."; | |||
} | } | |||
leaf valid-lifetime { | leaf valid-lifetime { | |||
type uint32; | type uint32; | |||
description "The preferred lifetime for the address | description "The preferred lifetime for the address | |||
in the option, expressed in units of seconds."; | in the option, expressed in units of seconds."; | |||
} | } | |||
container iaaddr-options { | container iaaddr-options { | |||
description "Definitions for DHCPv6 options that can be be sent | description "Definitions for DHCPv6 options that can be sent | |||
by the client are augmented to this location from other YANG | by the client are augmented to this location from other YANG | |||
modules as required."; | modules as required."; | |||
} | } | |||
} | } | |||
grouping option-request-option-group { | grouping option-request-option-group { | |||
container option-request-option { | container option-request-option { | |||
description "OPTION_ORO (6) Option Request Option. A client | description "OPTION_ORO (6) Option Request Option. A client | |||
MUST include an Option Request option in a Solicit, Request, | MUST include an Option Request option in a Solicit, Request, | |||
Renew, Rebind, or Information-request message to inform | Renew, Rebind, or Information-request message to inform | |||
the server about options the client wants the server to send | the server about options the client wants the server to send | |||
to the client."; | to the client."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
IPv6 (DHCPv6)"; | IPv6 (DHCPv6)"; | |||
leaf-list oro-option { | leaf-list oro-option { | |||
description "List of options that the client is requesting, | description "List of options that the client is requesting, | |||
identified by option code"; | identified by option code"; | |||
type uint16 { | type uint16; | |||
range "17 | 21..24 | 27..36 | 39..42 | 49..52 | 54..60 | | ||||
62..65 | 69..78"; | ||||
} | ||||
} | } | |||
} | } | |||
} | } | |||
grouping preference-option-group { | grouping preference-option-group { | |||
container preference-option { | container preference-option { | |||
description "OPTION_PREFERENCE (7) Preference Option"; | description "OPTION_PREFERENCE (7) Preference Option"; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
IPv6 (DHCPv6)"; | IPv6 (DHCPv6)"; | |||
leaf pref-value { | leaf pref-value { | |||
type uint8; | type uint8; | |||
description "The preference value for the server | description "The preference value for the server in this | |||
in this message. A 1-octet unsigned integer."; | message. A 1-octet unsigned integer."; | |||
} | } | |||
} | } | |||
} | } | |||
grouping auth-option-group { | grouping auth-option-group { | |||
container auth-option { | container auth-option { | |||
description "OPTION_AUTH (11) Authentication Option"; | description "OPTION_AUTH (11) Authentication Option"; | |||
reference "RFC8415: Dynamic Host Configuration Protocol | reference "RFC8415: Dynamic Host Configuration Protocol | |||
for IPv6 (DHCPv6)"; | for IPv6 (DHCPv6)"; | |||
leaf protocol { | leaf protocol { | |||
type uint8; | type uint8; | |||
description "The authentication protocol used | description "The authentication protocol used in this | |||
in this Authentication option."; | Authentication option."; | |||
} | } | |||
leaf algorithm { | leaf algorithm { | |||
type uint8; | type uint8; | |||
description "The algorithm used in the authentication | description "The algorithm used in the authentication | |||
protocol."; | protocol."; | |||
} | } | |||
leaf rdm { | leaf rdm { | |||
type uint8; | type uint8; | |||
description "The replay detection method used | description "The replay detection method used | |||
in this Authentication option."; | in this Authentication option."; | |||
skipping to change at page 49, line 24 ¶ | skipping to change at page 50, line 24 ¶ | |||
for IPv6 (DHCPv6)"; | for IPv6 (DHCPv6)"; | |||
leaf status-code { | leaf status-code { | |||
type uint16; | type uint16; | |||
description "The numeric code for the status encoded | description "The numeric code for the status encoded | |||
in this option. See the Status Codes registry at | in this option. See the Status Codes registry at | |||
<https://www.iana.org/assignments/dhcpv6-parameters> | <https://www.iana.org/assignments/dhcpv6-parameters> | |||
for the current list of status codes."; | for the current list of status codes."; | |||
} | } | |||
leaf status-message { | leaf status-message { | |||
type string; | type string; | |||
description "A UTF-8 encoded text string suitable | description "A UTF-8 encoded text string suitable for | |||
for display to an end user. MUST NOT be null-terminated."; | display to an end user. MUST NOT be null-terminated."; | |||
} | } | |||
} | } | |||
} | } | |||
grouping rapid-commit-option-group { | grouping rapid-commit-option-group { | |||
container rapid-commit-option { | container rapid-commit-option { | |||
presence "Enable sending of this option"; | presence "Enable sending of this option"; | |||
description "OPTION_RAPID_COMMIT (14) Rapid Commit Option. | description "OPTION_RAPID_COMMIT (14) Rapid Commit Option. | |||
The presence node is used to enable the option."; | The presence node is used to enable the option."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
skipping to change at page 50, line 32 ¶ | skipping to change at page 51, line 32 ¶ | |||
description "The vendor class option allows for multiple | description "The vendor class option allows for multiple | |||
instances in a single message. Each list entry defines | instances in a single message. Each list entry defines | |||
the contents of an instance of the option."; | the contents of an instance of the option."; | |||
leaf enterprise-number { | leaf enterprise-number { | |||
type uint32; | type uint32; | |||
description "The vendor's registered Enterprise Number | description "The vendor's registered Enterprise Number | |||
as maintained by IANA."; | as maintained by IANA."; | |||
} | } | |||
list vendor-class { | list vendor-class { | |||
key vendor-class-datum-id; | key vendor-class-datum-id; | |||
description "The vendor classes of which the client | description "The vendor classes of which the client is | |||
is a member."; | a member."; | |||
leaf vendor-class-datum-id { | leaf vendor-class-datum-id { | |||
type uint8; | type uint8; | |||
description "Vendor class datum ID"; | description "Vendor class datum ID"; | |||
} | } | |||
leaf vendor-class-datum { | leaf vendor-class-datum { | |||
type string; | type string; | |||
description "Opaque field representing a vendor class | description "Opaque field representing a vendor class | |||
of which the client is a member."; | of which the client is a member."; | |||
} | } | |||
} | } | |||
skipping to change at page 51, line 52 ¶ | skipping to change at page 52, line 52 ¶ | |||
by the relay agent to identify one of the relay agent's | by the relay agent to identify one of the relay agent's | |||
interfaces."; | interfaces."; | |||
} | } | |||
} | } | |||
} | } | |||
grouping reconfigure-message-option-group { | grouping reconfigure-message-option-group { | |||
container reconfigure-message-option { | container reconfigure-message-option { | |||
description "OPTION_RECONF_MSG (19) Reconfigure Message | description "OPTION_RECONF_MSG (19) Reconfigure Message | |||
Option."; | Option."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
for IPv6 (DHCPv6)"; | IPv6 (DHCPv6)"; | |||
leaf msg-type { | leaf msg-type { | |||
type uint8; | type uint8; | |||
description "5 for Renew message, 6 for Rebind message, | description "5 for Renew message, 6 for Rebind message, | |||
11 for Information-request message."; | 11 for Information-request message."; | |||
} | } | |||
} | } | |||
} | } | |||
grouping reconfigure-accept-option-group { | grouping reconfigure-accept-option-group { | |||
container reconfigure-accept-option { | container reconfigure-accept-option { | |||
presence "Enable sending of this option"; | presence "Enable sending of this option"; | |||
description "OPTION_RECONF_ACCEPT (20) Rapid Commit Option. | description "OPTION_RECONF_ACCEPT (20) Rapid Commit Option. | |||
A client uses the Reconfigure Accept option to announce | A client uses the Reconfigure Accept option to announce to | |||
to the server whether the client is willing to accept | the server whether the client is willing to accept | |||
Reconfigure messages, and a server uses this option to tell | Reconfigure messages, and a server uses this option to tell | |||
the client whether or not to accept Reconfigure messages. | the client whether or not to accept Reconfigure messages. | |||
In the absence of this option, the default behavior is that | In the absence of this option, the default behavior is that | |||
the client is unwilling to accept Reconfigure messages. | the client is unwilling to accept Reconfigure messages. | |||
The presence node is used to enable the option."; | The presence node is used to enable the option."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol | reference "RFC8415: Dynamic Host Configuration Protocol | |||
for IPv6 (DHCPv6)"; | for IPv6 (DHCPv6)"; | |||
} | } | |||
} | } | |||
grouping option-iaprefix-option { | grouping option-iaprefix-option { | |||
description "OPTION_IAPREFIX (26) IA Address Option."; | description "OPTION_IAPREFIX (26) IA Address Option."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 | reference "RFC8415: Dynamic Host Configuration Protocol for IPv6 | |||
(DHCPv6)"; | (DHCPv6)"; | |||
leaf preferred-lifetime { | leaf preferred-lifetime { | |||
type uint32; | type uint32; | |||
description "The preferred lifetime for the prefix | description "The preferred lifetime for the prefix in the | |||
in the option, expressed in units of seconds."; | option, expressed in units of seconds."; | |||
} | } | |||
leaf valid-lifetime { | leaf valid-lifetime { | |||
type uint32; | type uint32; | |||
description "The preferred lifetime for the prefix | description "The preferred lifetime for the prefix in the | |||
in the option, expressed in units of seconds."; | option, expressed in units of seconds."; | |||
} | } | |||
leaf IPv6-prefix { | leaf IPv6-prefix { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
description "The IPv6 prefix delegated to the client."; | description "The IPv6 prefix delegated to the client."; | |||
} | } | |||
container iaprefix-options { | container iaprefix-options { | |||
description "Definitions for DHCPv6 options that can be | description "Definitions for DHCPv6 options that can be sent | |||
sent by the client are augmented to this location from other | by the client are augmented to this location from other YANG | |||
YANG modules as required."; | modules as required."; | |||
} | } | |||
} | } | |||
grouping info-refresh-time-option-group { | grouping info-refresh-time-option-group { | |||
container info-refresh-time-option { | container info-refresh-time-option { | |||
description "OPTION_INFORMATION_REFRESH_TIME (32) | description "OPTION_INFORMATION_REFRESH_TIME (32) | |||
Information Refresh Time option."; | Information Refresh Time option."; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
IPv6 (DHCPv6)"; | IPv6 (DHCPv6)"; | |||
leaf info-refresh-time { | leaf info-refresh-time { | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
description "Time duration relative to the current time, | description "Time duration relative to the current time, | |||
expressed in units of seconds."; | expressed in units of seconds."; | |||
} | } | |||
} | } | |||
} | } | |||
grouping sol-max-rt-option-group { | grouping sol-max-rt-option-group { | |||
container sol-max-rt-option { | container sol-max-rt-option { | |||
description "OPTION_SOL_MAX_RT (82) sol max rt option"; | description "OPTION_SOL_MAX_RT (82) sol max rt option"; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
IPv6 (DHCPv6)"; | IPv6 (DHCPv6)"; | |||
leaf sol-max-rt-value { | leaf sol-max-rt-value { | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
description "sol max rt value"; | description "sol max rt value"; | |||
} | } | |||
} | } | |||
} | } | |||
grouping inf-max-rt-option-group { | grouping inf-max-rt-option-group { | |||
container inf-max-rt-option { | container inf-max-rt-option { | |||
description "OPTION_INF_MAX_RT (83) inf max rt option"; | description "OPTION_INF_MAX_RT (83) inf max rt option"; | |||
reference "RFC8415: Dynamic Host Configuration Protocol for | reference "RFC8415: Dynamic Host Configuration Protocol for | |||
IPv6 (DHCPv6)"; | IPv6 (DHCPv6)"; | |||
leaf inf-max-rt-value { | leaf inf-max-rt-value { | |||
type dhcpv6-common:timer-value-seconds32; | type dhcpv6-common:timer-seconds32; | |||
description "inf max rt value"; | description "inf max rt value"; | |||
} | } | |||
} | } | |||
} | } | |||
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/dhc | /* | |||
pv6-server:option-set" { | * Augmentations | |||
when "../../../dhcpv6-server:dhcpv6-node-type='dhcpv6-server:serv | */ | |||
er'"; | ||||
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/ | ||||
dhcpv6-server:option-set" { | ||||
when "../../../dhcpv6-server:dhcpv6-node-type= | ||||
'dhcpv6-server:server'"; | ||||
uses preference-option-group; | uses preference-option-group; | |||
uses auth-option-group; | uses auth-option-group; | |||
uses server-unicast-option-group; | uses server-unicast-option-group; | |||
uses status-code-option-group; | uses status-code-option-group; | |||
uses rapid-commit-option-group; | uses rapid-commit-option-group; | |||
uses vendor-specific-information-option-group; | uses vendor-specific-information-option-group; | |||
uses reconfigure-message-option-group; | uses reconfigure-message-option-group; | |||
uses reconfigure-accept-option-group; | uses reconfigure-accept-option-group; | |||
uses info-refresh-time-option-group; | uses info-refresh-time-option-group; | |||
uses sol-max-rt-option-group; | uses sol-max-rt-option-group; | |||
uses inf-max-rt-option-group; | uses inf-max-rt-option-group; | |||
} | } | |||
augment "/dhcpv6-relay:dhcpv6-relay/dhcpv6-relay:relay-if/dhcpv6-re | augment "/dhcpv6-relay:dhcpv6-relay/dhcpv6-relay:relay-if/ | |||
lay:relay-options" { | dhcpv6-relay:relay-options" { | |||
when "../../../dhcpv6-relay:dhcpv6-node-type='dhcpv6-relay:relay' | when "../../../dhcpv6-relay:dhcpv6-node-type= | |||
"; | 'dhcpv6-relay:relay'"; | |||
uses auth-option-group; | uses auth-option-group; | |||
uses status-code-option-group; | uses status-code-option-group; | |||
uses interface-id-option-group; | uses interface-id-option-group; | |||
} | } | |||
augment "/dhcpv6-client:dhcpv6-client/dhcpv6-client:client-if/dhcpv | augment "/dhcpv6-client:dhcpv6-client/dhcpv6-client:client-if/ | |||
6-client:client-configured-options" { | dhcpv6-client:client-configured-options" { | |||
when "../../../dhcpv6-client:dhcpv6-node-type='dhcpv6-client:clie | when "../../../dhcpv6-client:dhcpv6-node-type= | |||
nt'"; | 'dhcpv6-client:client'"; | |||
uses option-request-option-group; | uses option-request-option-group; | |||
uses status-code-option-group; | uses status-code-option-group; | |||
uses rapid-commit-option-group; | uses 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 vendor-specific-information-option-group; | uses vendor-specific-information-option-group; | |||
uses reconfigure-accept-option-group; | uses reconfigure-accept-option-group; | |||
} | } | |||
} | } | |||
<CODE ENDS> | ||||
3.5. DHCPv6 Common YANG Model | 3.5. DHCPv6 Common YANG Module | |||
This module imports typedefs from [RFC6991]. | This module imports typedefs from [RFC6991]. | |||
<CODE BEGINS> file ietf-dhcpv6-common.yang | ||||
module ietf-dhcpv6-common { | module ietf-dhcpv6-common { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common"; | namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common"; | |||
prefix "dhcpv6-common"; | prefix "dhcpv6-common"; | |||
import ietf-inet-types { | ||||
prefix inet; | ||||
} | ||||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
} | } | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"yong@csnet1.cs.tsinghua.edu.cn | "yong@csnet1.cs.tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
hezihao9512@gmail.com"; | hezihao9512@gmail.com"; | |||
skipping to change at page 55, line 10 ¶ | skipping to change at page 56, line 15 ¶ | |||
} | } | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"yong@csnet1.cs.tsinghua.edu.cn | "yong@csnet1.cs.tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
hezihao9512@gmail.com"; | hezihao9512@gmail.com"; | |||
description "This model defines a YANG data model that can be | description "This YANG module defines common components | |||
used to define some commonly used DHCPv6 types"; | used for the configuration and management of DHCPv6."; | |||
revision 2020-05-26 { | ||||
description "Version update for draft -11 publication and | ||||
to align revisions across the different modules."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; | ||||
} | ||||
revision 2018-09-04 { | revision 2018-09-04 { | |||
description ""; | description ""; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
revision 2018-01-30 { | revision 2018-01-30 { | |||
description "Initial revision"; | description "Initial revision"; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
skipping to change at page 55, line 37 ¶ | skipping to change at page 56, line 48 ¶ | |||
} | } | |||
type enumeration { | type enumeration { | |||
enum "disabled" { | enum "disabled" { | |||
description "No threshold"; | description "No threshold"; | |||
} | } | |||
} | } | |||
} | } | |||
description "Threshold value in percent"; | description "Threshold value in percent"; | |||
} | } | |||
typedef timer-value-seconds32 { | typedef timer-seconds32 { | |||
type uint32 { | type uint32 { | |||
range "1..4294967295"; | range "1..4294967295"; | |||
} | } | |||
units "seconds"; | units "seconds"; | |||
description | description | |||
"Timer value type, in seconds (32-bit range)."; | "Timer value type, in seconds (32-bit range)."; | |||
} | } | |||
identity dhcpv6-node { | identity dhcpv6-node { | |||
description "Abstract base type for DHCPv6 functional nodes"; | description "Abstract base type for DHCPv6 functional nodes"; | |||
} | } | |||
/* | /* | |||
* Grouping | * Groupings | |||
*/ | */ | |||
grouping duid { | grouping duid { | |||
description "Each server and client has only one DUID (DHCP | description "Each server and client has only one DUID (DHCP | |||
Unique Identifier). The DUID here identifies a unique DHCPv6 | Unique Identifier). The DUID here identifies a unique | |||
server for clients. DUID consists of a two-octet type field | DHCPv6 server for clients. DUID consists of a two-octet | |||
and an arbitrary length (no more than 128 bytes) content field. | type field and an arbitrary length (no more than 128 bytes) | |||
Currently there are four defined types of DUIDs in RFC3315 | content field. Currently there are four defined types of | |||
and RFC6355 - DUID-LLT, DUID-EN, DUID-LL and DUID-UUID. | DUIDs in RFC8415 and RFC6355 - DUID-LLT, DUID-EN, DUID-LL | |||
DUID-Uknown represents those unconventional DUIDs."; | and DUID-UUID. DUID-unstructured represents DUIDs which | |||
reference "RFC3315: Section 9 and RFC6355: Section 4"; | do not follow any of the defined formats."; | |||
reference "RFC8415: Section 11 and RFC6355: Section 4"; | ||||
leaf type-code { | leaf type-code { | |||
type uint16; | type uint16; | |||
default 65535; | default 65535; | |||
description "Type code of this DUID"; | description "Type code of this DUID."; | |||
} | } | |||
choice duid-type { | choice duid-type { | |||
default duid-unknown; | default duid-unstructured; | |||
description "Selects the format for the DUID."; | description "Selects the format of the DUID."; | |||
case duid-llt { | case duid-llt { | |||
description "DUID Based on Link-layer Address Plus Time | description "DUID Based on Link-layer Address Plus Time | |||
(Type 1 - DUID-LLT)"; | (Type 1 - DUID-LLT)."; | |||
reference "RFC3315 Section 9.2"; | reference "RFC8415 Section 11.2"; | |||
leaf duid-llt-hardware-type { | leaf duid-llt-hardware-type { | |||
type uint16; | type uint16; | |||
description "Hardware type as assigned by IANA (RFC826)."; | description "Hardware type as assigned by IANA (RFC826)."; | |||
} | } | |||
leaf duid-llt-time { | leaf duid-llt-time { | |||
type yang:timeticks; | type yang:timeticks; | |||
description "The time value is the time that the DUID is | description "The time that the DUID is generated | |||
generated represented in seconds since midnight (UTC), | represented in seconds since midnight (UTC), | |||
January 1, 2000, modulo 2^32."; | January 1, 2000, modulo 2^32."; | |||
} | } | |||
leaf duid-llt-link-layer-address { | leaf duid-llt-link-layer-address { | |||
type yang:mac-address; | type yang:mac-address; | |||
description "Link-layer address as described in RFC2464"; | description "Link-layer address as described in RFC2464."; | |||
} | } | |||
} | } | |||
case duid-en { | case duid-en { | |||
description "DUID Assigned by Vendor Based on Enterprise | description "DUID Assigned by Vendor Based on Enterprise | |||
Number (Type 2 - DUID-EN)"; | Number (Type 2 - DUID-EN)."; | |||
reference "RFC3315 Section 9.3"; | reference "RFC8415 Section 11.3"; | |||
leaf duid-en-enterprise-number { | leaf duid-en-enterprise-number { | |||
type uint32; | type uint32; | |||
description "Vendor's registered Private Enterprise Number | description "Vendor's registered Private Enterprise Number | |||
as maintained by IANA"; | as maintained by IANA."; | |||
} | } | |||
leaf duid-en-identifier { | leaf duid-en-identifier { | |||
type string; | type string; | |||
description "Indentifier, unique to the device that is | description "Indentifier, unique to the device."; | |||
using it"; | ||||
} | } | |||
} | } | |||
case duid-ll { | case duid-ll { | |||
description "DUID Based on Link-layer Address | description "DUID Based on Link-layer Address | |||
(Type 3 - DUID-LL)"; | (Type 3 - DUID-LL)."; | |||
reference "RFC3315 Section 9.4"; | reference "RFC8415 Section 11.4"; | |||
leaf duid-ll-hardware-type { | leaf duid-ll-hardware-type { | |||
type uint16; | type uint16; | |||
description "Hardware type as assigned by IANA (RFC826)."; | description "Hardware type, as assigned by IANA (RFC826)."; | |||
} | } | |||
leaf duid-ll-link-layer-address { | leaf duid-ll-link-layer-address { | |||
type yang:mac-address; | type yang:mac-address; | |||
description "Link-layer address as described in RFC2464"; | description "Link-layer address, as described in RFC2464"; | |||
} | } | |||
} | } | |||
case duid-uuid { | case duid-uuid { | |||
description "DUID Based on Universally Unique Identifier | description "DUID Based on Universally Unique Identifier | |||
(Type 4 - DUID-UUID)"; | (Type 4 - DUID-UUID)."; | |||
reference "RFC6335 Defination of the UUID-Based Unique | reference "RFC6335 Defination of the UUID-Based Unique | |||
Identifier"; | Identifier"; | |||
leaf uuid { | leaf uuid { | |||
type yang:uuid; | type yang:uuid; | |||
description "A Universally Unique IDentifier in the string | description "A Universally Unique Identifier in the string | |||
representation defined in RFC 4122. The canonical | representation, defined in RFC4122. The canonical | |||
representation uses lowercase characters"; | representation uses lowercase characters."; | |||
} | } | |||
} | } | |||
case duid-unknown { | case duid-unstructured { | |||
description "DUID based on free raw bytes"; | description "DUID which does not follow any of the other | |||
structures, expressed as bytes."; | ||||
leaf data { | leaf data { | |||
type binary; | type binary; | |||
description "The bits to be used as the identifier"; | description "The bits to be used as the identifier."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf active-duid { | leaf active-duid { | |||
config "false"; | config "false"; | |||
description "The DUID which is currently in use"; | description "The DUID which is currently in use."; | |||
type binary; | type binary; | |||
} | } | |||
} | } | |||
// TODO: is it used anywhere? if not should it be removed? | ||||
grouping portset-parameters { | ||||
description "portset parameters"; | ||||
container port-parameter { | ||||
description "port parameter"; | ||||
leaf offset { | ||||
type uint8; | ||||
mandatory true; | ||||
description "offset in a port set"; | ||||
} | ||||
leaf psid-len { | ||||
type uint8; | ||||
mandatory true; | ||||
description "length of a psid"; | ||||
} | ||||
leaf psid { | ||||
type uint16; | ||||
mandatory true; | ||||
description "psid value"; | ||||
} | ||||
} | ||||
} | ||||
} | } | |||
<CODE ENDS> | ||||
4. Security Considerations (TBD) | 4. Security Considerations | |||
TBD | The YANG modules defined in this document are designed to be accessed | |||
via network management protocols such as NETCONF [RFC6241] or | ||||
RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport | ||||
layer, and the mandatory-to-implement secure transport is Secure | ||||
Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the | ||||
mandatory-to-implement secure transport is TLS [RFC8446]. | ||||
5. IANA Considerations (TBD) | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
provides the means to restrict access for particular NETCONF or | ||||
RESTCONF users to a preconfigured subset of all available NETCONF or | ||||
RESTCONF protocol operations and content. | ||||
All data nodes defined in the YANG modules which can be created, | ||||
modified, and deleted (i.e., config true, which is the default) are | ||||
considered sensitive. Write operations (e.g., edit-config) to these | ||||
data nodes without proper protection can have a negative effect on | ||||
network operations. | ||||
An attacker who is able to access the DHCPv6 server can undertake | ||||
various attacks, such as: | ||||
* Denial of service attacks, based on reconfiguring messages to a | ||||
rogue DHCPv6 server. | ||||
* Various attacks based on reconfiguring the contents of DHCPv6 | ||||
options. E.g., changing the address of a the DNS server supplied | ||||
in a DHCP option to point to a rogue server. | ||||
An attacker who is able to access the DHCPv6 relay can undertake | ||||
various attacks, such as: | ||||
* Reconfiguring the relay's destination address to send messages to | ||||
a rogue DHCPv6 server. | ||||
* Deleting information about a client's delegated prefix, causing a | ||||
denial of service attack as traffic will no longer be routed to | ||||
the client. | ||||
Some of the readable data nodes in this YANG module may be considered | ||||
sensitive or vulnerable in some network environments. It is thus | ||||
important to control read access (e.g., via get, get-config, or | ||||
notification) to these data nodes. These subtrees and data nodes can | ||||
be misused to track the activity of a host: | ||||
* Reconfiguring the relay's destination address to send messages to | ||||
a rogue DHCPv6 server. | ||||
* Information the server holds about clients with active leases: | ||||
(dhcpv6-server/network-ranges/network-range/ address-pools/ | ||||
address-pool/active-leases) | ||||
* Information the relay holds about clients with active leases: | ||||
(dhcpv6-relay/relay-if/prefix-delegation/) | ||||
Security considerations related to DHCPv6 are discussed in [RFC8415]. | ||||
Security considerations given in [RFC7950] are also applicable here. | ||||
5. IANA Considerations | ||||
This document registers the following YANG modules in the "YANG | This document registers the following YANG modules in the "YANG | |||
Module Names" registry [RFC6020]. | Module Names" registry [RFC6020]. | |||
name: ietf-dhcpv6 | name: ietf-dhcpv6 | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common | namespace: urn:ietf:params:xml:ns:yang:ietf-dhcpv6-common | |||
prefix: dhcpv6 | prefix: dhcpv6 | |||
reference: TBD | reference: TBD | |||
name: ietf-dhcpv6 | name: ietf-dhcpv6 | |||
skipping to change at page 59, line 22 ¶ | skipping to change at page 61, line 20 ¶ | |||
6. Acknowledgments | 6. Acknowledgments | |||
The authors would like to thank Qi Sun, Lishan Li, Sladjana Zoric, | The authors would like to thank Qi Sun, Lishan Li, Sladjana Zoric, | |||
Tomek Mrugalski, Marcin Siodelski, Bernie Volz and Bing Liu for their | Tomek Mrugalski, Marcin Siodelski, Bernie Volz and Bing Liu for their | |||
valuable comments and contributions to this work. | valuable comments and contributions to this work. | |||
7. Contributors | 7. Contributors | |||
The following individuals contributed to this effort: | The following individuals contributed to this effort: | |||
Hao Wang | Hao Wang | |||
Tsinghua University | Tsinghua University | |||
Beijing 100084 | Beijing 100084 | |||
P.R.China | P.R. China | |||
Phone: +86-10-6278-5822 | Phone: +86-10-6278-5822 | |||
Email: wangh13@mails.tsinghua.edu.cn | Email: wangh13@mails.tsinghua.edu.cn | |||
Ted Lemon | Ted Lemon | |||
Nomium, Inc | Nomium, Inc | |||
950 Charter St. | 950 Charter St. | |||
Redwood City, CA 94043 | Redwood City, CA 94043 | |||
USA | USA | |||
Email: Ted.Lemon@nomium.com | Email: Ted.Lemon@nomium.com | |||
skipping to change at page 60, line 15 ¶ | skipping to change at page 62, line 15 ¶ | |||
[RFC6355] Narten, T. and J. Johnson, "Definition of the UUID-Based | [RFC6355] Narten, T. and J. Johnson, "Definition of the UUID-Based | |||
DHCPv6 Unique Identifier (DUID-UUID)", RFC 6355, | DHCPv6 Unique Identifier (DUID-UUID)", RFC 6355, | |||
DOI 10.17487/RFC6355, August 2011, | DOI 10.17487/RFC6355, August 2011, | |||
<https://www.rfc-editor.org/info/rfc6355>. | <https://www.rfc-editor.org/info/rfc6355>. | |||
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
<https://www.rfc-editor.org/info/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | ||||
and A. Bierman, Ed., "Network Configuration Protocol | ||||
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | ||||
<https://www.rfc-editor.org/info/rfc6241>. | ||||
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | ||||
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | ||||
<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>. | |||
[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 | ||||
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | ||||
<https://www.rfc-editor.org/info/rfc8040>. | ||||
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | ||||
Access Control Model", STD 91, RFC 8341, | ||||
DOI 10.17487/RFC8341, March 2018, | ||||
<https://www.rfc-editor.org/info/rfc8341>. | ||||
[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | |||
and R. Wilton, "Network Management Datastore Architecture | and R. Wilton, "Network Management Datastore Architecture | |||
(NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8342>. | <https://www.rfc-editor.org/info/rfc8342>. | |||
[RFC8343] Bjorklund, M., "A YANG Data Model for Interface | [RFC8343] Bjorklund, M., "A YANG Data Model for Interface | |||
Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8343>. | <https://www.rfc-editor.org/info/rfc8343>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | ||||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | ||||
<https://www.rfc-editor.org/info/rfc8446>. | ||||
[RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A., | [RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A., | |||
Richardson, M., Jiang, S., Lemon, T., and T. Winters, | Richardson, M., Jiang, S., Lemon, T., and T. Winters, | |||
"Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", | "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", | |||
RFC 8415, DOI 10.17487/RFC8415, November 2018, | RFC 8415, DOI 10.17487/RFC8415, November 2018, | |||
<https://www.rfc-editor.org/info/rfc8415>. | <https://www.rfc-editor.org/info/rfc8415>. | |||
8.2. Informative References | 8.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. Example of Adding New DHCPv6 Option Definitions | Appendix A. Example of Augmenting Additional DHCPv6 Option Definitions | |||
The following section provides a example of how the DHCPv6 option | The following section provides a example of how the DHCPv6 option | |||
definitions can be extended for additional option. It is expected | definitions can be extended for additional options. It is expected | |||
that additional specficication documents will be published in the | that additional specficication documents will be published in the | |||
future for this. | future for this. | |||
The example YANG models OPTION_SIP_SERVER_D (21) and | The example YANG models OPTION_SIP_SERVER_D (21) and | |||
OPTION_SIP_SERVER_D (21) defined in [RFC3319]. The overall structure | OPTION_SIP_SERVER_D (21) defined in [RFC3319]. The overall structure | |||
is as follows: | is as follows: | |||
* A separate grouping is used for each option. | * A separate grouping is used for each option. | |||
* The name of the option is taken from the registered IANA name for | * The name of the option is taken from the registered IANA name for | |||
the option, with an '-option' suffix added. | the option, with an '-option' suffix added. | |||
* The description field is taken from the relevant option code name | * The description field is taken from the relevant option code name | |||
and number. | and number. | |||
* The reference section is the number and name of the RFC in which | * The reference section is the number and name of the RFC in which | |||
the DHCPv6 option is defined. | the DHCPv6 option is defined. | |||
* The remaining fields match the fields in the DHCP option. They | * The remaining fields match the fields in the DHCP option. They | |||
are in the same order as defined in the DHCP option. Whereever | are in the same order as defined in the DHCP option. Where-ever | |||
possilbe, the format that is defined for the DHCP field should be | possible, the format that is defined for the DHCP field should be | |||
matched by the relevant YANG type. | matched by the relevant YANG type. | |||
* Fields which can have multiple entries or instances are defined | * Fields which can have multiple entries or instances are defined | |||
using list or leaf-list nodes. | using list or leaf-list nodes. | |||
Below the groupings for option definitions, augment statements are | Below the groupings for option definitions, augment statements are | |||
used to add the option definitions for use in the relevant DHCP | used to add the option definitions for use in the relevant DHCP | |||
element's module (server, relay and/or client). If an option is | element's module (server, relay and/or client). If an option is | |||
relevant to more than one element type, then an augment statement for | relevant to more than one element type, then an augment statement for | |||
each element is used. | each element is used. | |||
<CODE BEGINS> file example-dhcpv6-options-rfc3319.yang | ||||
module example-dhcpv6-options-rfc3319 { | module example-dhcpv6-options-rfc3319 { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-options-rfc33 | namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-options-rfc33 | |||
19"; | 19"; | |||
prefix "rfc3319"; | prefix "rfc3319"; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
} | } | |||
skipping to change at page 62, line 15 ¶ | skipping to change at page 64, line 38 ¶ | |||
} | } | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"ian.farrer@telekom.de | "ian.farrer@telekom.de | |||
godfryd@isc.org"; | godfryd@isc.org"; | |||
description "This YANG module contains DHCPv6 options defined | description "This YANG module contains DHCPv6 options defined | |||
in RFC3319 that can be used by DHCPv6 servers."; | in RFC3319 that can be used by DHCPv6 servers."; | |||
revision 2020-05-26 { | ||||
description "Version update for draft -11 publication and | ||||
to align revisions across the different modules."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; | ||||
} | ||||
revision 2019-10-18 { | revision 2019-10-18 { | |||
description "Initial version."; | description "Initial version."; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping sip-server-domain-name-list-option-group { | grouping sip-server-domain-name-list-option-group { | |||
container sip-server-domain-name-list-option { | container sip-server-domain-name-list-option { | |||
description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name | description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name | |||
List"; | List"; | |||
reference "RFC3319: Dynamic Host Configuration Protocol | reference "RFC3319: Dynamic Host Configuration Protocol | |||
(DHCPv6) Options for Session Initiation Protocol (SIP) | (DHCPv6) Options for Session Initiation Protocol (SIP) | |||
Servers"; | Servers"; | |||
leaf sip-serv-domain-name { | leaf sip-serv-domain-name { | |||
type inet:domain-name; | type inet:domain-name; | |||
description "sip server domain name"; | description "sip server domain name"; | |||
skipping to change at page 63, line 10 ¶ | skipping to change at page 65, line 41 ¶ | |||
description "sip server id"; | description "sip server id"; | |||
} | } | |||
leaf sip-serv-addr { | leaf sip-serv-addr { | |||
type inet:ipv6-address; | type inet:ipv6-address; | |||
description "sip server addr"; | description "sip server addr"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/dhc | /* | |||
pv6-server:option-set" { | * Augmentations | |||
when "../../../dhcpv6-server:dhcpv6-node-type='dhcpv6-server:serv | */ | |||
er'"; | ||||
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:option-sets/ | ||||
dhcpv6-server:option-set" { | ||||
when "../../../dhcpv6-server:dhcpv6-node-type= | ||||
'dhcpv6-server:server'"; | ||||
uses sip-server-domain-name-list-option-group; | uses sip-server-domain-name-list-option-group; | |||
uses sip-server-address-list-option-group; | uses sip-server-address-list-option-group; | |||
} | } | |||
} | } | |||
<CODE ENDS> | ||||
Appendix B. Example Vendor Specific Server Configuration Module | Appendix B. 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 for vendor specific configuration nodes, e.g., | this document with vendor specific configuration nodes, e.g., | |||
configuring a database for storing leases. | configuring access to a lease storage database. | |||
The example module defines additional server attributes such as name | The example module defines additional server attributes such as name | |||
and description. Storage for leases is configured using a lease- | and description. Storage for leases is configured using a lease- | |||
storage container. It allows storing leases in one of three options: | storage container. It allows storing leases in one of three options: | |||
memory (memfile), MySQL and PosgreSQL. For each case, the necessary | memory (memfile), MySQL and PosgreSQL. For each case, the necessary | |||
configuration parameters are provided. | configuration parameters are provided. | |||
At the end there is an augment statment which adds the vendor | At the end there is an augment statement which adds the vendor | |||
specific configuration defined in "dhcpv6-server-config:config" under | specific configuration defined in "dhcpv6-server-config:config" under | |||
"/dhcpv6-server:config/dhcpv6-server:vendor-config" mountpoint. | "/dhcpv6-server:config/dhcpv6-server:vendor-config" mountpoint. | |||
<CODE BEGINS> file example-dhcpv6-server-config.yang | ||||
module example-dhcpv6-server-config { | module example-dhcpv6-server-config { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-server-config | namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-server-config | |||
"; | "; | |||
prefix "dhcpv6-server-config"; | prefix "dhcpv6-server-config"; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
} | } | |||
import ietf-yang-types { | ||||
prefix yang; | ||||
} | ||||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix if; | prefix if; | |||
} | } | |||
import ietf-dhcpv6-common { | ||||
prefix dhcpv6-common; | ||||
} | ||||
import ietf-dhcpv6-server { | import ietf-dhcpv6-server { | |||
prefix dhcpv6-server; | prefix dhcpv6-server; | |||
} | } | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"cuiyong@tsinghua.edu.cn | "cuiyong@tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
hezihao9512@gmail.com"; | hezihao9512@gmail.com"; | |||
description "This model defines a YANG data model that can be | description "This YANG module defines components for the | |||
used to configure and manage a DHCPv6 server."; | configuration and management of vendor/implementation specific | |||
DHCPv6 server functionality. As this functionality varies | ||||
greatly between different implementations, the module | ||||
provided as an example only."; | ||||
revision 2020-05-26 { | ||||
description "Version update for draft -11 publication and | ||||
to align revisions across the different modules."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; | ||||
} | ||||
revision 2019-06-04 { | revision 2019-06-04 { | |||
description ""; | description ""; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
/* | /* | |||
* Configuration data | * Groupings | |||
*/ | */ | |||
grouping config { | grouping config { | |||
description "Parameters necessary for the configuration | description "Parameters necessary for the configuration of a | |||
of a DHCPv6 server"; | DHCPv6 server"; | |||
container serv-attributes { | container serv-attributes { | |||
description | description "Contains basic attributes necessary for running a | |||
"This container contains basic attributes of a DHCPv6 server | DHCPv6 server."; | |||
such as IPv6 address, server name and so on. Some optional | ||||
functions that can be provided by the server is also | ||||
included."; | ||||
container duid { | ||||
description "Sets the DUID of server"; | ||||
uses dhcpv6-common:duid; | ||||
} | ||||
leaf name { | leaf name { | |||
type string; | type string; | |||
description "Name of the DHCpv6 server"; | description "Name of the DHCPv6 server."; | |||
} | } | |||
leaf description { | leaf description { | |||
type string; | type string; | |||
description "Description of the DHCPv6 server"; | description "Description of the DHCPv6 server."; | |||
} | } | |||
leaf-list ipv6-address { | leaf ipv6-listen-port { | |||
type inet:ipv6-address; | type uint16; | |||
description "List of IPv6 address(es) the server will "; | default 547; | |||
description "UDP port that the server will listen on."; | ||||
} | ||||
choice listening-interfaces { | ||||
default all-interfaces; | ||||
description "Configures which interface or addresses the | ||||
server will listen for incoming messages on."; | ||||
case all-interfaces { | ||||
container all-interfaces { | ||||
presence true; | ||||
description "Configures the server to listen for | ||||
incoming messages on all IPv6 addresses (unicats and | ||||
multicast) on all of its network interfaces."; | ||||
} | ||||
} | ||||
case interface-list { | ||||
leaf-list interfaces { | ||||
type if:interface-ref; | ||||
description "List of interfaces that the server will | ||||
listen for incoming messages on. Messages addressed | ||||
to any valid IPv6 address (unicast and multicast) will | ||||
be received."; | ||||
} | ||||
} | ||||
case address-list { | ||||
leaf-list address-list { | ||||
type inet:ipv6-address; | ||||
description "List of IPv6 address(es) that the server | ||||
will listen for incoming messages on."; | ||||
} | ||||
} | ||||
} | } | |||
leaf-list interfaces-config { | leaf-list interfaces-config { | |||
// Note - this should probably be references to | ||||
// entries in the ietf-interfaces model | ||||
type if:interface-ref; | type if:interface-ref; | |||
default "if:interfaces/if:interface/if:name"; | ||||
description "A leaf list to denote which one or more | description "A leaf list to denote which one or more | |||
interfaces the server should listen on. The default value | interfaces the server should listen on."; | |||
is to listen on all the interfaces. This node is also used | ||||
to set a unicast address for the server to listen with | ||||
a specific interface. For example, if people want | ||||
the server to listen on a unicast address with a specific | ||||
interface, he can use the format like 'eth1/2001:db8::1'."; | ||||
} | } | |||
container lease-storage { | container lease-storage { | |||
description "Indicates how the server stores the lease"; | description "Configures how the server will stores leases."; | |||
choice storage-type { | choice storage-type { | |||
description "the type of lease storage"; | description "The type storage that will be used for lease | |||
// leaf persist { | information."; | |||
// type boolean; | ||||
// mandatory true; | ||||
// description "controls whether the new leases | ||||
and updates to existing leases are | ||||
// written to the file"; | ||||
// } | ||||
case memfile { | case memfile { | |||
description "Configuration for storing leases information | description "Configuration for storing leases information | |||
in a CSV file."; | in a CSV file."; | |||
leaf memfile-name { | leaf memfile-name { | |||
type string; | type string; | |||
description "Specifies an absolute location | description "Specifies the absolute location | |||
of the lease file in which new leases and lease | of the lease file. The format of the string follow | |||
updates are recorded."; | the semantics of the relevant operating system."; | |||
} | } | |||
leaf memfile-lfc-interval { | leaf memfile-lfc-interval { | |||
type uint64; | type uint64; | |||
description "Specifies the interval in seconds, | description "Specifies the interval in seconds, | |||
at which the server will perform a lease file cleanup | at which the server will perform a lease file cleanup | |||
(LFC)."; | (LFC)."; | |||
} | } | |||
} | } | |||
case mysql { | case mysql { | |||
leaf mysql-name { | leaf mysql-name { | |||
type string; | type string; | |||
skipping to change at page 65, line 52 ¶ | skipping to change at page 69, line 7 ¶ | |||
description "Specifies the interval in seconds, | description "Specifies the interval in seconds, | |||
at which the server will perform a lease file cleanup | at which the server will perform a lease file cleanup | |||
(LFC)."; | (LFC)."; | |||
} | } | |||
} | } | |||
case mysql { | case mysql { | |||
leaf mysql-name { | leaf mysql-name { | |||
type string; | type string; | |||
description "Name of the database."; | description "Name of the database."; | |||
} | } | |||
leaf mysql-host { | choice mysql-host { | |||
type string; | case mysql-server-hostname { | |||
description "If the database is located on a different | leaf mysql-hostname { | |||
system to the DHCPv6 server, the database host name | type inet:domain-name; | |||
must also be specified."; | default "localhost"; | |||
description "If the database is located on a | ||||
different system to the DHCPv6 server, the | ||||
domain name can be specified."; | ||||
} | ||||
} | ||||
case mysql-server-address { | ||||
leaf mysql-address { | ||||
type inet:ip-address; | ||||
default "::"; | ||||
description "Configure the location of the | ||||
database using an IP (v6 or v6) literal | ||||
address"; | ||||
} | ||||
} | ||||
} | } | |||
leaf mysql-user { | leaf mysql-username { | |||
type string; | type string; | |||
description "User name of the account under which | description "User name of the account under which the | |||
the server will access the database."; | server will access the database."; | |||
} | } | |||
leaf mysql-password { | leaf mysql-password { | |||
type string; | type string; | |||
description "Password of the account under which | description "Password of the account under which | |||
the server will access the database"; | the server will access the database."; | |||
} | } | |||
leaf mysql-port { | leaf mysql-port { | |||
type uint8; | type inet:port-number; | |||
default 5432; | ||||
description "If the database is located on a different | description "If the database is located on a different | |||
system, the port number may be specified"; | system, the port number may be specified."; | |||
} | } | |||
leaf mysql-lfc-interval { | leaf mysql-lfc-interval { | |||
type uint64; | type uint64; | |||
description "Specifies the interval in seconds, | description "Specifies the interval in seconds, | |||
at which the server will perform a lease file cleanup | at which the server will perform a lease file cleanup | |||
(LFC)"; | (LFC)."; | |||
} | } | |||
leaf mysql-connect-timeout { | leaf mysql-connect-timeout { | |||
type uint64; | type uint64; | |||
description "If the database is located on a different | description "Defines the timeout interval for | |||
system, a longer interval can be specified"; | connecting to the database. A longer interval can | |||
be specified if the database is remote."; | ||||
} | } | |||
} | } | |||
case postgresql { | case postgresql { | |||
leaf postgresql-name { | choice postgresql-host { | |||
type string; | case postgresql-server-hostname { | |||
description "Name of the database."; | leaf postgresql-hostname { | |||
} | type inet:domain-name; | |||
leaf postgresql-host { | default "localhost"; | |||
type string; | description "If the database is located on a | |||
description "If the database is located on a different | different system to the DHCPv6 server, the | |||
system to the DHCPv6 server, the database host name | domain name can be specified."; | |||
must also be specified."; | } | |||
} | ||||
case postgresql-server-address { | ||||
leaf postgresql-address { | ||||
type inet:ip-address; | ||||
default "::"; | ||||
description "Configure the location of the database | ||||
using an IP (v6 or v6) literal address"; | ||||
} | ||||
} | ||||
} | } | |||
leaf postgresql-user { | leaf postgresql-username { | |||
type string; | type string; | |||
description "User name of the account under which | description "User name of the account under which | |||
the server will access the database"; | the server will access the database"; | |||
} | } | |||
leaf postgresql-password { | leaf postgresql-password { | |||
type string; | type string; | |||
description "Password of the account under which | description "Password of the account under which | |||
the server will access the database"; | the server will access the database"; | |||
} | } | |||
leaf postgresql-port { | leaf postgresql-port { | |||
type uint8; | type inet:port-number; | |||
default 5432; | ||||
description "If the database is located on a different | description "If the database is located on a different | |||
system, the port number may be specified"; | system, the port number may be specified"; | |||
} | } | |||
leaf postgresql-lfc-interval { | leaf postgresql-lfc-interval { | |||
type uint64; | type uint64; | |||
description "Specifies the interval in seconds, | description "Specifies the interval in seconds, | |||
at which the server will perform a lease file cleanup | at which the server will perform a lease file cleanup | |||
(LFC)"; | (LFC)"; | |||
} | } | |||
leaf postgresql-connect-timeout { | leaf postgresql-connect-timeout { | |||
type uint64; | type uint64; | |||
description "If the database is located on a different | description "Defines the timeout interval for | |||
system, a longer interval can be specified"; | connecting to the database. A longer interval can | |||
} | be specified if the database is remote."; | |||
} | ||||
case cassandra { | ||||
leaf cassandra-name { | ||||
type string; | ||||
description "Name of the database"; | ||||
} | ||||
leaf cassandra-contact-points { | ||||
type string; | ||||
description "Cassandra takes a list of comma separated | ||||
IP addresses to contact the cluster"; | ||||
} | ||||
leaf cassandra-user { | ||||
type string; | ||||
description "User name of the account under which | ||||
the server will access the database"; | ||||
} | ||||
leaf cassandra-password { | ||||
type string; | ||||
description "Password of the account under which | ||||
the server will access the database"; | ||||
} | ||||
leaf cassandra-lfc-interval { | ||||
type uint64; | ||||
description "Specifies the interval in seconds, | ||||
at which the server will perform a lease file cleanup | ||||
(LFC)"; | ||||
} | ||||
leaf cassandra-connect-timeout { | ||||
type uint64; | ||||
description "If the database is located on a different | ||||
system, a longer interval can be specified"; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
uses dhcpv6-common:vendor-infor; | ||||
} | } | |||
} | } | |||
augment "/dhcpv6-server:config/dhcpv6-server:vendor-config" { | /* | |||
* Augmentations | ||||
*/ | ||||
augment "/dhcpv6-server:dhcpv6-server/dhcpv6-server:vendor-config" | ||||
{ | ||||
uses dhcpv6-server-config:config; | uses dhcpv6-server-config:config; | |||
} | } | |||
} | } | |||
<CODE ENDS> | ||||
Appendix C. Example definition of class selector configuration | Appendix C. Example definition of class selector configuration | |||
The module "example-dhcpv6-class-selector" provides an example of how | The module "example-dhcpv6-class-selector" provides an example of how | |||
vendor specific class selector configuration can be modeled and | vendor specific class selection configuration can be modeled and | |||
integrated with the ietf-dhcpv6-server module defined in this | integrated with the "ietf-dhcpv6-server" module defined in this | |||
document. | document. | |||
The example module defines "client-class-names" with associated | The example module defines "client-class-names" with associated | |||
matching rules. A client can be classified based on "client id", | matching rules. A client can be classified based on "client-id", | |||
"interface-id" (ingress inteface of the client's messages), packets | "interface-id" (ingress interface of the client's messages), packets | |||
source or destination address, relay link address, relay link | source or destination address, relay link address, relay link | |||
interface-id and more. Actually there is endless methods for | interface-id and more. Actually there is endless methods for | |||
classifying clients. So this standard does not try to provide full | classifying clients. So this standard does not try to provide full | |||
specificiation for class selection, it only shows an example how it | specification for class selection, it only shows an example how it | |||
can be defined. | can 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 | |||
defind class selector rules into the overall DHCPv6 addressing | defined class selector rules into the overall DHCPv6 addressing | |||
heirarchy. 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 "network-range", "address-pool" | |||
and "pd-pool", pointing to the "client-class-name" that is | 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 network-range/pool if the class name matches. | |||
<CODE BEGINS> file example-dhcpv6-class-selector.yang | ||||
module example-dhcpv6-class-selector { | module example-dhcpv6-class-selector { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:example-dhcpv6-class-selecto | namespace | |||
r"; | "urn:ietf:params:xml:ns:yang:example-dhcpv6-class-selector"; | |||
prefix "dhcpv6-class-selector"; | prefix "dhcpv6-class-selector"; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix if; | prefix if; | |||
} | } | |||
import ietf-dhcpv6-common { | import ietf-dhcpv6-common { | |||
prefix dhcpv6-common; | prefix dhcpv6-common; | |||
} | } | |||
import ietf-dhcpv6-server { | import ietf-dhcpv6-server { | |||
prefix dhcpv6-server; | prefix dhcpv6-server; | |||
} | } | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"yong@csnet1.cs.tsinghua.edu.cn | "yong@csnet1.cs.tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
skipping to change at page 69, line 32 ¶ | skipping to change at page 72, line 41 ¶ | |||
} | } | |||
organization "DHC WG"; | organization "DHC WG"; | |||
contact | contact | |||
"yong@csnet1.cs.tsinghua.edu.cn | "yong@csnet1.cs.tsinghua.edu.cn | |||
lh.sunlinh@gmail.com | lh.sunlinh@gmail.com | |||
ian.farrer@telekom.de | ian.farrer@telekom.de | |||
sladjana.zechlin@telekom.de | sladjana.zechlin@telekom.de | |||
hezihao9512@gmail.com"; | hezihao9512@gmail.com"; | |||
description "This model defines a YANG data model that can be | description "This YANG module defines components for the definition | |||
used to define client class selector for DHCPv6 Server model."; | and configuration of the client class selector function for a | |||
DHCPv6 server. As this functionality varies greatly between | ||||
different implementations, the module provided as an example | ||||
only."; | ||||
revision 2020-05-26 { | ||||
description "Version update for draft -11 publication and | ||||
to align revisions across the different modules."; | ||||
reference "I-D: draft-ietf-dhc-dhcpv6-yang-11"; | ||||
} | ||||
revision 2019-06-13 { | revision 2019-06-13 { | |||
description ""; | description ""; | |||
reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | reference "I-D: draft-ietf-dhc-dhcpv6-yang"; | |||
} | } | |||
/* | ||||
* Groupings | ||||
*/ | ||||
grouping client-class-id { | grouping client-class-id { | |||
description "Defintions for client classification for | description "Definitions of client message classification for | |||
authorization and assignment purposes."; | authorization and assignment purposes."; | |||
leaf client-class-name { | leaf client-class-name { | |||
type string; | type string; | |||
description "Unique Identifier for client class identification | description "Unique Identifier for client class identification | |||
list entries."; | list entries."; | |||
} | } | |||
choice id-type { | choice id-type { | |||
description "Definitions for different client identifier | description "Definitions for different client identifier | |||
types."; | types."; | |||
mandatory true; | mandatory true; | |||
case client-id-id { | case client-id-id { | |||
description "Client class selection based on a string literal | description "Client class selection based on a string literal | |||
client identifier."; | client identifier."; | |||
leaf client-id { | leaf client-id { | |||
description "String literal client identifier."; | description "String literal client identifier."; | |||
mandatory true; | mandatory true; | |||
skipping to change at page 72, line 48 ¶ | skipping to change at page 76, line 19 ¶ | |||
} | } | |||
} | } | |||
case client-duid-id { | case client-duid-id { | |||
description "Client class selection based on the value | description "Client class selection based on the value | |||
of the received client DUID."; | of the received client DUID."; | |||
uses dhcpv6-common:duid; | uses dhcpv6-common:duid; | |||
} | } | |||
} | } | |||
} | } | |||
/* Augmentations of dhcpv6 server */ | /* | |||
* Augmentations | ||||
*/ | ||||
augment "/dhcpv6-server:config/dhcpv6-server:class-selector" { | augment | |||
"/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-selector" { | ||||
container client-classes { | container client-classes { | |||
list class { | list class { | |||
description "List of the client class identifiers applicable | description "List of the client class identifiers applicable | |||
to clients served by this address pool"; | to clients served by this address pool"; | |||
key client-class-name; | key client-class-name; | |||
uses dhcpv6-class-selector:client-class-id; | uses dhcpv6-class-selector:client-class-id; | |||
} | } | |||
} | } | |||
} | } | |||
augment "/dhcpv6-server:config/dhcpv6-server:network-ranges/dhcpv6- | augment | |||
server:network-range" { | "/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ | |||
dhcpv6-server:network-range" { | ||||
leaf-list client-class { | leaf-list client-class { | |||
type leafref { | type leafref { | |||
path "/dhcpv6-server:config/dhcpv6-server:class-selector/clie | path "/dhcpv6-server:dhcpv6-server/dhcpv6-server:class-select | |||
nt-classes/class/client-class-name"; | or/client-classes/class/client-class-name"; | |||
} | } | |||
} | } | |||
} | } | |||
augment "/dhcpv6-server:config/dhcpv6-server:network-ranges/dhcpv6- | ||||
server:network-range/dhcpv6-server:address-pools/dhcpv6-server:addres | augment | |||
s-pool" { | "/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ | |||
dhcpv6-server:network-range/dhcpv6-server:address-pools/ | ||||
dhcpv6-server:address-pool" { | ||||
leaf-list client-class { | leaf-list client-class { | |||
type leafref { | type leafref { | |||
path "/dhcpv6-server:config/dhcpv6-server:class-selector/clie | path "/dhcpv6-server:dhcpv6-server/dhcpv6-server: | |||
nt-classes/class/client-class-name"; | class-selector/client-classes/class/client-class-name"; | |||
} | } | |||
} | } | |||
} | } | |||
augment "/dhcpv6-server:config/dhcpv6-server:network-ranges/dhcpv6- | ||||
server:network-range/dhcpv6-server:pd-pools/dhcpv6-server:pd-pool" { | augment | |||
"/dhcpv6-server:dhcpv6-server/dhcpv6-server:network-ranges/ | ||||
dhcpv6-server:network-range/dhcpv6-server:prefix-pools/ | ||||
dhcpv6-server:prefix-pool" { | ||||
leaf-list client-class { | leaf-list client-class { | |||
type leafref { | type leafref { | |||
path "/dhcpv6-server:config/dhcpv6-server:class-selector/clie | path "/dhcpv6-server:dhcpv6-server/dhcpv6-server: | |||
nt-classes/class/client-class-name"; | class-selector/client-classes/class/client-class-name"; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | ||||
Authors' Addresses | Authors' Addresses | |||
Yong Cui | Yong Cui | |||
Tsinghua University | Tsinghua University | |||
Beijing | Beijing | |||
100084 | ||||
P.R. China | ||||
Phone: +86-10-6260-3059 | Phone: +86-10-6260-3059 | |||
Email: cuiyong@tsinghua.edu.cn | Email: cuiyong@tsinghua.edu.cn | |||
Linhui Sun | Linhui Sun | |||
Tsinghua University | Tsinghua University | |||
Beijing | Beijing | |||
100084 | ||||
P.R. China | ||||
Phone: +86-10-6278-5822 | Phone: +86-10-6278-5822 | |||
Email: lh.sunlinh@gmail.com | Email: lh.sunlinh@gmail.com | |||
Ian Farrer | Ian Farrer | |||
Deutsche Telekom AG | Deutsche Telekom AG | |||
CTO-ATI, Landgrabenweg 151 | TAI, Landgrabenweg 151 | |||
53227 Bonn | 53227 Bonn | |||
Germany | Germany | |||
Email: ian.farrer@telekom.de | Email: ian.farrer@telekom.de | |||
Sladjana Zechlin | Sladjana Zechlin | |||
Deutsche Telekom AG | Deutsche Telekom AG | |||
CTO-IPT, Landgrabenweg 151 | CTO-IPT, Landgrabenweg 151 | |||
53227 Bonn | 53227 Bonn | |||
Germany | Germany | |||
Email: sladjana.zechlin@telekom.de | Email: sladjana.zechlin@telekom.de | |||
Zihao He | Zihao He | |||
Tsinghua University | Tsinghua University | |||
skipping to change at page 74, line 32 ¶ | skipping to change at page 78, line 15 ¶ | |||
Deutsche Telekom AG | Deutsche Telekom AG | |||
CTO-IPT, Landgrabenweg 151 | CTO-IPT, Landgrabenweg 151 | |||
53227 Bonn | 53227 Bonn | |||
Germany | Germany | |||
Email: sladjana.zechlin@telekom.de | Email: sladjana.zechlin@telekom.de | |||
Zihao He | Zihao He | |||
Tsinghua University | Tsinghua University | |||
Beijing | Beijing | |||
100084 | ||||
P.R. China | ||||
Phone: +86-10-6278-5822 | Phone: +86-10-6278-5822 | |||
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 | |||
End of changes. 333 change blocks. | ||||
794 lines changed or deleted | 959 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |